From 8d9cf27fe2e2f5c461c10318df39336d949be052 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 18 Jun 2024 16:39:45 +0700 Subject: [PATCH 1/9] chore: build cortex js binary --- .github/workflows/cortex-cpp-build.yml | 49 ++++++++++++++++--- .../commanders/usecases/init.cli.usecases.ts | 11 +---- 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/.github/workflows/cortex-cpp-build.yml b/.github/workflows/cortex-cpp-build.yml index e3eb1653a..8a34e167a 100644 --- a/.github/workflows/cortex-cpp-build.yml +++ b/.github/workflows/cortex-cpp-build.yml @@ -3,10 +3,7 @@ name: CI Cortex CPP on: push: tags: ["v[0-9]+.[0-9]+.[0-9]+"] - paths: - [ - "cortex-cpp/**", - ] + paths: ["cortex-cpp/**", "cortex-js/**"] workflow_dispatch: env: @@ -201,14 +198,14 @@ jobs: shell: bash env: CODE_SIGN_P12_BASE64: ${{ secrets.CODE_SIGN_P12_BASE64 }} - + - uses: apple-actions/import-codesign-certs@v2 if: runner.os == 'macOS' with: p12-file-base64: ${{ secrets.CODE_SIGN_P12_BASE64 }} p12-password: ${{ secrets.CODE_SIGN_P12_PASSWORD }} - - name: Build + - name: Build Cortex CPP run: | cd cortex-cpp make build CMAKE_EXTRA_FLAGS="${{ matrix.cmake-flags }}" @@ -224,6 +221,36 @@ jobs: cd cortex-cpp make codesign CODE_SIGN=true DEVELOPER_ID="${{ secrets.DEVELOPER_ID }}" + # Cortex-JS Build + - name: "Update version by tag" + run: | + cd cortex-js + # Remove the v prefix + tag_version=${GITHUB_REF#refs/tags/v} + # Remove the -cortex-js suffix + new_version=${tag_version%-cortex-js} + + # Replace the old version with the new version in package.json + jq --arg version "$new_version" '.version = $version' ./package.json > /tmp/package.json && mv /tmp/package.json ./package.json + + # Print the new version + echo "Updated package.json version to: $new_version" + + # Setup .npmrc file to publish to npm + - uses: actions/setup-node@v3 + with: + node-version: "20.x" + registry-url: "https://registry.npmjs.org" + + - run: yarn install && yarn build:binary + working-directory: ./cortex-js + + - name: Code Signing macOS + if: runner.os == 'macOS' + run: | + cd cortex-js/dist + make codesign CODE_SIGN=true DEVELOPER_ID="${{ secrets.DEVELOPER_ID }}" + - uses: nick-fields/retry@v3 with: continue_on_error: true @@ -249,12 +276,18 @@ jobs: cd cortex-cpp make run-e2e-test RUN_TESTS=true LLM_MODEL_URL=${{ env.LLM_MODEL_URL }} EMBEDDING_MODEL_URL=${{ env.EMBEDDING_MODEL_URL }} - - name: Upload Artifact + - name: Upload CPP Artifact uses: actions/upload-artifact@v2 with: name: cortex-cpp-${{ matrix.os }}-${{ matrix.name }} path: ./cortex-cpp/cortex-cpp + - name: Upload JS Artifact + uses: actions/upload-artifact@v2 + with: + name: cortex-${{ matrix.os }}-${{ matrix.name }} + path: ./cortex-js/dist/cortex + - uses: actions/upload-release-asset@v1.0.1 if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') env: @@ -287,4 +320,4 @@ jobs: # config-name: my-config.yml # disable-autolabeler: true env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/cortex-js/src/infrastructure/commanders/usecases/init.cli.usecases.ts b/cortex-js/src/infrastructure/commanders/usecases/init.cli.usecases.ts index 5c8fda51c..57ada02c1 100644 --- a/cortex-js/src/infrastructure/commanders/usecases/init.cli.usecases.ts +++ b/cortex-js/src/infrastructure/commanders/usecases/init.cli.usecases.ts @@ -1,11 +1,4 @@ -import { - cpSync, - createWriteStream, - existsSync, - readdir, - readdirSync, - rmSync, -} from 'fs'; +import { cpSync, createWriteStream, existsSync, readdirSync, rmSync } from 'fs'; import { delimiter, join } from 'path'; import { HttpService } from '@nestjs/axios'; import { Presets, SingleBar } from 'cli-progress'; @@ -298,7 +291,7 @@ export class InitCliUsecases { /** * Download and install ONNX engine * @param version - * @param engineFileName + * @param engineFileName */ async installONNXEngine( version: string = 'latest', From f507e4737ac0fa523ea77e6ef719c7b0a95bccab Mon Sep 17 00:00:00 2001 From: Louis Date: Thu, 20 Jun 2024 11:59:09 +0700 Subject: [PATCH 2/9] feat: add inno installer script (#734) --- cortex-js/installer.iss | 41 +++++++++++++++++++++++++++++++++++++++++ cortex-js/package.json | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 cortex-js/installer.iss diff --git a/cortex-js/installer.iss b/cortex-js/installer.iss new file mode 100644 index 000000000..815a01b80 --- /dev/null +++ b/cortex-js/installer.iss @@ -0,0 +1,41 @@ +; Inno Setup Script +; Define the application name, version, and other details +[Setup] +AppName=Cortex +AppVersion=1.0 +DefaultDirName={pf}\Cortex +DefaultGroupName=Cortex +OutputDir=. +OutputBaseFilename=setup +Compression=lzma +SolidCompression=yes +PrivilegesRequired=admin + +; Define the languages section +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" + +; Define the files to be installed +[Files] +Source: "cortex.exe"; DestDir: "{app}"; Flags: ignoreversion +Source: "node_modules\sqlite3\*"; DestDir: "{app}\node_modules\sqlite3"; Flags: ignoreversion recursesubdirs createallsubdirs + +; Define the icons to be created +[Icons] +Name: "{group}\Cortex"; Filename: "{app}\cortex.exe" + +; Define the run section to execute the application after installation +[Run] +Filename: "cmd"; Parameters: "/c setx PATH ""%PATH%;{app}"""; StatusMsg: "Updating system PATH environment variable..."; Flags: runhidden +Filename: "cmd"; Parameters: "/c cortex init"; StatusMsg: "Initializing Cortex..."; Flags: runhidden waituntilterminated +Filename: "{app}\cortex.exe"; Description: "{cm:LaunchProgram,Cortex}"; Flags: nowait postinstall skipifsilent + +; Define the tasks section (optional, for additional tasks like creating desktop icons) +[Tasks] +Name: "desktopicon"; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"; Flags: unchecked +Name: "quicklaunchicon"; Description: "Create a &Quick Launch icon"; GroupDescription: "Additional icons:"; Flags: unchecked + +; Define icons for the additional tasks +[Icons] +Name: "{commondesktop}\Cortex"; Filename: "{app}\cortex.exe"; Tasks: desktopicon +Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Cortex"; Filename: "{app}\cortex.exe"; Tasks: quicklaunchicon diff --git a/cortex-js/package.json b/cortex-js/package.json index 4d6ea116b..2a84240e8 100644 --- a/cortex-js/package.json +++ b/cortex-js/package.json @@ -11,7 +11,7 @@ "scripts": { "dev": "nest dev", "build": "yarn build:extensions && nest build && cpx \"cpuinfo/bin/**\" dist/bin", - "build:binary": "yarn build && nexe dist/src/command.js --build --python=$(which python3) -o dist/cortex", + "build:binary": "yarn build && nexe dist/src/command.js --build -r './node_modules/**/*' -o dist/cortex", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "build:extensions": "run-script-os", "build:extensions:windows": "powershell -command \"$jobs = Get-ChildItem -Path './src/extensions' -Directory | ForEach-Object { Start-Job -Name ($_.Name) -ScriptBlock { param($_dir); try { Set-Location $_dir; yarn; yarn build; Write-Output 'Build successful in ' + $_dir } catch { Write-Error 'Error in ' + $_dir; throw } } -ArgumentList $_.FullName }; $jobs | Wait-Job; $jobs | ForEach-Object { Receive-Job -Job $_ -Keep } | ForEach-Object { Write-Host $_ }; $failed = $jobs | Where-Object { $_.State -ne 'Completed' -or $_.ChildJobs[0].JobStateInfo.State -ne 'Completed' }; if ($failed) { Exit 1 }\"", From 1d90583292dbfde3ece5e86af72d0946f7b230da Mon Sep 17 00:00:00 2001 From: Louis Date: Thu, 20 Jun 2024 21:20:33 +0700 Subject: [PATCH 3/9] fix: single executable binary across platforms --- .github/workflows/cortex-cpp-build.yml | 40 +--------- .github/workflows/cortex-js-artifact.yml | 90 +++++++++++++++++++++++ cortex-js/Makefile | 35 +++++++++ cortex-js/cortex.ico | Bin 0 -> 15086 bytes cortex-js/installer.iss | 1 - cortex-js/package.json | 11 ++- cortex-js/patches/sqlite3+5.1.7.patch | 15 ++++ 7 files changed, 149 insertions(+), 43 deletions(-) create mode 100644 .github/workflows/cortex-js-artifact.yml create mode 100644 cortex-js/Makefile create mode 100644 cortex-js/cortex.ico create mode 100644 cortex-js/patches/sqlite3+5.1.7.patch diff --git a/.github/workflows/cortex-cpp-build.yml b/.github/workflows/cortex-cpp-build.yml index 8a34e167a..240790f67 100644 --- a/.github/workflows/cortex-cpp-build.yml +++ b/.github/workflows/cortex-cpp-build.yml @@ -205,7 +205,7 @@ jobs: p12-file-base64: ${{ secrets.CODE_SIGN_P12_BASE64 }} p12-password: ${{ secrets.CODE_SIGN_P12_PASSWORD }} - - name: Build Cortex CPP + - name: Build run: | cd cortex-cpp make build CMAKE_EXTRA_FLAGS="${{ matrix.cmake-flags }}" @@ -221,36 +221,6 @@ jobs: cd cortex-cpp make codesign CODE_SIGN=true DEVELOPER_ID="${{ secrets.DEVELOPER_ID }}" - # Cortex-JS Build - - name: "Update version by tag" - run: | - cd cortex-js - # Remove the v prefix - tag_version=${GITHUB_REF#refs/tags/v} - # Remove the -cortex-js suffix - new_version=${tag_version%-cortex-js} - - # Replace the old version with the new version in package.json - jq --arg version "$new_version" '.version = $version' ./package.json > /tmp/package.json && mv /tmp/package.json ./package.json - - # Print the new version - echo "Updated package.json version to: $new_version" - - # Setup .npmrc file to publish to npm - - uses: actions/setup-node@v3 - with: - node-version: "20.x" - registry-url: "https://registry.npmjs.org" - - - run: yarn install && yarn build:binary - working-directory: ./cortex-js - - - name: Code Signing macOS - if: runner.os == 'macOS' - run: | - cd cortex-js/dist - make codesign CODE_SIGN=true DEVELOPER_ID="${{ secrets.DEVELOPER_ID }}" - - uses: nick-fields/retry@v3 with: continue_on_error: true @@ -276,18 +246,12 @@ jobs: cd cortex-cpp make run-e2e-test RUN_TESTS=true LLM_MODEL_URL=${{ env.LLM_MODEL_URL }} EMBEDDING_MODEL_URL=${{ env.EMBEDDING_MODEL_URL }} - - name: Upload CPP Artifact + - name: Upload Artifact uses: actions/upload-artifact@v2 with: name: cortex-cpp-${{ matrix.os }}-${{ matrix.name }} path: ./cortex-cpp/cortex-cpp - - name: Upload JS Artifact - uses: actions/upload-artifact@v2 - with: - name: cortex-${{ matrix.os }}-${{ matrix.name }} - path: ./cortex-js/dist/cortex - - uses: actions/upload-release-asset@v1.0.1 if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') env: diff --git a/.github/workflows/cortex-js-artifact.yml b/.github/workflows/cortex-js-artifact.yml new file mode 100644 index 000000000..7d8c20242 --- /dev/null +++ b/.github/workflows/cortex-js-artifact.yml @@ -0,0 +1,90 @@ +name: CI Cortex JS + +on: + push: + branches: + - chore/update-ci-for-cortex-artifact + workflow_dispatch: + +jobs: + build-cortex-single-binary: + runs-on: ${{ matrix.runs-on }} + needs: [] + timeout-minutes: 20 + strategy: + fail-fast: false + matrix: + include: + - os: "linux" + name: "amd64" + runs-on: "ubuntu-20-04" + + - os: "windows" + name: "amd64" + runs-on: "windows-cuda-12-0" + + - os: "mac" + name: "amd64" + runs-on: "macos-13" + + - os: "mac" + name: "arm64" + runs-on: "macos-latest" + steps: + - name: Clone + id: checkout + uses: actions/checkout@v3 + with: + submodules: recursive + + - uses: actions/setup-dotnet@v3 + if: runner.os == 'Windows' + with: + dotnet-version: "8.0.x" + + - name: Install choco on Windows + if: runner.os == 'Windows' + run: | + choco install make -y + + - uses: actions/setup-node@v3 + with: + node-version: "20.x" + registry-url: "https://registry.npmjs.org" + + - run: npm install -g yarn + + - run: yarn install && yarn build && yarn build:binary + working-directory: ./cortex-js + + - name: Get Cer for code signing + if: runner.os == 'macOS' + run: base64 -d <<< "$CODE_SIGN_P12_BASE64" > /tmp/codesign.p12 + shell: bash + env: + CODE_SIGN_P12_BASE64: ${{ secrets.CODE_SIGN_P12_BASE64 }} + + - uses: apple-actions/import-codesign-certs@v2 + if: runner.os == 'macOS' + with: + p12-file-base64: ${{ secrets.CODE_SIGN_P12_BASE64 }} + p12-password: ${{ secrets.CODE_SIGN_P12_PASSWORD }} + + - name: Code Signing macOS + if: runner.os == 'macOS' + run: | + cd cortex-js + make codesign CODE_SIGN=true DEVELOPER_ID="${{ secrets.DEVELOPER_ID }}" + + - name: Post-Bundle + run: | + cd cortex-js + make postbundle + + - name: Upload Artifact + uses: actions/upload-artifact@v2 + with: + name: cortex-${{ matrix.os }}-${{ matrix.name }} + path: | + ./cortex-js/cortex + ./cortex-js/cortex.exe diff --git a/cortex-js/Makefile b/cortex-js/Makefile new file mode 100644 index 000000000..6adb0034e --- /dev/null +++ b/cortex-js/Makefile @@ -0,0 +1,35 @@ +CODE_SIGN ?= false +AZURE_KEY_VAULT_URI ?= xxxx +AZURE_CLIENT_ID ?= xxxx +AZURE_TENANT_ID ?= xxxx +AZURE_CLIENT_SECRET ?= xxxx +AZURE_CERT_NAME ?= xxxx +DEVELOPER_ID ?= xxxx + +postbundle: +ifeq ($(RUN_TESTS),false) + @echo "Skipping tests" + @exit 0 +endif +ifeq ($(OS),Windows_NT) +else ifeq ($(shell uname -s),Linux) + @chmod +x cortex; +else + @chmod +x cortex; +endif + +codesign: +ifeq ($(CODE_SIGN),false) + @echo "Skipping Code Sign" + @exit 0 +endif + +ifeq ($(OS),Windows_NT) + @powershell -Command "dotnet tool install --global AzureSignTool;" + @powershell -Command 'azuresigntool.exe sign -kvu "$(AZURE_KEY_VAULT_URI)" -kvi "$(AZURE_CLIENT_ID)" -kvt "$(AZURE_TENANT_ID)" -kvs "$(AZURE_CLIENT_SECRET)" -kvc "$(AZURE_CERT_NAME)" -tr http://timestamp.globalsign.com/tsa/r6advanced1 -v ".\cortex-js\cortex.exe";' +else ifeq ($(shell uname -s),Linux) + @echo "Skipping Code Sign for linux" + @exit 0 +else + find "cortex" -type f -exec codesign --force -s "$(DEVELOPER_ID)" --options=runtime {} \; +endif \ No newline at end of file diff --git a/cortex-js/cortex.ico b/cortex-js/cortex.ico new file mode 100644 index 0000000000000000000000000000000000000000..d9498120a6bf064f4f83889c9e7918163ce32209 GIT binary patch literal 15086 zcmeHOZA@EL7``1Q{xC7~m&V1UKUgI3tELIT43ipEKp~=Id?^g7d=z80*@clgTm{BZ z93X|ZK={~%jR6ibw(bYu7ElIlLHSz2F=aC50#UM!kCwt-&$;zp+CWKfZ(Az*!`I5Cp~_kI~lv=+S1;#Xdv zIpXn#;%Cc$q$L-=Irt%Ga7lfTpYHYZB=${mo5K_iVF0Y2C&>{qx(M9?>$l8@2lha+l)UCi~g`;0a!MB9Am~2 zx3(XpQVDZ&b6$hNU~nt{&3=}#9e;TK?4EnP{_ON)+y2<F~!L!vYS{sRL8>&6dR@-#a?uJE6jm>_MN`zqDk@q7kw|3c#})q3(b15Ulw^m<$VfZ8Z27yw%bj(2{*K2Fck1lO z)}yBXg|g4#`JKL;!53+}8Rf4$kyCJoO$Yh6MQr=fClSz8_!%98xWk{jZQO1@0fGJ^ znj={A&qnO0`}-phAbtr_V}cKM|MZkRY0;~9nR?3K<~kM)Wp6C}rru#? z&hL2z9&H7z?+pauY^lIfPD_X&K@gCi&CG4cJ?H;MZCQYPcF*^y;MDOnIJQ5=)02SY#Pkns|9 zsh&dq7g|dXKwZ8JrY{$J95|Lti4G?H&-Yh7i#4yxP6k86QMmI{5wv`_&tvF1d6@LO ze{UFBk};x<|K9p9?eZgz-g{j=9vd#%GX867YG88k3gDbCTO`L@^G-~zzrDR3mhTLb zda>=7a#;d-Uzz$}nf((iziU||Eh&z%f2~#vCX>l62oDcu?BCTkzEM3U`fp^%)pJ|P ze`;zfR4NPL(&-WsqL*KEdTf$NB#cs%GQR&aGc$JmPx{err~TK~)&lN3 zRKInl|8c?p1M_`Yxr^pT5W?OGVRZdqS)}X6Mp?CE(*Ek}>!H8DpN3d0cG|yGDg~8F zMI#^}fbsozwU2F7kID6KWXIKWT=$RTFT7UOQ@C1pWWD%f9{a1#P4UXw-m&v}bo@7` zD|-gT!JP}eD!^-ay%GNwp!KuVT4xwI^@OEY^O{*#K1+>NUMu@FtvLRt-b46ua}==V z6IS;MYt{wd7monjU-brn^AtEOAw&?6d-MVQ*NkhMsaG?M=Q5bi0}P+bg@vB7$ie39 z2mNOi&{LP?H2NA8(2VAO(EGVef95FQ`b@@tJSTGz&Do(bCf&CFh@lfqeKi~6*Nf%k zoX&dn$47@@X?k=+Xq!(utnchKIN~3@=Y7Cye0+U<*XZHr=Lg}TZ-FE*z@dN3>?HXd zcvG@=ofBS@fY&3BbyPd7KQ(z1=Kh_6_0}mwL_|Qpz8i|a&39Pe)$1QQmjmf>p-v+! zJ(9lvw>t_K@c$2(wqKl&Sk$YfFjV>UlCDDJ3a)EQ9%tL1QEm+7K9LoMqY_o`KW`r8 AZU6uP literal 0 HcmV?d00001 diff --git a/cortex-js/installer.iss b/cortex-js/installer.iss index 815a01b80..96fc8f4de 100644 --- a/cortex-js/installer.iss +++ b/cortex-js/installer.iss @@ -18,7 +18,6 @@ Name: "english"; MessagesFile: "compiler:Default.isl" ; Define the files to be installed [Files] Source: "cortex.exe"; DestDir: "{app}"; Flags: ignoreversion -Source: "node_modules\sqlite3\*"; DestDir: "{app}\node_modules\sqlite3"; Flags: ignoreversion recursesubdirs createallsubdirs ; Define the icons to be created [Icons] diff --git a/cortex-js/package.json b/cortex-js/package.json index 2a84240e8..7216afa7f 100644 --- a/cortex-js/package.json +++ b/cortex-js/package.json @@ -11,7 +11,10 @@ "scripts": { "dev": "nest dev", "build": "yarn build:extensions && nest build && cpx \"cpuinfo/bin/**\" dist/bin", - "build:binary": "yarn build && nexe dist/src/command.js --build -r './node_modules/**/*' -o dist/cortex", + "build:binary": "run-script-os", + "build:binary:windows": "bun build --compile --target=bun-windows-x64 ./dist/src/command.js --outfile cortex.exe --external @nestjs/microservices --external @nestjs/websockets/socket-module --external class-transformer/storage", + "build:binary:linux": "bun build --compile --target=bun-linux-x64 ./dist/src/command.js --outfile cortex --external @nestjs/microservices --external @nestjs/websockets/socket-module --external class-transformer/storage", + "build:binary:macos": "bun build --compile --target=bun-darwin-arm64 ./dist/src/command.js --outfile cortex --external @nestjs/microservices --external @nestjs/websockets/socket-module --external class-transformer/storage", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "build:extensions": "run-script-os", "build:extensions:windows": "powershell -command \"$jobs = Get-ChildItem -Path './src/extensions' -Directory | ForEach-Object { Start-Job -Name ($_.Name) -ScriptBlock { param($_dir); try { Set-Location $_dir; yarn; yarn build; Write-Output 'Build successful in ' + $_dir } catch { Write-Error 'Error in ' + $_dir; throw } } -ArgumentList $_.FullName }; $jobs | Wait-Job; $jobs | ForEach-Object { Receive-Job -Job $_ -Keep } | ForEach-Object { Write-Host $_ }; $failed = $jobs | Where-Object { $_.State -ne 'Completed' -or $_.ChildJobs[0].JobStateInfo.State -ne 'Completed' }; if ($failed) { Exit 1 }\"", @@ -29,7 +32,7 @@ "test:e2e": "jest --config ./test/jest-e2e.json", "typeorm": "typeorm-ts-node-esm", "build:dev": "npx nest build && chmod +x ./dist/src/command.js && npm link", - "postinstall": "cortex init -s || true" + "postinstall": "patch-package" }, "dependencies": { "@huggingface/gguf": "^0.1.5", @@ -55,7 +58,6 @@ "readline": "^1.3.0", "reflect-metadata": "^0.2.0", "rxjs": "^7.8.1", - "sqlite": "^5.1.1", "sqlite3": "^5.1.7", "systeminformation": "^5.22.11", "typeorm": "^0.3.20", @@ -80,6 +82,7 @@ "@types/uuid": "^9.0.8", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", + "bun": "^1.1.15", "cpx": "^1.5.0", "eslint": "^8.42.0", "eslint-config-prettier": "^9.0.0", @@ -88,7 +91,7 @@ "is-primitive": "^3.0.1", "jest": "^29.5.0", "nest-commander-testing": "^3.3.0", - "nexe": "^4.0.0-rc.6", + "patch-package": "^8.0.0", "prettier": "^3.0.0", "run-script-os": "^1.1.6", "source-map-support": "^0.5.21", diff --git a/cortex-js/patches/sqlite3+5.1.7.patch b/cortex-js/patches/sqlite3+5.1.7.patch new file mode 100644 index 000000000..fc72a4d4d --- /dev/null +++ b/cortex-js/patches/sqlite3+5.1.7.patch @@ -0,0 +1,15 @@ +diff --git a/node_modules/sqlite3/.DS_Store b/node_modules/sqlite3/.DS_Store +new file mode 100644 +index 0000000..10f4d43 +Binary files /dev/null and b/node_modules/sqlite3/.DS_Store differ +diff --git a/node_modules/sqlite3/lib/sqlite3.js b/node_modules/sqlite3/lib/sqlite3.js +index 430a2b8..9df0857 100644 +--- a/node_modules/sqlite3/lib/sqlite3.js ++++ b/node_modules/sqlite3/lib/sqlite3.js +@@ -1,5 +1,5 @@ + const path = require('path'); +-const sqlite3 = require('./sqlite3-binding.js'); ++const sqlite3 = require('./../build/Release/node_sqlite3.node'); + const EventEmitter = require('events').EventEmitter; + module.exports = exports = sqlite3; + From fdb9d312245e12952dffe4bb1314caccf69eadbb Mon Sep 17 00:00:00 2001 From: Louis Date: Thu, 20 Jun 2024 23:56:30 +0700 Subject: [PATCH 4/9] chore: test release draft --- .github/workflows/cortex-js-artifact.yml | 39 +++++++++++++++++++++--- cortex-js/Makefile | 4 +++ 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cortex-js-artifact.yml b/.github/workflows/cortex-js-artifact.yml index 7d8c20242..2bf1856d2 100644 --- a/.github/workflows/cortex-js-artifact.yml +++ b/.github/workflows/cortex-js-artifact.yml @@ -7,9 +7,31 @@ on: workflow_dispatch: jobs: + create-draft-release: + runs-on: ubuntu-latest + outputs: + upload_url: ${{ steps.create_release.outputs.upload_url }} + version: ${{ steps.get_version.outputs.version }} + permissions: + contents: write + steps: + - name: Extract tag name without v prefix + id: get_version + run: | + echo "VERSION=0.4.17" >> $GITHUB_ENV && echo "::set-output name=version::0.4.17" + - name: Create Draft Release + id: create_release + uses: softprops/action-gh-release@v2 + with: + tag_name: v0.4.17 + token: ${{ secrets.GITHUB_TOKEN }} + name: "${{ env.VERSION }}" + draft: true + prerelease: false + build-cortex-single-binary: runs-on: ${{ matrix.runs-on }} - needs: [] + needs: [create-draft-release] timeout-minutes: 20 strategy: fail-fast: false @@ -51,9 +73,9 @@ jobs: with: node-version: "20.x" registry-url: "https://registry.npmjs.org" - + - run: npm install -g yarn - + - run: yarn install && yarn build && yarn build:binary working-directory: ./cortex-js @@ -80,7 +102,7 @@ jobs: run: | cd cortex-js make postbundle - + - name: Upload Artifact uses: actions/upload-artifact@v2 with: @@ -88,3 +110,12 @@ jobs: path: | ./cortex-js/cortex ./cortex-js/cortex.exe + + - uses: actions/upload-release-asset@v1.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create-draft-release.outputs.upload_url }} + asset_path: ./cortex-js/cortex.tar.gz + asset_name: cortex-${{ needs.create-draft-release.outputs.version }}-${{ matrix.name }}-${{ matrix.os }}.tar.gz + asset_content_type: application/gzip diff --git a/cortex-js/Makefile b/cortex-js/Makefile index 6adb0034e..039197726 100644 --- a/cortex-js/Makefile +++ b/cortex-js/Makefile @@ -12,12 +12,16 @@ ifeq ($(RUN_TESTS),false) @exit 0 endif ifeq ($(OS),Windows_NT) + @powershell -Command "7z a -ttar temp.tar cortex.exe; 7z a -tgzip cortex.tar.gz temp.tar;" else ifeq ($(shell uname -s),Linux) @chmod +x cortex; + tar -czvf cortex.tar.gz cortex; else @chmod +x cortex; + tar -czvf cortex.tar.gz cortex; endif + codesign: ifeq ($(CODE_SIGN),false) @echo "Skipping Code Sign" From c2701dc7043ada91aaa2be445f8aa1f6c9b48bc4 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 21 Jun 2024 13:14:51 +0700 Subject: [PATCH 5/9] chore: add windows installer --- .github/workflows/cortex-js-artifact.yml | 37 ++++++++++++++++++++++-- cortex-js/Makefile | 2 ++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cortex-js-artifact.yml b/.github/workflows/cortex-js-artifact.yml index 2bf1856d2..4da364265 100644 --- a/.github/workflows/cortex-js-artifact.yml +++ b/.github/workflows/cortex-js-artifact.yml @@ -39,11 +39,11 @@ jobs: include: - os: "linux" name: "amd64" - runs-on: "ubuntu-20-04" + runs-on: "ubuntu-latest" - os: "windows" name: "amd64" - runs-on: "windows-cuda-12-0" + runs-on: "windows-latest" - os: "mac" name: "amd64" @@ -98,6 +98,27 @@ jobs: cd cortex-js make codesign CODE_SIGN=true DEVELOPER_ID="${{ secrets.DEVELOPER_ID }}" + - name: Compile .ISS to .EXE Installer + uses: Minionguyjpro/Inno-Setup-Action@v1.2.2 + if: runner.os == 'Windows' + with: + path: cortex-js/installer.iss + options: /O+ + + - uses: nick-fields/retry@v3 + with: + continue_on_error: true + retry_wait_seconds: 10 + timeout_minutes: 10 + max_attempts: 3 + shell: cmd + command: | + cd cortex-js + set PATH=%PATH%;%USERPROFILE%\.dotnet\tools + make codesign CODE_SIGN=true AZURE_KEY_VAULT_URI="${{ secrets.AZURE_KEY_VAULT_URI }}" AZURE_CLIENT_ID="${{ secrets.AZURE_CLIENT_ID }}" AZURE_TENANT_ID="${{ secrets.AZURE_TENANT_ID }}" AZURE_CLIENT_SECRET="${{ secrets.AZURE_CLIENT_SECRET }}" AZURE_CERT_NAME="${{ secrets.AZURE_CERT_NAME }}" + name: Code Signing Windows + if: runner.os == 'Windows' + - name: Post-Bundle run: | cd cortex-js @@ -110,6 +131,18 @@ jobs: path: | ./cortex-js/cortex ./cortex-js/cortex.exe + ./cortex-js/setup.exe + + - name: Upload Cortex Windows Installer + uses: actions/upload-release-asset@v1.0.1 + if: runner.os == 'Windows' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create-draft-release.outputs.upload_url }} + asset_path: ./cortex-js/cortex-installer.tar.gz + asset_name: cortex-installer-${{ needs.create-draft-release.outputs.version }}-${{ matrix.name }}-${{ matrix.os }}.tar.gz + asset_content_type: application/gzip - uses: actions/upload-release-asset@v1.0.1 env: diff --git a/cortex-js/Makefile b/cortex-js/Makefile index 039197726..390fd5d19 100644 --- a/cortex-js/Makefile +++ b/cortex-js/Makefile @@ -13,6 +13,7 @@ ifeq ($(RUN_TESTS),false) endif ifeq ($(OS),Windows_NT) @powershell -Command "7z a -ttar temp.tar cortex.exe; 7z a -tgzip cortex.tar.gz temp.tar;" + @powershell -Command "7z a -ttar temp.tar setup.exe; 7z a -tgzip cortex-installer.tar.gz temp.tar;" else ifeq ($(shell uname -s),Linux) @chmod +x cortex; tar -czvf cortex.tar.gz cortex; @@ -31,6 +32,7 @@ endif ifeq ($(OS),Windows_NT) @powershell -Command "dotnet tool install --global AzureSignTool;" @powershell -Command 'azuresigntool.exe sign -kvu "$(AZURE_KEY_VAULT_URI)" -kvi "$(AZURE_CLIENT_ID)" -kvt "$(AZURE_TENANT_ID)" -kvs "$(AZURE_CLIENT_SECRET)" -kvc "$(AZURE_CERT_NAME)" -tr http://timestamp.globalsign.com/tsa/r6advanced1 -v ".\cortex-js\cortex.exe";' + @powershell -Command 'azuresigntool.exe sign -kvu "$(AZURE_KEY_VAULT_URI)" -kvi "$(AZURE_CLIENT_ID)" -kvt "$(AZURE_TENANT_ID)" -kvs "$(AZURE_CLIENT_SECRET)" -kvc "$(AZURE_CERT_NAME)" -tr http://timestamp.globalsign.com/tsa/r6advanced1 -v ".\cortex-js\setup.exe";' else ifeq ($(shell uname -s),Linux) @echo "Skipping Code Sign for linux" @exit 0 From 1214c5507a5c3ba6e8e8b36a0f443bb6d3950b5c Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 21 Jun 2024 14:23:36 +0700 Subject: [PATCH 6/9] chore: update final workflow --- ...{cortex-cpp-build.yml => cortex-build.yml} | 126 +++++++++++++- .github/workflows/cortex-js-artifact.yml | 154 ------------------ 2 files changed, 125 insertions(+), 155 deletions(-) rename .github/workflows/{cortex-cpp-build.yml => cortex-build.yml} (72%) delete mode 100644 .github/workflows/cortex-js-artifact.yml diff --git a/.github/workflows/cortex-cpp-build.yml b/.github/workflows/cortex-build.yml similarity index 72% rename from .github/workflows/cortex-cpp-build.yml rename to .github/workflows/cortex-build.yml index 240790f67..f6f4dbe27 100644 --- a/.github/workflows/cortex-cpp-build.yml +++ b/.github/workflows/cortex-build.yml @@ -262,8 +262,132 @@ jobs: asset_name: cortex-cpp-${{ needs.create-draft-release.outputs.version }}-${{ matrix.os }}-${{ matrix.name }}.tar.gz asset_content_type: application/gzip + build-cortex-single-binary: + runs-on: ${{ matrix.runs-on }} + needs: [create-draft-release] + timeout-minutes: 20 + strategy: + fail-fast: false + matrix: + include: + - os: "linux" + name: "amd64" + runs-on: "ubuntu-latest" + + - os: "windows" + name: "amd64" + runs-on: "windows-latest" + + - os: "mac" + name: "amd64" + runs-on: "macos-13" + + - os: "mac" + name: "arm64" + runs-on: "macos-latest" + steps: + - name: Clone + id: checkout + uses: actions/checkout@v3 + with: + submodules: recursive + + - uses: actions/setup-dotnet@v3 + if: runner.os == 'Windows' + with: + dotnet-version: "8.0.x" + + - name: Install choco on Windows + if: runner.os == 'Windows' + run: | + choco install make -y + + - uses: actions/setup-node@v3 + with: + node-version: "20.x" + registry-url: "https://registry.npmjs.org" + + - run: npm install -g yarn + + - run: yarn install && yarn build && yarn build:binary + working-directory: ./cortex-js + + - name: Get Cer for code signing + if: runner.os == 'macOS' + run: base64 -d <<< "$CODE_SIGN_P12_BASE64" > /tmp/codesign.p12 + shell: bash + env: + CODE_SIGN_P12_BASE64: ${{ secrets.CODE_SIGN_P12_BASE64 }} + + - uses: apple-actions/import-codesign-certs@v2 + if: runner.os == 'macOS' + with: + p12-file-base64: ${{ secrets.CODE_SIGN_P12_BASE64 }} + p12-password: ${{ secrets.CODE_SIGN_P12_PASSWORD }} + + - name: Code Signing macOS + if: runner.os == 'macOS' + run: | + cd cortex-js + make codesign CODE_SIGN=true DEVELOPER_ID="${{ secrets.DEVELOPER_ID }}" + + - name: Compile .ISS to .EXE Installer + uses: Minionguyjpro/Inno-Setup-Action@v1.2.2 + if: runner.os == 'Windows' + with: + path: cortex-js/installer.iss + options: /O+ + + - uses: nick-fields/retry@v3 + with: + continue_on_error: true + retry_wait_seconds: 10 + timeout_minutes: 10 + max_attempts: 3 + shell: cmd + command: | + cd cortex-js + set PATH=%PATH%;%USERPROFILE%\.dotnet\tools + make codesign CODE_SIGN=true AZURE_KEY_VAULT_URI="${{ secrets.AZURE_KEY_VAULT_URI }}" AZURE_CLIENT_ID="${{ secrets.AZURE_CLIENT_ID }}" AZURE_TENANT_ID="${{ secrets.AZURE_TENANT_ID }}" AZURE_CLIENT_SECRET="${{ secrets.AZURE_CLIENT_SECRET }}" AZURE_CERT_NAME="${{ secrets.AZURE_CERT_NAME }}" + name: Code Signing Windows + if: runner.os == 'Windows' + + - name: Post-Bundle + run: | + cd cortex-js + make postbundle + + - name: Upload Artifact + uses: actions/upload-artifact@v2 + with: + name: cortex-${{ matrix.os }}-${{ matrix.name }} + path: | + ./cortex-js/cortex + ./cortex-js/cortex.exe + ./cortex-js/setup.exe + + - name: Upload Cortex Windows Installer + uses: actions/upload-release-asset@v1.0.1 + if: runner.os == 'Windows' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create-draft-release.outputs.upload_url }} + asset_path: ./cortex-js/cortex-installer.tar.gz + asset_name: cortex-installer-${{ needs.create-draft-release.outputs.version }}-${{ matrix.name }}-${{ matrix.os }}.tar.gz + asset_content_type: application/gzip + + - uses: actions/upload-release-asset@v1.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create-draft-release.outputs.upload_url }} + asset_path: ./cortex-js/cortex.tar.gz + asset_name: cortex-${{ needs.create-draft-release.outputs.version }}-${{ matrix.name }}-${{ matrix.os }}.tar.gz + asset_content_type: application/gzip + update_release_draft: - needs: [build-and-test] + needs: [build-and-test, build-cortex-single-binary] permissions: # write permission is required to create a github release contents: write diff --git a/.github/workflows/cortex-js-artifact.yml b/.github/workflows/cortex-js-artifact.yml deleted file mode 100644 index 4da364265..000000000 --- a/.github/workflows/cortex-js-artifact.yml +++ /dev/null @@ -1,154 +0,0 @@ -name: CI Cortex JS - -on: - push: - branches: - - chore/update-ci-for-cortex-artifact - workflow_dispatch: - -jobs: - create-draft-release: - runs-on: ubuntu-latest - outputs: - upload_url: ${{ steps.create_release.outputs.upload_url }} - version: ${{ steps.get_version.outputs.version }} - permissions: - contents: write - steps: - - name: Extract tag name without v prefix - id: get_version - run: | - echo "VERSION=0.4.17" >> $GITHUB_ENV && echo "::set-output name=version::0.4.17" - - name: Create Draft Release - id: create_release - uses: softprops/action-gh-release@v2 - with: - tag_name: v0.4.17 - token: ${{ secrets.GITHUB_TOKEN }} - name: "${{ env.VERSION }}" - draft: true - prerelease: false - - build-cortex-single-binary: - runs-on: ${{ matrix.runs-on }} - needs: [create-draft-release] - timeout-minutes: 20 - strategy: - fail-fast: false - matrix: - include: - - os: "linux" - name: "amd64" - runs-on: "ubuntu-latest" - - - os: "windows" - name: "amd64" - runs-on: "windows-latest" - - - os: "mac" - name: "amd64" - runs-on: "macos-13" - - - os: "mac" - name: "arm64" - runs-on: "macos-latest" - steps: - - name: Clone - id: checkout - uses: actions/checkout@v3 - with: - submodules: recursive - - - uses: actions/setup-dotnet@v3 - if: runner.os == 'Windows' - with: - dotnet-version: "8.0.x" - - - name: Install choco on Windows - if: runner.os == 'Windows' - run: | - choco install make -y - - - uses: actions/setup-node@v3 - with: - node-version: "20.x" - registry-url: "https://registry.npmjs.org" - - - run: npm install -g yarn - - - run: yarn install && yarn build && yarn build:binary - working-directory: ./cortex-js - - - name: Get Cer for code signing - if: runner.os == 'macOS' - run: base64 -d <<< "$CODE_SIGN_P12_BASE64" > /tmp/codesign.p12 - shell: bash - env: - CODE_SIGN_P12_BASE64: ${{ secrets.CODE_SIGN_P12_BASE64 }} - - - uses: apple-actions/import-codesign-certs@v2 - if: runner.os == 'macOS' - with: - p12-file-base64: ${{ secrets.CODE_SIGN_P12_BASE64 }} - p12-password: ${{ secrets.CODE_SIGN_P12_PASSWORD }} - - - name: Code Signing macOS - if: runner.os == 'macOS' - run: | - cd cortex-js - make codesign CODE_SIGN=true DEVELOPER_ID="${{ secrets.DEVELOPER_ID }}" - - - name: Compile .ISS to .EXE Installer - uses: Minionguyjpro/Inno-Setup-Action@v1.2.2 - if: runner.os == 'Windows' - with: - path: cortex-js/installer.iss - options: /O+ - - - uses: nick-fields/retry@v3 - with: - continue_on_error: true - retry_wait_seconds: 10 - timeout_minutes: 10 - max_attempts: 3 - shell: cmd - command: | - cd cortex-js - set PATH=%PATH%;%USERPROFILE%\.dotnet\tools - make codesign CODE_SIGN=true AZURE_KEY_VAULT_URI="${{ secrets.AZURE_KEY_VAULT_URI }}" AZURE_CLIENT_ID="${{ secrets.AZURE_CLIENT_ID }}" AZURE_TENANT_ID="${{ secrets.AZURE_TENANT_ID }}" AZURE_CLIENT_SECRET="${{ secrets.AZURE_CLIENT_SECRET }}" AZURE_CERT_NAME="${{ secrets.AZURE_CERT_NAME }}" - name: Code Signing Windows - if: runner.os == 'Windows' - - - name: Post-Bundle - run: | - cd cortex-js - make postbundle - - - name: Upload Artifact - uses: actions/upload-artifact@v2 - with: - name: cortex-${{ matrix.os }}-${{ matrix.name }} - path: | - ./cortex-js/cortex - ./cortex-js/cortex.exe - ./cortex-js/setup.exe - - - name: Upload Cortex Windows Installer - uses: actions/upload-release-asset@v1.0.1 - if: runner.os == 'Windows' - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ needs.create-draft-release.outputs.upload_url }} - asset_path: ./cortex-js/cortex-installer.tar.gz - asset_name: cortex-installer-${{ needs.create-draft-release.outputs.version }}-${{ matrix.name }}-${{ matrix.os }}.tar.gz - asset_content_type: application/gzip - - - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ needs.create-draft-release.outputs.upload_url }} - asset_path: ./cortex-js/cortex.tar.gz - asset_name: cortex-${{ needs.create-draft-release.outputs.version }}-${{ matrix.name }}-${{ matrix.os }}.tar.gz - asset_content_type: application/gzip From 718664fdd830f0336a9ec2a0c2a48373c5d7aefd Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 21 Jun 2024 14:26:47 +0700 Subject: [PATCH 7/9] chore: remove update notifier --- cortex-js/package.json | 1 - cortex-js/src/command.ts | 11 ----------- 2 files changed, 12 deletions(-) diff --git a/cortex-js/package.json b/cortex-js/package.json index 7216afa7f..366c450dd 100644 --- a/cortex-js/package.json +++ b/cortex-js/package.json @@ -62,7 +62,6 @@ "systeminformation": "^5.22.11", "typeorm": "^0.3.20", "ulid": "^2.3.0", - "update-notifier": "^5.0.0", "uuid": "^9.0.1", "yaml": "^2.4.2" }, diff --git a/cortex-js/src/command.ts b/cortex-js/src/command.ts index 402ac5147..03096560c 100644 --- a/cortex-js/src/command.ts +++ b/cortex-js/src/command.ts @@ -1,8 +1,6 @@ #!/usr/bin/env node import { CommandFactory } from 'nest-commander'; import { CommandModule } from './command.module'; -import updateNotifier from 'update-notifier'; -import packageJson from './../package.json'; import { TelemetryUsecases } from './usecases/telemetry/telemetry.usecases'; import { TelemetrySource } from './domain/telemetry/telemetry.interface'; import { AsyncLocalStorage } from 'async_hooks'; @@ -34,15 +32,6 @@ async function bootstrap() { contextService!.set('source', TelemetrySource.CLI); return CommandFactory.runApplication(app); }); - - const notifier = updateNotifier({ - pkg: packageJson, - updateCheckInterval: 1000 * 60 * 60, // 1 hour - shouldNotifyInNpmScript: true, - }); - notifier.notify({ - isGlobal: true, - }); } bootstrap(); From 6db6c01362b3a97ce598f8e7d42315a3fd778318 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 21 Jun 2024 15:17:38 +0700 Subject: [PATCH 8/9] fix: tar file combines artifacts --- cortex-js/Makefile | 2 +- .../repositories/extensions/extension.repository.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cortex-js/Makefile b/cortex-js/Makefile index 390fd5d19..9d53d6b8d 100644 --- a/cortex-js/Makefile +++ b/cortex-js/Makefile @@ -13,7 +13,7 @@ ifeq ($(RUN_TESTS),false) endif ifeq ($(OS),Windows_NT) @powershell -Command "7z a -ttar temp.tar cortex.exe; 7z a -tgzip cortex.tar.gz temp.tar;" - @powershell -Command "7z a -ttar temp.tar setup.exe; 7z a -tgzip cortex-installer.tar.gz temp.tar;" + @powershell -Command "7z a -ttar temp2.tar setup.exe; 7z a -tgzip cortex-installer.tar.gz temp2.tar;" else ifeq ($(shell uname -s),Linux) @chmod +x cortex; tar -czvf cortex.tar.gz cortex; diff --git a/cortex-js/src/infrastructure/repositories/extensions/extension.repository.ts b/cortex-js/src/infrastructure/repositories/extensions/extension.repository.ts index 389e5f371..ef6ab4fde 100644 --- a/cortex-js/src/infrastructure/repositories/extensions/extension.repository.ts +++ b/cortex-js/src/infrastructure/repositories/extensions/extension.repository.ts @@ -14,6 +14,7 @@ export class ExtensionRepositoryImpl implements ExtensionRepository { extensions = new Map([ ['cortex.llamacpp', this.cortexProvider], ['cortex.onnx', this.cortexProvider], + ['cortex.tensorrt-llm', this.cortexProvider], ]); constructor( From 9e951d53f830b5b01641a980f5c7e42788fad6fe Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 21 Jun 2024 16:47:25 +0700 Subject: [PATCH 9/9] fix: unnecessary assistant lookup --- .../infrastructure/commanders/usecases/chat.cli.usecases.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/cortex-js/src/infrastructure/commanders/usecases/chat.cli.usecases.ts b/cortex-js/src/infrastructure/commanders/usecases/chat.cli.usecases.ts index f51b00f3c..4990a4073 100644 --- a/cortex-js/src/infrastructure/commanders/usecases/chat.cli.usecases.ts +++ b/cortex-js/src/infrastructure/commanders/usecases/chat.cli.usecases.ts @@ -257,9 +257,6 @@ export class ChatCliUsecases { const model = await this.modelsUsecases.findOne(modelId); if (!model) throw new Error(`Cannot find model with id: ${modelId}`); - const assistant = await this.assistantUsecases.findOne('jan'); - if (!assistant) throw new Error('No assistant available'); - const assistantDto: CreateThreadAssistantDto = { avatar: '', id: 'jan',