Merge branch 'dev' into chore/get-to-3.5-performance
This commit is contained in:
commit
629a674d7d
4
.github/scripts/auto-sign.sh
vendored
4
.github/scripts/auto-sign.sh
vendored
@ -7,6 +7,6 @@ if [[ -z "$APP_PATH" ]] || [[ -z "$DEVELOPER_ID" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# If both variables are set, execute the following commands
|
# If both variables are set, execute the following commands
|
||||||
find "$APP_PATH" \( -type f -perm +111 -o -name "*.node" \) -exec codesign -s "$DEVELOPER_ID" --options=runtime {} \;
|
find "$APP_PATH" \( -type f -perm +111 -o -name "*.node" \) -exec codesign --force -s "$DEVELOPER_ID" --options=runtime {} \;
|
||||||
|
|
||||||
find "$APP_PATH" -type f -name "*.o" -exec codesign -s "$DEVELOPER_ID" --options=runtime {} \;
|
find "$APP_PATH" -type f -name "*.o" -exec codesign --force -s "$DEVELOPER_ID" --options=runtime {} \;
|
||||||
|
|||||||
@ -58,7 +58,7 @@ jobs:
|
|||||||
- name: Delete object older than 10 days
|
- name: Delete object older than 10 days
|
||||||
run: |
|
run: |
|
||||||
# Get the list of objects in the 'latest' folder
|
# Get the list of objects in the 'latest' folder
|
||||||
OBJECTS=$(aws s3api list-objects --bucket ${{ secrets.CLOUDFLARE_R2_BUCKET_NAME }} --query 'Contents[?LastModified<`'$(date -d "$current_date -10 days" -u +"%Y-%m-%dT%H:%M:%SZ")'`].{Key: Key}' --endpoint-url https://${{ secrets.CLOUDFLARE_ACCOUNT_ID }}.r2.cloudflarestorage.com | jq -c .)
|
OBJECTS=$(aws s3api list-objects --bucket ${{ secrets.CLOUDFLARE_R2_BUCKET_NAME }} --prefix "latest/" --query 'Contents[?LastModified<`'$(date -d "$current_date -10 days" -u +"%Y-%m-%dT%H:%M:%SZ")'`].{Key: Key}' --endpoint-url https://${{ secrets.CLOUDFLARE_ACCOUNT_ID }}.r2.cloudflarestorage.com | jq -c .)
|
||||||
|
|
||||||
# Create a JSON file for the delete operation
|
# Create a JSON file for the delete operation
|
||||||
echo "{\"Objects\": $OBJECTS, \"Quiet\": false}" > delete.json
|
echo "{\"Objects\": $OBJECTS, \"Quiet\": false}" > delete.json
|
||||||
|
|||||||
@ -78,6 +78,10 @@ jobs:
|
|||||||
|
|
||||||
jq '.build.publish = [{"provider": "generic", "url": "${{ secrets.CLOUDFLARE_R2_PUBLIC_URL }}", "channel": "latest"}, {"provider": "s3", "bucket": "${{ secrets.CLOUDFLARE_R2_BUCKET_NAME }}", "region": "auto", "endpoint": "https://${{ secrets.CLOUDFLARE_ACCOUNT_ID }}.r2.cloudflarestorage.com", "path": "${{ inputs.cloudflare_r2_path }}", "channel": "latest"}]' electron/package.json > /tmp/package.json
|
jq '.build.publish = [{"provider": "generic", "url": "${{ secrets.CLOUDFLARE_R2_PUBLIC_URL }}", "channel": "latest"}, {"provider": "s3", "bucket": "${{ secrets.CLOUDFLARE_R2_BUCKET_NAME }}", "region": "auto", "endpoint": "https://${{ secrets.CLOUDFLARE_ACCOUNT_ID }}.r2.cloudflarestorage.com", "path": "${{ inputs.cloudflare_r2_path }}", "channel": "latest"}]' electron/package.json > /tmp/package.json
|
||||||
mv /tmp/package.json electron/package.json
|
mv /tmp/package.json electron/package.json
|
||||||
|
|
||||||
|
jq --arg teamid "${{ secrets.APPLE_TEAM_ID }}" '.build.mac.notarize.teamId = $teamid' electron/package.json > /tmp/package.json
|
||||||
|
mv /tmp/package.json electron/package.json
|
||||||
|
|
||||||
cat electron/package.json
|
cat electron/package.json
|
||||||
|
|
||||||
- name: Update app version base on tag
|
- name: Update app version base on tag
|
||||||
@ -91,6 +95,9 @@ jobs:
|
|||||||
mv /tmp/package.json electron/package.json
|
mv /tmp/package.json electron/package.json
|
||||||
jq --arg version "${VERSION_TAG#v}" '.version = $version' web/package.json > /tmp/package.json
|
jq --arg version "${VERSION_TAG#v}" '.version = $version' web/package.json > /tmp/package.json
|
||||||
mv /tmp/package.json web/package.json
|
mv /tmp/package.json web/package.json
|
||||||
|
jq --arg teamid "${{ secrets.APPLE_TEAM_ID }}" '.build.mac.notarize.teamId = $teamid' electron/package.json > /tmp/package.json
|
||||||
|
mv /tmp/package.json electron/package.json
|
||||||
|
cat electron/package.json
|
||||||
env:
|
env:
|
||||||
VERSION_TAG: ${{ inputs.new_version }}
|
VERSION_TAG: ${{ inputs.new_version }}
|
||||||
|
|
||||||
|
|||||||
@ -72,6 +72,10 @@ jobs:
|
|||||||
|
|
||||||
jq '.build.publish = [{"provider": "generic", "url": "${{ secrets.CLOUDFLARE_R2_PUBLIC_URL }}", "channel": "latest"}, {"provider": "s3", "bucket": "${{ secrets.CLOUDFLARE_R2_BUCKET_NAME }}", "region": "auto", "endpoint": "https://${{ secrets.CLOUDFLARE_ACCOUNT_ID }}.r2.cloudflarestorage.com", "path": "${{ inputs.cloudflare_r2_path }}", "channel": "latest"}]' electron/package.json > /tmp/package.json
|
jq '.build.publish = [{"provider": "generic", "url": "${{ secrets.CLOUDFLARE_R2_PUBLIC_URL }}", "channel": "latest"}, {"provider": "s3", "bucket": "${{ secrets.CLOUDFLARE_R2_BUCKET_NAME }}", "region": "auto", "endpoint": "https://${{ secrets.CLOUDFLARE_ACCOUNT_ID }}.r2.cloudflarestorage.com", "path": "${{ inputs.cloudflare_r2_path }}", "channel": "latest"}]' electron/package.json > /tmp/package.json
|
||||||
mv /tmp/package.json electron/package.json
|
mv /tmp/package.json electron/package.json
|
||||||
|
|
||||||
|
jq --arg teamid "${{ secrets.APPLE_TEAM_ID }}" '.build.mac.notarize.teamId = $teamid' electron/package.json > /tmp/package.json
|
||||||
|
mv /tmp/package.json electron/package.json
|
||||||
|
|
||||||
cat electron/package.json
|
cat electron/package.json
|
||||||
|
|
||||||
- name: Update app version base on tag
|
- name: Update app version base on tag
|
||||||
@ -85,6 +89,9 @@ jobs:
|
|||||||
mv /tmp/package.json electron/package.json
|
mv /tmp/package.json electron/package.json
|
||||||
jq --arg version "${VERSION_TAG#v}" '.version = $version' web/package.json > /tmp/package.json
|
jq --arg version "${VERSION_TAG#v}" '.version = $version' web/package.json > /tmp/package.json
|
||||||
mv /tmp/package.json web/package.json
|
mv /tmp/package.json web/package.json
|
||||||
|
jq --arg teamid "${{ secrets.APPLE_TEAM_ID }}" '.build.mac.notarize.teamId = $teamid' electron/package.json > /tmp/package.json
|
||||||
|
mv /tmp/package.json electron/package.json
|
||||||
|
cat electron/package.json
|
||||||
env:
|
env:
|
||||||
VERSION_TAG: ${{ inputs.new_version }}
|
VERSION_TAG: ${{ inputs.new_version }}
|
||||||
|
|
||||||
|
|||||||
21
.gitignore
vendored
21
.gitignore
vendored
@ -14,6 +14,7 @@ electron/renderer
|
|||||||
electron/models
|
electron/models
|
||||||
electron/docs
|
electron/docs
|
||||||
electron/engines
|
electron/engines
|
||||||
|
electron/playwright-report
|
||||||
server/pre-install
|
server/pre-install
|
||||||
package-lock.json
|
package-lock.json
|
||||||
|
|
||||||
@ -21,16 +22,16 @@ package-lock.json
|
|||||||
core/lib/**
|
core/lib/**
|
||||||
|
|
||||||
# Nitro binary files
|
# Nitro binary files
|
||||||
extensions/inference-nitro-extension/bin/*/nitro
|
extensions/*-extension/bin/*/nitro
|
||||||
extensions/inference-nitro-extension/bin/*/*.metal
|
extensions/*-extension/bin/*/*.metal
|
||||||
extensions/inference-nitro-extension/bin/*/*.exe
|
extensions/*-extension/bin/*/*.exe
|
||||||
extensions/inference-nitro-extension/bin/*/*.dll
|
extensions/*-extension/bin/*/*.dll
|
||||||
extensions/inference-nitro-extension/bin/*/*.exp
|
extensions/*-extension/bin/*/*.exp
|
||||||
extensions/inference-nitro-extension/bin/*/*.lib
|
extensions/*-extension/bin/*/*.lib
|
||||||
extensions/inference-nitro-extension/bin/saved-*
|
extensions/*-extension/bin/saved-*
|
||||||
extensions/inference-nitro-extension/bin/*.tar.gz
|
extensions/*-extension/bin/*.tar.gz
|
||||||
extensions/inference-nitro-extension/bin/vulkaninfoSDK.exe
|
extensions/*-extension/bin/vulkaninfoSDK.exe
|
||||||
extensions/inference-nitro-extension/bin/vulkaninfo
|
extensions/*-extension/bin/vulkaninfo
|
||||||
|
|
||||||
|
|
||||||
# Turborepo
|
# Turborepo
|
||||||
|
|||||||
26
README.md
26
README.md
@ -43,31 +43,31 @@ Jan is an open-source ChatGPT alternative that runs 100% offline on your compute
|
|||||||
<tr style="text-align:center">
|
<tr style="text-align:center">
|
||||||
<td style="text-align:center"><b>Stable (Recommended)</b></td>
|
<td style="text-align:center"><b>Stable (Recommended)</b></td>
|
||||||
<td style="text-align:center">
|
<td style="text-align:center">
|
||||||
<a href='https://github.com/janhq/jan/releases/download/v0.4.7/jan-win-x64-0.4.7.exe'>
|
<a href='https://github.com/janhq/jan/releases/download/v0.4.8/jan-win-x64-0.4.8.exe'>
|
||||||
<img src='./docs/static/img/windows.png' style="height:14px; width: 14px" />
|
<img src='./docs/static/img/windows.png' style="height:14px; width: 14px" />
|
||||||
<b>jan.exe</b>
|
<b>jan.exe</b>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td style="text-align:center">
|
<td style="text-align:center">
|
||||||
<a href='https://github.com/janhq/jan/releases/download/v0.4.7/jan-mac-x64-0.4.7.dmg'>
|
<a href='https://github.com/janhq/jan/releases/download/v0.4.8/jan-mac-x64-0.4.8.dmg'>
|
||||||
<img src='./docs/static/img/mac.png' style="height:15px; width: 15px" />
|
<img src='./docs/static/img/mac.png' style="height:15px; width: 15px" />
|
||||||
<b>Intel</b>
|
<b>Intel</b>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td style="text-align:center">
|
<td style="text-align:center">
|
||||||
<a href='https://github.com/janhq/jan/releases/download/v0.4.7/jan-mac-arm64-0.4.7.dmg'>
|
<a href='https://github.com/janhq/jan/releases/download/v0.4.8/jan-mac-arm64-0.4.8.dmg'>
|
||||||
<img src='./docs/static/img/mac.png' style="height:15px; width: 15px" />
|
<img src='./docs/static/img/mac.png' style="height:15px; width: 15px" />
|
||||||
<b>M1/M2</b>
|
<b>M1/M2</b>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td style="text-align:center">
|
<td style="text-align:center">
|
||||||
<a href='https://github.com/janhq/jan/releases/download/v0.4.7/jan-linux-amd64-0.4.7.deb'>
|
<a href='https://github.com/janhq/jan/releases/download/v0.4.8/jan-linux-amd64-0.4.8.deb'>
|
||||||
<img src='./docs/static/img/linux.png' style="height:14px; width: 14px" />
|
<img src='./docs/static/img/linux.png' style="height:14px; width: 14px" />
|
||||||
<b>jan.deb</b>
|
<b>jan.deb</b>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td style="text-align:center">
|
<td style="text-align:center">
|
||||||
<a href='https://github.com/janhq/jan/releases/download/v0.4.7/jan-linux-x86_64-0.4.7.AppImage'>
|
<a href='https://github.com/janhq/jan/releases/download/v0.4.8/jan-linux-x86_64-0.4.8.AppImage'>
|
||||||
<img src='./docs/static/img/linux.png' style="height:14px; width: 14px" />
|
<img src='./docs/static/img/linux.png' style="height:14px; width: 14px" />
|
||||||
<b>jan.AppImage</b>
|
<b>jan.AppImage</b>
|
||||||
</a>
|
</a>
|
||||||
@ -76,31 +76,31 @@ Jan is an open-source ChatGPT alternative that runs 100% offline on your compute
|
|||||||
<tr style="text-align:center">
|
<tr style="text-align:center">
|
||||||
<td style="text-align:center"><b>Experimental (Nightly Build)</b></td>
|
<td style="text-align:center"><b>Experimental (Nightly Build)</b></td>
|
||||||
<td style="text-align:center">
|
<td style="text-align:center">
|
||||||
<a href='https://delta.jan.ai/latest/jan-win-x64-0.4.7-295.exe'>
|
<a href='https://delta.jan.ai/latest/jan-win-x64-0.4.8-324.exe'>
|
||||||
<img src='./docs/static/img/windows.png' style="height:14px; width: 14px" />
|
<img src='./docs/static/img/windows.png' style="height:14px; width: 14px" />
|
||||||
<b>jan.exe</b>
|
<b>jan.exe</b>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td style="text-align:center">
|
<td style="text-align:center">
|
||||||
<a href='https://delta.jan.ai/latest/jan-mac-x64-0.4.7-295.dmg'>
|
<a href='https://delta.jan.ai/latest/jan-mac-x64-0.4.8-324.dmg'>
|
||||||
<img src='./docs/static/img/mac.png' style="height:15px; width: 15px" />
|
<img src='./docs/static/img/mac.png' style="height:15px; width: 15px" />
|
||||||
<b>Intel</b>
|
<b>Intel</b>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td style="text-align:center">
|
<td style="text-align:center">
|
||||||
<a href='https://delta.jan.ai/latest/jan-mac-arm64-0.4.7-295.dmg'>
|
<a href='https://delta.jan.ai/latest/jan-mac-arm64-0.4.8-324.dmg'>
|
||||||
<img src='./docs/static/img/mac.png' style="height:15px; width: 15px" />
|
<img src='./docs/static/img/mac.png' style="height:15px; width: 15px" />
|
||||||
<b>M1/M2</b>
|
<b>M1/M2</b>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td style="text-align:center">
|
<td style="text-align:center">
|
||||||
<a href='https://delta.jan.ai/latest/jan-linux-amd64-0.4.7-295.deb'>
|
<a href='https://delta.jan.ai/latest/jan-linux-amd64-0.4.8-324.deb'>
|
||||||
<img src='./docs/static/img/linux.png' style="height:14px; width: 14px" />
|
<img src='./docs/static/img/linux.png' style="height:14px; width: 14px" />
|
||||||
<b>jan.deb</b>
|
<b>jan.deb</b>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td style="text-align:center">
|
<td style="text-align:center">
|
||||||
<a href='https://delta.jan.ai/latest/jan-linux-x86_64-0.4.7-295.AppImage'>
|
<a href='https://delta.jan.ai/latest/jan-linux-x86_64-0.4.8-324.AppImage'>
|
||||||
<img src='./docs/static/img/linux.png' style="height:14px; width: 14px" />
|
<img src='./docs/static/img/linux.png' style="height:14px; width: 14px" />
|
||||||
<b>jan.AppImage</b>
|
<b>jan.AppImage</b>
|
||||||
</a>
|
</a>
|
||||||
@ -209,6 +209,12 @@ Contributions are welcome! Please read the [CONTRIBUTING.md](CONTRIBUTING.md) fi
|
|||||||
|
|
||||||
This will start the development server and open the desktop app.
|
This will start the development server and open the desktop app.
|
||||||
|
|
||||||
|
3. (Optional) **Run the API server without frontend**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn dev:server
|
||||||
|
```
|
||||||
|
|
||||||
### For production build
|
### For production build
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@ -45,19 +45,24 @@
|
|||||||
"start": "rollup -c rollup.config.ts -w"
|
"start": "rollup -c rollup.config.ts -w"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"jest": "^25.4.0",
|
"@types/jest": "^29.5.12",
|
||||||
"@types/jest": "^29.5.11",
|
|
||||||
"@types/node": "^12.0.2",
|
"@types/node": "^12.0.2",
|
||||||
"eslint-plugin-jest": "^23.8.2",
|
"eslint": "8.57.0",
|
||||||
|
"eslint-plugin-jest": "^27.9.0",
|
||||||
|
"jest": "^29.7.0",
|
||||||
|
"rimraf": "^3.0.2",
|
||||||
"rollup": "^2.38.5",
|
"rollup": "^2.38.5",
|
||||||
"rollup-plugin-commonjs": "^9.1.8",
|
"rollup-plugin-commonjs": "^9.1.8",
|
||||||
"rollup-plugin-json": "^3.1.0",
|
"rollup-plugin-json": "^3.1.0",
|
||||||
"rollup-plugin-node-resolve": "^5.2.0",
|
"rollup-plugin-node-resolve": "^5.2.0",
|
||||||
"rollup-plugin-sourcemaps": "^0.6.3",
|
"rollup-plugin-sourcemaps": "^0.6.3",
|
||||||
"rollup-plugin-typescript2": "^0.36.0",
|
"rollup-plugin-typescript2": "^0.36.0",
|
||||||
"ts-jest": "^26.1.1",
|
"ts-jest": "^29.1.2",
|
||||||
"tslib": "^2.6.2",
|
"tslib": "^2.6.2",
|
||||||
"typescript": "^5.2.2",
|
"typescript": "^5.3.3"
|
||||||
"rimraf": "^3.0.2"
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"rxjs": "^7.8.1",
|
||||||
|
"ulid": "^2.3.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -64,7 +64,7 @@ export default [
|
|||||||
// Allow json resolution
|
// Allow json resolution
|
||||||
json(),
|
json(),
|
||||||
// Compile TypeScript files
|
// Compile TypeScript files
|
||||||
typescript({ useTsconfigDeclarationDir: true }),
|
typescript({ useTsconfigDeclarationDir: true, exclude: ['src/*.ts', 'src/extensions/**'] }),
|
||||||
// Allow bundling cjs modules (unlike webpack, rollup doesn't understand cjs)
|
// Allow bundling cjs modules (unlike webpack, rollup doesn't understand cjs)
|
||||||
commonjs(),
|
commonjs(),
|
||||||
// Allow node_modules resolution, so you can use 'external' to control
|
// Allow node_modules resolution, so you can use 'external' to control
|
||||||
|
|||||||
@ -9,6 +9,14 @@ export enum NativeRoute {
|
|||||||
selectDirectory = 'selectDirectory',
|
selectDirectory = 'selectDirectory',
|
||||||
selectModelFiles = 'selectModelFiles',
|
selectModelFiles = 'selectModelFiles',
|
||||||
relaunch = 'relaunch',
|
relaunch = 'relaunch',
|
||||||
|
|
||||||
|
hideQuickAskWindow = 'hideQuickAskWindow',
|
||||||
|
sendQuickAskInput = 'sendQuickAskInput',
|
||||||
|
|
||||||
|
hideMainWindow = 'hideMainWindow',
|
||||||
|
showMainWindow = 'showMainWindow',
|
||||||
|
|
||||||
|
quickAskSizeUpdated = 'quickAskSizeUpdated',
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -25,12 +33,17 @@ export enum AppRoute {
|
|||||||
stopServer = 'stopServer',
|
stopServer = 'stopServer',
|
||||||
log = 'log',
|
log = 'log',
|
||||||
logServer = 'logServer',
|
logServer = 'logServer',
|
||||||
|
systemInformations = 'systemInformations',
|
||||||
|
showToast = 'showToast',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum AppEvent {
|
export enum AppEvent {
|
||||||
onAppUpdateDownloadUpdate = 'onAppUpdateDownloadUpdate',
|
onAppUpdateDownloadUpdate = 'onAppUpdateDownloadUpdate',
|
||||||
onAppUpdateDownloadError = 'onAppUpdateDownloadError',
|
onAppUpdateDownloadError = 'onAppUpdateDownloadError',
|
||||||
onAppUpdateDownloadSuccess = 'onAppUpdateDownloadSuccess',
|
onAppUpdateDownloadSuccess = 'onAppUpdateDownloadSuccess',
|
||||||
|
|
||||||
|
onUserSubmitQuickAsk = 'onUserSubmitQuickAsk',
|
||||||
|
onSelectedText = 'onSelectedText',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum DownloadRoute {
|
export enum DownloadRoute {
|
||||||
@ -45,6 +58,7 @@ export enum DownloadEvent {
|
|||||||
onFileDownloadUpdate = 'onFileDownloadUpdate',
|
onFileDownloadUpdate = 'onFileDownloadUpdate',
|
||||||
onFileDownloadError = 'onFileDownloadError',
|
onFileDownloadError = 'onFileDownloadError',
|
||||||
onFileDownloadSuccess = 'onFileDownloadSuccess',
|
onFileDownloadSuccess = 'onFileDownloadSuccess',
|
||||||
|
onFileUnzipSuccess = 'onFileUnzipSuccess',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum LocalImportModelEvent {
|
export enum LocalImportModelEvent {
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { FileStat } from './types'
|
import { DownloadRequest, FileStat, NetworkConfig } from './types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute a extension module function in main process
|
* Execute a extension module function in main process
|
||||||
@ -17,18 +17,16 @@ const executeOnMain: (extension: string, method: string, ...args: any[]) => Prom
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Downloads a file from a URL and saves it to the local file system.
|
* Downloads a file from a URL and saves it to the local file system.
|
||||||
* @param {string} url - The URL of the file to download.
|
*
|
||||||
* @param {string} fileName - The name to use for the downloaded file.
|
* @param {DownloadRequest} downloadRequest - The request to download the file.
|
||||||
* @param {object} network - Optional object to specify proxy/whether to ignore SSL certificates.
|
* @param {NetworkConfig} network - Optional object to specify proxy/whether to ignore SSL certificates.
|
||||||
|
*
|
||||||
* @returns {Promise<any>} A promise that resolves when the file is downloaded.
|
* @returns {Promise<any>} A promise that resolves when the file is downloaded.
|
||||||
*/
|
*/
|
||||||
const downloadFile: (
|
const downloadFile: (downloadRequest: DownloadRequest, network?: NetworkConfig) => Promise<any> = (
|
||||||
url: string,
|
downloadRequest,
|
||||||
fileName: string,
|
network
|
||||||
network?: { proxy?: string; ignoreSSL?: boolean }
|
) => global.core?.api?.downloadFile(downloadRequest, network)
|
||||||
) => Promise<any> = (url, fileName, network) => {
|
|
||||||
return global.core?.api?.downloadFile(url, fileName, network)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Aborts the download of a specific file.
|
* Aborts the download of a specific file.
|
||||||
@ -108,6 +106,20 @@ const log: (message: string, fileName?: string) => void = (message, fileName) =>
|
|||||||
const isSubdirectory: (from: string, to: string) => Promise<boolean> = (from: string, to: string) =>
|
const isSubdirectory: (from: string, to: string) => Promise<boolean> = (from: string, to: string) =>
|
||||||
global.core.api?.isSubdirectory(from, to)
|
global.core.api?.isSubdirectory(from, to)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get system information
|
||||||
|
* @returns {Promise<any>} - A promise that resolves with the system information.
|
||||||
|
*/
|
||||||
|
const systemInformations: () => Promise<any> = () => global.core.api?.systemInformations()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show toast message from browser processes.
|
||||||
|
* @param title
|
||||||
|
* @param message
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const showToast: (title: string, message: string) => void = (title, message) =>
|
||||||
|
global.core.api?.showToast(title, message)
|
||||||
/**
|
/**
|
||||||
* Register extension point function type definition
|
* Register extension point function type definition
|
||||||
*/
|
*/
|
||||||
@ -134,5 +146,7 @@ export {
|
|||||||
log,
|
log,
|
||||||
isSubdirectory,
|
isSubdirectory,
|
||||||
getUserHomePath,
|
getUserHomePath,
|
||||||
|
systemInformations,
|
||||||
|
showToast,
|
||||||
FileStat,
|
FileStat,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,22 @@ export enum ExtensionTypeEnum {
|
|||||||
export interface ExtensionType {
|
export interface ExtensionType {
|
||||||
type(): ExtensionTypeEnum | undefined
|
type(): ExtensionTypeEnum | undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface Compatibility {
|
||||||
|
platform: string[]
|
||||||
|
version: string
|
||||||
|
}
|
||||||
|
|
||||||
|
const ALL_INSTALLATION_STATE = [
|
||||||
|
'NotRequired', // not required.
|
||||||
|
'Installed', // require and installed. Good to go.
|
||||||
|
'NotInstalled', // require to be installed.
|
||||||
|
'Corrupted', // require but corrupted. Need to redownload.
|
||||||
|
] as const
|
||||||
|
|
||||||
|
export type InstallationStateTuple = typeof ALL_INSTALLATION_STATE
|
||||||
|
export type InstallationState = InstallationStateTuple[number]
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a base extension.
|
* Represents a base extension.
|
||||||
* This class should be extended by any class that represents an extension.
|
* This class should be extended by any class that represents an extension.
|
||||||
@ -33,4 +49,32 @@ export abstract class BaseExtension implements ExtensionType {
|
|||||||
* Any cleanup logic for the extension should be put here.
|
* Any cleanup logic for the extension should be put here.
|
||||||
*/
|
*/
|
||||||
abstract onUnload(): void
|
abstract onUnload(): void
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The compatibility of the extension.
|
||||||
|
* This is used to check if the extension is compatible with the current environment.
|
||||||
|
* @property {Array} platform
|
||||||
|
*/
|
||||||
|
compatibility(): Compatibility | undefined {
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the prerequisites for the extension are installed.
|
||||||
|
*
|
||||||
|
* @returns {boolean} true if the prerequisites are installed, false otherwise.
|
||||||
|
*/
|
||||||
|
async installationState(): Promise<InstallationState> {
|
||||||
|
return 'NotRequired'
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install the prerequisites for the extension.
|
||||||
|
*
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
// @ts-ignore
|
||||||
|
async install(...args): Promise<void> {
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
60
core/src/extensions/ai-engines/AIEngine.ts
Normal file
60
core/src/extensions/ai-engines/AIEngine.ts
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
import { getJanDataFolderPath, joinPath } from '../../core'
|
||||||
|
import { events } from '../../events'
|
||||||
|
import { BaseExtension } from '../../extension'
|
||||||
|
import { fs } from '../../fs'
|
||||||
|
import { Model, ModelEvent } from '../../types'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base AIEngine
|
||||||
|
* Applicable to all AI Engines
|
||||||
|
*/
|
||||||
|
export abstract class AIEngine extends BaseExtension {
|
||||||
|
// The inference engine
|
||||||
|
abstract provider: string
|
||||||
|
// The model folder
|
||||||
|
modelFolder: string = 'models'
|
||||||
|
|
||||||
|
abstract models(): Promise<Model[]>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On extension load, subscribe to events.
|
||||||
|
*/
|
||||||
|
onLoad() {
|
||||||
|
this.prePopulateModels()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pre-populate models to App Data Folder
|
||||||
|
*/
|
||||||
|
prePopulateModels(): Promise<void> {
|
||||||
|
return this.models().then((models) => {
|
||||||
|
const prePoluateOperations = models.map((model) =>
|
||||||
|
getJanDataFolderPath()
|
||||||
|
.then((janDataFolder) =>
|
||||||
|
// Attempt to create the model folder
|
||||||
|
joinPath([janDataFolder, this.modelFolder, model.id]).then((path) =>
|
||||||
|
fs
|
||||||
|
.mkdirSync(path)
|
||||||
|
.catch()
|
||||||
|
.then(() => path)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.then((path) => joinPath([path, 'model.json']))
|
||||||
|
.then((path) => {
|
||||||
|
// Do not overwite existing model.json
|
||||||
|
return fs.existsSync(path).then((exist: any) => {
|
||||||
|
if (!exist) return fs.writeFileSync(path, JSON.stringify(model, null, 2))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.catch((e: Error) => {
|
||||||
|
console.error('Error', e)
|
||||||
|
})
|
||||||
|
)
|
||||||
|
Promise.all(prePoluateOperations).then(() =>
|
||||||
|
// Emit event to update models
|
||||||
|
// So the UI can update the models list
|
||||||
|
events.emit(ModelEvent.OnModelsUpdate, {})
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
63
core/src/extensions/ai-engines/LocalOAIEngine.ts
Normal file
63
core/src/extensions/ai-engines/LocalOAIEngine.ts
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import { executeOnMain, getJanDataFolderPath, joinPath } from '../../core'
|
||||||
|
import { events } from '../../events'
|
||||||
|
import { Model, ModelEvent } from '../../types'
|
||||||
|
import { OAIEngine } from './OAIEngine'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base OAI Local Inference Provider
|
||||||
|
* Added the implementation of loading and unloading model (applicable to local inference providers)
|
||||||
|
*/
|
||||||
|
export abstract class LocalOAIEngine extends OAIEngine {
|
||||||
|
// The inference engine
|
||||||
|
loadModelFunctionName: string = 'loadModel'
|
||||||
|
unloadModelFunctionName: string = 'unloadModel'
|
||||||
|
isRunning: boolean = false
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On extension load, subscribe to events.
|
||||||
|
*/
|
||||||
|
onLoad() {
|
||||||
|
super.onLoad()
|
||||||
|
// These events are applicable to local inference providers
|
||||||
|
events.on(ModelEvent.OnModelInit, (model: Model) => this.onModelInit(model))
|
||||||
|
events.on(ModelEvent.OnModelStop, (model: Model) => this.onModelStop(model))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the model.
|
||||||
|
*/
|
||||||
|
async onModelInit(model: Model) {
|
||||||
|
if (model.engine.toString() !== this.provider) return
|
||||||
|
|
||||||
|
const modelFolder = await joinPath([await getJanDataFolderPath(), this.modelFolder, model.id])
|
||||||
|
|
||||||
|
const res = await executeOnMain(this.nodeModule, this.loadModelFunctionName, {
|
||||||
|
modelFolder,
|
||||||
|
model,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (res?.error) {
|
||||||
|
events.emit(ModelEvent.OnModelFail, {
|
||||||
|
...model,
|
||||||
|
error: res.error,
|
||||||
|
})
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
this.loadedModel = model
|
||||||
|
events.emit(ModelEvent.OnModelReady, model)
|
||||||
|
this.isRunning = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Stops the model.
|
||||||
|
*/
|
||||||
|
onModelStop(model: Model) {
|
||||||
|
if (model.engine?.toString() !== this.provider) return
|
||||||
|
|
||||||
|
this.isRunning = false
|
||||||
|
|
||||||
|
executeOnMain(this.nodeModule, this.unloadModelFunctionName).then(() => {
|
||||||
|
events.emit(ModelEvent.OnModelStopped, {})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
116
core/src/extensions/ai-engines/OAIEngine.ts
Normal file
116
core/src/extensions/ai-engines/OAIEngine.ts
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
import { requestInference } from './helpers/sse'
|
||||||
|
import { ulid } from 'ulid'
|
||||||
|
import { AIEngine } from './AIEngine'
|
||||||
|
import {
|
||||||
|
ChatCompletionRole,
|
||||||
|
ContentType,
|
||||||
|
InferenceEvent,
|
||||||
|
MessageEvent,
|
||||||
|
MessageRequest,
|
||||||
|
MessageRequestType,
|
||||||
|
MessageStatus,
|
||||||
|
Model,
|
||||||
|
ModelInfo,
|
||||||
|
ThreadContent,
|
||||||
|
ThreadMessage,
|
||||||
|
} from '../../types'
|
||||||
|
import { events } from '../../events'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base OAI Inference Provider
|
||||||
|
* Applicable to all OAI compatible inference providers
|
||||||
|
*/
|
||||||
|
export abstract class OAIEngine extends AIEngine {
|
||||||
|
// The inference engine
|
||||||
|
abstract inferenceUrl: string
|
||||||
|
abstract nodeModule: string
|
||||||
|
|
||||||
|
// Controller to handle stop requests
|
||||||
|
controller = new AbortController()
|
||||||
|
isCancelled = false
|
||||||
|
|
||||||
|
// The loaded model instance
|
||||||
|
loadedModel: Model | undefined
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On extension load, subscribe to events.
|
||||||
|
*/
|
||||||
|
onLoad() {
|
||||||
|
super.onLoad()
|
||||||
|
events.on(MessageEvent.OnMessageSent, (data: MessageRequest) => this.inference(data))
|
||||||
|
events.on(InferenceEvent.OnInferenceStopped, () => this.onInferenceStopped())
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On extension unload
|
||||||
|
*/
|
||||||
|
onUnload(): void {}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Inference request
|
||||||
|
*/
|
||||||
|
inference(data: MessageRequest) {
|
||||||
|
if (data.model?.engine?.toString() !== this.provider) return
|
||||||
|
|
||||||
|
const timestamp = Date.now()
|
||||||
|
const message: ThreadMessage = {
|
||||||
|
id: ulid(),
|
||||||
|
thread_id: data.threadId,
|
||||||
|
type: data.type,
|
||||||
|
assistant_id: data.assistantId,
|
||||||
|
role: ChatCompletionRole.Assistant,
|
||||||
|
content: [],
|
||||||
|
status: MessageStatus.Pending,
|
||||||
|
created: timestamp,
|
||||||
|
updated: timestamp,
|
||||||
|
object: 'thread.message',
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.type !== MessageRequestType.Summary) {
|
||||||
|
events.emit(MessageEvent.OnMessageResponse, message)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.isCancelled = false
|
||||||
|
this.controller = new AbortController()
|
||||||
|
|
||||||
|
const model: ModelInfo = {
|
||||||
|
...(this.loadedModel ? this.loadedModel : {}),
|
||||||
|
...data.model,
|
||||||
|
}
|
||||||
|
|
||||||
|
requestInference(this.inferenceUrl, data.messages ?? [], model, this.controller).subscribe({
|
||||||
|
next: (content: any) => {
|
||||||
|
const messageContent: ThreadContent = {
|
||||||
|
type: ContentType.Text,
|
||||||
|
text: {
|
||||||
|
value: content.trim(),
|
||||||
|
annotations: [],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
message.content = [messageContent]
|
||||||
|
events.emit(MessageEvent.OnMessageUpdate, message)
|
||||||
|
},
|
||||||
|
complete: async () => {
|
||||||
|
message.status = message.content.length ? MessageStatus.Ready : MessageStatus.Error
|
||||||
|
events.emit(MessageEvent.OnMessageUpdate, message)
|
||||||
|
},
|
||||||
|
error: async (err: any) => {
|
||||||
|
if (this.isCancelled || message.content.length) {
|
||||||
|
message.status = MessageStatus.Stopped
|
||||||
|
events.emit(MessageEvent.OnMessageUpdate, message)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
message.status = MessageStatus.Error
|
||||||
|
events.emit(MessageEvent.OnMessageUpdate, message)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stops the inference.
|
||||||
|
*/
|
||||||
|
onInferenceStopped() {
|
||||||
|
this.isCancelled = true
|
||||||
|
this.controller?.abort()
|
||||||
|
}
|
||||||
|
}
|
||||||
67
core/src/extensions/ai-engines/helpers/sse.ts
Normal file
67
core/src/extensions/ai-engines/helpers/sse.ts
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
import { Observable } from 'rxjs'
|
||||||
|
import { ModelRuntimeParams } from '../../../types'
|
||||||
|
/**
|
||||||
|
* Sends a request to the inference server to generate a response based on the recent messages.
|
||||||
|
* @param recentMessages - An array of recent messages to use as context for the inference.
|
||||||
|
* @returns An Observable that emits the generated response as a string.
|
||||||
|
*/
|
||||||
|
export function requestInference(
|
||||||
|
inferenceUrl: string,
|
||||||
|
recentMessages: any[],
|
||||||
|
model: {
|
||||||
|
id: string
|
||||||
|
parameters: ModelRuntimeParams
|
||||||
|
},
|
||||||
|
controller?: AbortController
|
||||||
|
): Observable<string> {
|
||||||
|
return new Observable((subscriber) => {
|
||||||
|
const requestBody = JSON.stringify({
|
||||||
|
messages: recentMessages,
|
||||||
|
model: model.id,
|
||||||
|
stream: true,
|
||||||
|
...model.parameters,
|
||||||
|
})
|
||||||
|
fetch(inferenceUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Access-Control-Allow-Origin': '*',
|
||||||
|
'Accept': model.parameters.stream ? 'text/event-stream' : 'application/json',
|
||||||
|
},
|
||||||
|
body: requestBody,
|
||||||
|
signal: controller?.signal,
|
||||||
|
})
|
||||||
|
.then(async (response) => {
|
||||||
|
if (model.parameters.stream === false) {
|
||||||
|
const data = await response.json()
|
||||||
|
subscriber.next(data.choices[0]?.message?.content ?? '')
|
||||||
|
} else {
|
||||||
|
const stream = response.body
|
||||||
|
const decoder = new TextDecoder('utf-8')
|
||||||
|
const reader = stream?.getReader()
|
||||||
|
let content = ''
|
||||||
|
|
||||||
|
while (true && reader) {
|
||||||
|
const { done, value } = await reader.read()
|
||||||
|
if (done) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
const text = decoder.decode(value)
|
||||||
|
const lines = text.trim().split('\n')
|
||||||
|
for (const line of lines) {
|
||||||
|
if (line.startsWith('data: ') && !line.includes('data: [DONE]')) {
|
||||||
|
const data = JSON.parse(line.replace('data: ', ''))
|
||||||
|
content += data.choices[0]?.delta?.content ?? ''
|
||||||
|
if (content.startsWith('assistant: ')) {
|
||||||
|
content = content.replace('assistant: ', '')
|
||||||
|
}
|
||||||
|
subscriber.next(content)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
subscriber.complete()
|
||||||
|
})
|
||||||
|
.catch((err) => subscriber.error(err))
|
||||||
|
})
|
||||||
|
}
|
||||||
3
core/src/extensions/ai-engines/index.ts
Normal file
3
core/src/extensions/ai-engines/index.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export * from './AIEngine'
|
||||||
|
export * from './OAIEngine'
|
||||||
|
export * from './LocalOAIEngine'
|
||||||
@ -28,3 +28,8 @@ export { ModelExtension } from './model'
|
|||||||
* Hugging Face extension for converting HF models to GGUF.
|
* Hugging Face extension for converting HF models to GGUF.
|
||||||
*/
|
*/
|
||||||
export { HuggingFaceExtension } from './huggingface'
|
export { HuggingFaceExtension } from './huggingface'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base AI Engines.
|
||||||
|
*/
|
||||||
|
export * from './ai-engines'
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { BaseExtension, ExtensionTypeEnum } from '../extension'
|
import { BaseExtension, ExtensionTypeEnum } from '../extension'
|
||||||
import { ImportingModel, Model, ModelInterface, OptionType } from '../index'
|
import { GpuSetting, ImportingModel, Model, ModelInterface, OptionType } from '../index'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Model extension for managing models.
|
* Model extension for managing models.
|
||||||
@ -14,6 +14,7 @@ export abstract class ModelExtension extends BaseExtension implements ModelInter
|
|||||||
|
|
||||||
abstract downloadModel(
|
abstract downloadModel(
|
||||||
model: Model,
|
model: Model,
|
||||||
|
gpuSettings?: GpuSetting,
|
||||||
network?: { proxy: string; ignoreSSL?: boolean }
|
network?: { proxy: string; ignoreSSL?: boolean }
|
||||||
): Promise<void>
|
): Promise<void>
|
||||||
abstract cancelModelDownload(modelId: string): Promise<void>
|
abstract cancelModelDownload(modelId: string): Promise<void>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { BaseExtension, ExtensionTypeEnum } from '../extension'
|
import { BaseExtension, ExtensionTypeEnum } from '../extension'
|
||||||
import { MonitoringInterface } from '../index'
|
import { GpuSetting, MonitoringInterface } from '../index'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Monitoring extension for system monitoring.
|
* Monitoring extension for system monitoring.
|
||||||
@ -13,6 +13,7 @@ export abstract class MonitoringExtension extends BaseExtension implements Monit
|
|||||||
return ExtensionTypeEnum.SystemMonitoring
|
return ExtensionTypeEnum.SystemMonitoring
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract getGpuSetting(): Promise<GpuSetting>
|
||||||
abstract getResourcesInfo(): Promise<any>
|
abstract getResourcesInfo(): Promise<any>
|
||||||
abstract getCurrentLoad(): Promise<any>
|
abstract getCurrentLoad(): Promise<any>
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import { getJanDataFolderPath } from '../../helper'
|
|||||||
import { DownloadManager } from '../../helper/download'
|
import { DownloadManager } from '../../helper/download'
|
||||||
import { createWriteStream, renameSync } from 'fs'
|
import { createWriteStream, renameSync } from 'fs'
|
||||||
import { Processor } from './Processor'
|
import { Processor } from './Processor'
|
||||||
import { DownloadState } from '../../../types'
|
import { DownloadRequest, DownloadState, NetworkConfig } from '../../../types'
|
||||||
|
|
||||||
export class Downloader implements Processor {
|
export class Downloader implements Processor {
|
||||||
observer?: Function
|
observer?: Function
|
||||||
@ -20,24 +20,27 @@ export class Downloader implements Processor {
|
|||||||
return func(this.observer, ...args)
|
return func(this.observer, ...args)
|
||||||
}
|
}
|
||||||
|
|
||||||
downloadFile(observer: any, url: string, localPath: string, network: any) {
|
downloadFile(observer: any, downloadRequest: DownloadRequest, network?: NetworkConfig) {
|
||||||
const request = require('request')
|
const request = require('request')
|
||||||
const progress = require('request-progress')
|
const progress = require('request-progress')
|
||||||
|
|
||||||
const strictSSL = !network?.ignoreSSL
|
const strictSSL = !network?.ignoreSSL
|
||||||
const proxy = network?.proxy?.startsWith('http') ? network.proxy : undefined
|
const proxy = network?.proxy?.startsWith('http') ? network.proxy : undefined
|
||||||
|
|
||||||
|
const { localPath, url } = downloadRequest
|
||||||
|
let normalizedPath = localPath
|
||||||
if (typeof localPath === 'string') {
|
if (typeof localPath === 'string') {
|
||||||
localPath = normalizeFilePath(localPath)
|
normalizedPath = normalizeFilePath(localPath)
|
||||||
}
|
}
|
||||||
const array = localPath.split(sep)
|
const array = normalizedPath.split(sep)
|
||||||
const fileName = array.pop() ?? ''
|
const fileName = array.pop() ?? ''
|
||||||
const modelId = array.pop() ?? ''
|
const modelId = array.pop() ?? ''
|
||||||
|
|
||||||
const destination = resolve(getJanDataFolderPath(), localPath)
|
const destination = resolve(getJanDataFolderPath(), normalizedPath)
|
||||||
const rq = request({ url, strictSSL, proxy })
|
const rq = request({ url, strictSSL, proxy })
|
||||||
|
|
||||||
// Put request to download manager instance
|
// Put request to download manager instance
|
||||||
DownloadManager.instance.setRequest(localPath, rq)
|
DownloadManager.instance.setRequest(normalizedPath, rq)
|
||||||
|
|
||||||
// Downloading file to a temp file first
|
// Downloading file to a temp file first
|
||||||
const downloadingTempFile = `${destination}.download`
|
const downloadingTempFile = `${destination}.download`
|
||||||
@ -56,16 +59,25 @@ export class Downloader implements Processor {
|
|||||||
total: 0,
|
total: 0,
|
||||||
transferred: 0,
|
transferred: 0,
|
||||||
},
|
},
|
||||||
|
children: [],
|
||||||
downloadState: 'downloading',
|
downloadState: 'downloading',
|
||||||
|
extensionId: downloadRequest.extensionId,
|
||||||
|
downloadType: downloadRequest.downloadType,
|
||||||
|
localPath: normalizedPath,
|
||||||
}
|
}
|
||||||
DownloadManager.instance.downloadProgressMap[modelId] = initialDownloadState
|
DownloadManager.instance.downloadProgressMap[modelId] = initialDownloadState
|
||||||
|
|
||||||
|
if (downloadRequest.downloadType === 'extension') {
|
||||||
|
observer?.(DownloadEvent.onFileDownloadUpdate, initialDownloadState)
|
||||||
|
}
|
||||||
|
|
||||||
progress(rq, {})
|
progress(rq, {})
|
||||||
.on('progress', (state: any) => {
|
.on('progress', (state: any) => {
|
||||||
|
const currentDownloadState = DownloadManager.instance.downloadProgressMap[modelId]
|
||||||
const downloadState: DownloadState = {
|
const downloadState: DownloadState = {
|
||||||
|
...currentDownloadState,
|
||||||
...state,
|
...state,
|
||||||
modelId,
|
fileName: fileName,
|
||||||
fileName,
|
|
||||||
downloadState: 'downloading',
|
downloadState: 'downloading',
|
||||||
}
|
}
|
||||||
console.debug('progress: ', downloadState)
|
console.debug('progress: ', downloadState)
|
||||||
@ -76,22 +88,22 @@ export class Downloader implements Processor {
|
|||||||
const currentDownloadState = DownloadManager.instance.downloadProgressMap[modelId]
|
const currentDownloadState = DownloadManager.instance.downloadProgressMap[modelId]
|
||||||
const downloadState: DownloadState = {
|
const downloadState: DownloadState = {
|
||||||
...currentDownloadState,
|
...currentDownloadState,
|
||||||
|
fileName: fileName,
|
||||||
error: error.message,
|
error: error.message,
|
||||||
downloadState: 'error',
|
downloadState: 'error',
|
||||||
}
|
}
|
||||||
if (currentDownloadState) {
|
|
||||||
DownloadManager.instance.downloadProgressMap[modelId] = downloadState
|
|
||||||
}
|
|
||||||
|
|
||||||
observer?.(DownloadEvent.onFileDownloadError, downloadState)
|
observer?.(DownloadEvent.onFileDownloadError, downloadState)
|
||||||
|
DownloadManager.instance.downloadProgressMap[modelId] = downloadState
|
||||||
})
|
})
|
||||||
.on('end', () => {
|
.on('end', () => {
|
||||||
const currentDownloadState = DownloadManager.instance.downloadProgressMap[modelId]
|
const currentDownloadState = DownloadManager.instance.downloadProgressMap[modelId]
|
||||||
if (currentDownloadState && DownloadManager.instance.networkRequests[localPath]) {
|
if (currentDownloadState && DownloadManager.instance.networkRequests[normalizedPath]) {
|
||||||
// Finished downloading, rename temp file to actual file
|
// Finished downloading, rename temp file to actual file
|
||||||
renameSync(downloadingTempFile, destination)
|
renameSync(downloadingTempFile, destination)
|
||||||
const downloadState: DownloadState = {
|
const downloadState: DownloadState = {
|
||||||
...currentDownloadState,
|
...currentDownloadState,
|
||||||
|
fileName: fileName,
|
||||||
downloadState: 'end',
|
downloadState: 'end',
|
||||||
}
|
}
|
||||||
observer?.(DownloadEvent.onFileDownloadSuccess, downloadState)
|
observer?.(DownloadEvent.onFileDownloadSuccess, downloadState)
|
||||||
|
|||||||
@ -1,7 +1,16 @@
|
|||||||
import fs from 'fs'
|
import {
|
||||||
|
existsSync,
|
||||||
|
readdirSync,
|
||||||
|
readFileSync,
|
||||||
|
writeFileSync,
|
||||||
|
mkdirSync,
|
||||||
|
appendFileSync,
|
||||||
|
createWriteStream,
|
||||||
|
rmdirSync,
|
||||||
|
} from 'fs'
|
||||||
import { JanApiRouteConfiguration, RouteConfiguration } from './configuration'
|
import { JanApiRouteConfiguration, RouteConfiguration } from './configuration'
|
||||||
import { join } from 'path'
|
import { join } from 'path'
|
||||||
import { ContentType, MessageStatus, Model, ThreadMessage } from '../../../../index'
|
import { ContentType, MessageStatus, Model, ThreadMessage } from '../../../../types'
|
||||||
import { getEngineConfiguration, getJanDataFolderPath } from '../../../helper'
|
import { getEngineConfiguration, getJanDataFolderPath } from '../../../helper'
|
||||||
import { DEFAULT_CHAT_COMPLETION_URL } from './consts'
|
import { DEFAULT_CHAT_COMPLETION_URL } from './consts'
|
||||||
|
|
||||||
@ -9,12 +18,12 @@ import { DEFAULT_CHAT_COMPLETION_URL } from './consts'
|
|||||||
export const getBuilder = async (configuration: RouteConfiguration) => {
|
export const getBuilder = async (configuration: RouteConfiguration) => {
|
||||||
const directoryPath = join(getJanDataFolderPath(), configuration.dirName)
|
const directoryPath = join(getJanDataFolderPath(), configuration.dirName)
|
||||||
try {
|
try {
|
||||||
if (!fs.existsSync(directoryPath)) {
|
if (!existsSync(directoryPath)) {
|
||||||
console.debug('model folder not found')
|
console.debug('model folder not found')
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
|
||||||
const files: string[] = fs.readdirSync(directoryPath)
|
const files: string[] = readdirSync(directoryPath)
|
||||||
|
|
||||||
const allDirectories: string[] = []
|
const allDirectories: string[] = []
|
||||||
for (const file of files) {
|
for (const file of files) {
|
||||||
@ -46,8 +55,8 @@ export const getBuilder = async (configuration: RouteConfiguration) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const readModelMetadata = (path: string): string | undefined => {
|
const readModelMetadata = (path: string): string | undefined => {
|
||||||
if (fs.existsSync(path)) {
|
if (existsSync(path)) {
|
||||||
return fs.readFileSync(path, 'utf-8')
|
return readFileSync(path, 'utf-8')
|
||||||
} else {
|
} else {
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
@ -81,7 +90,7 @@ export const deleteBuilder = async (configuration: RouteConfiguration, id: strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
const objectPath = join(directoryPath, id)
|
const objectPath = join(directoryPath, id)
|
||||||
fs.rmdirSync(objectPath, { recursive: true })
|
rmdirSync(objectPath, { recursive: true })
|
||||||
return {
|
return {
|
||||||
id: id,
|
id: id,
|
||||||
object: configuration.delete.object,
|
object: configuration.delete.object,
|
||||||
@ -96,20 +105,19 @@ export const getMessages = async (threadId: string): Promise<ThreadMessage[]> =>
|
|||||||
const threadDirPath = join(getJanDataFolderPath(), 'threads', threadId)
|
const threadDirPath = join(getJanDataFolderPath(), 'threads', threadId)
|
||||||
const messageFile = 'messages.jsonl'
|
const messageFile = 'messages.jsonl'
|
||||||
try {
|
try {
|
||||||
const files: string[] = fs.readdirSync(threadDirPath)
|
const files: string[] = readdirSync(threadDirPath)
|
||||||
if (!files.includes(messageFile)) {
|
if (!files.includes(messageFile)) {
|
||||||
console.error(`${threadDirPath} not contains message file`)
|
console.error(`${threadDirPath} not contains message file`)
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
|
||||||
const messageFilePath = join(threadDirPath, messageFile)
|
const messageFilePath = join(threadDirPath, messageFile)
|
||||||
if (!fs.existsSync(messageFilePath)) {
|
if (!existsSync(messageFilePath)) {
|
||||||
console.debug('message file not found')
|
console.debug('message file not found')
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
|
||||||
const lines = fs
|
const lines = readFileSync(messageFilePath, 'utf-8')
|
||||||
.readFileSync(messageFilePath, 'utf-8')
|
|
||||||
.toString()
|
.toString()
|
||||||
.split('\n')
|
.split('\n')
|
||||||
.filter((line: any) => line !== '')
|
.filter((line: any) => line !== '')
|
||||||
@ -157,11 +165,11 @@ export const createThread = async (thread: any) => {
|
|||||||
const threadDirPath = join(getJanDataFolderPath(), 'threads', updatedThread.id)
|
const threadDirPath = join(getJanDataFolderPath(), 'threads', updatedThread.id)
|
||||||
const threadJsonPath = join(threadDirPath, threadMetadataFileName)
|
const threadJsonPath = join(threadDirPath, threadMetadataFileName)
|
||||||
|
|
||||||
if (!fs.existsSync(threadDirPath)) {
|
if (!existsSync(threadDirPath)) {
|
||||||
fs.mkdirSync(threadDirPath)
|
mkdirSync(threadDirPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
await fs.writeFileSync(threadJsonPath, JSON.stringify(updatedThread, null, 2))
|
await writeFileSync(threadJsonPath, JSON.stringify(updatedThread, null, 2))
|
||||||
return updatedThread
|
return updatedThread
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return {
|
return {
|
||||||
@ -191,7 +199,7 @@ export const updateThread = async (threadId: string, thread: any) => {
|
|||||||
const threadDirPath = join(getJanDataFolderPath(), 'threads', updatedThread.id)
|
const threadDirPath = join(getJanDataFolderPath(), 'threads', updatedThread.id)
|
||||||
const threadJsonPath = join(threadDirPath, threadMetadataFileName)
|
const threadJsonPath = join(threadDirPath, threadMetadataFileName)
|
||||||
|
|
||||||
await fs.writeFileSync(threadJsonPath, JSON.stringify(updatedThread, null, 2))
|
await writeFileSync(threadJsonPath, JSON.stringify(updatedThread, null, 2))
|
||||||
return updatedThread
|
return updatedThread
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return {
|
return {
|
||||||
@ -233,10 +241,10 @@ export const createMessage = async (threadId: string, message: any) => {
|
|||||||
const threadDirPath = join(getJanDataFolderPath(), 'threads', threadId)
|
const threadDirPath = join(getJanDataFolderPath(), 'threads', threadId)
|
||||||
const threadMessagePath = join(threadDirPath, threadMessagesFileName)
|
const threadMessagePath = join(threadDirPath, threadMessagesFileName)
|
||||||
|
|
||||||
if (!fs.existsSync(threadDirPath)) {
|
if (!existsSync(threadDirPath)) {
|
||||||
fs.mkdirSync(threadDirPath)
|
mkdirSync(threadDirPath)
|
||||||
}
|
}
|
||||||
fs.appendFileSync(threadMessagePath, JSON.stringify(threadMessage) + '\n')
|
appendFileSync(threadMessagePath, JSON.stringify(threadMessage) + '\n')
|
||||||
return threadMessage
|
return threadMessage
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return {
|
return {
|
||||||
@ -259,8 +267,8 @@ export const downloadModel = async (
|
|||||||
}
|
}
|
||||||
|
|
||||||
const directoryPath = join(getJanDataFolderPath(), 'models', modelId)
|
const directoryPath = join(getJanDataFolderPath(), 'models', modelId)
|
||||||
if (!fs.existsSync(directoryPath)) {
|
if (!existsSync(directoryPath)) {
|
||||||
fs.mkdirSync(directoryPath)
|
mkdirSync(directoryPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
// path to model binary
|
// path to model binary
|
||||||
@ -281,7 +289,7 @@ export const downloadModel = async (
|
|||||||
.on('end', function () {
|
.on('end', function () {
|
||||||
console.debug('end')
|
console.debug('end')
|
||||||
})
|
})
|
||||||
.pipe(fs.createWriteStream(modelBinaryPath))
|
.pipe(createWriteStream(modelBinaryPath))
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -41,7 +41,7 @@ const runModel = async (modelId: string, settingParams?: ModelSettingParams): Pr
|
|||||||
const modelFolderFullPath = join(janDataFolderPath, 'models', modelId)
|
const modelFolderFullPath = join(janDataFolderPath, 'models', modelId)
|
||||||
|
|
||||||
if (!fs.existsSync(modelFolderFullPath)) {
|
if (!fs.existsSync(modelFolderFullPath)) {
|
||||||
throw `Model not found: ${modelId}`
|
throw new Error(`Model not found: ${modelId}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
const files: string[] = fs.readdirSync(modelFolderFullPath)
|
const files: string[] = fs.readdirSync(modelFolderFullPath)
|
||||||
@ -53,7 +53,7 @@ const runModel = async (modelId: string, settingParams?: ModelSettingParams): Pr
|
|||||||
const modelMetadata: Model = JSON.parse(fs.readFileSync(modelMetadataPath, 'utf-8'))
|
const modelMetadata: Model = JSON.parse(fs.readFileSync(modelMetadataPath, 'utf-8'))
|
||||||
|
|
||||||
if (!ggufBinFile) {
|
if (!ggufBinFile) {
|
||||||
throw 'No GGUF model file found'
|
throw new Error('No GGUF model file found')
|
||||||
}
|
}
|
||||||
const modelBinaryPath = join(modelFolderFullPath, ggufBinFile)
|
const modelBinaryPath = join(modelFolderFullPath, ggufBinFile)
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ const runModel = async (modelId: string, settingParams?: ModelSettingParams): Pr
|
|||||||
const promptTemplate = modelMetadata.settings.prompt_template
|
const promptTemplate = modelMetadata.settings.prompt_template
|
||||||
const prompt = promptTemplateConverter(promptTemplate)
|
const prompt = promptTemplateConverter(promptTemplate)
|
||||||
if (prompt?.error) {
|
if (prompt?.error) {
|
||||||
return Promise.reject(prompt.error)
|
throw new Error(prompt.error)
|
||||||
}
|
}
|
||||||
nitroModelSettings.system_prompt = prompt.system_prompt
|
nitroModelSettings.system_prompt = prompt.system_prompt
|
||||||
nitroModelSettings.user_prompt = prompt.user_prompt
|
nitroModelSettings.user_prompt = prompt.user_prompt
|
||||||
|
|||||||
@ -4,13 +4,13 @@ import fs from 'fs'
|
|||||||
import os from 'os'
|
import os from 'os'
|
||||||
import childProcess from 'child_process'
|
import childProcess from 'child_process'
|
||||||
|
|
||||||
// TODO: move this to core
|
|
||||||
const configurationFileName = 'settings.json'
|
const configurationFileName = 'settings.json'
|
||||||
|
|
||||||
// TODO: do no specify app name in framework module
|
// TODO: do no specify app name in framework module
|
||||||
const defaultJanDataFolder = join(os.homedir(), 'jan')
|
const defaultJanDataFolder = join(os.homedir(), 'jan')
|
||||||
const defaultAppConfig: AppConfiguration = {
|
const defaultAppConfig: AppConfiguration = {
|
||||||
data_folder: defaultJanDataFolder,
|
data_folder: defaultJanDataFolder,
|
||||||
|
quick_ask: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
export type AppConfiguration = {
|
export type AppConfiguration = {
|
||||||
data_folder: string
|
data_folder: string
|
||||||
|
quick_ask: boolean
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,16 +4,43 @@ export type FileStat = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type DownloadState = {
|
export type DownloadState = {
|
||||||
modelId: string
|
modelId: string // TODO: change to download id
|
||||||
fileName: string
|
fileName: string
|
||||||
time: DownloadTime
|
time: DownloadTime
|
||||||
speed: number
|
speed: number
|
||||||
percent: number
|
|
||||||
|
|
||||||
|
percent: number
|
||||||
size: DownloadSize
|
size: DownloadSize
|
||||||
children?: DownloadState[]
|
|
||||||
error?: string
|
|
||||||
downloadState: 'downloading' | 'error' | 'end'
|
downloadState: 'downloading' | 'error' | 'end'
|
||||||
|
children?: DownloadState[]
|
||||||
|
|
||||||
|
error?: string
|
||||||
|
extensionId?: string
|
||||||
|
downloadType?: DownloadType
|
||||||
|
localPath?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export type DownloadType = 'model' | 'extension'
|
||||||
|
|
||||||
|
export type DownloadRequest = {
|
||||||
|
/**
|
||||||
|
* The URL to download the file from.
|
||||||
|
*/
|
||||||
|
url: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The local path to save the file to.
|
||||||
|
*/
|
||||||
|
localPath: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The extension ID of the extension that initiated the download.
|
||||||
|
*
|
||||||
|
* Can be extension name.
|
||||||
|
*/
|
||||||
|
extensionId?: string
|
||||||
|
|
||||||
|
downloadType?: DownloadType
|
||||||
}
|
}
|
||||||
|
|
||||||
type DownloadTime = {
|
type DownloadTime = {
|
||||||
|
|||||||
@ -29,6 +29,9 @@ export type ThreadMessage = {
|
|||||||
metadata?: Record<string, unknown>
|
metadata?: Record<string, unknown>
|
||||||
|
|
||||||
type?: string
|
type?: string
|
||||||
|
|
||||||
|
/** The error code which explain what error type. Used in conjunction with MessageStatus.Error */
|
||||||
|
error_code?: ErrorCode
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -77,6 +80,12 @@ export enum MessageStatus {
|
|||||||
Stopped = 'stopped',
|
Stopped = 'stopped',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum ErrorCode {
|
||||||
|
InvalidApiKey = 'invalid_api_key',
|
||||||
|
|
||||||
|
Unknown = 'unknown',
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The content type of the message.
|
* The content type of the message.
|
||||||
*/
|
*/
|
||||||
|
|||||||
7
core/src/types/miscellaneous/appUpdate.ts
Normal file
7
core/src/types/miscellaneous/appUpdate.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
export type AppUpdateInfo = {
|
||||||
|
total: number
|
||||||
|
delta: number
|
||||||
|
transferred: number
|
||||||
|
percent: number
|
||||||
|
bytesPerSecond: number
|
||||||
|
}
|
||||||
8
core/src/types/miscellaneous/fileDownloadRequest.ts
Normal file
8
core/src/types/miscellaneous/fileDownloadRequest.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
export type FileDownloadRequest = {
|
||||||
|
downloadId: string
|
||||||
|
url: string
|
||||||
|
localPath: string
|
||||||
|
fileName: string
|
||||||
|
displayName: string
|
||||||
|
metadata: Record<string, string | number>
|
||||||
|
}
|
||||||
@ -1,2 +1,5 @@
|
|||||||
export * from './systemResourceInfo'
|
export * from './systemResourceInfo'
|
||||||
export * from './promptTemplate'
|
export * from './promptTemplate'
|
||||||
|
export * from './appUpdate'
|
||||||
|
export * from './fileDownloadRequest'
|
||||||
|
export * from './networkConfig'
|
||||||
4
core/src/types/miscellaneous/networkConfig.ts
Normal file
4
core/src/types/miscellaneous/networkConfig.ts
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export type NetworkConfig = {
|
||||||
|
proxy?: string
|
||||||
|
ignoreSSL?: boolean
|
||||||
|
}
|
||||||
@ -2,3 +2,31 @@ export type SystemResourceInfo = {
|
|||||||
numCpuPhysicalCore: number
|
numCpuPhysicalCore: number
|
||||||
memAvailable: number
|
memAvailable: number
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type RunMode = 'cpu' | 'gpu'
|
||||||
|
|
||||||
|
export type GpuSetting = {
|
||||||
|
notify: boolean
|
||||||
|
run_mode: RunMode
|
||||||
|
nvidia_driver: {
|
||||||
|
exist: boolean
|
||||||
|
version: string
|
||||||
|
}
|
||||||
|
cuda: {
|
||||||
|
exist: boolean
|
||||||
|
version: string
|
||||||
|
}
|
||||||
|
gpus: GpuSettingInfo[]
|
||||||
|
gpu_highest_vram: string
|
||||||
|
gpus_in_use: string[]
|
||||||
|
is_initial: boolean
|
||||||
|
// TODO: This needs to be set based on user toggle in settings
|
||||||
|
vulkan: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
export type GpuSettingInfo = {
|
||||||
|
id: string
|
||||||
|
vram: string
|
||||||
|
name: string
|
||||||
|
arch?: string
|
||||||
|
}
|
||||||
|
|||||||
@ -7,7 +7,7 @@ export type ModelInfo = {
|
|||||||
settings: ModelSettingParams
|
settings: ModelSettingParams
|
||||||
parameters: ModelRuntimeParams
|
parameters: ModelRuntimeParams
|
||||||
engine?: InferenceEngine
|
engine?: InferenceEngine
|
||||||
proxyEngine?: InferenceEngine
|
proxy_model?: InferenceEngine
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -19,6 +19,7 @@ export enum InferenceEngine {
|
|||||||
nitro = 'nitro',
|
nitro = 'nitro',
|
||||||
openai = 'openai',
|
openai = 'openai',
|
||||||
triton_trtllm = 'triton_trtllm',
|
triton_trtllm = 'triton_trtllm',
|
||||||
|
nitro_tensorrt_llm = 'nitro-tensorrt-llm',
|
||||||
|
|
||||||
tool_retrieval_enabled = 'tool_retrieval_enabled',
|
tool_retrieval_enabled = 'tool_retrieval_enabled',
|
||||||
}
|
}
|
||||||
@ -93,12 +94,7 @@ export type Model = {
|
|||||||
*/
|
*/
|
||||||
engine: InferenceEngine
|
engine: InferenceEngine
|
||||||
|
|
||||||
proxyEngine?: InferenceEngine
|
proxy_model?: InferenceEngine
|
||||||
|
|
||||||
/**
|
|
||||||
* Is multimodal or not.
|
|
||||||
*/
|
|
||||||
visionModel?: boolean
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ModelMetadata = {
|
export type ModelMetadata = {
|
||||||
@ -124,6 +120,8 @@ export type ModelSettingParams = {
|
|||||||
llama_model_path?: string
|
llama_model_path?: string
|
||||||
mmproj?: string
|
mmproj?: string
|
||||||
cont_batching?: boolean
|
cont_batching?: boolean
|
||||||
|
vision_model?: boolean
|
||||||
|
text_model?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -141,3 +139,7 @@ export type ModelRuntimeParams = {
|
|||||||
presence_penalty?: number
|
presence_penalty?: number
|
||||||
engine?: string
|
engine?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ModelInitFailed = Model & {
|
||||||
|
error: Error
|
||||||
|
}
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import { GpuSetting } from '../miscellaneous'
|
||||||
import { Model } from './modelEntity'
|
import { Model } from './modelEntity'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -10,7 +11,11 @@ export interface ModelInterface {
|
|||||||
* @param network - Optional object to specify proxy/whether to ignore SSL certificates.
|
* @param network - Optional object to specify proxy/whether to ignore SSL certificates.
|
||||||
* @returns A Promise that resolves when the model has been downloaded.
|
* @returns A Promise that resolves when the model has been downloaded.
|
||||||
*/
|
*/
|
||||||
downloadModel(model: Model, network?: { ignoreSSL?: boolean; proxy?: string }): Promise<void>
|
downloadModel(
|
||||||
|
model: Model,
|
||||||
|
gpuSettings?: GpuSetting,
|
||||||
|
network?: { ignoreSSL?: boolean; proxy?: string }
|
||||||
|
): Promise<void>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cancels the download of a specific model.
|
* Cancels the download of a specific model.
|
||||||
|
|||||||
@ -1 +1,2 @@
|
|||||||
export * from './monitoringInterface'
|
export * from './monitoringInterface'
|
||||||
|
export * from './resourceInfo'
|
||||||
|
|||||||
6
core/src/types/monitoring/resourceInfo.ts
Normal file
6
core/src/types/monitoring/resourceInfo.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
export type ResourceInfo = {
|
||||||
|
mem: {
|
||||||
|
totalMemory: number
|
||||||
|
usedMemory: number
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -13,7 +13,7 @@
|
|||||||
"declarationDir": "dist/types",
|
"declarationDir": "dist/types",
|
||||||
"outDir": "dist/lib",
|
"outDir": "dist/lib",
|
||||||
"importHelpers": true,
|
"importHelpers": true,
|
||||||
"types": ["@types/jest"]
|
"types": ["@types/jest"],
|
||||||
},
|
},
|
||||||
"include": ["src"]
|
"include": ["src"],
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,18 +1,20 @@
|
|||||||
# Website
|
# Website & Docs
|
||||||
|
|
||||||
This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.
|
This website is built using [Docusaurus 3.0](https://docusaurus.io/), a modern static website generator.
|
||||||
|
|
||||||
## Information Architecture
|
### Information Architecture
|
||||||
|
|
||||||
We try to **keep routes consistent** to maintain SEO.
|
We try to **keep routes consistent** to maintain SEO.
|
||||||
|
|
||||||
- `/guides`: Guides on how to use the Jan application, with GIFs. For end users who are directly using Jan. Always assume users are not technical.
|
- **`/guides/`**: Guides on how to use the Jan application. For end users who are directly using Jan.
|
||||||
|
|
||||||
- `/developer`: Developer docs on how to extend Jan. These pages are about what people can build with our software. We must hide the complexity of HOW the app is built, but explain just enough of the high level architecture so devs know enough to build on top of it.
|
- **`/developer/`**: Developer docs on how to extend Jan. These pages are about what people can build with our software.
|
||||||
|
|
||||||
- `/api-reference`: Reference documentation, written in Swagger/OpenAPI format.
|
- **`/api-reference/`**: Reference documentation for the Jan API server, written in Swagger/OpenAPI format.
|
||||||
|
|
||||||
- `/docs`: Engineering specs and product specs, i.e. HOW the app is built. Mostly for internal reference and for our core contributors who are building the SDK itself.
|
- **`/changelog/`**: A list of changes made to the Jan application with each release.
|
||||||
|
|
||||||
|
- **`/blog/`**: A blog for the Jan application.
|
||||||
|
|
||||||
### Sidebar Autogeneration
|
### Sidebar Autogeneration
|
||||||
|
|
||||||
@ -20,34 +22,36 @@ The order of each page is either explicitly defined in `sidebar.js` or follows t
|
|||||||
|
|
||||||
Important slugs are hardcoded at the document level (and shouldn't be rerouted):
|
Important slugs are hardcoded at the document level (and shouldn't be rerouted):
|
||||||
|
|
||||||
```md
|
```
|
||||||
---
|
---
|
||||||
title: Overview
|
title: Overview
|
||||||
slug: /docs
|
slug: /docs
|
||||||
---
|
---
|
||||||
```
|
```
|
||||||
|
|
||||||
## Contributing
|
## How to Contribute
|
||||||
|
|
||||||
### Installation
|
Refer to the [Contributing Guide](https://github.com/janhq/jan/blob/dev/CONTRIBUTING.md) for more comprehensive information on how to contribute to the Jan project.
|
||||||
|
|
||||||
```
|
### Pre-requisites and Installation
|
||||||
$ yarn
|
|
||||||
```
|
|
||||||
|
|
||||||
### Local Development
|
- [Node.js](https://nodejs.org/en/) (version 20.0.0 or higher)
|
||||||
|
- [yarn](https://yarnpkg.com/) (version 1.22.0 or higher)
|
||||||
|
|
||||||
```
|
#### Installation
|
||||||
$ cp .env.example .env
|
|
||||||
$ yarn start
|
```bash
|
||||||
|
cd jan/docs
|
||||||
|
yarn install
|
||||||
|
yarn start
|
||||||
```
|
```
|
||||||
|
|
||||||
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
|
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
|
||||||
|
|
||||||
### Build
|
#### Build
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ yarn build
|
yarn build
|
||||||
```
|
```
|
||||||
|
|
||||||
This command generates static content into the `build` directory and can be served using any static contents hosting service.
|
This command generates static content into the `build` directory and can be served using any static contents hosting service.
|
||||||
@ -56,25 +60,27 @@ This command generates static content into the `build` directory and can be serv
|
|||||||
|
|
||||||
Using SSH:
|
Using SSH:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ USE_SSH=true yarn deploy
|
USE_SSH=true yarn deploy
|
||||||
```
|
```
|
||||||
|
|
||||||
Not using SSH:
|
Not using SSH:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ GIT_USER=<Your GitHub username> yarn deploy
|
GIT_USER=<Your GitHub username> yarn deploy
|
||||||
```
|
```
|
||||||
|
|
||||||
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
|
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
|
||||||
|
|
||||||
### Preview URL, Pre-release and Publishing Documentation
|
### Preview URL, Pre-release and Publishing Documentation
|
||||||
|
|
||||||
When a PR is created, the preview URL will be automatically commented on the PR.
|
- When a pull request is created, the preview URL will be automatically commented on the pull request.
|
||||||
|
|
||||||
The documentation will then be published to [https://jan.ai/](https://jan.ai/) when the PR is merged to `main`.
|
- The documentation will then be published to [https://dev.jan.ai/](https://dev.jan.ai/) when the pull request is merged to `dev`.
|
||||||
|
|
||||||
|
- Our open-source maintainers will sync the updated content from `dev` to `docs` branch, which will then be published to [https://jan.ai/](https://jan.ai/).
|
||||||
|
|
||||||
### Additional Plugins
|
### Additional Plugins
|
||||||
|
|
||||||
- @docusaurus/theme-live-codeblock
|
- @docusaurus/theme-live-codeblock
|
||||||
- [Redocusaurus](https://redocusaurus.vercel.app/): manually upload swagger files at `/openapi/OpenAPISpec.json`
|
- [Redocusaurus](https://redocusaurus.vercel.app/): manually upload swagger files at `/openapi/jan.yaml` to update the API reference documentation.
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: About Jan
|
title: About Jan
|
||||||
slug: /about
|
slug: /about
|
||||||
description: Jan is a productivity tool to customize AI to your needs and workflows.
|
description: Jan is a desktop application that turns computers into thinking machines.
|
||||||
keywords:
|
keywords:
|
||||||
[
|
[
|
||||||
Jan AI,
|
Jan AI,
|
||||||
@ -12,45 +12,74 @@ keywords:
|
|||||||
conversational AI,
|
conversational AI,
|
||||||
no-subscription fee,
|
no-subscription fee,
|
||||||
large language model,
|
large language model,
|
||||||
|
about Jan,
|
||||||
|
desktop application,
|
||||||
|
thinking machine,
|
||||||
]
|
]
|
||||||
---
|
---
|
||||||
|
|
||||||
Jan is a [open-source](https://en.wikipedia.org/wiki/Open_source), [local-first](https://www.inkandswitch.com/local-first/) tool to [create, customize and use AI](https://www.gatesnotes.com/AI-agents) for everyday tasks.
|
Jan turns computers into thinking machines to change how we use them.
|
||||||
|
Jan is created and maintained by Jan Labs, a robotics company.
|
||||||
|
|
||||||
You can:
|
With Jan, you can:
|
||||||
|
|
||||||
- Run locally using [open-source LLMs](https://huggingface.co/models?pipeline_tag=text-generation) or connect to cloud AIs like [ChatGPT](https://openai.com/blog/openai-api) or [Google](https://ai.google.dev/)
|
- Run [open-source LLMs](https://huggingface.co/models?pipeline_tag=text-generation) locally or connect to cloud AIs like [ChatGPT](https://openai.com/blog/openai-api) or [Google](https://ai.google.dev/).
|
||||||
- Fine-tune AI with specific knowledge
|
- Fine-tune AI with specific knowledge.
|
||||||
- Search the web and other databases
|
- Supercharge your productivity by leveraging AI.
|
||||||
- Connect AI to your everyday tools and (with your permission) do work on your behalf
|
- Search the web and databases.
|
||||||
|
- Integrate AI with everyday tools to work on your behalf (with permission).
|
||||||
|
- Customize and add features with Extensions.
|
||||||
|
|
||||||
Longer-term, Jan is building a cognitive framework for future robots. We envision a world where we have personal or company robots that we continually improve and customize, growing together with us.
|
:::tip
|
||||||
|
|
||||||
|
Jan aims for long-term human-robot collaboration, envisioning AI as a harmonious extension of human capabilities. Our goal is to build customizable robots that we continually improve and customize, growing together.
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Why do we exist
|
## Jan’s principles
|
||||||
|
|
||||||
At Jan, our mission is to advance human-machine collaboration. We achieve this through delivering the best open-source, local-first tools to allow users to run, customize and tinker with AI.
|
- **Ownership**: Jan is committed to developing a product that fully belongs to users. You're the true owner, free from data tracking and storage by us.
|
||||||
|
- **Privacy**: Jan works locally by default, allowing use without an internet connection. Your data stays on your device in a universal format, giving you complete privacy control.
|
||||||
|
- **100% User Supported**: Every user can access, develop, and customize Jan's codebases to suit their needs.
|
||||||
|
- **Rejecting Dark Patterns**: We never use tricks to extract more money or lock you into an ecosystem.
|
||||||
|
|
||||||
## What's different about it?
|
## Why do we exist?
|
||||||
|
|
||||||
| | Status Quo | Jan |
|
> _"I do not fear computers. I fear the lack of them." - Isaac Asimov_
|
||||||
| ---------------------------------------------------------- | -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| Ownership | AI Monopolies owned by Big Tech | AI that you own and control |
|
|
||||||
| Openness? | Closed-source | [Open-source (AGPLv3)](https://github.com/janhq/jan/blob/main/LICENSE) |
|
|
||||||
| Your role | Consume | Create, Tinker and Customize |
|
|
||||||
| Approach | Cloud | [Local-first](https://www.inkandswitch.com/local-first/), running 100% on your devices |
|
|
||||||
| Data | Data stored on their servers | Data stored in your local filesystem in open, non-proprietary file formats |
|
|
||||||
| Privacy | 😂 | Runs 100% on your own machine, predictably, privately and offline |
|
|
||||||
| Transparency | "Black Box" | Runs predictability with code available to tinker and customize |
|
|
||||||
| What happens if there's an outage or goes out of business? | Your life's work held hostage in the cloud in proprietary data formats[^1] | Continues to run 100% on your computer, your data is safe in your local folder |
|
|
||||||
| Driving Philosophy | Monetize your users | [Privacy as a human right](https://en.wikipedia.org/wiki/Right_to_privacy) and the [Right to Repair](https://www.repair.org/) |
|
|
||||||
|
|
||||||
## How do I get it?
|
Jan was founded on the belief that AI should coexist with humans, not replace them. Our mission is to democratize AI access, ensuring everyone can easily utilize it with full ownership and control over their data, free from privacy concerns.
|
||||||
|
|
||||||
You can install and start using Jan in less than 5 minutes, from [jan.ai](https://jan.ai) or our [Github repo](https://github.com/janhq/jan).
|
### What are the things Jan committed on?
|
||||||
|
|
||||||
You can read the [User Guide](/docs/user-guide) if you need some help to get started.
|
We are committed to creating open, local-first products that extend individual freedom, rejecting dark patterns and ecosystem lock-ins, and embracing an open-source ethos.
|
||||||
|
|
||||||
|
#### What's different about it?
|
||||||
|
|
||||||
|
| | Status Quo | Jan |
|
||||||
|
| --------------------- | -------------------------- | ---------------------------------------------------------------------- |
|
||||||
|
| **Ownership** | Owned by Big Tech | Fully owned by you |
|
||||||
|
| **Openness** | Closed-source | [Open-source (AGPLv3)](https://github.com/janhq/jan/blob/main/LICENSE) |
|
||||||
|
| **Your Role** | Consumer | Creator |
|
||||||
|
| **Approach** | Cloud-based | [Local-first](https://www.inkandswitch.com/local-first/) |
|
||||||
|
| **Data Handling** | Stored on external servers | Stored locally, openly accessible |
|
||||||
|
| **Privacy** | Questionable | Private and offline |
|
||||||
|
| **Transparency** | Opaque "Black Box" | Open-source and customizable |
|
||||||
|
| **Outage Resilience** | Potential data hostage | Continues to work on your device |
|
||||||
|
| **Philosophy** | User monetization | Empowerment with the right to repair |
|
||||||
|
|
||||||
|
## How we work
|
||||||
|
|
||||||
|
Jan is an open-source product with transparent development and future features. Users have the right to modify and customize Jan. We are committed to building an open-source AI ecosystem.
|
||||||
|
|
||||||
|
Jan is building in public using GitHub, where anyone is welcome to join. Key resources include Jan's [Kanban](https://github.com/orgs/janhq/projects/5/views/7) and Jan's [Roadmap](https://github.com/orgs/janhq/projects/5/views/29).
|
||||||
|
|
||||||
|
Jan has a fully-remote team, primarily based in the APAC timezone, and we use Discord and GitHub for collaboration. Our community is central to our operations, and we embrace asynchronous work. We hold meetings only for synchronization and vision sharing, using [Excalidraw](https://excalidraw.com/) or [Miro](https://miro.com/) for visualization and sharing notes on Discord for alignment. We also use [HackMD](https://hackmd.io/) to document our ideas and build a Jan library.
|
||||||
|
|
||||||
|
## How to get it?
|
||||||
|
|
||||||
|
You can install and start using Jan in less than 5 minutes, from [Jan.ai](https://jan.ai) or our [Github repo](https://github.com/janhq/jan).
|
||||||
|
|
||||||
## What license is the code under?
|
## What license is the code under?
|
||||||
|
|
||||||
@ -58,8 +87,6 @@ Jan is licensed under the [AGPLv3 License](https://github.com/janhq/jan/blob/mai
|
|||||||
|
|
||||||
We happily accept pull requests, however, we do ask that you sign a [Contributor License Agreement](https://en.wikipedia.org/wiki/Contributor_License_Agreement) so that we have the right to relicense your contributions[^2].
|
We happily accept pull requests, however, we do ask that you sign a [Contributor License Agreement](https://en.wikipedia.org/wiki/Contributor_License_Agreement) so that we have the right to relicense your contributions[^2].
|
||||||
|
|
||||||
We also have a [Contributor Program](/docs/team/contributor-program) to provide ownership and upside to contributors who have made significant contributions to the project.
|
|
||||||
|
|
||||||
## What was it built with?
|
## What was it built with?
|
||||||
|
|
||||||
[Jan](https://github.com/janhq/jan) is pragmatically built using `Typescript` at the application level and `C++` at the Inference level (which we have refactored into [Nitro](https://nitro.jan.ai)[^3]).
|
[Jan](https://github.com/janhq/jan) is pragmatically built using `Typescript` at the application level and `C++` at the Inference level (which we have refactored into [Nitro](https://nitro.jan.ai)[^3]).
|
||||||
@ -73,11 +100,9 @@ We follow [clean architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/
|
|||||||
|
|
||||||
Architecturally, we have made similar choices to the [Next.js Enterprise Javascript Stack](https://vercel.com/templates/next.js/nextjs-enterprise-boilerplate), which is a [battle-tested](https://nextjs.org/showcase/enterprise) framework for building enterprise-grade applications that scale.
|
Architecturally, we have made similar choices to the [Next.js Enterprise Javascript Stack](https://vercel.com/templates/next.js/nextjs-enterprise-boilerplate), which is a [battle-tested](https://nextjs.org/showcase/enterprise) framework for building enterprise-grade applications that scale.
|
||||||
|
|
||||||
:::tip
|
## Join the team
|
||||||
|
|
||||||
**At its core, Jan is a software development kit to build and run copilots on personal devices**. The Desktop Client many folks use is, rather, a specific set of extensions packaged by default. We're excited to see what developers do with the SDK (once its in better shape).
|
Join us on this journey at Jan Labs, where we embrace open-source collaboration and transparency. Together, let's shape a future where Jan becomes an essential companion in the open-source community. Explore [careers](https://janai.bamboohr.com/careers) with us.
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Contact
|
## Contact
|
||||||
|
|
||||||
|
|||||||
65
docs/docs/about/faq.md
Normal file
65
docs/docs/about/faq.md
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
# Frequently Asked Questions (FAQ)
|
||||||
|
|
||||||
|
## What is Jan?
|
||||||
|
|
||||||
|
Jan is software that helps you run large language models (LLMs) on your everyday tasks. For details, read the [About page](https://jan.ai/about/).
|
||||||
|
|
||||||
|
## How do I use Jan?
|
||||||
|
|
||||||
|
Download Jan to your computer, choose a compatible LLM, or connect to a remote AI with the API code to start. You can switch between them as needed.
|
||||||
|
|
||||||
|
## Is Jan compatible with my operating system?
|
||||||
|
|
||||||
|
Jan is available for Mac, Windows, and Linux, ensuring wide compatibility.
|
||||||
|
|
||||||
|
## Do you use my data?
|
||||||
|
|
||||||
|
No. See our data and analytics policy [here](https://jan.ai/privacy/#:~:text=We%20do%20not%20share%20your,with%20a%20better%20user%20experience.).
|
||||||
|
|
||||||
|
## Do you sell my data?
|
||||||
|
|
||||||
|
No. We don't even track your data. Jan is yours.
|
||||||
|
|
||||||
|
## How does Jan ensure my data remains private?
|
||||||
|
|
||||||
|
Jan prioritizes your privacy by running open-source AI models 100% offline on your computer, ensuring all conversations, documents, and files stay private.
|
||||||
|
|
||||||
|
## What does "Jan" stand for?
|
||||||
|
|
||||||
|
Jan stands for “Just Another Neuron”, as we are passionate about building software that complements in your existing neural pathways. But in the spirit of full transparency, it was also just a nice 3 letter domain name we owned 😂.
|
||||||
|
|
||||||
|
## Can I use Jan without an internet connection?
|
||||||
|
|
||||||
|
Yes, Jan can run locally without an internet connection for many features.
|
||||||
|
|
||||||
|
## Are there any costs associated with using Jan?
|
||||||
|
|
||||||
|
Jan is free to use. However, if you want to connect to remote APIs, like GPT-4, you will need to put in your own API key.
|
||||||
|
|
||||||
|
## What types of AI models can I download or import with Jan?
|
||||||
|
|
||||||
|
You can download popular AI models or import any model of your choice through Jan's Hub.
|
||||||
|
|
||||||
|
## How do I customize Jan using the programmable API?
|
||||||
|
|
||||||
|
The API allows you to tailor Jan to your needs, but specific details on usage would require consulting Jan's documentation.
|
||||||
|
|
||||||
|
## How can I contribute to Jan's development or suggest features?
|
||||||
|
|
||||||
|
Contributions can be made through [GitHub](https://github.com/janhq/jan) and [Discord](https://discord.gg/Exe46xPMbK), where you can also suggest features and contribute.
|
||||||
|
|
||||||
|
## How can I get involved with the Jan community?
|
||||||
|
|
||||||
|
Joining [Jan's Discord server](https://discord.gg/qSwXFx6Krr) is a great way to get involved with the community.
|
||||||
|
|
||||||
|
## How do I troubleshoot issues with installing or using Jan?
|
||||||
|
|
||||||
|
For troubleshooting, you should reach out on Discord and check GitHub for assistance and support from the community and the development team.
|
||||||
|
|
||||||
|
## Can I self-host?
|
||||||
|
|
||||||
|
Yes! We love the self-hosted movement. Jan is available as a Helm chart/ Docker composes which can be run across home servers or even production-level environments.
|
||||||
|
|
||||||
|
## Are you hiring?
|
||||||
|
|
||||||
|
We often hire directly from our community. If you are interested in applying, please see our careers page [here](https://janai.bamboohr.com/careers).
|
||||||
@ -53,24 +53,40 @@ Here are some of the keyboard shortcuts that you can use in Jan.
|
|||||||
| `⌘ ,` | Navigate to setting page |
|
| `⌘ ,` | Navigate to setting page |
|
||||||
| `Enter` | Send a message |
|
| `Enter` | Send a message |
|
||||||
| `Shift + Enter` | Insert new line in input box |
|
| `Shift + Enter` | Insert new line in input box |
|
||||||
| `Arrow Up` | Navigate to previous option (within search dialog) |
|
| `Arrow Up` | Navigate to the previous option (within the search dialog) |
|
||||||
| `Arrow Down` | Navigate to next option (within search dialog) |
|
| `Arrow Down` | Navigate to the next option (within the search dialog) |
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="windows" label = "Windows" default>
|
<TabItem value="windows" label = "Windows" default>
|
||||||
| Combination | Description |
|
| Combination | Description |
|
||||||
| --------------- | -------------------------------------------------- |
|
| --------------- | -------------------------------------------------- |
|
||||||
| `Ctrl E` | Show list your models |
|
| `Ctrl E` | Show list your models |
|
||||||
| `Ctrl K` | Show list navigation pages |
|
| `Ctrl K` | Show list navigation pages |
|
||||||
| `Ctrl B` | Toggle collapsible left panel |
|
| `Ctrl B` | Toggle collapsible left panel |
|
||||||
| `Ctrl ,` | Navigate to setting page |
|
| `Ctrl ,` | Navigate to setting page |
|
||||||
| `Enter` | Send a message |
|
| `Enter` | Send a message |
|
||||||
| `Shift + Enter` | Insert new line in input box |
|
| `Shift + Enter` | Insert new line in input box |
|
||||||
| `Arrow Up` | Navigate to previous option (within search dialog) |
|
| `Arrow Up` | Navigate to the previous option (within the search dialog) |
|
||||||
| `Arrow Down` | Navigate to next option (within search dialog) |
|
| `Arrow Down` | Navigate to the next option (within the search dialog) |
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
<TabItem value="linux" label = "Linux" default>
|
||||||
|
| Combination | Description |
|
||||||
|
| --------------- | -------------------------------------------------- |
|
||||||
|
| `Ctrl E` | Show list your models |
|
||||||
|
| `Ctrl K` | Show list navigation pages |
|
||||||
|
| `Ctrl B` | Toggle collapsible left panel |
|
||||||
|
| `Ctrl ,` | Navigate to setting page |
|
||||||
|
| `Enter` | Send a message |
|
||||||
|
| `Shift + Enter` | Insert new line in input box |
|
||||||
|
| `Arrow Up` | Navigate to the previous option (within the search dialog) |
|
||||||
|
| `Arrow Down` | Navigate to the next option (within the search dialog) |
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
:::note
|
||||||
|
The keyboard shortcuts are customizable.
|
||||||
|
:::
|
||||||
|
|
||||||
## Enable the Experimental Mode
|
## Enable the Experimental Mode
|
||||||
To try out new fetures that are still in testing phase, follow the steps below:
|
To try out new fetures that are still in testing phase, follow the steps below:
|
||||||
@ -91,7 +107,7 @@ Ensure that you have read the [troubleshooting guide](/docs/guides/common-error/
|
|||||||
4. On the **GPU Acceleration** click the slider to enable.
|
4. On the **GPU Acceleration** click the slider to enable.
|
||||||
|
|
||||||
## Access the Jan Data Folder
|
## Access the Jan Data Folder
|
||||||
To access the folder where messages, model configurtions and user data stored follow the steps below:
|
To access the folder where messages, model configurations and user data are stored, follow the steps below:
|
||||||
1. Navigate to the main dashboard.
|
1. Navigate to the main dashboard.
|
||||||
2. Click the **gear icon (⚙️)** on the bottom left of your screen.
|
2. Click the **gear icon (⚙️)** on the bottom left of your screen.
|
||||||
3. Under the **Settings screen**, click the **Advanced Settings**.
|
3. Under the **Settings screen**, click the **Advanced Settings**.
|
||||||
@ -115,6 +131,9 @@ To Allow self-signed or unverified certificates, follow the steps below:
|
|||||||
|
|
||||||
## Clear Logs
|
## Clear Logs
|
||||||
To clear all logs on your Jan app, follow the steps below:
|
To clear all logs on your Jan app, follow the steps below:
|
||||||
|
:::warning
|
||||||
|
This feature clears all the data in your **Jan Data Folder**.
|
||||||
|
:::
|
||||||
1. Navigate to the main dashboard.
|
1. Navigate to the main dashboard.
|
||||||
2. Click the **gear icon (⚙️)** on the bottom left of your screen.
|
2. Click the **gear icon (⚙️)** on the bottom left of your screen.
|
||||||
3. Under the **Settings screen**, click the **Advanced Settings**.
|
3. Under the **Settings screen**, click the **Advanced Settings**.
|
||||||
@ -122,6 +141,9 @@ To clear all logs on your Jan app, follow the steps below:
|
|||||||
|
|
||||||
## Reset To Factory Default
|
## Reset To Factory Default
|
||||||
To reset the Jan app to its original state, follow the steps below:
|
To reset the Jan app to its original state, follow the steps below:
|
||||||
|
:::danger[Remember!]
|
||||||
|
This irreversible action is only recommended if the application is corrupted.
|
||||||
|
:::
|
||||||
1. Navigate to the main dashboard.
|
1. Navigate to the main dashboard.
|
||||||
2. Click the **gear icon (⚙️)** on the bottom left of your screen.
|
2. Click the **gear icon (⚙️)** on the bottom left of your screen.
|
||||||
3. Under the **Settings screen**, click the **Advanced Settings**.
|
3. Under the **Settings screen**, click the **Advanced Settings**.
|
||||||
|
|||||||
@ -21,6 +21,12 @@ keywords:
|
|||||||
|
|
||||||
HTTPS Proxy encrypts data between your browser and the internet, making it hard for outsiders to intercept or read. It also helps you to maintain your privacy and security while being able to bypass regional restrictions on internet.
|
HTTPS Proxy encrypts data between your browser and the internet, making it hard for outsiders to intercept or read. It also helps you to maintain your privacy and security while being able to bypass regional restrictions on internet.
|
||||||
|
|
||||||
|
:::note
|
||||||
|
|
||||||
|
When configuring Jan using an HTTPS proxy, the speed of the downloading model may be affected due to the encryption and decryption process. It also depends on the networking of the cloud service provider.
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
## Setting Up Your Own HTTPS Proxy Server
|
## Setting Up Your Own HTTPS Proxy Server
|
||||||
This guide provides a simple overview of setting up an HTTPS proxy server using **Squid**, a widely used open-source proxy software.
|
This guide provides a simple overview of setting up an HTTPS proxy server using **Squid**, a widely used open-source proxy software.
|
||||||
|
|
||||||
@ -31,8 +37,13 @@ Other software options are also available depending on your requirements.
|
|||||||
### Step 1: Choosing a Server
|
### Step 1: Choosing a Server
|
||||||
1. Firstly, you need to choose a server to host your proxy server.
|
1. Firstly, you need to choose a server to host your proxy server.
|
||||||
:::note
|
:::note
|
||||||
We recommend using a cloud provider like Amazon AWS, Google Cloud, Microsoft Azure, Digital Ocean, etc.
|
We recommend using a well-known cloud provider service like:
|
||||||
|
- Amazon AWS
|
||||||
|
- Google Cloud
|
||||||
|
- Microsoft Azure
|
||||||
|
- Digital Ocean
|
||||||
:::
|
:::
|
||||||
|
|
||||||
2. Ensure that your server has a public IP address and is accessible from the internet.
|
2. Ensure that your server has a public IP address and is accessible from the internet.
|
||||||
|
|
||||||
### Step 2: Installing Squid
|
### Step 2: Installing Squid
|
||||||
|
|||||||
48
docs/docs/guides/best-practices.mdx
Normal file
48
docs/docs/guides/best-practices.mdx
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
---
|
||||||
|
title: Best Practices
|
||||||
|
sidebar_position: 3
|
||||||
|
description: Comprehensive set of best practices.
|
||||||
|
keywords:
|
||||||
|
[
|
||||||
|
Jan AI,
|
||||||
|
Jan,
|
||||||
|
ChatGPT alternative,
|
||||||
|
local AI,
|
||||||
|
private AI,
|
||||||
|
conversational AI,
|
||||||
|
no-subscription fee,
|
||||||
|
large language model,
|
||||||
|
acknowledgements,
|
||||||
|
third-party libraries,
|
||||||
|
]
|
||||||
|
---
|
||||||
|
|
||||||
|
Jan is a versatile platform offering solutions for integrating AI locally across various platforms. This guide outlines best practices for developers, analysts, and AI enthusiasts to enhance their experience with Jan when adding AI locally to their computers. Implementing these practices will optimize the performance of AI models.
|
||||||
|
|
||||||
|
## Follow the Quickstart Guide
|
||||||
|
The [quickstart guide](quickstart.mdx) is designed to facilitate a quick setup process. It provides a clear instruction and simple steps to get you up and running with Jan.ai quickly. Even, if you are inexperienced in AI, the quickstart can offer valuable insights and tips to help you get started quickly.
|
||||||
|
|
||||||
|
## Setting up the Right Models
|
||||||
|
Jan offers a range of pre-configured AI models that are tailored to different tasks and industries. You should identify which on that aligns with your objectives. There are factors to be considered:
|
||||||
|
- Capabilities
|
||||||
|
- Accuracy
|
||||||
|
- Processing Speed
|
||||||
|
|
||||||
|
:::note
|
||||||
|
- Some of these factors also depend on your hardware, please see Hardware Requirement.
|
||||||
|
- Choosing the right model is important to achieve the best performance.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Setting up Jan
|
||||||
|
Ensure that you familiarize yourself with the Jan application. Jan offers advanced settings that you can adjust. These settings may influence how your AI behaves locally. Please see the [Advanced Settings](./advanced-settings/advanced-settings.mdx) article for a complete list of Jan's configurations and instructions on how to configure them.
|
||||||
|
|
||||||
|
## Integrations
|
||||||
|
One of Jan's key features is its ability to integrate with many systems. Whether you are incorporating Jan.ai with any open-source LLM provider or other tools, it is important to understand the integration capabilities and limitations.
|
||||||
|
|
||||||
|
## Mastering the Prompt Engineering
|
||||||
|
Prompt engineering is an important aspect when dealing with AI models to generate the desired outputs. Mastering this skill can significantly enhance the performance and the responses of the AI. Below are some tips that you can do for prompt engineering:
|
||||||
|
- Ask the model to adopt a persona
|
||||||
|
- Be specific and details get a more specific answers
|
||||||
|
- Provide examples or preference text or context at the beginning
|
||||||
|
- Use a clear and concise language
|
||||||
|
- Use certain keywords and phrases
|
||||||
@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"label": "Changelogs",
|
|
||||||
"position": 5,
|
|
||||||
"link": {
|
|
||||||
"type": "generated-index",
|
|
||||||
"description": "Changelog for Jan"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -68,8 +68,8 @@ This guide provides you steps to troubleshoot and to resolve the issue where you
|
|||||||
|
|
||||||
```sh
|
```sh
|
||||||
# You can delete the `/Jan` directory in Windows's AppData Directory by visiting the following path `%APPDATA%\Jan`
|
# You can delete the `/Jan` directory in Windows's AppData Directory by visiting the following path `%APPDATA%\Jan`
|
||||||
cd C:\Users\%USERNAME%\AppData\Roaming
|
cd C:\Users\YOUR_USERNAME\AppData\Roaming
|
||||||
rmdir /S jan
|
rm -r ./Jan
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Additional Step for Versions Before 0.4.2
|
### 3. Additional Step for Versions Before 0.4.2
|
||||||
@ -156,4 +156,4 @@ By following these steps, you can cleanly uninstall and reinstall Jan, ensuring
|
|||||||
|
|
||||||
Before reinstalling Jan, ensure it's completely removed from all shared spaces if it's installed on multiple user accounts on your device.
|
Before reinstalling Jan, ensure it's completely removed from all shared spaces if it's installed on multiple user accounts on your device.
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Jan not using GPU
|
title: Troubleshooting NVIDIA GPU
|
||||||
sidebar_position: 2
|
sidebar_position: 2
|
||||||
description: A step-by-step guide to enable Jan to properly leverage GPU resources, avoiding performance issues.
|
description: A step-by-step guide to enable Jan to properly leverage NVIDIA GPU resources, avoiding performance issues.
|
||||||
keywords: [
|
keywords: [
|
||||||
Jan AI,
|
Jan AI,
|
||||||
Jan,
|
Jan,
|
||||||
@ -21,7 +21,7 @@ import Tabs from '@theme/Tabs';
|
|||||||
import TabItem from '@theme/TabItem';
|
import TabItem from '@theme/TabItem';
|
||||||
|
|
||||||
|
|
||||||
This guide provides steps to troubleshoot and resolve issues when the Jan app does not utilize the GPU on Windows and Linux systems.
|
This guide provides steps to troubleshoot and resolve issues when the Jan app does not utilize the NVIDIA GPU on Windows and Linux systems.
|
||||||
|
|
||||||
### 1. Ensure GPU Mode Requirements
|
### 1. Ensure GPU Mode Requirements
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ This guide provides steps to troubleshoot and resolve issues when the Jan app do
|
|||||||
|
|
||||||
#### NVIDIA Driver
|
#### NVIDIA Driver
|
||||||
|
|
||||||
- Install an NVIDIA driver supporting CUDA 11.7 or higher.
|
- Install an [NVIDIA Driver](https://www.nvidia.com/Download/index.aspx) supporting CUDA 11.7 or higher.
|
||||||
- Use the following command to verify the installation:
|
- Use the following command to verify the installation:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
@ -39,7 +39,7 @@ This guide provides steps to troubleshoot and resolve issues when the Jan app do
|
|||||||
|
|
||||||
#### CUDA Toolkit
|
#### CUDA Toolkit
|
||||||
|
|
||||||
- Install a CUDA toolkit compatible with your NVIDIA driver.
|
- Install a [CUDA toolkit](https://developer.nvidia.com/cuda-downloads) compatible with your NVIDIA driver.
|
||||||
- Use the following command to verify the installation:
|
- Use the following command to verify the installation:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
@ -51,7 +51,7 @@ This guide provides steps to troubleshoot and resolve issues when the Jan app do
|
|||||||
|
|
||||||
#### NVIDIA Driver
|
#### NVIDIA Driver
|
||||||
|
|
||||||
- Install an NVIDIA driver supporting CUDA 11.7 or higher.
|
- Install an [NVIDIA Driver](https://www.nvidia.com/Download/index.aspx) supporting CUDA 11.7 or higher.
|
||||||
- Use the following command to verify the installation:
|
- Use the following command to verify the installation:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
@ -60,7 +60,7 @@ This guide provides steps to troubleshoot and resolve issues when the Jan app do
|
|||||||
|
|
||||||
#### CUDA Toolkit
|
#### CUDA Toolkit
|
||||||
|
|
||||||
- Install a CUDA toolkit compatible with your NVIDIA driver.
|
- Install a [CUDA toolkit](https://developer.nvidia.com/cuda-downloads) compatible with your NVIDIA driver.
|
||||||
- Use the following command to verify the installation:
|
- Use the following command to verify the installation:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
@ -123,6 +123,8 @@ If GPU mode isn't enabled by default:
|
|||||||
"gpu_highest_vram": "0"
|
"gpu_highest_vram": "0"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
### 4. Restart Jan
|
||||||
|
Restart Jan application to make sure it works.
|
||||||
|
|
||||||
#### Troubleshooting Tips
|
#### Troubleshooting Tips
|
||||||
|
|
||||||
|
|||||||
49
docs/docs/guides/error-codes/how-to-get-error-logs.mdx
Normal file
49
docs/docs/guides/error-codes/how-to-get-error-logs.mdx
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
---
|
||||||
|
title: How to Get Error Logs
|
||||||
|
sidebar_position: 5
|
||||||
|
description: A step-by-step guide to get the Jan app error logs.
|
||||||
|
keywords:
|
||||||
|
[
|
||||||
|
Jan AI,
|
||||||
|
Jan,
|
||||||
|
ChatGPT alternative,
|
||||||
|
local AI,
|
||||||
|
private AI,
|
||||||
|
conversational AI,
|
||||||
|
no-subscription fee,
|
||||||
|
large language model,
|
||||||
|
troubleshooting,
|
||||||
|
permission denied,
|
||||||
|
]
|
||||||
|
---
|
||||||
|
|
||||||
|
To get the error logs of your Jan application, follow the steps below:
|
||||||
|
### Jan Application
|
||||||
|
1. Navigate to the main dashboard.
|
||||||
|
2. Click the **gear icon (⚙️)** on the bottom left of your screen.
|
||||||
|
3. Under the **Settings screen**, click the **Advanced Settings**.
|
||||||
|
4. On the **Jan Data Folder** click the **folder icon (📂)** to access the data.
|
||||||
|
5. Click the **logs** folder.
|
||||||
|
|
||||||
|
### Jan UI
|
||||||
|
1. Open your Unix or Linux terminal.
|
||||||
|
2. Use the following commands to get the recent 50 lines of log files:
|
||||||
|
```bash
|
||||||
|
tail -n 50 ~/jan/logs/app.log
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Jan API Server
|
||||||
|
1. Open your Unix or Linux terminal.
|
||||||
|
2. Use the following commands to get the recent 50 lines of log files:
|
||||||
|
```bash
|
||||||
|
tail -n 50 ~/jan/logs/server.log
|
||||||
|
|
||||||
|
```
|
||||||
|
:::warning
|
||||||
|
Ensure to redact any private or sensitive information when sharing logs or error details.
|
||||||
|
:::
|
||||||
|
|
||||||
|
:::note
|
||||||
|
If you have any questions or are looking for support, please don't hesitate to contact us via our [Discord community](https://discord.gg/Dt7MxDyNNZ) or create a new issue in our [GitHub repository](https://github.com/janhq/jan/issues/new/choose).
|
||||||
|
:::
|
||||||
31
docs/docs/guides/error-codes/no-assistant-available.mdx
Normal file
31
docs/docs/guides/error-codes/no-assistant-available.mdx
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
title: No Assistant Available
|
||||||
|
sidebar_position: 7
|
||||||
|
description: Troubleshooting steps to resolve issues no assistant available.
|
||||||
|
keywords:
|
||||||
|
[
|
||||||
|
Jan AI,
|
||||||
|
Jan,
|
||||||
|
ChatGPT alternative,
|
||||||
|
local AI,
|
||||||
|
private AI,
|
||||||
|
conversational AI,
|
||||||
|
no-subscription fee,
|
||||||
|
large language model,
|
||||||
|
troubleshooting,
|
||||||
|
no assistant available,
|
||||||
|
]
|
||||||
|
---
|
||||||
|
|
||||||
|
When you encounter the following error message:
|
||||||
|
```
|
||||||
|
No assistant available.
|
||||||
|
```
|
||||||
|
|
||||||
|
This issue arises when a new, unintentional file appears in `/jan/assistants`.
|
||||||
|
|
||||||
|
It can be resolved through the following steps:
|
||||||
|
|
||||||
|
1. Access the `/jan/assistants` directory using a file manager or terminal.
|
||||||
|
|
||||||
|
2. Within `/jan/assistants`, this directory should only contain a folder named `jan`. Identify any file outside of this folder and remove it.
|
||||||
62
docs/docs/guides/error-codes/stuck-on-loading-model.mdx
Normal file
62
docs/docs/guides/error-codes/stuck-on-loading-model.mdx
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
---
|
||||||
|
title: Stuck on Loading Model
|
||||||
|
sidebar_position: 8
|
||||||
|
description: Troubleshooting steps to resolve issues related to the loading model.
|
||||||
|
keywords:
|
||||||
|
[
|
||||||
|
Jan AI,
|
||||||
|
Jan,
|
||||||
|
ChatGPT alternative,
|
||||||
|
local AI,
|
||||||
|
private AI,
|
||||||
|
conversational AI,
|
||||||
|
no-subscription fee,
|
||||||
|
large language model,
|
||||||
|
troubleshooting,
|
||||||
|
stuck on loading model,
|
||||||
|
]
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Issue: Model Loading Stuck Due To Missing Windows Management Instrumentation Command-line (WMIC)
|
||||||
|
|
||||||
|
Encountering a stuck-on-loading model issue in Jan is caused by errors related to the `Windows Management Instrumentation Command-line (WMIC)` path not being included in the system's PATH environment variable.
|
||||||
|
|
||||||
|
Error message:
|
||||||
|
```
|
||||||
|
index.js:47 Uncaught (in promise) Error: Error invoking remote method 'invokeExtensionFunc': Error: Command failed: WMIC CPU Get NumberOfCores
|
||||||
|
```
|
||||||
|
|
||||||
|
It can be resolved through the following steps:
|
||||||
|
|
||||||
|
1. **Open System Properties:**
|
||||||
|
- Press `Windows key + R`.
|
||||||
|
- Type `sysdm.cpl` and press `Enter`.
|
||||||
|
|
||||||
|
2. **Access Environment Variables:**
|
||||||
|
- Go to the "Advanced" tab.
|
||||||
|
- Click the "Environment Variables" button.
|
||||||
|
|
||||||
|
3. **Edit System PATH:**
|
||||||
|
- Under "System Variables" find and select `Path`.
|
||||||
|
- Click "Edit."
|
||||||
|
|
||||||
|
4. **Add WMIC Path:**
|
||||||
|
- Click "New" and enter `C:\Windows\System32\Wbem`.
|
||||||
|
|
||||||
|
5. **Save Changes:**
|
||||||
|
- Click "OK" to close and save your changes.
|
||||||
|
|
||||||
|
6. **Verify Installation:**
|
||||||
|
- Restart any command prompts or terminals.
|
||||||
|
- Run `where wmic` to verify. Expected output: `C:\Windows\System32\wbem\WMIC.exe`.
|
||||||
|
|
||||||
|
|
||||||
|
## 2. Issue: Model Loading Stuck Due To CPU Without AVX
|
||||||
|
|
||||||
|
Encountering an issue with models stuck on loading in Jan can be due to the use of older generation CPUs that do not support Advanced Vector Extensions (AVX).
|
||||||
|
|
||||||
|
To check if your CPU supports AVX, visit the following link: [CPUs with AVX](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#CPUs_with_AVX)
|
||||||
|
|
||||||
|
:::warning [Please use this with caution]
|
||||||
|
As a workaround, consider using an [emulator](https://www.intel.com/content/www/us/en/developer/articles/tool/software-development-emulator.html) to simulate AVX support.
|
||||||
|
:::
|
||||||
26
docs/docs/guides/error-codes/thread-disappreance.mdx
Normal file
26
docs/docs/guides/error-codes/thread-disappreance.mdx
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
---
|
||||||
|
title: Thread Disappearance
|
||||||
|
sidebar_position: 6
|
||||||
|
description: Troubleshooting steps to resolve issues threads suddenly disappearance.
|
||||||
|
keywords:
|
||||||
|
[
|
||||||
|
Jan AI,
|
||||||
|
Jan,
|
||||||
|
ChatGPT alternative,
|
||||||
|
local AI,
|
||||||
|
private AI,
|
||||||
|
conversational AI,
|
||||||
|
no-subscription fee,
|
||||||
|
large language model,
|
||||||
|
troubleshooting,
|
||||||
|
thread disappearance,
|
||||||
|
]
|
||||||
|
---
|
||||||
|
|
||||||
|
When you encounter the error of old threads suddenly disappear. This can happen when a new, unintentional file is created in `/jan/threads`.
|
||||||
|
|
||||||
|
It can be resolved through the following steps:
|
||||||
|
|
||||||
|
1. Go to `/jan/threads`.
|
||||||
|
|
||||||
|
2. The `/jan/threads` directory contains many folders named with the prefix `jan_` followed by an ID (e.g., `jan_123`). Look for any file not conforming to this naming pattern and remove it.
|
||||||
@ -17,6 +17,83 @@ keywords:
|
|||||||
]
|
]
|
||||||
---
|
---
|
||||||
|
|
||||||
:::caution
|
## General Issues
|
||||||
This is currently under development.
|
|
||||||
:::
|
- **Why can't I download models like Pandora 11B Q4 and Solar Instruct 10.7B Q4?**
|
||||||
|
- These models might have been removed or taken down. Please check the [Pre-configured Models](models-list.mdx) for the latest updates on model availability.
|
||||||
|
|
||||||
|
- **Why does Jan display "Apologies, something's amiss" when I try to run it?**
|
||||||
|
- This issue may arise if you're using an older Intel chip that does not fully support AVX instructions required for running AI models. Upgrading your hardware may resolve this issue.
|
||||||
|
|
||||||
|
- **How can I use Jan in Russia?**
|
||||||
|
- To use Jan in Russia, a VPN or [HTTPS - Proxy](./advanced-settings/http-proxy.mdx) is recommended to bypass any regional restrictions that might be in place.
|
||||||
|
|
||||||
|
- **I'm experiencing an error on startup from Nitro. What should I do?**
|
||||||
|
- If you encounter errors with Nitro, try switching the path to use the Nitro executable for the version 12-0. This adjustment can help resolve path-related issues.
|
||||||
|
|
||||||
|
## Download and Installation Issues
|
||||||
|
|
||||||
|
- **What does "Error occurred: Unexpected token" mean?**
|
||||||
|
- This error usually indicates a problem with your internet connection or that your access to certain resources is being blocked. Using a VPN or [HTTPS - Proxy](./advanced-settings/http-proxy.mdx) can help avoid these issues by providing a secure and unrestricted internet connection.
|
||||||
|
|
||||||
|
- **Why aren't my downloads working?**
|
||||||
|
- If you're having trouble downloading directly through Jan, you might want to download the model separately and then import it into Jan. Detailed instructions are available on [here](install.mdx).
|
||||||
|
|
||||||
|
- **Jan AI doesn't open on my Mac with an Intel processor. What can I do?**
|
||||||
|
- Granting the `.npm` folder permission for the user can resolve issues related to permissions on macOS, especially for users with Intel processors.
|
||||||
|
|
||||||
|
- **What should I do if the model download freezes?**
|
||||||
|
- If a model download freezes, consider importing the models manually. You can find more detailed guidance on how to do this at [Manual Import](./models/import-models.mdx) article.
|
||||||
|
|
||||||
|
- **I received a message that the model GPT4 does not exist or I do not have access. What should I do?**
|
||||||
|
- This message typically means you need to top up your credit with OpenAI or check your access permissions for the model.
|
||||||
|
|
||||||
|
- **I can't download models from "Explore the Hub." What's the solution?**
|
||||||
|
- Uninstalling Jan, clearing the cache, and reinstalling it following the guide provided [here](install.mdx) may help. Also, consider downloading the `.gguf` model via a browser as an alternative approach.
|
||||||
|
|
||||||
|
## Technical Issues and Solutions
|
||||||
|
|
||||||
|
- **How can I download models with a socks5 proxy or import a local model file?**
|
||||||
|
- Nightly builds of Jan offer support for downloading models with socks5 proxies or importing local model files.
|
||||||
|
|
||||||
|
- **My device shows no GPU usage and lacks a Settings folder. What should I do?**
|
||||||
|
- Using the nightly builds of Jan can address issues related to GPU usage and the absence of a Settings folder, as these builds contain the latest fixes and features.
|
||||||
|
|
||||||
|
- **Why does Jan display a toast message saying a model is loaded when it is not actually loaded?**
|
||||||
|
- This issue can be resolved by downloading the `.gguf` file from Hugging Face and replacing it in the model folder. This ensures the correct model is loaded.
|
||||||
|
|
||||||
|
- **How to enable CORS when running Nitro?**
|
||||||
|
- By default, CORS (Cross-Origin Resource Sharing) is disabled when running Nitro. Enabling CORS can be necessary for certain operations and integrations. Check the official documentation for instructions on how to enable CORS if your workflow requires it.
|
||||||
|
|
||||||
|
## Compatibility and Support
|
||||||
|
|
||||||
|
- **How to use GPU AMD for Jan?**
|
||||||
|
- Jan now supports AMD GPUs through Vulkan. This enhancement allows users with AMD graphics cards to leverage GPU acceleration, improving performance for AI model computations.
|
||||||
|
|
||||||
|
- **Is Jan available for Android or iOS?**
|
||||||
|
- Jan is primarily focused on the Desktop app and does not currently offer mobile apps for Android or iOS. The development team is concentrating on enhancing the desktop experience.
|
||||||
|
|
||||||
|
## Development and Features
|
||||||
|
|
||||||
|
- **Does Jan support Safetensors?**
|
||||||
|
- At the moment, Jan only supports GGUF. However, there are plans to support `.safetensor` files in the future.
|
||||||
|
|
||||||
|
- **I hope to customize the installation path of each model. Is that possible?**
|
||||||
|
- Yes you can customize the installation path. Please see [here](https://jan.ai/guides/advanced-settings/#access-the-jan-data-folder) for more information.
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
- **What should I do if there's high CPU usage while Jan is idle?**
|
||||||
|
- If you notice high CPU usage while Jan is idle, consider using the nightly builds of Jan
|
||||||
|
|
||||||
|
- **What does the error "Failed to fetch" mean, and how can I fix it?**
|
||||||
|
- The "Failed to fetch" error typically occurs due to network issues or restrictions. Using the nightly builds of Jan may help overcome these issues by providing updated fixes and features.
|
||||||
|
|
||||||
|
- **What should I do if "Failed to fetch" occurs using MacBook Pro with Intel HD Graphics 4000 1536 MB?**
|
||||||
|
- Ensure that the model size is less than 90% of your available VRAM and that the VRAM is accessible to the app. Managing the resources effectively can help mitigate this issue.
|
||||||
|
|
||||||
|
:::info[Assistance and Support]
|
||||||
|
|
||||||
|
If you have questions, please join our [Discord community](https://discord.gg/Dt7MxDyNNZ) for support, updates, and discussions.
|
||||||
|
|
||||||
|
:::
|
||||||
84
docs/docs/guides/integration/groq.mdx
Normal file
84
docs/docs/guides/integration/groq.mdx
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
---
|
||||||
|
title: Groq
|
||||||
|
sidebar_position: 10
|
||||||
|
slug: /guides/integration/groq
|
||||||
|
description: Learn how to integrate Groq API with Jan for enhanced functionality.
|
||||||
|
keywords:
|
||||||
|
[
|
||||||
|
Groq API,
|
||||||
|
Jan,
|
||||||
|
Jan AI,
|
||||||
|
ChatGPT alternative,
|
||||||
|
conversational AI,
|
||||||
|
large language model,
|
||||||
|
integration,
|
||||||
|
Groq integration,
|
||||||
|
API integration
|
||||||
|
]
|
||||||
|
---
|
||||||
|
|
||||||
|
## How to Integrate Mistral AI with Jan
|
||||||
|
|
||||||
|
This guide provides step-by-step instructions on integrating the Groq API with Jan, enabling users to leverage Groq's capabilities within Jan's conversational interface.
|
||||||
|
|
||||||
|
Before proceeding, ensure you have the following:
|
||||||
|
- Access to the Jan Application
|
||||||
|
- Groq API credentials
|
||||||
|
|
||||||
|
## Integration Steps
|
||||||
|
|
||||||
|
### Step 1: Obtain Groq API Credentials
|
||||||
|
|
||||||
|
If you haven't already, sign up for the Groq API and obtain your API credentials.
|
||||||
|
Obtain Groq API keys from your [Groq Console](https://console.groq.com/keys).
|
||||||
|
|
||||||
|
### Step 2: Configure Jan Settings
|
||||||
|
|
||||||
|
1. Insert the Groq AI API key into `~/jan/engines/openai.json`.
|
||||||
|
|
||||||
|
```json title="~/jan/engines/openai.json"
|
||||||
|
{
|
||||||
|
"full_url": "https://api.groq.com/openai/v1/chat/completions",
|
||||||
|
"api_key": "<your-groq-api-key>"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 3: Enable Groq Integration
|
||||||
|
|
||||||
|
To set up the configuration for Groq in Jan, follow these steps:
|
||||||
|
|
||||||
|
1. Navigate to `~/jan/models`.
|
||||||
|
2. Create a folder named `groq`.
|
||||||
|
3. Inside the groq folder, create a model.json file with the specified settings:
|
||||||
|
```json title="~/jan/models/groq/model.json
|
||||||
|
{
|
||||||
|
"id": "mixtral-8x7b-32768",
|
||||||
|
"object": "model",
|
||||||
|
"name": "Groq Integration",
|
||||||
|
"version": "1.0",
|
||||||
|
"description": "Integration with Groq API for enhanced functionality.",
|
||||||
|
"format": "api",
|
||||||
|
"sources": [],
|
||||||
|
"settings": {},
|
||||||
|
"parameters": {},
|
||||||
|
"metadata": {
|
||||||
|
"author": "Mistral",
|
||||||
|
"tags": ["Groq Integration"]
|
||||||
|
},
|
||||||
|
"engine": "openai"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 4: Start the Model
|
||||||
|
|
||||||
|
1. Restart Jan and navigate to the **Hub**.
|
||||||
|
2. Locate your model and click the **Use** button.
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
If you encounter any issues during the integration process or while using Groq with Jan, consider the following troubleshooting steps:
|
||||||
|
|
||||||
|
- Double-check your API credentials and ensure they are correctly entered.
|
||||||
|
- Verify that the Groq integration is enabled within Jan's settings.
|
||||||
|
- Check for any error messages or logs that may provide insight into the issue.
|
||||||
|
- Reach out to Groq API support for assistance if needed.
|
||||||
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: Manual Import
|
title: Manual Import
|
||||||
|
slug: /guides/using-models/import-manually/
|
||||||
sidebar_position: 3
|
sidebar_position: 3
|
||||||
description: A step-by-step guide on how to perform manual import feature.
|
description: A step-by-step guide on how to perform manual import feature.
|
||||||
keywords:
|
keywords:
|
||||||
|
|||||||
8
docs/docs/guides/providers/README.mdx
Normal file
8
docs/docs/guides/providers/README.mdx
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: Inference Providers
|
||||||
|
slug: /guides/providers
|
||||||
|
---
|
||||||
|
|
||||||
|
import DocCardList from "@theme/DocCardList";
|
||||||
|
|
||||||
|
<DocCardList />
|
||||||
BIN
docs/docs/guides/providers/image.png
Normal file
BIN
docs/docs/guides/providers/image.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 27 KiB |
10
docs/docs/guides/providers/llama-cpp.md
Normal file
10
docs/docs/guides/providers/llama-cpp.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
title: llama.cpp
|
||||||
|
slug: /guides/providers/llama-cpp
|
||||||
|
---
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
[Nitro](https://github.com/janhq/nitro) is an inference server on top of [llama.cpp](https://github.com/ggerganov/llama.cpp). It provides an OpenAI-compatible API, queue, & scaling.
|
||||||
|
|
||||||
|
Nitro is the default AI engine downloaded with Jan. There is no additional setup needed.
|
||||||
87
docs/docs/guides/providers/tensorrt-llm.md
Normal file
87
docs/docs/guides/providers/tensorrt-llm.md
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
---
|
||||||
|
title: TensorRT-LLM
|
||||||
|
slug: /guides/providers/tensorrt-llm
|
||||||
|
---
|
||||||
|
|
||||||
|
Users with Nvidia GPUs can get **20-40% faster\* token speeds** on their laptop or desktops by using [TensorRT-LLM](https://github.com/NVIDIA/TensorRT-LLM). The greater implication is that you are running FP16, which is also more accurate than quantized models.
|
||||||
|
|
||||||
|
This guide walks you through how to install Jan's official [TensorRT-LLM Extension](https://github.com/janhq/nitro-tensorrt-llm). This extension uses [Nitro-TensorRT-LLM](https://github.com/janhq/nitro-tensorrt-llm) as the AI engine, instead of the default [Nitro-Llama-CPP](https://github.com/janhq/nitro). It includes an efficient C++ server to natively execute the [TRT-LLM C++ runtime](https://nvidia.github.io/TensorRT-LLM/gpt_runtime.html). It also comes with additional feature and performance improvements like OpenAI compatibility, tokenizer improvements, and queues.
|
||||||
|
|
||||||
|
*Compared to using LlamaCPP engine.
|
||||||
|
|
||||||
|
:::warning
|
||||||
|
This feature is only available for Windows users. Linux is coming soon.
|
||||||
|
|
||||||
|
Additionally, we only prebuilt a few demo models. You can always build your desired models directly on your machine. [Read here](#build-your-own-tensorrt-models).
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- A Windows PC
|
||||||
|
- Nvidia GPU(s): Ada or Ampere series (i.e. RTX 4000s & 3000s). More will be supported soon.
|
||||||
|
- 3GB+ of disk space to download TRT-LLM artifacts and a Nitro binary
|
||||||
|
- Jan v0.4.9+ or Jan v0.4.8-321+ (nightly)
|
||||||
|
- Nvidia Driver v535+ ([installation guide](https://jan.ai/guides/common-error/not-using-gpu/#1-ensure-gpu-mode-requirements))
|
||||||
|
- CUDA Toolkit v12.2+ ([installation guide](https://jan.ai/guides/common-error/not-using-gpu/#1-ensure-gpu-mode-requirements))
|
||||||
|
|
||||||
|
## Install TensorRT-Extension
|
||||||
|
|
||||||
|
1. Go to Settings > Extensions
|
||||||
|
2. Click install next to the TensorRT-LLM Extension
|
||||||
|
3. Check that files are correctly downloaded
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ls ~\jan\extensions\@janhq\tensorrt-llm-extension\dist\bin
|
||||||
|
# Your Extension Folder should now include `nitro.exe`, among other artifacts needed to run TRT-LLM
|
||||||
|
```
|
||||||
|
|
||||||
|
## Download a Compatible Model
|
||||||
|
TensorRT-LLM can only run models in `TensorRT` format. These models, aka "TensorRT Engines", are prebuilt specifically for each target OS+GPU architecture.
|
||||||
|
|
||||||
|
We offer a handful of precompiled models for Ampere and Ada cards that you can immediately download and play with:
|
||||||
|
|
||||||
|
1. Restart the application and go to the Hub
|
||||||
|
2. Look for models with the `TensorRT-LLM` label in the recommended models list. Click download. This step might take some time. 🙏
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
3. Click use and start chatting!
|
||||||
|
4. You may need to allow Nitro in your network
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
:::warning
|
||||||
|
If you are our nightly builds, you may have to reinstall the TensorRT-LLM extension each time you update the app. We're working on better extension lifecyles - stay tuned.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Configure Settings
|
||||||
|
|
||||||
|
You can customize the default parameters for how Jan runs TensorRT-LLM.
|
||||||
|
|
||||||
|
:::info
|
||||||
|
coming soon
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Incompatible Extension vs Engine versions
|
||||||
|
|
||||||
|
For now, the model versions are pinned to the extension versions.
|
||||||
|
|
||||||
|
### Uninstall Extension
|
||||||
|
|
||||||
|
1. Quit the app
|
||||||
|
2. Go to Settings > Extensions
|
||||||
|
3. Delete the entire Extensions folder.
|
||||||
|
4. Reopen the app, only the default extensions should be restored.
|
||||||
|
|
||||||
|
### Install Nitro-TensorRT-LLM manually
|
||||||
|
|
||||||
|
To manually build the artifacts needed to run the server and TensorRT-LLM, you can reference the source code. [Read here](https://github.com/janhq/nitro-tensorrt-llm?tab=readme-ov-file#quickstart).
|
||||||
|
|
||||||
|
### Build your own TensorRT models
|
||||||
|
|
||||||
|
:::info
|
||||||
|
coming soon
|
||||||
|
:::
|
||||||
@ -5,58 +5,45 @@ hide_table_of_contents: true
|
|||||||
description: Manage your interaction with AI locally.
|
description: Manage your interaction with AI locally.
|
||||||
---
|
---
|
||||||
|
|
||||||
import Tabs from '@theme/Tabs';
|
|
||||||
import TabItem from '@theme/TabItem';
|
|
||||||
|
|
||||||
Jan provides a straightforward and private solution for managing your threads with AI on your own device. As you interact with AI using Jan, you'll accumulate a history of threads.
|
Jan provides a straightforward and private solution for managing your threads with AI on your own device. As you interact with AI using Jan, you'll accumulate a history of threads.
|
||||||
Jan offers easy tools to organize, delete, or review your past threads with AI. This guide will show you how to keep your threads private and well-organized.
|
Jan offers easy tools to organize, delete, or review your past threads with AI. This guide will show you how to keep your threads private and well-organized.
|
||||||
|
|
||||||
<Tabs>
|
|
||||||
<TabItem value="view" label = "View Thread History" default>
|
|
||||||
|
|
||||||
### View Thread History
|
### View Thread History
|
||||||
To view your threads history, follow the steps below:
|
To view your thread history, follow the steps below:
|
||||||
1. Navigate to the main dashboard.
|
1. Navigate to the main dashboard.
|
||||||
2. Locate the list of threads screen on the left side.
|
2. Locate the list of threads screen on the left side.
|
||||||
3. To view a specific thread, simply choose the one you're interested in and then scroll up or down to explore the entire conversation.
|
3. To view a specific thread, simply choose the one you're interested in and then scroll up or down to explore the entire conversation.
|
||||||
|
|
||||||
</TabItem>
|
|
||||||
<TabItem value = "manage" label = "Managing Threads">
|
|
||||||
|
|
||||||
### Manage the Threads via Folder
|
### Manage Thread via Jan Data Folder
|
||||||
To manage your threads history and configurations, follow the steps below:
|
To manage your thread history and configurations, follow the steps below:
|
||||||
1. Navigate to the Thread that you want to manage via the list of threads on the left side of the dashboard.
|
1. Navigate to the Thread that you want to manage via the list of threads on the left side of the dashboard.
|
||||||
2. Click on the **three dots (⋮)** on the Thread section.
|
2. Click on the **three dots (⋮)** in the Thread section.
|
||||||
3. There are two available options to select:
|
3. There are two available options to select:
|
||||||
- **Reveal in Finder**: Opens the folder containing the thread history and configurations.
|
- **Reveal in Finder**: Opens the folder containing the thread history and configurations.
|
||||||
- **View as JSON**: Opens the thread.json file in your default browser.
|
- **View as JSON**: Opens the thread.json file in your default browser.
|
||||||
|
|
||||||
|
|
||||||
</TabItem>
|
|
||||||
<TabItem value = "clean" label = "Clean Threads">
|
|
||||||
|
|
||||||
### Clean Threads History
|
### Clean Threads History
|
||||||
To clean all the messages from a thread, follow the steps below:
|
To clean all the messages from a thread, follow the steps below:
|
||||||
1. Navigate to the Thread that you want to clean.
|
1. Navigate to the Thread that you want to clean.
|
||||||
2. Click on the **three dots (⋮)** on the Thread section.
|
2. Click on the **three dots (⋮)** in the Thread section.
|
||||||
3. Sleect the **Clean Thread** button.
|
3. Sleect the **Clean Thread** button.
|
||||||
|
|
||||||
:::note
|
:::note
|
||||||
This will delete all messages in the thread, while keeping the thread settings.
|
This will delete all messages in the thread while keeping the thread settings.
|
||||||
:::
|
:::
|
||||||
</TabItem>
|
|
||||||
<TabItem value="delete" label = "Delete Thread" default>
|
|
||||||
|
|
||||||
### Delete Threads History
|
### Delete Threads History
|
||||||
To delete a thread, follow the steps below:
|
To delete a thread, follow the steps below:
|
||||||
1. Navigate to the Thread that you want to delete.
|
1. Navigate to the Thread that you want to delete.
|
||||||
2. Click on the **three dots (⋮)** on the Thread section.
|
2. Click on the **three dots (⋮)** in the Thread section.
|
||||||
3. Sleect the **Delete Thread** button.
|
3. Sleect the **Delete Thread** button.
|
||||||
|
|
||||||
|
|
||||||
:::note
|
:::note
|
||||||
This will delete all messages and the thread settings.
|
This will delete all messages and the thread settings.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
</TabItem>
|
|
||||||
</Tabs>
|
|
||||||
@ -1,3 +1,88 @@
|
|||||||
---
|
---
|
||||||
title: Website & Docs
|
title: Website & Docs
|
||||||
---
|
---
|
||||||
|
|
||||||
|
This website is built using [Docusaurus 3.0](https://docusaurus.io/), a modern static website generator.
|
||||||
|
|
||||||
|
### Information Architecture
|
||||||
|
|
||||||
|
We try to **keep routes consistent** to maintain SEO.
|
||||||
|
|
||||||
|
- **`/guides/`**: Guides on how to use the Jan application. For end users who are directly using Jan.
|
||||||
|
|
||||||
|
- **`/developer/`**: Developer docs on how to extend Jan. These pages are about what people can build with our software.
|
||||||
|
|
||||||
|
- **`/api-reference/`**: Reference documentation for the Jan API server, written in Swagger/OpenAPI format.
|
||||||
|
|
||||||
|
- **`/changelog/`**: A list of changes made to the Jan application with each release.
|
||||||
|
|
||||||
|
- **`/blog/`**: A blog for the Jan application.
|
||||||
|
|
||||||
|
### Sidebar Autogeneration
|
||||||
|
|
||||||
|
The order of each page is either explicitly defined in `sidebar.js` or follows the [Docusaurus autogenerated](https://docusaurus.io/docs/next/sidebar/autogenerated) naming format, `##-path-name.md`.
|
||||||
|
|
||||||
|
Important slugs are hardcoded at the document level (and shouldn't be rerouted):
|
||||||
|
|
||||||
|
```
|
||||||
|
---
|
||||||
|
title: Overview
|
||||||
|
slug: /docs
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
## How to Contribute
|
||||||
|
|
||||||
|
Refer to the [Contributing Guide](https://github.com/janhq/jan/blob/dev/CONTRIBUTING.md) for more comprehensive information on how to contribute to the Jan project.
|
||||||
|
|
||||||
|
### Pre-requisites and Installation
|
||||||
|
|
||||||
|
- [Node.js](https://nodejs.org/en/) (version 20.0.0 or higher)
|
||||||
|
- [yarn](https://yarnpkg.com/) (version 1.22.0 or higher)
|
||||||
|
|
||||||
|
#### Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd jan/docs
|
||||||
|
yarn install
|
||||||
|
yarn start
|
||||||
|
```
|
||||||
|
|
||||||
|
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
|
||||||
|
|
||||||
|
#### Build
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn build
|
||||||
|
```
|
||||||
|
|
||||||
|
This command generates static content into the `build` directory and can be served using any static contents hosting service.
|
||||||
|
|
||||||
|
### Deployment
|
||||||
|
|
||||||
|
Using SSH:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
USE_SSH=true yarn deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
Not using SSH:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
GIT_USER=<Your GitHub username> yarn deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
|
||||||
|
|
||||||
|
### Preview URL, Pre-release and Publishing Documentation
|
||||||
|
|
||||||
|
- When a pull request is created, the preview URL will be automatically commented on the pull request.
|
||||||
|
|
||||||
|
- The documentation will then be published to [https://dev.jan.ai/](https://dev.jan.ai/) when the pull request is merged to `dev`.
|
||||||
|
|
||||||
|
- Our open-source maintainers will sync the updated content from `dev` to `docs` branch, which will then be published to [https://jan.ai/](https://jan.ai/).
|
||||||
|
|
||||||
|
### Additional Plugins
|
||||||
|
|
||||||
|
- @docusaurus/theme-live-codeblock
|
||||||
|
- [Redocusaurus](https://redocusaurus.vercel.app/): manually upload swagger files at `/openapi/jan.yaml` to update the API reference documentation.
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Changelogs
|
title: Changelog
|
||||||
slug: /guides/changelogs/
|
sidebar_position: 1
|
||||||
sidebar_position: 12
|
slug: /changelog
|
||||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||||
keywords:
|
keywords:
|
||||||
[
|
[
|
||||||
File diff suppressed because one or more lines are too long
@ -1,12 +1,13 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 16
|
sidebar_position: 17
|
||||||
---
|
slug: /changelog/changelog-v0.2.0
|
||||||
# v0.2.0
|
---
|
||||||
|
# v0.2.0
|
||||||
For more details, [GitHub Issues](https://github.com/janhq/jan/releases/tag/v0.2.0)
|
|
||||||
|
For more details, [GitHub Issues](https://github.com/janhq/jan/releases/tag/v0.2.0)
|
||||||
Highlighted Issue: [Issue #342: feat: Add Jan Hacker House event page to Docs](https://github.com/janhq/jan/pull/342)
|
|
||||||
|
Highlighted Issue: [Issue #342: feat: Add Jan Hacker House event page to Docs](https://github.com/janhq/jan/pull/342)
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- feat: Add Jan Hacker House event page to Docs @dan-jan (#342)
|
- feat: Add Jan Hacker House event page to Docs @dan-jan (#342)
|
||||||
@ -43,4 +44,4 @@ Highlighted Issue: [Issue #342: feat: Add Jan Hacker House event page to Docs](
|
|||||||
## Contributor
|
## Contributor
|
||||||
|
|
||||||
@0xSage, @Its-Alamin-H, @dan-jan, @drakehere, @hiento09, @hientominh, @louis-jan, @namchuai, Hien To and James
|
@0xSage, @Its-Alamin-H, @dan-jan, @drakehere, @hiento09, @hientominh, @louis-jan, @namchuai, Hien To and James
|
||||||
|
|
||||||
@ -1,12 +1,13 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 15
|
sidebar_position: 16
|
||||||
---
|
slug: /changelog/changelog-v0.2.1
|
||||||
# v0.2.1
|
---
|
||||||
|
# v0.2.1
|
||||||
For more details, [GitHub Issues](https://github.com/janhq/jan/releases/tag/v0.2.1)
|
|
||||||
|
For more details, [GitHub Issues](https://github.com/janhq/jan/releases/tag/v0.2.1)
|
||||||
Highlighted Issue: [Issue #446: fix: model is started but the indicator is not stopped loading](https://github.com/janhq/jan/pull/446)
|
|
||||||
|
Highlighted Issue: [Issue #446: fix: model is started but the indicator is not stopped loading](https://github.com/janhq/jan/pull/446)
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- fix: model is started but the indicator is not stopped loading @louis-jan (#446)
|
- fix: model is started but the indicator is not stopped loading @louis-jan (#446)
|
||||||
@ -89,4 +90,4 @@ Highlighted Issue: [Issue #446: fix: model is started but the indicator is not
|
|||||||
## Contributor
|
## Contributor
|
||||||
|
|
||||||
@0xSage, @dan-jan, @hiento09, @jan-service-account, @louis-jan, @nam-john-ho, @namchuai, @tikikun, @urmauur, @vuonghoainam and Hien To
|
@0xSage, @dan-jan, @hiento09, @jan-service-account, @louis-jan, @nam-john-ho, @namchuai, @tikikun, @urmauur, @vuonghoainam and Hien To
|
||||||
|
|
||||||
@ -1,12 +1,13 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 14
|
sidebar_position: 15
|
||||||
---
|
slug: /changelog/changelog-v0.2.2
|
||||||
# v0.2.2
|
---
|
||||||
|
# v0.2.2
|
||||||
For more details, [GitHub Issues](https://github.com/janhq/jan/releases/tag/v0.2.2)
|
|
||||||
|
For more details, [GitHub Issues](https://github.com/janhq/jan/releases/tag/v0.2.2)
|
||||||
Highlighted Issue: [Issue #469: chore: plugin and app version dependency](https://github.com/janhq/jan/pull/469)
|
|
||||||
|
Highlighted Issue: [Issue #469: chore: plugin and app version dependency](https://github.com/janhq/jan/pull/469)
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- chore: plugin and app version dependency @louis-jan (#469)
|
- chore: plugin and app version dependency @louis-jan (#469)
|
||||||
@ -39,4 +40,4 @@ Highlighted Issue: [Issue #469: chore: plugin and app version dependency](https
|
|||||||
## Contributor
|
## Contributor
|
||||||
|
|
||||||
@hiento09, @jan-service-account, @louis-jan, @namchuai, @urmauur and @vuonghoainam
|
@hiento09, @jan-service-account, @louis-jan, @namchuai, @urmauur and @vuonghoainam
|
||||||
|
|
||||||
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 13
|
sidebar_position: 14
|
||||||
|
slug: /changelog/changelog-v0.2.3
|
||||||
---
|
---
|
||||||
# v0.2.3
|
# v0.2.3
|
||||||
|
|
||||||
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 12
|
sidebar_position: 13
|
||||||
|
slug: /changelog/changelog-v0.3.0
|
||||||
---
|
---
|
||||||
# v0.3.0
|
# v0.3.0
|
||||||
|
|
||||||
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 11
|
sidebar_position: 12
|
||||||
|
slug: /changelog/changelog-v0.3.1
|
||||||
---
|
---
|
||||||
# v0.3.1
|
# v0.3.1
|
||||||
|
|
||||||
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 10
|
sidebar_position: 11
|
||||||
|
slug: /changelog/changelog-v0.3.2
|
||||||
---
|
---
|
||||||
# v0.3.2
|
# v0.3.2
|
||||||
|
|
||||||
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 9
|
sidebar_position: 10
|
||||||
|
slug: /changelog/changelog-v0.3.3
|
||||||
---
|
---
|
||||||
# v0.3.3
|
# v0.3.3
|
||||||
|
|
||||||
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 8
|
sidebar_position: 9
|
||||||
|
slug: /changelog/changelog-v0.4.0
|
||||||
---
|
---
|
||||||
# v0.4.0
|
# v0.4.0
|
||||||
|
|
||||||
@ -7,68 +8,68 @@ For more details, [GitHub Issues](https://github.com/janhq/jan/releases/tag/v0.4
|
|||||||
|
|
||||||
Highlighted Issue: [Issue #878: bug: fix tag description showing a title and fix card right panel](https://github.com/janhq/jan/pull/878)
|
Highlighted Issue: [Issue #878: bug: fix tag description showing a title and fix card right panel](https://github.com/janhq/jan/pull/878)
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- bug: fix tag description showing a title and fix card right panel @urmauur (#878)
|
- bug: fix tag description showing a title and fix card right panel @urmauur (#878)
|
||||||
- fix/no-assistant-available-fresh-install @louis-jan (#876)
|
- fix/no-assistant-available-fresh-install @louis-jan (#876)
|
||||||
- Model.json update @hahuyhoang411 (#870)
|
- Model.json update @hahuyhoang411 (#870)
|
||||||
- Hotfix desc for openhermes @hahuyhoang411 (#864)
|
- Hotfix desc for openhermes @hahuyhoang411 (#864)
|
||||||
- Openhermes update v1 @hahuyhoang411 (#863)
|
- Openhermes update v1 @hahuyhoang411 (#863)
|
||||||
- update deepseek 1.3b @hahuyhoang411 (#858)
|
- update deepseek 1.3b @hahuyhoang411 (#858)
|
||||||
- Update tags @hahuyhoang411 (#857)
|
- Update tags @hahuyhoang411 (#857)
|
||||||
- Update model hub @hahuyhoang411 (#829)
|
- Update model hub @hahuyhoang411 (#829)
|
||||||
- hotfix: fix typo @tikikun (#836)
|
- hotfix: fix typo @tikikun (#836)
|
||||||
- chore: pre-populate Jan's /models folder with model.jsons @hahuyhoang411 (#775)
|
- chore: pre-populate Jan's /models folder with model.jsons @hahuyhoang411 (#775)
|
||||||
- chore: clarification changes to the model settings and model parameters @tikikun (#742)
|
- chore: clarification changes to the model settings and model parameters @tikikun (#742)
|
||||||
|
|
||||||
## 🚀 Features
|
## 🚀 Features
|
||||||
|
|
||||||
- feat: revamp landing page @urmauur (#745)
|
- feat: revamp landing page @urmauur (#745)
|
||||||
- feat : add cover image model hub screen @urmauur (#872)
|
- feat : add cover image model hub screen @urmauur (#872)
|
||||||
- feat: boilerplate for express server localhost 1337 @linhtran174 (#803)
|
- feat: boilerplate for express server localhost 1337 @linhtran174 (#803)
|
||||||
- enhancement: revamp hub screen @urmauur (#825)
|
- enhancement: revamp hub screen @urmauur (#825)
|
||||||
- feat: revamp thread screen @urmauur (#802)
|
- feat: revamp thread screen @urmauur (#802)
|
||||||
- docs/update-api-reference @hieu-jan (#739)
|
- docs/update-api-reference @hieu-jan (#739)
|
||||||
- refactor: model plugin to follow new specs @namchuai (#682)
|
- refactor: model plugin to follow new specs @namchuai (#682)
|
||||||
|
|
||||||
## 🐛 Fixes
|
## 🐛 Fixes
|
||||||
|
|
||||||
- fix: Nitro interface update to prevent warning @vuonghoainam (#877)
|
- fix: Nitro interface update to prevent warning @vuonghoainam (#877)
|
||||||
- fix: delete message break the entire thread @louis-jan (#869)
|
- fix: delete message break the entire thread @louis-jan (#869)
|
||||||
- fix: can not download multiple models at once @louis-jan (#867)
|
- fix: can not download multiple models at once @louis-jan (#867)
|
||||||
- fix: production CI workflow does not populate models @louis-jan (#862)
|
- fix: production CI workflow does not populate models @louis-jan (#862)
|
||||||
- fix: update wrong main view state when use a model @namchuai (#861)
|
- fix: update wrong main view state when use a model @namchuai (#861)
|
||||||
- fix: handle crash issue on hljs highlighting @louis-jan (#859)
|
- fix: handle crash issue on hljs highlighting @louis-jan (#859)
|
||||||
- fix: empty assistant instruction by default @louis-jan (#855)
|
- fix: empty assistant instruction by default @louis-jan (#855)
|
||||||
- bug: fix broken banner position hub screen @urmauur (#846)
|
- bug: fix broken banner position hub screen @urmauur (#846)
|
||||||
- fix: not update active model when using resend button @namchuai (#834)
|
- fix: not update active model when using resend button @namchuai (#834)
|
||||||
- Hotfix jan windows download nitro failed @hiento09 (#838)
|
- Hotfix jan windows download nitro failed @hiento09 (#838)
|
||||||
- Switch to download nitro .tar.gz file instead of .zip file on windows @hiento09 (#832)
|
- Switch to download nitro .tar.gz file instead of .zip file on windows @hiento09 (#832)
|
||||||
- fix/docusaurus-seo @hieu-jan (#818)
|
- fix/docusaurus-seo @hieu-jan (#818)
|
||||||
- fix: CI script - reorder copy models action @louis-jan (#819)
|
- fix: CI script - reorder copy models action @louis-jan (#819)
|
||||||
- fix: messages sync is not threadsafe @louis-jan (#784)
|
- fix: messages sync is not threadsafe @louis-jan (#784)
|
||||||
- Fix Makefile Indentation Issue @hiento09 (#788)
|
- Fix Makefile Indentation Issue @hiento09 (#788)
|
||||||
|
|
||||||
## 🧰 Maintenance
|
## 🧰 Maintenance
|
||||||
|
|
||||||
- chore: update model ranking @louis-jan (#874)
|
- chore: update model ranking @louis-jan (#874)
|
||||||
- Bump nitro version to 0.1.21 - nitro has windows codesign @hiento09 (#843)
|
- Bump nitro version to 0.1.21 - nitro has windows codesign @hiento09 (#843)
|
||||||
- Hotfix jan windows download nitro failed @hiento09 (#838)
|
- Hotfix jan windows download nitro failed @hiento09 (#838)
|
||||||
- 810 docs add modeljson and revamp models specs page @tikikun (#816)
|
- 810 docs add modeljson and revamp models specs page @tikikun (#816)
|
||||||
- Add document for nightly build and update message for manual build @hiento09 (#831)
|
- Add document for nightly build and update message for manual build @hiento09 (#831)
|
||||||
- chore: Bump nitro to 0.1.20 @vuonghoainam (#830)
|
- chore: Bump nitro to 0.1.20 @vuonghoainam (#830)
|
||||||
- Refactor build:extension command @hiento09 (#822)
|
- Refactor build:extension command @hiento09 (#822)
|
||||||
- feat: pre-populate Jan's /models folder @namchuai (#796)
|
- feat: pre-populate Jan's /models folder @namchuai (#796)
|
||||||
- chore: fix pr auto labeling @0xSage (#812)
|
- chore: fix pr auto labeling @0xSage (#812)
|
||||||
- chore: add gi automations @0xSage (#809)
|
- chore: add gi automations @0xSage (#809)
|
||||||
- refactor: jan extensions @louis-jan (#799)
|
- refactor: jan extensions @louis-jan (#799)
|
||||||
- Remove .zip in artifact name @hiento09 (#800)
|
- Remove .zip in artifact name @hiento09 (#800)
|
||||||
- docs/update-api-reference @hieu-jan (#739)
|
- docs/update-api-reference @hieu-jan (#739)
|
||||||
- Add nightly build ci @hiento09 (#794)
|
- Add nightly build ci @hiento09 (#794)
|
||||||
- Fix Makefile Indentation Issue @hiento09 (#788)
|
- Fix Makefile Indentation Issue @hiento09 (#788)
|
||||||
- Switch from .zip to .tar.gz for nitro url inference plugin @hiento09 (#781)
|
- Switch from .zip to .tar.gz for nitro url inference plugin @hiento09 (#781)
|
||||||
|
|
||||||
## Contributor
|
## Contributor
|
||||||
|
|
||||||
@0xSage, @hahuyhoang411, @hiento09, @hieu-jan, @linhtran174, @louis-jan, @namchuai, @tikikun, @urmauur and @vuonghoainam
|
@0xSage, @hahuyhoang411, @hiento09, @hieu-jan, @linhtran174, @louis-jan, @namchuai, @tikikun, @urmauur and @vuonghoainam
|
||||||
|
|
||||||
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 7
|
sidebar_position: 8
|
||||||
|
slug: /changelog/changelog-v0.4.1
|
||||||
---
|
---
|
||||||
# v0.4.1
|
# v0.4.1
|
||||||
|
|
||||||
@ -7,55 +8,55 @@ For more details, [GitHub Issues](https://github.com/janhq/jan/releases/tag/v0.4
|
|||||||
|
|
||||||
Highlighted Issue: [Issue #903: Update README.md](https://github.com/janhq/jan/pull/903)
|
Highlighted Issue: [Issue #903: Update README.md](https://github.com/janhq/jan/pull/903)
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- Update README.md @imtuyethan (#903)
|
- Update README.md @imtuyethan (#903)
|
||||||
|
|
||||||
## 🚀 Features
|
## 🚀 Features
|
||||||
|
|
||||||
- feat: Kill nitro process with API - nitro 0.1.27 @vuonghoainam (#975)
|
- feat: Kill nitro process with API - nitro 0.1.27 @vuonghoainam (#975)
|
||||||
- feat: Inference Nitro with Prompt Template @hahuyhoang411 (#952)
|
- feat: Inference Nitro with Prompt Template @hahuyhoang411 (#952)
|
||||||
- feat: Add NVIDIA triton trt-llm extension @vuonghoainam (#888)
|
- feat: Add NVIDIA triton trt-llm extension @vuonghoainam (#888)
|
||||||
- feat: Hotfit for Nitro loading on CPU with hyper-threading support @vuonghoainam (#931)
|
- feat: Hotfit for Nitro loading on CPU with hyper-threading support @vuonghoainam (#931)
|
||||||
- feat: adding model params @namchuai (#886)
|
- feat: adding model params @namchuai (#886)
|
||||||
- feat: Multiple inference engines for nitro and openai @vuonghoainam (#814)
|
- feat: Multiple inference engines for nitro and openai @vuonghoainam (#814)
|
||||||
- docs: add json schema for engine and model parameters @tikikun (#840)
|
- docs: add json schema for engine and model parameters @tikikun (#840)
|
||||||
- feat: improve SEO keywords @hieu-jan (#894)
|
- feat: improve SEO keywords @hieu-jan (#894)
|
||||||
- enhancement: fix spacing landing page responsive @urmauur (#891)
|
- enhancement: fix spacing landing page responsive @urmauur (#891)
|
||||||
- bug: added label coming soon for windows and linux @urmauur (#881)
|
- bug: added label coming soon for windows and linux @urmauur (#881)
|
||||||
|
|
||||||
## 🐛 Fixes
|
## 🐛 Fixes
|
||||||
|
|
||||||
- fix: 963 can not run openai models on windows @louis-jan (#974)
|
- fix: 963 can not run openai models on windows @louis-jan (#974)
|
||||||
- fix: Inference engine Nitro with Windows with/ without CUDA @vuonghoainam (#950)
|
- fix: Inference engine Nitro with Windows with/ without CUDA @vuonghoainam (#950)
|
||||||
- Fix error Jan app linux crash @hiento09 (#958)
|
- Fix error Jan app linux crash @hiento09 (#958)
|
||||||
- fix: windows bug - control buttons close,max,min hidden @linhtran174 (#949)
|
- fix: windows bug - control buttons close,max,min hidden @linhtran174 (#949)
|
||||||
- bug: fix ui landing page @urmauur (#937)
|
- bug: fix ui landing page @urmauur (#937)
|
||||||
- fix: model parameters for inference extensions @vuonghoainam (#935)
|
- fix: model parameters for inference extensions @vuonghoainam (#935)
|
||||||
- [bug] Fix floating border outside card right panel @urmauur (#934)
|
- [bug] Fix floating border outside card right panel @urmauur (#934)
|
||||||
- fix: import\_typescript.default.isTokenKind is not a function @louis-jan (#923)
|
- fix: import\_typescript.default.isTokenKind is not a function @louis-jan (#923)
|
||||||
- bug: fix syntax formatting @urmauur (#899)
|
- bug: fix syntax formatting @urmauur (#899)
|
||||||
- bug: update metadata title and desc @urmauur (#884)
|
- bug: update metadata title and desc @urmauur (#884)
|
||||||
- fix: download button text color is blending into the background @louis-jan (#883)
|
- fix: download button text color is blending into the background @louis-jan (#883)
|
||||||
|
|
||||||
## 🧰 Maintenance
|
## 🧰 Maintenance
|
||||||
|
|
||||||
- chore: add desktop app analytics @louis-jan (#978)
|
- chore: add desktop app analytics @louis-jan (#978)
|
||||||
- refactor: clean types and interfaces @0xSage (#966)
|
- refactor: clean types and interfaces @0xSage (#966)
|
||||||
- docs: scaffold dev docs @0xSage (#856)
|
- docs: scaffold dev docs @0xSage (#856)
|
||||||
- chore: Bump nitro to 0.1.26 @vuonghoainam (#960)
|
- chore: Bump nitro to 0.1.26 @vuonghoainam (#960)
|
||||||
- Update update-release-url.yml @hiento09 (#951)
|
- Update update-release-url.yml @hiento09 (#951)
|
||||||
- Fix update release url pipeline run failed @hiento09 (#947)
|
- Fix update release url pipeline run failed @hiento09 (#947)
|
||||||
- chore: Bumpt nitro bin version to version 0.1.23 @vuonghoainam (#942)
|
- chore: Bumpt nitro bin version to version 0.1.23 @vuonghoainam (#942)
|
||||||
- Fix update release url pipeline @hiento09 (#941)
|
- Fix update release url pipeline @hiento09 (#941)
|
||||||
- CI automatically update Update README with Nightly Build Information and stable download URL @hiento09 (#940)
|
- CI automatically update Update README with Nightly Build Information and stable download URL @hiento09 (#940)
|
||||||
- refactor: deprecate invokers - auto proxying apis - strict types @louis-jan (#924)
|
- refactor: deprecate invokers - auto proxying apis - strict types @louis-jan (#924)
|
||||||
- docs: standardize yaml files @hieu-jan (#933)
|
- docs: standardize yaml files @hieu-jan (#933)
|
||||||
- chore: universal module definition @louis-jan (#902)
|
- chore: universal module definition @louis-jan (#902)
|
||||||
- docs: add assistants api reference @hieu-jan (#801)
|
- docs: add assistants api reference @hieu-jan (#801)
|
||||||
- docs: add json schema for engine and model parameters @tikikun (#840)
|
- docs: add json schema for engine and model parameters @tikikun (#840)
|
||||||
|
|
||||||
## Contributor
|
## Contributor
|
||||||
|
|
||||||
@0xSage, @hahuyhoang411, @hiento09, @hieu-jan, @imtuyethan, @jan-service-account, @linhtran174, @louis-jan, @namchuai, @tikikun, @urmauur and @vuonghoainam
|
@0xSage, @hahuyhoang411, @hiento09, @hieu-jan, @imtuyethan, @jan-service-account, @linhtran174, @louis-jan, @namchuai, @tikikun, @urmauur and @vuonghoainam
|
||||||
|
|
||||||
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 6
|
sidebar_position: 7
|
||||||
|
slug: /changelog/changelog-v0.4.2
|
||||||
---
|
---
|
||||||
# v0.4.2
|
# v0.4.2
|
||||||
|
|
||||||
@ -7,43 +8,43 @@ For more details, [GitHub Issues](https://github.com/janhq/jan/releases/tag/v0.4
|
|||||||
|
|
||||||
Highlighted Issue: [Issue #1033: Hotfix model hub](https://github.com/janhq/jan/pull/1033)
|
Highlighted Issue: [Issue #1033: Hotfix model hub](https://github.com/janhq/jan/pull/1033)
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- Hotfix model hub @hahuyhoang411 (#1033)
|
- Hotfix model hub @hahuyhoang411 (#1033)
|
||||||
- Update Model.json @hahuyhoang411 (#1005)
|
- Update Model.json @hahuyhoang411 (#1005)
|
||||||
|
|
||||||
## 🚀 Features
|
## 🚀 Features
|
||||||
|
|
||||||
- feat: app theme depend on local storage instead native theme electron @urmauur (#1014)
|
- feat: app theme depend on local storage instead native theme electron @urmauur (#1014)
|
||||||
- feat: move stop inference button into the send button @urmauur (#1011)
|
- feat: move stop inference button into the send button @urmauur (#1011)
|
||||||
- feat: loader when starting model @urmauur (#945)
|
- feat: loader when starting model @urmauur (#945)
|
||||||
- fix: enable download app linux @urmauur (#993)
|
- fix: enable download app linux @urmauur (#993)
|
||||||
- fix: remove coming soon windows @urmauur (#986)
|
- fix: remove coming soon windows @urmauur (#986)
|
||||||
|
|
||||||
## 🐛 Fixes
|
## 🐛 Fixes
|
||||||
|
|
||||||
- fix: migrate new models @louis-jan (#1034)
|
- fix: migrate new models @louis-jan (#1034)
|
||||||
- fix: add input for api key remote model @urmauur (#1031)
|
- fix: add input for api key remote model @urmauur (#1031)
|
||||||
- fix bug #1013, enable posthog for release app version only @hiento09 (#1019)
|
- fix bug #1013, enable posthog for release app version only @hiento09 (#1019)
|
||||||
- fix: delete first message then regenerate again will break the thread @louis-jan (#1015)
|
- fix: delete first message then regenerate again will break the thread @louis-jan (#1015)
|
||||||
- fix: #995 - Fix onboarding state and model sorting @louis-jan (#1009)
|
- fix: #995 - Fix onboarding state and model sorting @louis-jan (#1009)
|
||||||
- fix: limit analytics events capture @louis-jan (#1012)
|
- fix: limit analytics events capture @louis-jan (#1012)
|
||||||
- fix: wrong selected model right panel @urmauur (#1001)
|
- fix: wrong selected model right panel @urmauur (#1001)
|
||||||
- fix: review finder and view as json @louis-jan (#1000)
|
- fix: review finder and view as json @louis-jan (#1000)
|
||||||
- fix: enable download app linux @urmauur (#993)
|
- fix: enable download app linux @urmauur (#993)
|
||||||
|
|
||||||
## 🧰 Maintenance
|
## 🧰 Maintenance
|
||||||
|
|
||||||
- chore: remigrate if there is no models dir @louis-jan (#1038)
|
- chore: remigrate if there is no models dir @louis-jan (#1038)
|
||||||
- bump nitro version to 0.1.30 @hiento09 (#1036)
|
- bump nitro version to 0.1.30 @hiento09 (#1036)
|
||||||
- chore: in app copy fixes @0xSage (#1032)
|
- chore: in app copy fixes @0xSage (#1032)
|
||||||
- Separate posthog project for jan app and docs @hiento09 (#1029)
|
- Separate posthog project for jan app and docs @hiento09 (#1029)
|
||||||
- Update posthog capture url list @hiento09 (#1022)
|
- Update posthog capture url list @hiento09 (#1022)
|
||||||
- docs: second half of "import model docs" PR @0xSage (#1021)
|
- docs: second half of "import model docs" PR @0xSage (#1021)
|
||||||
- docs: how to import models @0xSage (#1020)
|
- docs: how to import models @0xSage (#1020)
|
||||||
- fix bug #1013, enable posthog for release app version only @hiento09 (#1019)
|
- fix bug #1013, enable posthog for release app version only @hiento09 (#1019)
|
||||||
|
|
||||||
## Contributor
|
## Contributor
|
||||||
|
|
||||||
@0xSage, @hahuyhoang411, @hiento09, @jan-service-account, @louis-jan and @urmauur
|
@0xSage, @hahuyhoang411, @hiento09, @jan-service-account, @louis-jan and @urmauur
|
||||||
|
|
||||||
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 5
|
sidebar_position: 6
|
||||||
|
slug: /changelog/changelog-v0.4.3
|
||||||
---
|
---
|
||||||
# v0.4.3
|
# v0.4.3
|
||||||
|
|
||||||
@ -7,62 +8,62 @@ For more details, [GitHub Issues](https://github.com/janhq/jan/releases/tag/v0.4
|
|||||||
|
|
||||||
Highlighted Issue: [Issue #1159: Hotfix Prompt template for models on the Hub](https://github.com/janhq/jan/pull/1159)
|
Highlighted Issue: [Issue #1159: Hotfix Prompt template for models on the Hub](https://github.com/janhq/jan/pull/1159)
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- Hotfix Prompt template for models on the Hub @hahuyhoang411 (#1159)
|
- Hotfix Prompt template for models on the Hub @hahuyhoang411 (#1159)
|
||||||
- Update model list for new release @hahuyhoang411 (#1143)
|
- Update model list for new release @hahuyhoang411 (#1143)
|
||||||
- fix(Thread): #1119 focus on the first thread to prevent blank chat screen @namchuai (#1127)
|
- fix(Thread): #1119 focus on the first thread to prevent blank chat screen @namchuai (#1127)
|
||||||
- fix(Thread): #1064 message being added to wrong thread if switching thread @namchuai (#1108)
|
- fix(Thread): #1064 message being added to wrong thread if switching thread @namchuai (#1108)
|
||||||
- fix(Thread): #1042 allow create new thread by clicking Use in Jan Hub @namchuai (#1103)
|
- fix(Thread): #1042 allow create new thread by clicking Use in Jan Hub @namchuai (#1103)
|
||||||
- feat(ModelSetting): #1065 update state of model setting between threads @namchuai (#1090)
|
- feat(ModelSetting): #1065 update state of model setting between threads @namchuai (#1090)
|
||||||
- Update model version @hahuyhoang411 (#1086)
|
- Update model version @hahuyhoang411 (#1086)
|
||||||
- fix: cache hallucinations and failed to load model due to race condition @louis-jan (#1071)
|
- fix: cache hallucinations and failed to load model due to race condition @louis-jan (#1071)
|
||||||
- fix(thread): #1043 default model to prefer active model @namchuai (#1070)
|
- fix(thread): #1043 default model to prefer active model @namchuai (#1070)
|
||||||
- Update issue templates @0xSage (#1058)
|
- Update issue templates @0xSage (#1058)
|
||||||
- Update ctx\_len and max\_tokens @hahuyhoang411 (#1035)
|
- Update ctx\_len and max\_tokens @hahuyhoang411 (#1035)
|
||||||
|
|
||||||
## 🚀 Features
|
## 🚀 Features
|
||||||
|
|
||||||
- feat: Add codeQL analysis for push main and pr main @hiro-v (#1128)
|
- feat: Add codeQL analysis for push main and pr main @hiro-v (#1128)
|
||||||
- Feature autoupdater for nightly build @hiento09 (#1068)
|
- Feature autoupdater for nightly build @hiento09 (#1068)
|
||||||
- feat: copy button for code block @urmauur (#1062)
|
- feat: copy button for code block @urmauur (#1062)
|
||||||
- Enhancements to Dependency Installation and App Testing @hiento09 (#965)
|
- Enhancements to Dependency Installation and App Testing @hiento09 (#965)
|
||||||
|
|
||||||
## 🐛 Fixes
|
## 🐛 Fixes
|
||||||
|
|
||||||
- fix: error road map url @hieu-jan (#1153)
|
- fix: error road map url @hieu-jan (#1153)
|
||||||
- Fix token speed slow in machine has multi gpus @hiento09 (#1157)
|
- Fix token speed slow in machine has multi gpus @hiento09 (#1157)
|
||||||
- fix: added dialog confirmation clean thread @urmauur (#1142)
|
- fix: added dialog confirmation clean thread @urmauur (#1142)
|
||||||
- fix: remove remote model from shortcut models dialog @urmauur (#1124)
|
- fix: remove remote model from shortcut models dialog @urmauur (#1124)
|
||||||
- fix: ui issue - all models are activated @louis-jan (#1120)
|
- fix: ui issue - all models are activated @louis-jan (#1120)
|
||||||
- fix: should not hide empty message away @louis-jan (#1116)
|
- fix: should not hide empty message away @louis-jan (#1116)
|
||||||
- fix: added tooltip for user cannot change model after starting thread @urmauur (#1115)
|
- fix: added tooltip for user cannot change model after starting thread @urmauur (#1115)
|
||||||
- fix: remote model always active badges @urmauur (#1113)
|
- fix: remote model always active badges @urmauur (#1113)
|
||||||
- fix: handle chat completion state with enter button @louis-jan (#1114)
|
- fix: handle chat completion state with enter button @louis-jan (#1114)
|
||||||
- fix: model active indicator only show when model activated @urmauur (#1110)
|
- fix: model active indicator only show when model activated @urmauur (#1110)
|
||||||
- fix: #1096 yield error message upon thread switching @louis-jan (#1109)
|
- fix: #1096 yield error message upon thread switching @louis-jan (#1109)
|
||||||
- fix: toaster success deleted thread showing id instead of active model @urmauur (#1111)
|
- fix: toaster success deleted thread showing id instead of active model @urmauur (#1111)
|
||||||
- fix: update copy setting page @urmauur (#1105)
|
- fix: update copy setting page @urmauur (#1105)
|
||||||
- fix: search recommended model @urmauur (#1106)
|
- fix: search recommended model @urmauur (#1106)
|
||||||
- fix: #1097 streaming response is replaced by error message @louis-jan (#1099)
|
- fix: #1097 streaming response is replaced by error message @louis-jan (#1099)
|
||||||
- Fix auto update windows Bug @hiento09 (#1102)
|
- Fix auto update windows Bug @hiento09 (#1102)
|
||||||
- fix: added dialog confirmation when delete thread @urmauur (#1093)
|
- fix: added dialog confirmation when delete thread @urmauur (#1093)
|
||||||
- fix: system monitor broken layout when responsive @urmauur (#1085)
|
- fix: system monitor broken layout when responsive @urmauur (#1085)
|
||||||
- bug: chatbox doesn't resize back down @urmauur (#1084)
|
- bug: chatbox doesn't resize back down @urmauur (#1084)
|
||||||
- fix: thread is broken after deleted first generated message @louis-jan (#1061)
|
- fix: thread is broken after deleted first generated message @louis-jan (#1061)
|
||||||
|
|
||||||
## 🧰 Maintenance
|
## 🧰 Maintenance
|
||||||
|
|
||||||
- feat: Add codeQL analysis for push main and pr main @hiro-v (#1128)
|
- feat: Add codeQL analysis for push main and pr main @hiro-v (#1128)
|
||||||
- docs: refactor dev docs, guides and specs @0xSage (#1092)
|
- docs: refactor dev docs, guides and specs @0xSage (#1092)
|
||||||
- Correct jq command cause ci nightly build run failed @hiento09 (#1104)
|
- Correct jq command cause ci nightly build run failed @hiento09 (#1104)
|
||||||
- Fix nightly build autoupdater @hiento09 (#1073)
|
- Fix nightly build autoupdater @hiento09 (#1073)
|
||||||
- Feature autoupdater for nightly build @hiento09 (#1068)
|
- Feature autoupdater for nightly build @hiento09 (#1068)
|
||||||
- docs: Update product.md @0xSage (#1066)
|
- docs: Update product.md @0xSage (#1066)
|
||||||
- Posthog disable click event and increase timeout for nitro load model… @hiento09 (#1060)
|
- Posthog disable click event and increase timeout for nitro load model… @hiento09 (#1060)
|
||||||
- docs: improve quickstart docs @0xSage (#1047)
|
- docs: improve quickstart docs @0xSage (#1047)
|
||||||
|
|
||||||
## Contributor
|
## Contributor
|
||||||
|
|
||||||
@0xSage, @hahuyhoang411, @hiento09, @hieu-jan, @hiro-v, @jan-service-account, @louis-jan, @namchuai and @urmauur
|
@0xSage, @hahuyhoang411, @hiento09, @hieu-jan, @hiro-v, @jan-service-account, @louis-jan, @namchuai and @urmauur
|
||||||
|
|
||||||
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 4
|
sidebar_position: 5
|
||||||
|
slug: /changelog/changelog-v0.4.4
|
||||||
---
|
---
|
||||||
# v0.4.4
|
# v0.4.4
|
||||||
|
|
||||||
@ -7,191 +8,191 @@ For more details, [GitHub Issues](https://github.com/janhq/jan/releases/tag/v0.4
|
|||||||
|
|
||||||
Highlighted Issue: [Issue #1587: Update 2023-11-05-hello-world.md](https://github.com/janhq/jan/pull/1587)
|
Highlighted Issue: [Issue #1587: Update 2023-11-05-hello-world.md](https://github.com/janhq/jan/pull/1587)
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- Update 2023-11-05-hello-world.md @Ssstars (#1587)
|
- Update 2023-11-05-hello-world.md @Ssstars (#1587)
|
||||||
- fix(API): #1511 update swagger page @namchuai (#1572)
|
- fix(API): #1511 update swagger page @namchuai (#1572)
|
||||||
- fix(Thread): #1212 thread.json not created when user change thread settings @namchuai (#1570)
|
- fix(Thread): #1212 thread.json not created when user change thread settings @namchuai (#1570)
|
||||||
- fix(Thread): #1336 not allow creating too many unfinished thread @namchuai (#1538)
|
- fix(Thread): #1336 not allow creating too many unfinished thread @namchuai (#1538)
|
||||||
- Update 01-how-to-get-involved-and-FAQ.mdx @Ssstars (#1555)
|
- Update 01-how-to-get-involved-and-FAQ.mdx @Ssstars (#1555)
|
||||||
- Update 01-how-to-get-involved-and-FAQ.mdx @Ssstars (#1553)
|
- Update 01-how-to-get-involved-and-FAQ.mdx @Ssstars (#1553)
|
||||||
- Update 02-embracing-pod-structure.mdx @Ssstars (#1550)
|
- Update 02-embracing-pod-structure.mdx @Ssstars (#1550)
|
||||||
- Update 01-how-we-hire.mdx @Ssstars (#1551)
|
- Update 01-how-we-hire.mdx @Ssstars (#1551)
|
||||||
- Update 01-how-we-hire.mdx @Ssstars (#1524)
|
- Update 01-how-we-hire.mdx @Ssstars (#1524)
|
||||||
- fix(InferenceExtension): #1067 sync the nitro process state @namchuai (#1493)
|
- fix(InferenceExtension): #1067 sync the nitro process state @namchuai (#1493)
|
||||||
- fix(Messages): #1434 create message via api does not display on app correctly @namchuai (#1479)
|
- fix(Messages): #1434 create message via api does not display on app correctly @namchuai (#1479)
|
||||||
- Docs for the Integration of Continue and Jan in VSCode @0xgokuz (#1467)
|
- Docs for the Integration of Continue and Jan in VSCode @0xgokuz (#1467)
|
||||||
- Chore: Update model.json for UI @hahuyhoang411 (#1448)
|
- Chore: Update model.json for UI @hahuyhoang411 (#1448)
|
||||||
- Docs for Installing Models from Hub @0xgokuz (#1450)
|
- Docs for Installing Models from Hub @0xgokuz (#1450)
|
||||||
- Update about.md @Ssstars (#1436)
|
- Update about.md @Ssstars (#1436)
|
||||||
- feat(UI): #1404 make left side bar collapsible by hot key @namchuai (#1420)
|
- feat(UI): #1404 make left side bar collapsible by hot key @namchuai (#1420)
|
||||||
- docs: Typo in 06-hardware.md @akaMrNagar (#1408)
|
- docs: Typo in 06-hardware.md @akaMrNagar (#1408)
|
||||||
- fix(API): #1409 fix wrong prefix for threads api @namchuai (#1410)
|
- fix(API): #1409 fix wrong prefix for threads api @namchuai (#1410)
|
||||||
- Update model hub @hahuyhoang411 (#1383)
|
- Update model hub @hahuyhoang411 (#1383)
|
||||||
- fix(Model): remove unsupported default model setting params @namchuai (#1382)
|
- fix(Model): remove unsupported default model setting params @namchuai (#1382)
|
||||||
- fix(trinity): update cover path for trinity v1.2 @hahuyhoang411 (#1380)
|
- fix(trinity): update cover path for trinity v1.2 @hahuyhoang411 (#1380)
|
||||||
- Chore/update model hub @hahuyhoang411 (#1342)
|
- Chore/update model hub @hahuyhoang411 (#1342)
|
||||||
- Update about.md @Ssstars (#1359)
|
- Update about.md @Ssstars (#1359)
|
||||||
- fix(JanHub): #1158 sort model list @namchuai (#1257)
|
- fix(JanHub): #1158 sort model list @namchuai (#1257)
|
||||||
- fix(Message): open link with external browser @namchuai (#1339)
|
- fix(Message): open link with external browser @namchuai (#1339)
|
||||||
- feat(Model): #1028 made model.json optional @namchuai (#1314)
|
- feat(Model): #1028 made model.json optional @namchuai (#1314)
|
||||||
- docs: Update onboarding.md @Diane0111 (#1293)
|
- docs: Update onboarding.md @Diane0111 (#1293)
|
||||||
- fix: clean resource on exit @louis-jan (#1290)
|
- fix: clean resource on exit @louis-jan (#1290)
|
||||||
- fix: posthog configuration @hieu-jan (#1283)
|
- fix: posthog configuration @hieu-jan (#1283)
|
||||||
- docs: update README.md @eltociear (#1277)
|
- docs: update README.md @eltociear (#1277)
|
||||||
- Enable scrolling in the message chat box @Gri-ffin (#1280)
|
- Enable scrolling in the message chat box @Gri-ffin (#1280)
|
||||||
- chore: Update README.md @sr-albert (#1263)
|
- chore: Update README.md @sr-albert (#1263)
|
||||||
- Adding new model to the Hub @hahuyhoang411 (#1213)
|
- Adding new model to the Hub @hahuyhoang411 (#1213)
|
||||||
- Feature GPU detection for Jan on Windows and Linux @hiento09 (#1242)
|
- Feature GPU detection for Jan on Windows and Linux @hiento09 (#1242)
|
||||||
- fix(Thread): #1168 fix newly created thread cannot select model after restart @namchuai (#1176)
|
- fix(Thread): #1168 fix newly created thread cannot select model after restart @namchuai (#1176)
|
||||||
|
|
||||||
## 🚀 Features
|
## 🚀 Features
|
||||||
|
|
||||||
- feat: add compatibility tag to model selection in right panel @urmauur (#1552)
|
- feat: add compatibility tag to model selection in right panel @urmauur (#1552)
|
||||||
- Feature integrate antivirus scanner to ci @hiento09 (#1529)
|
- Feature integrate antivirus scanner to ci @hiento09 (#1529)
|
||||||
- feat: [hub] update compatibility tags colors @urmauur (#1516)
|
- feat: [hub] update compatibility tags colors @urmauur (#1516)
|
||||||
- feat: hub recommendation labels @urmauur (#1440)
|
- feat: hub recommendation labels @urmauur (#1440)
|
||||||
- Feature linux support app image format @hiento09 (#1442)
|
- Feature linux support app image format @hiento09 (#1442)
|
||||||
- fix: render external links @urmauur (#1441)
|
- fix: render external links @urmauur (#1441)
|
||||||
- fix: add icon collapsible left panel and update keyboard shortcut page @urmauur (#1439)
|
- fix: add icon collapsible left panel and update keyboard shortcut page @urmauur (#1439)
|
||||||
- feat(UI): update UI footer @urmauur (#1424)
|
- feat(UI): update UI footer @urmauur (#1424)
|
||||||
- Fix Bug for Chat Reply Goes off Screen @mishrababhishek (#1393)
|
- Fix Bug for Chat Reply Goes off Screen @mishrababhishek (#1393)
|
||||||
- feat: move social media from left panel into footer @urmauur (#1325)
|
- feat: move social media from left panel into footer @urmauur (#1325)
|
||||||
- feat: implementation new UI thread settings @urmauur (#1301)
|
- feat: implementation new UI thread settings @urmauur (#1301)
|
||||||
- Bring social media links @Gri-ffin (#1295)
|
- Bring social media links @Gri-ffin (#1295)
|
||||||
- feat: added keyboard shortcut list in setting page @urmauur (#1275)
|
- feat: added keyboard shortcut list in setting page @urmauur (#1275)
|
||||||
- feat: add swagger /docs to localhost:1337 @louis-jan (#1268)
|
- feat: add swagger /docs to localhost:1337 @louis-jan (#1268)
|
||||||
- feat: update posthog configuration @hieu-jan (#1258)
|
- feat: update posthog configuration @hieu-jan (#1258)
|
||||||
- feat: Deprecate model.json ready state in favor of .download ext @louis-jan (#1238)
|
- feat: Deprecate model.json ready state in favor of .download ext @louis-jan (#1238)
|
||||||
- feat: add engine settings @namchuai (#1199)
|
- feat: add engine settings @namchuai (#1199)
|
||||||
- feat: users should be able to switch models mid-thread @louis-jan (#1226)
|
- feat: users should be able to switch models mid-thread @louis-jan (#1226)
|
||||||
- feat: temporary link how to import model @urmauur (#1209)
|
- feat: temporary link how to import model @urmauur (#1209)
|
||||||
|
|
||||||
## 🐛 Fixes
|
## 🐛 Fixes
|
||||||
|
|
||||||
- fix: #1594 - Model settings - change thread model - go back does not see according settings @louis-jan (#1595)
|
- fix: #1594 - Model settings - change thread model - go back does not see according settings @louis-jan (#1595)
|
||||||
- fix: #1548 - duplicate command shortcut instruction @louis-jan (#1600)
|
- fix: #1548 - duplicate command shortcut instruction @louis-jan (#1600)
|
||||||
- fix: switch model caused app crash @louis-jan (#1597)
|
- fix: switch model caused app crash @louis-jan (#1597)
|
||||||
- fix: #1559 Inference Parameters displayed on new thread with Openai GPT Model @louis-jan (#1588)
|
- fix: #1559 Inference Parameters displayed on new thread with Openai GPT Model @louis-jan (#1588)
|
||||||
- fix: enable user set value manually model setting from input @urmauur (#1585)
|
- fix: enable user set value manually model setting from input @urmauur (#1585)
|
||||||
- fix: #1569 - Does not apply thread settings when loading model @louis-jan (#1576)
|
- fix: #1569 - Does not apply thread settings when loading model @louis-jan (#1576)
|
||||||
- fix: could not change model params settings @louis-jan (#1547)
|
- fix: could not change model params settings @louis-jan (#1547)
|
||||||
- fix: gpu check module export does not work in extension @louis-jan (#1536)
|
- fix: gpu check module export does not work in extension @louis-jan (#1536)
|
||||||
- fix: adjust calculation hub labels using total RAM instead remaining RAM @urmauur (#1522)
|
- fix: adjust calculation hub labels using total RAM instead remaining RAM @urmauur (#1522)
|
||||||
- Feature integrate antivirus scanner to ci @hiento09 (#1529)
|
- Feature integrate antivirus scanner to ci @hiento09 (#1529)
|
||||||
- fix: allow users to set max tokens variably @urmauur (#1513)
|
- fix: allow users to set max tokens variably @urmauur (#1513)
|
||||||
- fix: stop word update @louis-jan (#1457)
|
- fix: stop word update @louis-jan (#1457)
|
||||||
- Revert nitro to 0.2.6 @hiento09 (#1491)
|
- Revert nitro to 0.2.6 @hiento09 (#1491)
|
||||||
- fix: enable text selection codeblock @urmauur (#1466)
|
- fix: enable text selection codeblock @urmauur (#1466)
|
||||||
- fix: suppress all main node JS error message dialog @louis-jan (#1460)
|
- fix: suppress all main node JS error message dialog @louis-jan (#1460)
|
||||||
- Correct AppImage path @hiento09 (#1446)
|
- Correct AppImage path @hiento09 (#1446)
|
||||||
- fix: render external links @urmauur (#1441)
|
- fix: render external links @urmauur (#1441)
|
||||||
- fix: add icon collapsible left panel and update keyboard shortcut page @urmauur (#1439)
|
- fix: add icon collapsible left panel and update keyboard shortcut page @urmauur (#1439)
|
||||||
- fix: GET /models does not work due to new default model dir @louis-jan (#1392)
|
- fix: GET /models does not work due to new default model dir @louis-jan (#1392)
|
||||||
- fix: model migration stopped working @louis-jan (#1378)
|
- fix: model migration stopped working @louis-jan (#1378)
|
||||||
- fix: wrong condition for displaying error message @louis-jan (#1376)
|
- fix: wrong condition for displaying error message @louis-jan (#1376)
|
||||||
- fix: show hide section engine params @urmauur (#1374)
|
- fix: show hide section engine params @urmauur (#1374)
|
||||||
- fix: copy stream tooltip and hide section when no params setting @urmauur (#1373)
|
- fix: copy stream tooltip and hide section when no params setting @urmauur (#1373)
|
||||||
- bugs: fix stop streaming when user delete or clean thread @urmauur (#1347)
|
- bugs: fix stop streaming when user delete or clean thread @urmauur (#1347)
|
||||||
- fix: show a proper error message on download failure @louis-jan (#1345)
|
- fix: show a proper error message on download failure @louis-jan (#1345)
|
||||||
- Add detect cuda version jan app @hiento09 (#1351)
|
- Add detect cuda version jan app @hiento09 (#1351)
|
||||||
- fix: Error occurred: Unexpected token "d", "data: ..." is not a valid JSON @louis-jan (#1332)
|
- fix: Error occurred: Unexpected token "d", "data: ..." is not a valid JSON @louis-jan (#1332)
|
||||||
- fix: app getting stuck at downloading 99% while downloading model @louis-jan (#1320)
|
- fix: app getting stuck at downloading 99% while downloading model @louis-jan (#1320)
|
||||||
- correct type utf-8 @hiento09 (#1311)
|
- correct type utf-8 @hiento09 (#1311)
|
||||||
- Fix memory on mac included cached and swap @hiento09 (#1298)
|
- Fix memory on mac included cached and swap @hiento09 (#1298)
|
||||||
- fix: should check app dir before spawning log @louis-jan (#1297)
|
- fix: should check app dir before spawning log @louis-jan (#1297)
|
||||||
- fix: disable process logging from server @louis-jan (#1296)
|
- fix: disable process logging from server @louis-jan (#1296)
|
||||||
- fix: user should be able to access Swagger docs from localhost:1337 @louis-jan (#1292)
|
- fix: user should be able to access Swagger docs from localhost:1337 @louis-jan (#1292)
|
||||||
- Switch from Gigabyte to Gibibyte - System monitor @hiento09 (#1286)
|
- Switch from Gigabyte to Gibibyte - System monitor @hiento09 (#1286)
|
||||||
- Switch from systeminformation to os-utils to resolve Bitdefender false positive and memory leak issue @hiento09 (#1282)
|
- Switch from systeminformation to os-utils to resolve Bitdefender false positive and memory leak issue @hiento09 (#1282)
|
||||||
- fix: swagger CSP issue @louis-jan (#1284)
|
- fix: swagger CSP issue @louis-jan (#1284)
|
||||||
- fix: support markdown break line @urmauur (#1274)
|
- fix: support markdown break line @urmauur (#1274)
|
||||||
- fix ci test run failed @hiento09 (#1267)
|
- fix ci test run failed @hiento09 (#1267)
|
||||||
- Fix wrong linux nitro path @hiento09 (#1266)
|
- Fix wrong linux nitro path @hiento09 (#1266)
|
||||||
- fix: enable command enter on dialog confirmation clean thread @urmauur (#1261)
|
- fix: enable command enter on dialog confirmation clean thread @urmauur (#1261)
|
||||||
- fix: input message duplicated due with some input sources @louis-jan (#1259)
|
- fix: input message duplicated due with some input sources @louis-jan (#1259)
|
||||||
- fix: mac users should not see GPU settings @louis-jan (#1255)
|
- fix: mac users should not see GPU settings @louis-jan (#1255)
|
||||||
- fix: remove redundant gpu detection prompt event @louis-jan (#1254)
|
- fix: remove redundant gpu detection prompt event @louis-jan (#1254)
|
||||||
- fix: engine settings GUI - feature toggle @louis-jan (#1252)
|
- fix: engine settings GUI - feature toggle @louis-jan (#1252)
|
||||||
- Fix bug #1178 high ram on windows @hiento09 (#1241)
|
- Fix bug #1178 high ram on windows @hiento09 (#1241)
|
||||||
- fix: #1183 Reveal in finder does not work on windows @namchuai (#1239)
|
- fix: #1183 Reveal in finder does not work on windows @namchuai (#1239)
|
||||||
- fix: remove delay tooltip and click event @urmauur (#1217)
|
- fix: remove delay tooltip and click event @urmauur (#1217)
|
||||||
- fix: enable enter command on dialog confirmation delete thread @urmauur (#1218)
|
- fix: enable enter command on dialog confirmation delete thread @urmauur (#1218)
|
||||||
- fix: Cleared thread last message is not updated @louis-jan (#1225)
|
- fix: Cleared thread last message is not updated @louis-jan (#1225)
|
||||||
- Fix switch thread crash nitro windows linux @hiento09 (#1214)
|
- Fix switch thread crash nitro windows linux @hiento09 (#1214)
|
||||||
- fix: darkmode broken color @urmauur (#1186)
|
- fix: darkmode broken color @urmauur (#1186)
|
||||||
|
|
||||||
## 🧰 Maintenance
|
## 🧰 Maintenance
|
||||||
|
|
||||||
- chore: typo model.json @louis-jan (#1599)
|
- chore: typo model.json @louis-jan (#1599)
|
||||||
- docs: add 04-how-to-get-error-logs.mdx @hieu-jan (#1580)
|
- docs: add 04-how-to-get-error-logs.mdx @hieu-jan (#1580)
|
||||||
- chore: teach how to attach logs @0xSage (#1578)
|
- chore: teach how to attach logs @0xSage (#1578)
|
||||||
- chore: issues should auto close with PRs through template @0xSage (#1577)
|
- chore: issues should auto close with PRs through template @0xSage (#1577)
|
||||||
- chore: Update issue templates @0xSage (#1568)
|
- chore: Update issue templates @0xSage (#1568)
|
||||||
- docs: fix x handles @0xSage (#1532)
|
- docs: fix x handles @0xSage (#1532)
|
||||||
- Docs to integrate OpenRouter with Jan without UI/UX @0xgokuz (#1495)
|
- Docs to integrate OpenRouter with Jan without UI/UX @0xgokuz (#1495)
|
||||||
- chore: fix darkmode docs @hieu-jan (#1520)
|
- chore: fix darkmode docs @hieu-jan (#1520)
|
||||||
- docs: fix algolia configuration @hieu-jan (#1518)
|
- docs: fix algolia configuration @hieu-jan (#1518)
|
||||||
- docs: fix algolia configuration @hieu-jan (#1517)
|
- docs: fix algolia configuration @hieu-jan (#1517)
|
||||||
- Revert URL release in readme to version 0.4.3 @hiento09 (#1502)
|
- Revert URL release in readme to version 0.4.3 @hiento09 (#1502)
|
||||||
- refactor: add app and nitro log - resolve dependencies issue @louis-jan (#1447)
|
- refactor: add app and nitro log - resolve dependencies issue @louis-jan (#1447)
|
||||||
- chore: enable agolia @hieu-jan (#1497)
|
- chore: enable agolia @hieu-jan (#1497)
|
||||||
- docs: update troubleshooting and redirects old pages @hieu-jan (#1492)
|
- docs: update troubleshooting and redirects old pages @hieu-jan (#1492)
|
||||||
- docs: minor fix @hieu-jan (#1478)
|
- docs: minor fix @hieu-jan (#1478)
|
||||||
- docs: initial handbook structure @hieu-jan (#1477)
|
- docs: initial handbook structure @hieu-jan (#1477)
|
||||||
- Bump nitro to 0.2.8 and change Jan App to support cuda >= 11.7 @hiento09 (#1476)
|
- Bump nitro to 0.2.8 and change Jan App to support cuda >= 11.7 @hiento09 (#1476)
|
||||||
- Chore update docs jan - add AppImage instruction to docusaurus @hiento09 (#1480)
|
- Chore update docs jan - add AppImage instruction to docusaurus @hiento09 (#1480)
|
||||||
- Bump nitro to 0.2.7 @hiento09 (#1474)
|
- Bump nitro to 0.2.7 @hiento09 (#1474)
|
||||||
- chore: error message update @louis-jan (#1473)
|
- chore: error message update @louis-jan (#1473)
|
||||||
- docs: Update 02-import-manually.mdx @0xSage (#1469)
|
- docs: Update 02-import-manually.mdx @0xSage (#1469)
|
||||||
- docs: Update about.md @0xSage (#1465)
|
- docs: Update about.md @0xSage (#1465)
|
||||||
- Bump nitro version to 0.2.6 @hiento09 (#1458)
|
- Bump nitro version to 0.2.6 @hiento09 (#1458)
|
||||||
- docs: adding customize engine settings @hieu-jan (#1455)
|
- docs: adding customize engine settings @hieu-jan (#1455)
|
||||||
- docs: add-missing-path @hieu-jan (#1454)
|
- docs: add-missing-path @hieu-jan (#1454)
|
||||||
- docs: resize gif @hieu-jan (#1453)
|
- docs: resize gif @hieu-jan (#1453)
|
||||||
- docs: revenue philosophy @0xSage (#1443)
|
- docs: revenue philosophy @0xSage (#1443)
|
||||||
- docs: jan framework principles @0xSage (#1438)
|
- docs: jan framework principles @0xSage (#1438)
|
||||||
- docs: fix typo in docs @hieu-jan (#1419)
|
- docs: fix typo in docs @hieu-jan (#1419)
|
||||||
- chore: clean up use os hook @namchuai (#1418)
|
- chore: clean up use os hook @namchuai (#1418)
|
||||||
- docs: explain each docs page intent @0xSage (#1417)
|
- docs: explain each docs page intent @0xSage (#1417)
|
||||||
- docs: Update 01-server.md @0xSage (#1416)
|
- docs: Update 01-server.md @0xSage (#1416)
|
||||||
- Update warning url from github md file to jan.ai docs site @hiento09 (#1414)
|
- Update warning url from github md file to jan.ai docs site @hiento09 (#1414)
|
||||||
- docs: improve gpu not used guide @hieu-jan (#1405)
|
- docs: improve gpu not used guide @hieu-jan (#1405)
|
||||||
- chore: update README.md @eltociear (#1406)
|
- chore: update README.md @eltociear (#1406)
|
||||||
- Update USAGE docs for linux @hiento09 (#1401)
|
- Update USAGE docs for linux @hiento09 (#1401)
|
||||||
- docs: gpu not detected @0xSage (#1399)
|
- docs: gpu not detected @0xSage (#1399)
|
||||||
- docs: Troubleshoot Failed To Fetch @gabrielle-ong (#1398)
|
- docs: Troubleshoot Failed To Fetch @gabrielle-ong (#1398)
|
||||||
- docs: improve docs syntax @hieu-jan (#1394)
|
- docs: improve docs syntax @hieu-jan (#1394)
|
||||||
- docs: add-install-nightly-guide @hieu-jan (#1390)
|
- docs: add-install-nightly-guide @hieu-jan (#1390)
|
||||||
- docs: correct href link @hieu-jan (#1338)
|
- docs: correct href link @hieu-jan (#1338)
|
||||||
- docs: fix chat payload and cURL @hieu-jan (#1360)
|
- docs: fix chat payload and cURL @hieu-jan (#1360)
|
||||||
- docs: add Chatting Guide @hieu-jan (#1184)
|
- docs: add Chatting Guide @hieu-jan (#1184)
|
||||||
- Chore add docs usage how to switch run mode jan app @hiento09 (#1353)
|
- Chore add docs usage how to switch run mode jan app @hiento09 (#1353)
|
||||||
- docs: configure index page @hieu-jan (#1330)
|
- docs: configure index page @hieu-jan (#1330)
|
||||||
- docs: Update product.md @0xSage (#1326)
|
- docs: Update product.md @0xSage (#1326)
|
||||||
- docs: Update 01-server.md @0xSage (#1327)
|
- docs: Update 01-server.md @0xSage (#1327)
|
||||||
- refactor: deprecate the appVersion IPC and use the predefined VERSION @louis-jan (#1309)
|
- refactor: deprecate the appVersion IPC and use the predefined VERSION @louis-jan (#1309)
|
||||||
- docs: update using models documentation @hieu-jan (#1288)
|
- docs: update using models documentation @hieu-jan (#1288)
|
||||||
- docs: update pm handbook @0xSage (#1307)
|
- docs: update pm handbook @0xSage (#1307)
|
||||||
- docs: contributor docs overview @0xSage (#1305)
|
- docs: contributor docs overview @0xSage (#1305)
|
||||||
- chore: github PR template @0xSage (#1304)
|
- chore: github PR template @0xSage (#1304)
|
||||||
- Fix memory on mac included cached and swap @hiento09 (#1298)
|
- Fix memory on mac included cached and swap @hiento09 (#1298)
|
||||||
- Enrich discord message for nightly build url @hiento09 (#1294)
|
- Enrich discord message for nightly build url @hiento09 (#1294)
|
||||||
- Refactor CI by create shared jobs output @hiento09 (#1287)
|
- Refactor CI by create shared jobs output @hiento09 (#1287)
|
||||||
- docs: update README.md @hieu-jan (#1281)
|
- docs: update README.md @hieu-jan (#1281)
|
||||||
- docs: Update README.md @0xSage (#1248)
|
- docs: Update README.md @0xSage (#1248)
|
||||||
- feat: Jan Server, API and decoupled clients @louis-jan (#948)
|
- feat: Jan Server, API and decoupled clients @louis-jan (#948)
|
||||||
- docs: improve 02-import-manually @hieu-jan (#1222)
|
- docs: improve 02-import-manually @hieu-jan (#1222)
|
||||||
- chore: Update issue templates @0xSage (#1229)
|
- chore: Update issue templates @0xSage (#1229)
|
||||||
- docs: Update 02-import-manually.mdx @0xSage (#1197)
|
- docs: Update 02-import-manually.mdx @0xSage (#1197)
|
||||||
- add sleep 500ms if platform is windows before starting nitro process @hiento09 (#1215)
|
- add sleep 500ms if platform is windows before starting nitro process @hiento09 (#1215)
|
||||||
- docs: improve troubleshoot documentation @hieu-jan (#1173)
|
- docs: improve troubleshoot documentation @hieu-jan (#1173)
|
||||||
- docs: update bug report template @hieu-jan (#1180)
|
- docs: update bug report template @hieu-jan (#1180)
|
||||||
- docs: add troubleshooting @hieu-jan (#1169)
|
- docs: add troubleshooting @hieu-jan (#1169)
|
||||||
- chore: copy fixes @0xSage (#1167)
|
- chore: copy fixes @0xSage (#1167)
|
||||||
- docs: Update 01-start-thread.md @0xSage (#1122)
|
- docs: Update 01-start-thread.md @0xSage (#1122)
|
||||||
|
|
||||||
## Contributor
|
## Contributor
|
||||||
|
|
||||||
@0xSage, @0xgokuz, @Diane0111, @Gri-ffin, @Ssstars, @akaMrNagar, @eltociear, @gabrielle-ong, @hahuyhoang411, @hiento09, @hieu-jan, @jan-service-account, @louis-jan, @mishrababhishek, @namchuai, @sr-albert, @urmauur and Abhishek Mishra
|
@0xSage, @0xgokuz, @Diane0111, @Gri-ffin, @Ssstars, @akaMrNagar, @eltociear, @gabrielle-ong, @hahuyhoang411, @hiento09, @hieu-jan, @jan-service-account, @louis-jan, @mishrababhishek, @namchuai, @sr-albert, @urmauur and Abhishek Mishra
|
||||||
|
|
||||||
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 3
|
sidebar_position: 4
|
||||||
|
slug: /changelog/changelog-v0.4.5
|
||||||
---
|
---
|
||||||
# v0.4.5
|
# v0.4.5
|
||||||
|
|
||||||
@ -7,96 +8,96 @@ For more details, [GitHub Issues](https://github.com/janhq/jan/releases/tag/v0.4
|
|||||||
|
|
||||||
Highlighted Issue: [Issue #1758: bug: Correct text for Windows](https://github.com/janhq/jan/issues/1758)
|
Highlighted Issue: [Issue #1758: bug: Correct text for Windows](https://github.com/janhq/jan/issues/1758)
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- fix(Wording): #1758 correct text for windows @namchuai (#1768)
|
- fix(Wording): #1758 correct text for windows @namchuai (#1768)
|
||||||
- fix(Log): server log is not display in windows @namchuai (#1764)
|
- fix(Log): server log is not display in windows @namchuai (#1764)
|
||||||
- Release Cut v0.4.5 @louis-jan (#1752)
|
- Release Cut v0.4.5 @louis-jan (#1752)
|
||||||
- chore(nitro): 0.2.11 -> 0.2.12 @hiro-v (#1754)
|
- chore(nitro): 0.2.11 -> 0.2.12 @hiro-v (#1754)
|
||||||
- fix: Nitro CPU threads with correct physical/ performance CPU count @hiro-v (#1726)
|
- fix: Nitro CPU threads with correct physical/ performance CPU count @hiro-v (#1726)
|
||||||
- fix(Model): #1662 imported model does not use gpu @namchuai (#1723)
|
- fix(Model): #1662 imported model does not use gpu @namchuai (#1723)
|
||||||
- fix(API): #1720 host/port provided in the local API server does not fully applied @namchuai (#1721)
|
- fix(API): #1720 host/port provided in the local API server does not fully applied @namchuai (#1721)
|
||||||
- fix: server API reference @hiro-v (#1670)
|
- fix: server API reference @hiro-v (#1670)
|
||||||
- fix(Model): refactor model label @namchuai (#1596)
|
- fix(Model): refactor model label @namchuai (#1596)
|
||||||
- docs/postmortem v 0.4.4 @hieu-jan (#1617)
|
- docs/postmortem v 0.4.4 @hieu-jan (#1617)
|
||||||
- chore(ShortcutModal): clean up shortcut modal @namchuai (#1614)
|
- chore(ShortcutModal): clean up shortcut modal @namchuai (#1614)
|
||||||
- chore(Dependencies): upgrade node-fetch to fix vulnerable issue @namchuai (#1598)
|
- chore(Dependencies): upgrade node-fetch to fix vulnerable issue @namchuai (#1598)
|
||||||
|
|
||||||
## 🚀 Features
|
## 🚀 Features
|
||||||
|
|
||||||
- feat: update UI allow user change folder @urmauur (#1738)
|
- feat: update UI allow user change folder @urmauur (#1738)
|
||||||
- feat: error message when not enough RAM @urmauur (#1706)
|
- feat: error message when not enough RAM @urmauur (#1706)
|
||||||
- feat: improvement ux for local api server @urmauur (#1704)
|
- feat: improvement ux for local api server @urmauur (#1704)
|
||||||
- feat: allow user to move jan folder @namchuai (#1649)
|
- feat: allow user to move jan folder @namchuai (#1649)
|
||||||
- feat: HTTP proxy support @markmehere (#1562)
|
- feat: HTTP proxy support @markmehere (#1562)
|
||||||
- Feature add schedule clean cloudflare page and r2 @hiento09 (#1653)
|
- Feature add schedule clean cloudflare page and r2 @hiento09 (#1653)
|
||||||
- feat: relayout left panel setting page @urmauur (#1648)
|
- feat: relayout left panel setting page @urmauur (#1648)
|
||||||
- Update CI follow git flow @hiento09 (#1625)
|
- Update CI follow git flow @hiento09 (#1625)
|
||||||
- feat: Implement UI page API server dashboard @urmauur (#1636)
|
- feat: Implement UI page API server dashboard @urmauur (#1636)
|
||||||
- fix: #1545 long thread title @lucido-simon (#1605)
|
- fix: #1545 long thread title @lucido-simon (#1605)
|
||||||
|
|
||||||
## 🐛 Fixes
|
## 🐛 Fixes
|
||||||
|
|
||||||
- fix: model selection does not show in API settings page @louis-jan (#1828)
|
- fix: model selection does not show in API settings page @louis-jan (#1828)
|
||||||
- fix: user can't view model setting in local api server @namchuai (#1807)
|
- fix: user can't view model setting in local api server @namchuai (#1807)
|
||||||
- fix: cannot change jan data folder @namchuai (#1805)
|
- fix: cannot change jan data folder @namchuai (#1805)
|
||||||
- fix: model selection does not show in API settings page @louis-jan (#1802)
|
- fix: model selection does not show in API settings page @louis-jan (#1802)
|
||||||
- fix: user can't use a model in model hub @namchuai (#1801)
|
- fix: user can't use a model in model hub @namchuai (#1801)
|
||||||
- fix: stop openai inference raises something amiss @louis-jan (#1799)
|
- fix: stop openai inference raises something amiss @louis-jan (#1799)
|
||||||
- regression fix: input disabled darkmode @urmauur (#1800)
|
- regression fix: input disabled darkmode @urmauur (#1800)
|
||||||
- fix: clean last message when user clean thread message @namchuai (#1793)
|
- fix: clean last message when user clean thread message @namchuai (#1793)
|
||||||
- fix: app log not being printed @namchuai (#1790)
|
- fix: app log not being printed @namchuai (#1790)
|
||||||
- fix: api settings are not applied on changes @louis-jan (#1789)
|
- fix: api settings are not applied on changes @louis-jan (#1789)
|
||||||
- fix: could not delete model @louis-jan (#1779)
|
- fix: could not delete model @louis-jan (#1779)
|
||||||
- fix: can not start model when server is not enabled from model settings page @louis-jan (#1774)
|
- fix: can not start model when server is not enabled from model settings page @louis-jan (#1774)
|
||||||
- regression fix: input port not accept alphabets @urmauur (#1772)
|
- regression fix: input port not accept alphabets @urmauur (#1772)
|
||||||
- Correct bash script syntax in ci @hiento09 (#1769)
|
- Correct bash script syntax in ci @hiento09 (#1769)
|
||||||
- Hotfix CI pre-release not trigger @hiento09 (#1757)
|
- Hotfix CI pre-release not trigger @hiento09 (#1757)
|
||||||
- fix: bring back open app directory @louis-jan (#1756)
|
- fix: bring back open app directory @louis-jan (#1756)
|
||||||
- fix: input port have range validation @urmauur (#1741)
|
- fix: input port have range validation @urmauur (#1741)
|
||||||
- Fix error nightly build schedule run failed @hiento09 (#1736)
|
- Fix error nightly build schedule run failed @hiento09 (#1736)
|
||||||
- fix: active model when start server @urmauur (#1719)
|
- fix: active model when start server @urmauur (#1719)
|
||||||
- fix: Change to fixed `localhost` instead of using host variable @hiro-v (#1729)
|
- fix: Change to fixed `localhost` instead of using host variable @hiro-v (#1729)
|
||||||
- Fix autoupdater nightly build error @hiento09 (#1727)
|
- Fix autoupdater nightly build error @hiento09 (#1727)
|
||||||
- Correct download url readme @hiento09 (#1724)
|
- Correct download url readme @hiento09 (#1724)
|
||||||
- fix: API chat/completion is blocked by CORS @louis-jan (#1705)
|
- fix: API chat/completion is blocked by CORS @louis-jan (#1705)
|
||||||
- fix: Jan server - v1/chat/completions is throwing ERR\_REQUIRE\_ESM @louis-jan (#1703)
|
- fix: Jan server - v1/chat/completions is throwing ERR\_REQUIRE\_ESM @louis-jan (#1703)
|
||||||
- fix: Jan server is showing blank page @louis-jan (#1702)
|
- fix: Jan server is showing blank page @louis-jan (#1702)
|
||||||
- fix: switching loader from remote to local model from thread right panel @urmauur (#1692)
|
- fix: switching loader from remote to local model from thread right panel @urmauur (#1692)
|
||||||
- fix: hot-fix algolia search @hieu-jan (#1700)
|
- fix: hot-fix algolia search @hieu-jan (#1700)
|
||||||
- fix: disable api key field while server is running @urmauur (#1694)
|
- fix: disable api key field while server is running @urmauur (#1694)
|
||||||
- fix: stoping model show starting model @urmauur (#1693)
|
- fix: stoping model show starting model @urmauur (#1693)
|
||||||
- fix bug #1650 hogging resources @hiento09 (#1663)
|
- fix bug #1650 hogging resources @hiento09 (#1663)
|
||||||
- fix: auto select text when collapse panel @urmauur (#1645)
|
- fix: auto select text when collapse panel @urmauur (#1645)
|
||||||
- fix: wrong selected model ref @louis-jan (#1638)
|
- fix: wrong selected model ref @louis-jan (#1638)
|
||||||
- fix: enable check for update on all supported platforms @louis-jan (#1626)
|
- fix: enable check for update on all supported platforms @louis-jan (#1626)
|
||||||
- fix: correct footer @hieu-jan (#1628)
|
- fix: correct footer @hieu-jan (#1628)
|
||||||
|
|
||||||
## 🧰 Maintenance
|
## 🧰 Maintenance
|
||||||
|
|
||||||
- Docs publish to github page trigger on push to docs branch @hiento09 (#1783)
|
- Docs publish to github page trigger on push to docs branch @hiento09 (#1783)
|
||||||
- Correct bash script syntax in ci @hiento09 (#1769)
|
- Correct bash script syntax in ci @hiento09 (#1769)
|
||||||
- Combine 2 ci pipeline pre-release and nightly into one @hiento09 (#1767)
|
- Combine 2 ci pipeline pre-release and nightly into one @hiento09 (#1767)
|
||||||
- Hotfix CI pre-release not trigger @hiento09 (#1757)
|
- Hotfix CI pre-release not trigger @hiento09 (#1757)
|
||||||
- Fix error nightly build schedule run failed @hiento09 (#1736)
|
- Fix error nightly build schedule run failed @hiento09 (#1736)
|
||||||
- docs: add troubleshoot unexpected token @hieu-jan (#1711)
|
- docs: add troubleshoot unexpected token @hieu-jan (#1711)
|
||||||
- docs: fix about pages @0xSage (#1699)
|
- docs: fix about pages @0xSage (#1699)
|
||||||
- refactor: deprecate extension type implementation @louis-jan (#1677)
|
- refactor: deprecate extension type implementation @louis-jan (#1677)
|
||||||
- refactor: file prefix replace utils \& add unit test @louis-jan (#1676)
|
- refactor: file prefix replace utils \& add unit test @louis-jan (#1676)
|
||||||
- Correct ref branch for update url on README.md file @hiento09 (#1672)
|
- Correct ref branch for update url on README.md file @hiento09 (#1672)
|
||||||
- docs: update 02-somethings-amiss @hieu-jan (#1668)
|
- docs: update 02-somethings-amiss @hieu-jan (#1668)
|
||||||
- Cherrypick cicd to main branch to apply new gitflow @hiento09 (#1665)
|
- Cherrypick cicd to main branch to apply new gitflow @hiento09 (#1665)
|
||||||
- docs: add user and developer guides for extensions @hieu-jan (#1657)
|
- docs: add user and developer guides for extensions @hieu-jan (#1657)
|
||||||
- docs: add QA Script @hieu-jan (#1660)
|
- docs: add QA Script @hieu-jan (#1660)
|
||||||
- chore: Bump nitro to 0.2.11 @hiro-v (#1655)
|
- chore: Bump nitro to 0.2.11 @hiro-v (#1655)
|
||||||
- chore: Bump version nitro to 0.2.10 @hiro-v (#1644)
|
- chore: Bump version nitro to 0.2.10 @hiro-v (#1644)
|
||||||
- docs: add antivirus compatibility testing @hieu-jan (#1641)
|
- docs: add antivirus compatibility testing @hieu-jan (#1641)
|
||||||
- refactor: introduce node module in nitro extension @louis-jan (#1630)
|
- refactor: introduce node module in nitro extension @louis-jan (#1630)
|
||||||
- Update 02-somethings-amiss.mdx @Ssstars (#1634)
|
- Update 02-somethings-amiss.mdx @Ssstars (#1634)
|
||||||
- docs: add integration AzureOpenAI @hieu-jan (#1632)
|
- docs: add integration AzureOpenAI @hieu-jan (#1632)
|
||||||
- docs: add troubleshooting permission denied @hieu-jan (#1631)
|
- docs: add troubleshooting permission denied @hieu-jan (#1631)
|
||||||
|
|
||||||
## Contributor
|
## Contributor
|
||||||
|
|
||||||
@0xSage, @Ssstars, @hiento09, @hientominh, @hieu-jan, @hiro-v, @jan-service-account, @louis-jan, @lucido-simon, @markmehere, @namchuai and @urmauur
|
@0xSage, @Ssstars, @hiento09, @hientominh, @hieu-jan, @hiro-v, @jan-service-account, @louis-jan, @lucido-simon, @markmehere, @namchuai and @urmauur
|
||||||
|
|
||||||
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 2
|
sidebar_position: 3
|
||||||
|
slug: /changelog/changelog-v0.4.6
|
||||||
---
|
---
|
||||||
# v0.4.6
|
# v0.4.6
|
||||||
|
|
||||||
@ -7,57 +8,57 @@ For more details, [GitHub Issues](https://github.com/janhq/jan/releases/tag/v0.4
|
|||||||
|
|
||||||
Highlighted Issue: [Issue #1918: Regression fix assistant extension codesign](https://github.com/janhq/jan/pull/1918)
|
Highlighted Issue: [Issue #1918: Regression fix assistant extension codesign](https://github.com/janhq/jan/pull/1918)
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- Regression fix assitant extension codesign @hiento09 (#1918)
|
- Regression fix assitant extension codesign @hiento09 (#1918)
|
||||||
- Release cut 0.4.6 @louis-jan (#1888)
|
- Release cut 0.4.6 @louis-jan (#1888)
|
||||||
- feat: add factory reset feature @namchuai (#1750)
|
- feat: add factory reset feature @namchuai (#1750)
|
||||||
- chore: add react developer tools to electron @Helloyunho (#1858)
|
- chore: add react developer tools to electron @Helloyunho (#1858)
|
||||||
- Sync Release 0.4.5 to dev @louis-jan (#1830)
|
- Sync Release 0.4.5 to dev @louis-jan (#1830)
|
||||||
|
|
||||||
## 🚀 Features
|
## 🚀 Features
|
||||||
|
|
||||||
- feat: integrate umami @hieu-jan (#1809)
|
- feat: integrate umami @hieu-jan (#1809)
|
||||||
- feat: Add default value for ngl @hiro-v (#1886)
|
- feat: Add default value for ngl @hiro-v (#1886)
|
||||||
- feat: add start/stop model via http api @namchuai (#1862)
|
- feat: add start/stop model via http api @namchuai (#1862)
|
||||||
- feat: add snackbar component and update style side banner @urmauur (#1874)
|
- feat: add snackbar component and update style side banner @urmauur (#1874)
|
||||||
- feat: move open app directory into icon folder @urmauur (#1879)
|
- feat: move open app directory into icon folder @urmauur (#1879)
|
||||||
- chore: Bump nitro to 0.3.3 @hiro-v (#1877)
|
- chore: Bump nitro to 0.3.3 @hiro-v (#1877)
|
||||||
- feat: put timestamp under thread name in left panel @urmauur (#1820)
|
- feat: put timestamp under thread name in left panel @urmauur (#1820)
|
||||||
- perf: remove unnecessary rerender when user typing input @namchuai (#1818)
|
- perf: remove unnecessary rerender when user typing input @namchuai (#1818)
|
||||||
|
|
||||||
## 🐛 Fixes
|
## 🐛 Fixes
|
||||||
|
|
||||||
- fix: umami analytics send app loaded event @louis-jan (#1928)
|
- fix: umami analytics send app loaded event @louis-jan (#1928)
|
||||||
- fix: migration loading indicator @louis-jan (#1913)
|
- fix: migration loading indicator @louis-jan (#1913)
|
||||||
- fix: broken manual import model with NA fields @louis-jan (#1912)
|
- fix: broken manual import model with NA fields @louis-jan (#1912)
|
||||||
- fix: openAIEmbedding now requires top level API Key configuration @louis-jan (#1902)
|
- fix: openAIEmbedding now requires top level API Key configuration @louis-jan (#1902)
|
||||||
- fix: load model fail overlays thread message error @louis-jan (#1901)
|
- fix: load model fail overlays thread message error @louis-jan (#1901)
|
||||||
- fix: show generate response on message send @louis-jan (#1895)
|
- fix: show generate response on message send @louis-jan (#1895)
|
||||||
- fix: display error message on model load fail @louis-jan (#1894)
|
- fix: display error message on model load fail @louis-jan (#1894)
|
||||||
- fix: the selected model auto revert back to previous used model with setting mismatch @louis-jan (#1883)
|
- fix: the selected model auto revert back to previous used model with setting mismatch @louis-jan (#1883)
|
||||||
- fix: add dialog confirm when move folder and next dest isn't empty @urmauur (#1880)
|
- fix: add dialog confirm when move folder and next dest isn't empty @urmauur (#1880)
|
||||||
- Increase timeout for explore.e2e.spec test @hiento09 (#1844)
|
- Increase timeout for explore.e2e.spec test @hiento09 (#1844)
|
||||||
- chore: Bump nitro to 0.3.3 @hiro-v (#1877)
|
- chore: Bump nitro to 0.3.3 @hiro-v (#1877)
|
||||||
- fix: auto collapse retrieval setting while update config @urmauur (#1866)
|
- fix: auto collapse retrieval setting while update config @urmauur (#1866)
|
||||||
- fix: loader show while error global when change folder @urmauur (#1870)
|
- fix: loader show while error global when change folder @urmauur (#1870)
|
||||||
- fix: retrieval always ask for api key @louis-jan (#1856)
|
- fix: retrieval always ask for api key @louis-jan (#1856)
|
||||||
- fix: all input text box are disabled @namchuai (#1855)
|
- fix: all input text box are disabled @namchuai (#1855)
|
||||||
- fix: add loader when user change folder @urmauur (#1850)
|
- fix: add loader when user change folder @urmauur (#1850)
|
||||||
- Add code sign step for darwin assistant extension @hiento09 (#1841)
|
- Add code sign step for darwin assistant extension @hiento09 (#1841)
|
||||||
- fix: preserve focused thread when navigating in jan app @namchuai (#1814)
|
- fix: preserve focused thread when navigating in jan app @namchuai (#1814)
|
||||||
- fix: highlight menu dropdown server options @urmauur (#1831)
|
- fix: highlight menu dropdown server options @urmauur (#1831)
|
||||||
|
|
||||||
## 🧰 Maintenance
|
## 🧰 Maintenance
|
||||||
|
|
||||||
- chore: mark RAG as experimental feature @louis-jan (#1882)
|
- chore: mark RAG as experimental feature @louis-jan (#1882)
|
||||||
- Increase timeout for explore.e2e.spec test @hiento09 (#1844)
|
- Increase timeout for explore.e2e.spec test @hiento09 (#1844)
|
||||||
- chore: Bump nitro to 0.3.3 @hiro-v (#1877)
|
- chore: Bump nitro to 0.3.3 @hiro-v (#1877)
|
||||||
- chore: Jan Data Folder setting is no longer an experimental feature @louis-jan (#1847)
|
- chore: Jan Data Folder setting is no longer an experimental feature @louis-jan (#1847)
|
||||||
- chore: resolve main conflict @louis-jan (#1833)
|
- chore: resolve main conflict @louis-jan (#1833)
|
||||||
- Update release url on README to default branch instead of main branch @hiento09 (#1832)
|
- Update release url on README to default branch instead of main branch @hiento09 (#1832)
|
||||||
|
|
||||||
## Contributor
|
## Contributor
|
||||||
|
|
||||||
@Helloyunho, @hiento09, @hieu-jan, @hiro-v, @jan-service-account, @louis-jan, @namchuai, @urmauur and James
|
@Helloyunho, @hiento09, @hieu-jan, @hiro-v, @jan-service-account, @louis-jan, @namchuai, @urmauur and James
|
||||||
|
|
||||||
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 1
|
sidebar_position: 2
|
||||||
|
slug: /changelog/changelog-v0.4.7
|
||||||
---
|
---
|
||||||
# v0.4.7
|
# v0.4.7
|
||||||
|
|
||||||
@ -7,111 +8,111 @@ For more details, [GitHub Issues](https://github.com/janhq/jan/releases/tag/v0.4
|
|||||||
|
|
||||||
Highlighted Issue: [Issue #2121: Release cut v0.4.7](https://github.com/janhq/jan/pull/2121)
|
Highlighted Issue: [Issue #2121: Release cut v0.4.7](https://github.com/janhq/jan/pull/2121)
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- Release cut v0.4.7 @louis-jan (#2121)
|
- Release cut v0.4.7 @louis-jan (#2121)
|
||||||
- chore: update models @hahuyhoang411 (#1829)
|
- chore: update models @hahuyhoang411 (#1829)
|
||||||
- add docs for entire advanced settings @hieu-jan (#2063)
|
- add docs for entire advanced settings @hieu-jan (#2063)
|
||||||
- docs: Fix #2040 : added /v1 path to apiBase @ldebs (#2041)
|
- docs: Fix #2040 : added /v1 path to apiBase @ldebs (#2041)
|
||||||
- fix: ui for disabled state of gpu acceleration @namchuai (#2034)
|
- fix: ui for disabled state of gpu acceleration @namchuai (#2034)
|
||||||
- feat: Initialize POM structure with fixtures on Playwright @Van-QA (#2015)
|
- feat: Initialize POM structure with fixtures on Playwright @Van-QA (#2015)
|
||||||
- Alternative solution for `Thread titles should auto-summarize Topic` @0xgokuz (#1976)
|
- Alternative solution for `Thread titles should auto-summarize Topic` @0xgokuz (#1976)
|
||||||
- Update authors.yml Rex @hahuyhoang411 (#1956)
|
- Update authors.yml Rex @hahuyhoang411 (#1956)
|
||||||
- Update authors.yml Louis @louis-jan (#1955)
|
- Update authors.yml Louis @louis-jan (#1955)
|
||||||
- Change env Dockerfile.gpu and update README @hiento09 (#1963)
|
- Change env Dockerfile.gpu and update README @hiento09 (#1963)
|
||||||
- chore: Update authors.yml for Van Pham @Van-QA (#1954)
|
- chore: Update authors.yml for Van Pham @Van-QA (#1954)
|
||||||
- Sync dev branch to docs branch @hieu-jan (#1948)
|
- Sync dev branch to docs branch @hieu-jan (#1948)
|
||||||
- sync current docs branch to dev branch @hieu-jan (#1947)
|
- sync current docs branch to dev branch @hieu-jan (#1947)
|
||||||
- feat: Playwright capture screenshot of Electron desktop app (Jan) on failures @Van-QA (#1934)
|
- feat: Playwright capture screenshot of Electron desktop app (Jan) on failures @Van-QA (#1934)
|
||||||
- Sync main to dev after release 0.4.6 @hiento09 (#1929)
|
- Sync main to dev after release 0.4.6 @hiento09 (#1929)
|
||||||
|
|
||||||
## 🚀 Features
|
## 🚀 Features
|
||||||
|
|
||||||
- feat: Add nitro vulkan to support AMD GPU/ APU and Intel Arc GPU @hiro-v (#2056)
|
- feat: Add nitro vulkan to support AMD GPU/ APU and Intel Arc GPU @hiro-v (#2056)
|
||||||
- fix: flow edit message @urmauur (#2113)
|
- fix: flow edit message @urmauur (#2113)
|
||||||
- Feature helmchart and ci jan server @hiento09 (#2106)
|
- Feature helmchart and ci jan server @hiento09 (#2106)
|
||||||
- feat: improvementUI GPU acceleration @urmauur (#1990)
|
- feat: improvementUI GPU acceleration @urmauur (#1990)
|
||||||
- feat: add edit messages users @urmauur (#1974)
|
- feat: add edit messages users @urmauur (#1974)
|
||||||
- feat: revamp ui dropdown list model option @urmauur (#1977)
|
- feat: revamp ui dropdown list model option @urmauur (#1977)
|
||||||
- feat: add modal troubleshooting guideline @urmauur (#1968)
|
- feat: add modal troubleshooting guideline @urmauur (#1968)
|
||||||
- feat: integrate umami script locally @hieu-jan (#1958)
|
- feat: integrate umami script locally @hieu-jan (#1958)
|
||||||
- feat: User Selectable GPUs and GPU-based Model Recommendations @hiento09 (#1730)
|
- feat: User Selectable GPUs and GPU-based Model Recommendations @hiento09 (#1730)
|
||||||
|
|
||||||
## 🐛 Fixes
|
## 🐛 Fixes
|
||||||
|
|
||||||
- fix: correct vulkan settings @louis-jan (#2128)
|
- fix: correct vulkan settings @louis-jan (#2128)
|
||||||
- fix: chore UI @louis-jan (#2125)
|
- fix: chore UI @louis-jan (#2125)
|
||||||
- Regression: bump nitro to 0.3.13 @hiento09 (#2124)
|
- Regression: bump nitro to 0.3.13 @hiento09 (#2124)
|
||||||
- Regression: Linux vulkan binary path @hiento09 (#2123)
|
- Regression: Linux vulkan binary path @hiento09 (#2123)
|
||||||
- fix: revert back menu actions @louis-jan (#2120)
|
- fix: revert back menu actions @louis-jan (#2120)
|
||||||
- fix: mismatching between nightly build and version - jan about @louis-jan (#2114)
|
- fix: mismatching between nightly build and version - jan about @louis-jan (#2114)
|
||||||
- fix: flow edit message @urmauur (#2113)
|
- fix: flow edit message @urmauur (#2113)
|
||||||
- fix: tools section should be expanded by default @louis-jan (#2110)
|
- fix: tools section should be expanded by default @louis-jan (#2110)
|
||||||
- fix: failed to bind port - nitro error message copy @louis-jan (#2101)
|
- fix: failed to bind port - nitro error message copy @louis-jan (#2101)
|
||||||
- fix: remove caret down icon when tab selected into remote model @urmauur (#2102)
|
- fix: remove caret down icon when tab selected into remote model @urmauur (#2102)
|
||||||
- fix: openai client sdk compatible @louis-jan (#2096)
|
- fix: openai client sdk compatible @louis-jan (#2096)
|
||||||
- Fix bug #2005 docker blank website @hiento09 (#2093)
|
- Fix bug #2005 docker blank website @hiento09 (#2093)
|
||||||
- fix: check if port is occupied before start local server @namchuai (#2098)
|
- fix: check if port is occupied before start local server @namchuai (#2098)
|
||||||
- fix: broken model.json update @louis-jan (#2099)
|
- fix: broken model.json update @louis-jan (#2099)
|
||||||
- fix: make text input scrollable @urmauur (#2083)
|
- fix: make text input scrollable @urmauur (#2083)
|
||||||
- fix: failed to send message blocks thread creation @louis-jan (#2091)
|
- fix: failed to send message blocks thread creation @louis-jan (#2091)
|
||||||
- fix: server crashes on missing module @louis-jan (#2089)
|
- fix: server crashes on missing module @louis-jan (#2089)
|
||||||
- fix: expand assistant and model settings by default @louis-jan (#2081)
|
- fix: expand assistant and model settings by default @louis-jan (#2081)
|
||||||
- fix: move jan data folder - error handling for no write permission granted @louis-jan (#2077)
|
- fix: move jan data folder - error handling for no write permission granted @louis-jan (#2077)
|
||||||
- fix: check for updates should show no update are available on the latest build @louis-jan (#2075)
|
- fix: check for updates should show no update are available on the latest build @louis-jan (#2075)
|
||||||
- fix: infinity showed when haven't get total size @namchuai (#2066)
|
- fix: infinity showed when haven't get total size @namchuai (#2066)
|
||||||
- fix: should stop running the model when GPU settings are changed @louis-jan (#2067)
|
- fix: should stop running the model when GPU settings are changed @louis-jan (#2067)
|
||||||
- fix: settings page state loop and dark theme @louis-jan (#2065)
|
- fix: settings page state loop and dark theme @louis-jan (#2065)
|
||||||
- fix: Fix Nitro windows with error 3221225781 @hiro-v (#2057)
|
- fix: Fix Nitro windows with error 3221225781 @hiro-v (#2057)
|
||||||
- fix: message should only be interrupted when i start another thread @louis-jan (#2053)
|
- fix: message should only be interrupted when i start another thread @louis-jan (#2053)
|
||||||
- fix: local server start error should not change to started state @louis-jan (#2052)
|
- fix: local server start error should not change to started state @louis-jan (#2052)
|
||||||
- fix: update copy of message queue @louis-jan (#2051)
|
- fix: update copy of message queue @louis-jan (#2051)
|
||||||
- fix: download mutilple binaries @namchuai (#2043)
|
- fix: download mutilple binaries @namchuai (#2043)
|
||||||
- fix: disable gpu drop down box if there's no GPU ready @namchuai (#2046)
|
- fix: disable gpu drop down box if there's no GPU ready @namchuai (#2046)
|
||||||
- fix: app should generate thread title with length restriction @louis-jan (#2037)
|
- fix: app should generate thread title with length restriction @louis-jan (#2037)
|
||||||
- fix: factory reset not remove jan data folder @namchuai (#2027)
|
- fix: factory reset not remove jan data folder @namchuai (#2027)
|
||||||
- fix: content setting right panel default to collapse @urmauur (#2026)
|
- fix: content setting right panel default to collapse @urmauur (#2026)
|
||||||
- fix: local server blank parameters if there is no thread selected @louis-jan (#2028)
|
- fix: local server blank parameters if there is no thread selected @louis-jan (#2028)
|
||||||
- fix: model path backward compatible @louis-jan (#2018)
|
- fix: model path backward compatible @louis-jan (#2018)
|
||||||
- fix: resolve state update loop infinitive rerendering @louis-jan (#2017)
|
- fix: resolve state update loop infinitive rerendering @louis-jan (#2017)
|
||||||
- fix: lack of auto-cleaning mechanism for logs @louis-jan (#2003)
|
- fix: lack of auto-cleaning mechanism for logs @louis-jan (#2003)
|
||||||
- fix: app stuck regenerating assistant response @louis-jan (#2001)
|
- fix: app stuck regenerating assistant response @louis-jan (#2001)
|
||||||
- fix: decouple thread summary update @louis-jan (#1994)
|
- fix: decouple thread summary update @louis-jan (#1994)
|
||||||
- fix: app fails gracefully with clear error messages @louis-jan (#1993)
|
- fix: app fails gracefully with clear error messages @louis-jan (#1993)
|
||||||
- fix: retrieval stuck at generating response @louis-jan (#1988)
|
- fix: retrieval stuck at generating response @louis-jan (#1988)
|
||||||
- Fix macos auto update failed on nightly build @hiento09 (#1991)
|
- Fix macos auto update failed on nightly build @hiento09 (#1991)
|
||||||
- fix: model downloads broken on nightly @louis-jan (#1984)
|
- fix: model downloads broken on nightly @louis-jan (#1984)
|
||||||
- fix: RAG enhancements @urmauur (#1965)
|
- fix: RAG enhancements @urmauur (#1965)
|
||||||
- Update docs run Jan Server in Docker mode @hiento09 (#1960)
|
- Update docs run Jan Server in Docker mode @hiento09 (#1960)
|
||||||
- fix: update conditional check last status message @urmauur (#1951)
|
- fix: update conditional check last status message @urmauur (#1951)
|
||||||
- fix: markdown render for chat completion role user @urmauur (#1944)
|
- fix: markdown render for chat completion role user @urmauur (#1944)
|
||||||
- fix: avoid users to create so many threads at the same time @urmauur (#1930)
|
- fix: avoid users to create so many threads at the same time @urmauur (#1930)
|
||||||
- fix: download model will close panel item hub @urmauur (#1923)
|
- fix: download model will close panel item hub @urmauur (#1923)
|
||||||
|
|
||||||
## 🧰 Maintenance
|
## 🧰 Maintenance
|
||||||
|
|
||||||
- docs: improve integrations guide \& import model using absolute path @hieu-jan (#2076)
|
- docs: improve integrations guide \& import model using absolute path @hieu-jan (#2076)
|
||||||
- chore: add app version into log @namchuai (#2116)
|
- chore: add app version into log @namchuai (#2116)
|
||||||
- docs: add integration docs Mistral AI API @hieu-jan (#2070)
|
- docs: add integration docs Mistral AI API @hieu-jan (#2070)
|
||||||
- docs:add-advanced-settings-https-proxy @hieu-jan (#2054)
|
- docs:add-advanced-settings-https-proxy @hieu-jan (#2054)
|
||||||
- chore: refactor watch system resource hook @louis-jan (#2048)
|
- chore: refactor watch system resource hook @louis-jan (#2048)
|
||||||
- docs: Updates Guide Using the Local Server @SamPatt (#1924)
|
- docs: Updates Guide Using the Local Server @SamPatt (#1924)
|
||||||
- server install core using link instead of file @hiento09 (#2025)
|
- server install core using link instead of file @hiento09 (#2025)
|
||||||
- chore: prettier fix @louis-jan (#2019)
|
- chore: prettier fix @louis-jan (#2019)
|
||||||
- chore: bump nitro 0.3.9 @louis-jan (#2016)
|
- chore: bump nitro 0.3.9 @louis-jan (#2016)
|
||||||
- refactor: reduce IPC \& API handlers - shared node logics @louis-jan (#2011)
|
- refactor: reduce IPC \& API handlers - shared node logics @louis-jan (#2011)
|
||||||
- docs: update 03-gpu-not-used with RTX issues @hieu-jan (#1992)
|
- docs: update 03-gpu-not-used with RTX issues @hieu-jan (#1992)
|
||||||
- docs: add Jan installation using Docker @hieu-jan (#1981)
|
- docs: add Jan installation using Docker @hieu-jan (#1981)
|
||||||
- chore: reduce bundle size @louis-jan (#1970)
|
- chore: reduce bundle size @louis-jan (#1970)
|
||||||
- docs: add author.yml @hieu-jan (#1973)
|
- docs: add author.yml @hieu-jan (#1973)
|
||||||
- Update authors.yml hien @hiento09 (#1953)
|
- Update authors.yml hien @hiento09 (#1953)
|
||||||
- chore: server download progress + S3 @louis-jan (#1925)
|
- chore: server download progress + S3 @louis-jan (#1925)
|
||||||
- chore: add author james @namchuai (#1952)
|
- chore: add author james @namchuai (#1952)
|
||||||
- chore: Add author - Ashley @imtuyethan (#1950)
|
- chore: Add author - Ashley @imtuyethan (#1950)
|
||||||
- chore: Add Author - Hiro @hiro-v (#1949)
|
- chore: Add Author - Hiro @hiro-v (#1949)
|
||||||
- docs: adding new feature for v0.4.6 to release checklist @Van-QA (#1927)
|
- docs: adding new feature for v0.4.6 to release checklist @Van-QA (#1927)
|
||||||
|
|
||||||
## Contributor
|
## Contributor
|
||||||
|
|
||||||
@0xSage, @0xgokuz, @SamPatt, @Van-QA, @hahuyhoang411, @hiento09, @hieu-jan, @hiro-v, @imtuyethan, @jan-service-account, @ldebs, @louis-jan, @namchuai, @urmauur and James
|
@0xSage, @0xgokuz, @SamPatt, @Van-QA, @hahuyhoang411, @hiento09, @hieu-jan, @hiro-v, @imtuyethan, @jan-service-account, @ldebs, @louis-jan, @namchuai, @urmauur and James
|
||||||
|
|
||||||
98
docs/docs/releases/changelog/changelog-v0.4.8.mdx
Normal file
98
docs/docs/releases/changelog/changelog-v0.4.8.mdx
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 1
|
||||||
|
slug: /changelog/changelog-v0.4.8
|
||||||
|
---
|
||||||
|
# v0.4.8
|
||||||
|
|
||||||
|
For more details, [GitHub Issues](https://github.com/janhq/jan/releases/tag/v0.4.8)
|
||||||
|
|
||||||
|
Highlighted Issue: [Issue #2267: Release cut v0.4.8](https://github.com/janhq/jan/pull/2267)
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
- Release cut v0.4.8 @louis-jan (#2267)
|
||||||
|
- Add modify notary team in CI @hiento09 (#2265)
|
||||||
|
- Chore: Update new models to model hub @hahuyhoang411 (#2192)
|
||||||
|
- Macos Notarize migrage to new Team ID @hiento09 (#2228)
|
||||||
|
- docs: update API Reference assistants\_id endpoint from DevDocs @avb-is-me (#2195)
|
||||||
|
- docs: update API Reference assistants endpoint from DevDocs @avb-is-me (#2194)
|
||||||
|
- docs: update API Reference threads endpoint from DevDocs @avb-is-me (#2182)
|
||||||
|
- fix: wrong profile parameter in docker command @mooncool (#2159)
|
||||||
|
- Sync release 0.4.7 to dev @louis-jan (#2151)
|
||||||
|
- docs: add upstream acknowledgements @hieu-jan (#2136)
|
||||||
|
- Sync dev branch to docs branch @hieu-jan (#2131)
|
||||||
|
|
||||||
|
## 🚀 Features
|
||||||
|
|
||||||
|
- feat: prompt user to download an update manually @louis-jan (#2261)
|
||||||
|
- feat: Jan can see @hiro-v (#2069)
|
||||||
|
- Revert feat: temporary remove dark mode @urmauur (#2221)
|
||||||
|
- feat: add turborepo @louis-jan (#2220)
|
||||||
|
- fix: change button import model on hub page @urmauur (#2178)
|
||||||
|
- feat: temporary remove dark mode :( @urmauur (#2168)
|
||||||
|
- feat: add import model feature @namchuai (#2104)
|
||||||
|
- feat: restore docusaurus style @urmauur (#2152)
|
||||||
|
- feat: add a simple way to convert Hugging Face model to GGUF @Helloyunho (#1972)
|
||||||
|
|
||||||
|
## 🐛 Fixes
|
||||||
|
|
||||||
|
- codesign script force sign @hiento09 (#2291)
|
||||||
|
- fix: should not attach error messages to the completion request @louis-jan (#2258)
|
||||||
|
- fix: image upload button and drag event are not enabled @louis-jan (#2248)
|
||||||
|
- fix: error message being sent along with conversation when inference @namchuai (#2242)
|
||||||
|
- fix: replaced user path from app log @namchuai (#2238)
|
||||||
|
- fix: drag and drop support image format to support vision model @urmauur (#2237)
|
||||||
|
- fix: re-configure changelog sections @hieu-jan (#2230)
|
||||||
|
- fix: import from HuggingFace with random string is causing app crash @louis-jan (#2214)
|
||||||
|
- fix: comment from QA regarding import model @namchuai (#2213)
|
||||||
|
- fix: download model error does not reset state in model hub @namchuai (#2199)
|
||||||
|
- fix: minor ui missing secondary background @urmauur (#2198)
|
||||||
|
- docs: update docker command @hieu-jan (#2180)
|
||||||
|
- fix: some bugs for import model @namchuai (#2181)
|
||||||
|
- fix: change button import model on hub page @urmauur (#2178)
|
||||||
|
- fix space between progress bar and title list of gpu @urmauur (#2177)
|
||||||
|
- fix: disabled prompt user using dangerouslySetInnerHTML @urmauur (#2176)
|
||||||
|
- fix: style list of gpus on system monitor @urmauur (#2172)
|
||||||
|
- fix: system monitor expand overlap tooltip ribbon @urmauur (#2158)
|
||||||
|
- Huggingface extension add codesign step for building on darwin @hiento09 (#2166)
|
||||||
|
- Add run codesign for huggingface extension @hiento09 (#2163)
|
||||||
|
- fix: system monitor ui @urmauur (#2135)
|
||||||
|
|
||||||
|
## 🧰 Maintenance
|
||||||
|
|
||||||
|
- chore: temporary remove convert model @namchuai (#2266)
|
||||||
|
- docs: sync slug fix from dev branch to docs branch @hieu-jan (#2264)
|
||||||
|
- docs: Update broken link and fix the slug @aindrajaya (#2260)
|
||||||
|
- docs: Fix navbar issues. Keep stay when clicked other menu items from the sidebar @aindrajaya (#2253)
|
||||||
|
- docs: sync docs hub fixes from dev to docs branch @hieu-jan (#2247)
|
||||||
|
- docs: Update content for Hub page and Guides section @aindrajaya (#2245)
|
||||||
|
- docs: Fix Dark Mode on the Hub page and Update the Navbar functionality @aindrajaya (#2243)
|
||||||
|
- chore: sync dev branch to docs branch @hieu-jan (#2239)
|
||||||
|
- Chore: add prefix latest for task clean r2 bucket @hiento09 (#2233)
|
||||||
|
- fix: re-configure changelog sections @hieu-jan (#2230)
|
||||||
|
- docs: add command run API server without frontend @hieu-jan (#2231)
|
||||||
|
- docs: revamp entire Jan guides @hieu-jan (#2139)
|
||||||
|
- chore: clean up some redundant code @namchuai (#2215)
|
||||||
|
- docs: update API Reference chatCompletions from DevDocs @avb-is-me (#2171)
|
||||||
|
- docs: update API Reference download model from DevDocs @avb-is-me (#2170)
|
||||||
|
- docs: update API Reference model\_id from DevDocs @avb-is-me (#2169)
|
||||||
|
- docs: update API Reference listModel from DevDocs @avb-is-me (#2161)
|
||||||
|
- docs: Update 08-antivirus-compatibility-testing.md @0xSage (#2186)
|
||||||
|
- docs: adding new feature for v0.4.7 to release checklist @Van-QA (#2189)
|
||||||
|
- docs: Update 01-integrate-continue.mdx @0xSage (#2187)
|
||||||
|
- chore: bump nitro 0.3.14 @louis-jan (#2183)
|
||||||
|
- docs: Sync dev branch to docs branch @hieu-jan (#2185)
|
||||||
|
- docs: update docker command @hieu-jan (#2180)
|
||||||
|
- docs: update wall of love @hieu-jan (#2179)
|
||||||
|
- docs: add Jan newsletter @hieu-jan (#2174)
|
||||||
|
- chore: make convert gguf as experimental feature @namchuai (#2156)
|
||||||
|
- docs: update acknowledgements @hieu-jan (#2147)
|
||||||
|
- feat: restore docusaurus style @urmauur (#2152)
|
||||||
|
- docs: update run Jan in Docker mode @hieu-jan (#2150)
|
||||||
|
- Docs pena team - Add Quickstart Docs @aindrajaya (#2138)
|
||||||
|
- docs: hide incomplete pages @hieu-jan (#2127)
|
||||||
|
|
||||||
|
## Contributor
|
||||||
|
|
||||||
|
@0xSage, @Helloyunho, @Van-QA, @aindrajaya, @avb-is-me, @hahuyhoang411, @hiento09, @hieu-jan, @hiro-v, @jan-service-account, @louis-jan, @mooncool, @namchuai and @urmauur
|
||||||
|
|
||||||
@ -1,10 +1,9 @@
|
|||||||
// @ts-check
|
// @ts-check
|
||||||
// Note: type annotations allow type checking and IDEs autocompletion
|
// Note: type annotations allow type checking and IDEs autocompletion
|
||||||
|
|
||||||
require('dotenv').config()
|
require('dotenv').config()
|
||||||
|
|
||||||
const darkCodeTheme = require("prism-react-renderer/themes/dracula");
|
const darkCodeTheme = require('prism-react-renderer/themes/dracula')
|
||||||
const path = require('path');
|
const path = require('path')
|
||||||
|
|
||||||
/** @type {import('@docusaurus/types').Config} */
|
/** @type {import('@docusaurus/types').Config} */
|
||||||
const config = {
|
const config = {
|
||||||
@ -67,12 +66,56 @@ const config = {
|
|||||||
{
|
{
|
||||||
redirects: [
|
redirects: [
|
||||||
{
|
{
|
||||||
from: "/troubleshooting/failed-to-fetch",
|
from: '/troubleshooting/failed-to-fetch',
|
||||||
to: "/guides/error-codes/something-amiss/",
|
to: '/guides/error-codes/something-amiss/',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
from: "/guides/troubleshooting/gpu-not-used/",
|
from: '/guides/troubleshooting/gpu-not-used/',
|
||||||
to: "/guides/common-error/not-using-gpu/",
|
to: '/guides/common-error/not-using-gpu/',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: '/guides/troubleshooting/',
|
||||||
|
to: '/guides/error-codes/',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: '/troubleshooting/stuck-on-broken-build/',
|
||||||
|
to: '/guides/common-error/broken-build/',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: '/guides/troubleshooting/',
|
||||||
|
to: '/guides/error-codes/',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: '/troubleshooting/somethings-amiss/',
|
||||||
|
to: '/guides/error-codes/something-amiss/',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: '/troubleshooting/how-to-get-error-logs/',
|
||||||
|
to: '/guides/error-codes/how-to-get-error-logs/',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: '/troubleshooting/permission-denied/',
|
||||||
|
to: '/guides/error-codes/permission-denied/',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: '/troubleshooting/unexpected-token/',
|
||||||
|
to: '/guides/error-codes/unexpected-token/',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: '/troubleshooting/undefined-issue/',
|
||||||
|
to: '/guides/error-codes/undefined-issue/',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: '/install/',
|
||||||
|
to: '/guides/install/',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: '/guides/using-models/',
|
||||||
|
to: '/guides/models-setup/',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: '/guides/using-extensions/',
|
||||||
|
to: '/guides/extensions/',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@ -80,6 +123,18 @@ const config = {
|
|||||||
|
|
||||||
//To input custom Plugin
|
//To input custom Plugin
|
||||||
path.resolve(__dirname, 'plugins', 'changelog-plugin'),
|
path.resolve(__dirname, 'plugins', 'changelog-plugin'),
|
||||||
|
[
|
||||||
|
'@scalar/docusaurus',
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
route: '/api-reference',
|
||||||
|
configuration: {
|
||||||
|
spec: {
|
||||||
|
url: 'https://raw.githubusercontent.com/janhq/jan/dev/docs/openapi/jan.json',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
// The classic preset will relay each option entry to the respective sub plugin/theme.
|
// The classic preset will relay each option entry to the respective sub plugin/theme.
|
||||||
@ -91,7 +146,7 @@ const config = {
|
|||||||
docs: {
|
docs: {
|
||||||
routeBasePath: '/',
|
routeBasePath: '/',
|
||||||
sidebarPath: require.resolve('./sidebars.js'),
|
sidebarPath: require.resolve('./sidebars.js'),
|
||||||
editUrl: 'https://github.com/janhq/jan/tree/main/docs',
|
editUrl: 'https://github.com/janhq/jan/tree/dev/docs',
|
||||||
showLastUpdateAuthor: true,
|
showLastUpdateAuthor: true,
|
||||||
showLastUpdateTime: true,
|
showLastUpdateTime: true,
|
||||||
},
|
},
|
||||||
@ -103,10 +158,10 @@ const config = {
|
|||||||
filename: 'sitemap.xml',
|
filename: 'sitemap.xml',
|
||||||
},
|
},
|
||||||
// Will be passed to @docusaurus/plugin-content-blog (false to disable)
|
// Will be passed to @docusaurus/plugin-content-blog (false to disable)
|
||||||
// blog: {
|
blog: {
|
||||||
// blogSidebarTitle: "All Posts",
|
blogSidebarTitle: 'All Posts',
|
||||||
// blogSidebarCount: "ALL",
|
blogSidebarCount: 'ALL',
|
||||||
// },
|
},
|
||||||
// Will be passed to @docusaurus/theme-classic.
|
// Will be passed to @docusaurus/theme-classic.
|
||||||
theme: {
|
theme: {
|
||||||
customCss: require.resolve('./src/styles/main.scss'),
|
customCss: require.resolve('./src/styles/main.scss'),
|
||||||
@ -126,7 +181,7 @@ const config = {
|
|||||||
specs: [
|
specs: [
|
||||||
{
|
{
|
||||||
spec: 'openapi/jan.yaml', // can be local file, url, or parsed json object
|
spec: 'openapi/jan.yaml', // can be local file, url, or parsed json object
|
||||||
route: '/api-reference/', // path where to render docs
|
route: '/api-reference-1.0/', // path where to render docs
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
theme: {
|
theme: {
|
||||||
@ -274,7 +329,7 @@ const config = {
|
|||||||
{
|
{
|
||||||
type: 'docSidebar',
|
type: 'docSidebar',
|
||||||
sidebarId: 'productSidebar',
|
sidebarId: 'productSidebar',
|
||||||
position: 'left',
|
positionL: 'left',
|
||||||
label: 'Product',
|
label: 'Product',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -291,15 +346,15 @@ const config = {
|
|||||||
// },
|
// },
|
||||||
// Navbar right
|
// Navbar right
|
||||||
{
|
{
|
||||||
type: "dropdown",
|
type: 'dropdown',
|
||||||
label: "Docs",
|
label: 'Docs',
|
||||||
to: "docs",
|
to: 'docs',
|
||||||
position: "right",
|
position: 'right',
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
type: 'docSidebar',
|
type: 'docSidebar',
|
||||||
sidebarId: 'guidesSidebar',
|
sidebarId: 'guidesSidebar',
|
||||||
label: 'User Guide',
|
label: 'Guides',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'docSidebar',
|
type: 'docSidebar',
|
||||||
@ -310,6 +365,11 @@ const config = {
|
|||||||
to: '/api-reference',
|
to: '/api-reference',
|
||||||
label: 'API Reference',
|
label: 'API Reference',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
type: 'docSidebar',
|
||||||
|
sidebarId: 'releasesSidebar',
|
||||||
|
label: 'Changelog',
|
||||||
|
},
|
||||||
// {
|
// {
|
||||||
// type: "docSidebar",
|
// type: "docSidebar",
|
||||||
// sidebarId: "docsSidebar",
|
// sidebarId: "docsSidebar",
|
||||||
@ -318,10 +378,9 @@ const config = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'docSidebar',
|
to: 'blog',
|
||||||
sidebarId: 'blogSidebar',
|
|
||||||
position: 'right',
|
|
||||||
label: 'Blog',
|
label: 'Blog',
|
||||||
|
position: 'right',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@ -343,11 +402,8 @@ const config = {
|
|||||||
respectPrefersColorScheme: false,
|
respectPrefersColorScheme: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
customFields: {
|
|
||||||
githubAccessToken: process.env.GITHUB_ACCESS_TOKEN || "XXXX",
|
|
||||||
},
|
|
||||||
|
|
||||||
themes: ["@docusaurus/theme-live-codeblock", "@docusaurus/theme-mermaid"],
|
themes: ['@docusaurus/theme-live-codeblock', '@docusaurus/theme-mermaid'],
|
||||||
};
|
}
|
||||||
|
|
||||||
module.exports = config
|
module.exports = config
|
||||||
|
|||||||
2486
docs/openapi/jan.json
Normal file
2486
docs/openapi/jan.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -27,6 +27,7 @@
|
|||||||
"@heroicons/react": "^2.0.18",
|
"@heroicons/react": "^2.0.18",
|
||||||
"@mdx-js/react": "^3.0.0",
|
"@mdx-js/react": "^3.0.0",
|
||||||
"@redocly/cli": "^1.4.1",
|
"@redocly/cli": "^1.4.1",
|
||||||
|
"@scalar/docusaurus": "^0.1.3",
|
||||||
"autoprefixer": "^10.4.16",
|
"autoprefixer": "^10.4.16",
|
||||||
"axios": "^1.5.1",
|
"axios": "^1.5.1",
|
||||||
"clsx": "^1.2.1",
|
"clsx": "^1.2.1",
|
||||||
|
|||||||
@ -1,23 +1,23 @@
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
const fetch = require('node-fetch');
|
||||||
|
|
||||||
async function fetchData(siteConfig) {
|
async function fetchData(siteConfig, forceRefresh = false) {
|
||||||
const owner = siteConfig.organizationName;
|
const owner = siteConfig.organizationName;
|
||||||
const repo = siteConfig.projectName;
|
const repo = siteConfig.projectName;
|
||||||
const apiUrl = `https://api.github.com/repos/${owner}/${repo}/releases`;
|
const apiUrl = `https://api.github.com/repos/${owner}/${repo}/releases`;
|
||||||
|
|
||||||
const outputDirectory = path.join(__dirname, '../../docs/guides/changelogs');
|
const outputDirectory = path.join(__dirname, '../../docs/releases/changelog');
|
||||||
|
|
||||||
if (!fs.existsSync(outputDirectory)) {
|
if (!fs.existsSync(outputDirectory)) {
|
||||||
fs.mkdirSync(outputDirectory);
|
fs.mkdirSync(outputDirectory);
|
||||||
}
|
}
|
||||||
|
|
||||||
let counter = 1;
|
let counter = 1;
|
||||||
const categoryFilePath = path.join(outputDirectory, '_category_.json');
|
|
||||||
const cacheFilePath = path.join(outputDirectory, 'cache.json');
|
const cacheFilePath = path.join(outputDirectory, 'cache.json');
|
||||||
|
|
||||||
let cachedData = {};
|
let cachedData = {};
|
||||||
if (fs.existsSync(cacheFilePath)) {
|
if (fs.existsSync(cacheFilePath) && !forceRefresh) {
|
||||||
cachedData = JSON.parse(fs.readFileSync(cacheFilePath, 'utf-8'));
|
cachedData = JSON.parse(fs.readFileSync(cacheFilePath, 'utf-8'));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ async function fetchData(siteConfig) {
|
|||||||
// Fetch releases from GitHub API or load from cache
|
// Fetch releases from GitHub API or load from cache
|
||||||
let releases = [];
|
let releases = [];
|
||||||
try {
|
try {
|
||||||
if (cachedData.releases) {
|
if (cachedData.releases && !forceRefresh) {
|
||||||
console.log('Loading releases from cache...');
|
console.log('Loading releases from cache...');
|
||||||
releases = cachedData.releases;
|
releases = cachedData.releases;
|
||||||
} else {
|
} else {
|
||||||
@ -68,9 +68,47 @@ async function fetchData(siteConfig) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if there are new releases
|
||||||
|
const newReleases = releases.filter(release => {
|
||||||
|
const version = release.tag_name;
|
||||||
|
const existingChangelogPath = path.join(outputDirectory, `changelog-${version}.mdx`);
|
||||||
|
return !fs.existsSync(existingChangelogPath);
|
||||||
|
});
|
||||||
|
|
||||||
|
// If there are new releases, update existing changelog files' sidebar positions
|
||||||
|
if (newReleases.length > 0) {
|
||||||
|
console.log(`Updating sidebar positions for ${newReleases.length} new releases...`);
|
||||||
|
const existingChangelogFiles = fs.readdirSync(outputDirectory)
|
||||||
|
.filter(file => file.startsWith('changelog-'));
|
||||||
|
|
||||||
|
existingChangelogFiles.forEach((filename, index) => {
|
||||||
|
const version = filename.substring(10, filename.length - 4);
|
||||||
|
const existingChangelogPath = path.join(outputDirectory, filename);
|
||||||
|
const content = fs.readFileSync(existingChangelogPath, 'utf-8');
|
||||||
|
const sidebarPositionMatch = content.match(/sidebar_position: (\d+)/);
|
||||||
|
let sidebarPosition = index + 1;
|
||||||
|
|
||||||
|
if (sidebarPositionMatch) {
|
||||||
|
sidebarPosition = parseInt(sidebarPositionMatch[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
const updatedContent = content.replace(/sidebar_position: (\d+)/, `sidebar_position: ${sidebarPosition}`);
|
||||||
|
fs.writeFileSync(existingChangelogPath, updatedContent, 'utf-8');
|
||||||
|
console.log(`Sidebar position updated for changelog-${version}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Process the GitHub releases data here
|
// Process the GitHub releases data here
|
||||||
for (const release of releases) {
|
for (const release of releases) {
|
||||||
const version = release.tag_name;
|
const version = release.tag_name;
|
||||||
|
|
||||||
|
// Check if the changelog file already exists for the current version
|
||||||
|
const existingChangelogPath = path.join(outputDirectory, `changelog-${version}.mdx`);
|
||||||
|
if (fs.existsSync(existingChangelogPath)) {
|
||||||
|
console.log(`Changelog for version ${version} already exists. Skipping...`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
const releaseUrl = release.html_url;
|
const releaseUrl = release.html_url;
|
||||||
const issueNumberMatch = release.body.match(/#(\d+)/);
|
const issueNumberMatch = release.body.match(/#(\d+)/);
|
||||||
const issueNumber = issueNumberMatch ? parseInt(issueNumberMatch[1], 10) : null;
|
const issueNumber = issueNumberMatch ? parseInt(issueNumberMatch[1], 10) : null;
|
||||||
@ -83,7 +121,7 @@ async function fetchData(siteConfig) {
|
|||||||
|
|
||||||
const changes = release.body;
|
const changes = release.body;
|
||||||
|
|
||||||
let markdownContent = `---\nsidebar_position: ${counter}\n---\n# ${version}\n\nFor more details, [GitHub Issues](${releaseUrl})\n\nHighlighted Issue: ${issueLink}\n\n${changes}\n`;
|
let markdownContent = `---\nsidebar_position: ${counter}\nslug: /changelog/changelog-${version}\n---\n# ${version}\n\nFor more details, [GitHub Issues](${releaseUrl})\n\nHighlighted Issue: ${issueLink}\n\n${changes}\n`;
|
||||||
|
|
||||||
// Write to a separate markdown file for each version
|
// Write to a separate markdown file for each version
|
||||||
const outputFilePath = path.join(outputDirectory, `changelog-${version}.mdx`);
|
const outputFilePath = path.join(outputDirectory, `changelog-${version}.mdx`);
|
||||||
@ -93,20 +131,6 @@ async function fetchData(siteConfig) {
|
|||||||
|
|
||||||
counter++;
|
counter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create _category_.json file
|
|
||||||
const categoryContent = {
|
|
||||||
label: 'Changelogs',
|
|
||||||
position: 5,
|
|
||||||
link: {
|
|
||||||
type: 'generated-index',
|
|
||||||
description: 'Changelog for Jan',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
fs.writeFileSync(categoryFilePath, JSON.stringify(categoryContent, null, 2), 'utf-8');
|
|
||||||
|
|
||||||
console.log(`_category_.json has been created at: ${categoryFilePath}`);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = fetchData;
|
module.exports = fetchData;
|
||||||
|
|||||||
@ -24,7 +24,7 @@ module.exports = function (context, options) {
|
|||||||
|
|
||||||
async onPostBuild() {
|
async onPostBuild() {
|
||||||
// If you need additional actions after the build, you can include them here.
|
// If you need additional actions after the build, you can include them here.
|
||||||
await fetchData(siteConfig);
|
await fetchData(siteConfig, true);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
286
docs/sidebars.js
286
docs/sidebars.js
@ -15,70 +15,77 @@
|
|||||||
const sidebars = {
|
const sidebars = {
|
||||||
aboutSidebar: [
|
aboutSidebar: [
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: "category",
|
||||||
label: 'What is Jan?',
|
label: "What is Jan?",
|
||||||
link: { type: 'doc', id: 'about/about' },
|
link: { type: "doc", id: "about/about" },
|
||||||
items: [
|
items: [
|
||||||
//"about/roadmap",
|
//"about/roadmap",
|
||||||
'community/community',
|
"community/community",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: "category",
|
||||||
label: 'Who we are',
|
label: "Who we are",
|
||||||
link: { type: 'doc', id: 'team/team' },
|
link: { type: "doc", id: "team/team" },
|
||||||
items: ['team/join-us', 'team/contributor-program'],
|
items: ["team/join-us", "team/contributor-program"],
|
||||||
},
|
},
|
||||||
'wall-of-love',
|
"wall-of-love",
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: "category",
|
||||||
label: 'How We Work',
|
label: "How We Work",
|
||||||
link: { type: 'doc', id: 'how-we-work' },
|
link: { type: "doc", id: "how-we-work" },
|
||||||
items: [
|
items: [
|
||||||
'how-we-work/strategy/strategy',
|
"how-we-work/strategy/strategy",
|
||||||
'how-we-work/project-management/project-management',
|
"how-we-work/project-management/project-management",
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: "category",
|
||||||
label: 'Engineering',
|
label: "Engineering",
|
||||||
link: { type: 'doc', id: 'how-we-work/engineering/engineering' },
|
link: { type: "doc", id: "how-we-work/engineering/engineering" },
|
||||||
items: [
|
items: [
|
||||||
'how-we-work/engineering/ci-cd',
|
"how-we-work/engineering/ci-cd",
|
||||||
'how-we-work/engineering/qa',
|
"how-we-work/engineering/qa",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'how-we-work/product-design/product-design',
|
"how-we-work/product-design/product-design",
|
||||||
'how-we-work/analytics/analytics',
|
"how-we-work/analytics/analytics",
|
||||||
'how-we-work/website-docs/website-docs',
|
"how-we-work/website-docs/website-docs",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'acknowledgements',
|
"acknowledgements",
|
||||||
|
{
|
||||||
|
type: "category",
|
||||||
|
label: "FAQ",
|
||||||
|
link: { type: "doc", id: "about/faq" },
|
||||||
|
items:
|
||||||
|
[],
|
||||||
|
},
|
||||||
],
|
],
|
||||||
productSidebar: [
|
productSidebar: [
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: "category",
|
||||||
label: 'Platforms',
|
label: "Platforms",
|
||||||
collapsible: false,
|
collapsible: false,
|
||||||
items: [
|
items: [
|
||||||
'platforms/desktop',
|
"platforms/desktop",
|
||||||
'server-suite/home-server',
|
"server-suite/home-server",
|
||||||
// "server-suite/enterprise",
|
// "server-suite/enterprise",
|
||||||
// "platforms/mobile",
|
// "platforms/mobile",
|
||||||
// "platforms/hub",
|
// "platforms/hub",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: "category",
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
collapsed: false,
|
collapsed: false,
|
||||||
label: 'Features',
|
label: "Features",
|
||||||
link: { type: 'doc', id: 'features/features' },
|
link: { type: "doc", id: "features/features" },
|
||||||
items: [
|
items: [
|
||||||
'features/local',
|
"features/local",
|
||||||
'features/remote',
|
"features/remote",
|
||||||
'features/api-server',
|
"features/api-server",
|
||||||
'features/extensions-framework',
|
"features/extensions-framework",
|
||||||
'features/agents-framework',
|
"features/agents-framework",
|
||||||
'features/data-security',
|
"features/data-security",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
// NOTE: Jan Server Suite will be torn out into it's own section in the future
|
// NOTE: Jan Server Suite will be torn out into it's own section in the future
|
||||||
@ -96,84 +103,209 @@ const sidebars = {
|
|||||||
],
|
],
|
||||||
solutionSidebar: [
|
solutionSidebar: [
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: "category",
|
||||||
label: 'Use Cases',
|
label: "Use Cases",
|
||||||
collapsed: true,
|
collapsed: true,
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
items: ['solutions/ai-pc', 'solutions/chatgpt-alternative'],
|
items: ["solutions/ai-pc", "solutions/chatgpt-alternative"],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: "category",
|
||||||
label: 'Sectors',
|
label: "Sectors",
|
||||||
collapsed: true,
|
collapsed: true,
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
items: [
|
items: [
|
||||||
'solutions/finance',
|
"solutions/finance",
|
||||||
'solutions/healthcare',
|
"solutions/healthcare",
|
||||||
'solutions/legal',
|
"solutions/legal",
|
||||||
'solutions/government',
|
"solutions/government",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: "category",
|
||||||
label: 'Organization Type',
|
label: "Organization Type",
|
||||||
collapsed: true,
|
collapsed: true,
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
items: [
|
items: [
|
||||||
'solutions/developers',
|
"solutions/developers",
|
||||||
'solutions/consultants',
|
"solutions/consultants",
|
||||||
'solutions/startups',
|
"solutions/startups",
|
||||||
'solutions/enterprises',
|
"solutions/enterprises",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
pricingSidebar: ['pricing/pricing'],
|
pricingSidebar: ["pricing/pricing"],
|
||||||
ecosystemSidebar: [
|
ecosystemSidebar: [
|
||||||
'ecosystem/ecosystem',
|
"ecosystem/ecosystem",
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: "category",
|
||||||
label: 'Partners',
|
label: "Partners",
|
||||||
link: { type: 'doc', id: 'partners/partners' },
|
link: { type: "doc", id: "partners/partners" },
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
items: ['partners/become-a-partner'],
|
items: ["partners/become-a-partner"],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: "category",
|
||||||
label: 'Integrations',
|
label: "Integrations",
|
||||||
link: { type: 'doc', id: 'integrations' },
|
link: { type: "doc", id: "integrations" },
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
type: 'autogenerated',
|
type: "autogenerated",
|
||||||
dirName: 'integrations',
|
dirName: "integrations",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
// guidesSidebar: [
|
||||||
|
// {
|
||||||
|
// type: "autogenerated",
|
||||||
|
// dirName: "guides",
|
||||||
|
// },
|
||||||
|
// ],
|
||||||
guidesSidebar: [
|
guidesSidebar: [
|
||||||
{
|
{
|
||||||
type: 'autogenerated',
|
type: "category",
|
||||||
dirName: 'guides',
|
label: "Get Started",
|
||||||
|
collapsible: false,
|
||||||
|
className: "head_Menu",
|
||||||
|
items: [
|
||||||
|
"guides/quickstart",
|
||||||
|
"guides/install",
|
||||||
|
"guides/start-server",
|
||||||
|
"guides/models-list"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "category",
|
||||||
|
label: "Guides",
|
||||||
|
collapsible: false,
|
||||||
|
className: "head_Menu",
|
||||||
|
items: [
|
||||||
|
"guides/best-practices",
|
||||||
|
"guides/thread",
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "category",
|
||||||
|
label: "Advanced Features",
|
||||||
|
collapsible: false,
|
||||||
|
className: "head_Menu",
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: "category",
|
||||||
|
label: "Advanced Model Setup",
|
||||||
|
className: "head_SubMenu",
|
||||||
|
link: {
|
||||||
|
type: 'doc',
|
||||||
|
id: "guides/models/README",
|
||||||
|
},
|
||||||
|
items: [
|
||||||
|
"guides/models/customize-engine",
|
||||||
|
"guides/models/import-models",
|
||||||
|
"guides/models/integrate-remote",
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "category",
|
||||||
|
label: "Inference Providers",
|
||||||
|
className: "head_SubMenu",
|
||||||
|
link: {
|
||||||
|
type: 'doc',
|
||||||
|
id: "guides/providers/README",
|
||||||
|
},
|
||||||
|
items: [
|
||||||
|
"guides/providers/llama-cpp",
|
||||||
|
"guides/providers/tensorrt-llm",
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "category",
|
||||||
|
label: "Extensions",
|
||||||
|
className: "head_SubMenu",
|
||||||
|
link: {
|
||||||
|
type: 'doc',
|
||||||
|
id: "guides/extensions/README",
|
||||||
|
},
|
||||||
|
items: [
|
||||||
|
"guides/extensions/import-ext",
|
||||||
|
"guides/extensions/setup-ext",
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "category",
|
||||||
|
label: "Integrations",
|
||||||
|
className: "head_SubMenu",
|
||||||
|
link: {
|
||||||
|
type: 'doc',
|
||||||
|
id: "guides/integration/README",
|
||||||
|
},
|
||||||
|
items: [
|
||||||
|
"guides/integration/azure",
|
||||||
|
"guides/integration/discord",
|
||||||
|
"guides/integration/groq",
|
||||||
|
"guides/integration/lmstudio",
|
||||||
|
"guides/integration/mistral",
|
||||||
|
"guides/integration/ollama",
|
||||||
|
"guides/integration/openinterpreter",
|
||||||
|
"guides/integration/openrouter",
|
||||||
|
"guides/integration/raycast",
|
||||||
|
"guides/integration/vscode",
|
||||||
|
]
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "category",
|
||||||
|
label: "Troubleshooting",
|
||||||
|
collapsible: false,
|
||||||
|
className: "head_Menu",
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: "category",
|
||||||
|
label: "Error Codes",
|
||||||
|
className: "head_SubMenu",
|
||||||
|
link: {
|
||||||
|
type: 'doc',
|
||||||
|
id: "guides/error-codes/README",
|
||||||
|
},
|
||||||
|
items: [
|
||||||
|
"guides/error-codes/how-to-get-error-logs",
|
||||||
|
"guides/error-codes/permission-denied",
|
||||||
|
"guides/error-codes/something-amiss",
|
||||||
|
"guides/error-codes/undefined-issue",
|
||||||
|
"guides/error-codes/unexpected-token",
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "category",
|
||||||
|
label: "Common Error",
|
||||||
|
className: "head_SubMenu",
|
||||||
|
link: {
|
||||||
|
type: 'doc',
|
||||||
|
id: "guides/common-error/README",
|
||||||
|
},
|
||||||
|
items: [
|
||||||
|
"guides/common-error/broken-build",
|
||||||
|
"guides/common-error/not-using-gpu",
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"guides/faq"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
developerSidebar: [
|
developerSidebar: [
|
||||||
{
|
{
|
||||||
type: 'autogenerated',
|
type: "autogenerated",
|
||||||
dirName: 'developer',
|
dirName: "developer",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
docsSidebar: [
|
releasesSidebar: [
|
||||||
{
|
{
|
||||||
type: 'autogenerated',
|
type: "autogenerated",
|
||||||
dirName: 'docs',
|
dirName: "releases",
|
||||||
},
|
},
|
||||||
],
|
]
|
||||||
blogSidebar: [
|
|
||||||
{
|
|
||||||
type: 'autogenerated',
|
|
||||||
dirName: 'blog',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = sidebars
|
module.exports = sidebars;
|
||||||
|
|||||||
@ -1,37 +1,34 @@
|
|||||||
import styles from "../HomepagePrimaryFeatures/styles.module.css";
|
|
||||||
import clsx from "clsx";
|
|
||||||
|
|
||||||
export default function HomepagePrimaryFeatures() {
|
export default function HomepagePrimaryFeatures() {
|
||||||
return (
|
return (
|
||||||
<section className={styles.features}>
|
<section className="py-8 md:py-16 lg:py-20 flex items-center">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<div className={clsx(styles.cards)}>
|
<div className="flex flex-col md:flex-row justify-between md:gap-8">
|
||||||
<div className={clsx(styles.card, styles.cardBluish)}>
|
<div className="w-full md:w-1/2 h-72 md:h-84 flex-1 rounded-lg p-8 relative bg-gradient-to-r from-gray-100 to-blue-400 dark:from-gray-700 dark:to-blue-800 mb-8 md:mb-0">
|
||||||
|
<div className="mb-16">
|
||||||
|
<p className="text-lg mb-4">Installation</p>
|
||||||
|
<h3 className="text-1xl md:text-2xl lg:text-3xl font-semibold">Install Jan across multiple platforms.</h3>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p>Installation</p>
|
<a href={"/guides/install"} className="btn bg-black hover:bg-gray-600 dark:bg-blue-500 text-normal md:text-xl text-white font-normal py-2 px-4 rounded-xl">Get Started</a>
|
||||||
<h3>Set up Jan with our guide to install across multiple platform.</h3>
|
|
||||||
</div>
|
</div>
|
||||||
<div >
|
<div className="absolute right-4 bottom-4">
|
||||||
<a href={"/guides/install"}>Get Started</a>
|
<img alt={"Card Image"} src={"/img/homepage-new/rocket.png"} className="h-16 md:h-24" />
|
||||||
</div>
|
|
||||||
<div className={styles.cardImage}>
|
|
||||||
<img alt={"Card Image"} src={"/img/homepage-new/rocket.png"} />
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className={clsx(styles.card, styles.cardPinkish)}>
|
<div className="w-full md:w-1/2 h-72 md:h-84 flex-1 rounded-lg p-8 relative bg-gradient-to-r from-gray-100 to-purple-400 dark:from-gray-700 dark:to-purple-800">
|
||||||
|
<div className="mb-8">
|
||||||
|
<p className="text-lg mb-4">Models</p>
|
||||||
|
<h3 className="text-1xl md:text-2xl lg:text-3xl font-semibold">Discover the pre-configured AI models available for use. </h3>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p>Models</p>
|
<a href={"/guides/models-list"} className="btn bg-black hover:bg-gray-600 dark:bg-blue-500 text-normal md:text-xl text-white font-normal py-2 px-4 rounded-xl">Support</a>
|
||||||
<h3>Explore the available pre-configured AI models. </h3>
|
|
||||||
</div>
|
</div>
|
||||||
<div >
|
<div className="absolute right-4 bottom-4">
|
||||||
<a href={"/guides/models-list"}>Support</a>
|
<img alt={"Card Image"} src={"/img/homepage-new/chat.png"} className="h-16 md:h-24" />
|
||||||
</div>
|
|
||||||
<div className={styles.cardImage}>
|
|
||||||
<img alt={"Card Image"} src={"/img/homepage-new/chat.png"} />
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,77 +0,0 @@
|
|||||||
.features {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 5rem 0;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cards {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: 4rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 768px) {
|
|
||||||
.cards {
|
|
||||||
gap: 2rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.card {
|
|
||||||
min-width: 250px;
|
|
||||||
min-height: 275px;
|
|
||||||
max-height: 325px;
|
|
||||||
flex: 1;
|
|
||||||
border-radius: 15px;
|
|
||||||
padding: 2rem 1.5rem;
|
|
||||||
position: relative;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card p {
|
|
||||||
font-size: 1.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardImage {
|
|
||||||
position: absolute;
|
|
||||||
right: 1rem;
|
|
||||||
bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardImage img {
|
|
||||||
height: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 1024px) {
|
|
||||||
.cardImage {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardBluish {
|
|
||||||
background: linear-gradient(90deg, rgba(238,238,238,1) 0%, rgba(185,202,237,1) 100%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardPinkish {
|
|
||||||
background: linear-gradient(90deg, rgba(238,238,238,1) 0%, rgba(215,194,238,1) 100%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.card h3 {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
font-weight: 600;
|
|
||||||
padding-top: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card a {
|
|
||||||
all: unset;
|
|
||||||
color: white;
|
|
||||||
background-color: #1C1E21;
|
|
||||||
padding: 0.75rem 1.25rem;
|
|
||||||
border-radius: 6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card a:hover {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
@ -1,67 +1,54 @@
|
|||||||
import styles from "../HomepageSecondaryFeatures/styles.module.css";
|
import React from 'react'
|
||||||
import clsx from "clsx";
|
|
||||||
|
|
||||||
export default function HomepageSecondaryFeatures() {
|
export default function HomepageSecondaryFeatures() {
|
||||||
return (
|
return (
|
||||||
<section className={styles.features}>
|
<section className="py-8 md:py-16 bg-gray-100 dark:bg-gray-800 flex items-center">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<div className={clsx(styles.cards)}>
|
<div className="flex flex-col md:flex-row justify-center gap-8">
|
||||||
<div className={clsx(styles.card)}>
|
<FeatureCard
|
||||||
<div>
|
imgSrc="/img/homepage-new/bg-rocket.png"
|
||||||
<div className={styles.cardLogo}>
|
title="Quickstart"
|
||||||
<img alt={"Feature logo"} src={"/img/homepage-new/bg-rocket.png"}/>
|
description="Get started quickly with our Quickstart guide, offering simple steps for a smooth setup."
|
||||||
</div>
|
href="/guides/"
|
||||||
<div className={styles.cardContent}>
|
/>
|
||||||
<h3>Quickstart</h3>
|
<FeatureCard
|
||||||
<p>Jump right in with our Quickstart guide, designed to get you going with simple steps and clear instructions for a smooth setup.</p>
|
imgSrc="/img/homepage-new/bg-wrench.png"
|
||||||
</div>
|
title="Integrations"
|
||||||
</div>
|
description="Learn how Jan can integrates seamlessly."
|
||||||
<div className={styles.cardFooter}>
|
href="/guides/integrations/"
|
||||||
<a href={"/guides/"}>Learn Here
|
/>
|
||||||
{/* <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" fill={"currentColor"}>
|
<FeatureCard
|
||||||
<path d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"/>
|
imgSrc="/img/homepage-new/bg-book.png"
|
||||||
</svg> */}
|
title="Error Codes"
|
||||||
</a>
|
description="Find solutions for common error codes to resolve them quickly."
|
||||||
</div>
|
href="/guides/error-codes/"
|
||||||
</div>
|
/>
|
||||||
<div className={clsx(styles.card)}>
|
|
||||||
<div>
|
|
||||||
<div className={styles.cardLogo}>
|
|
||||||
<img alt={"Feature logo"} src={"/img/homepage-new/bg-wrench.png"}/>
|
|
||||||
</div>
|
|
||||||
<div className={styles.cardContent}>
|
|
||||||
<h3>Integrations</h3>
|
|
||||||
<p>Discover how Jan seamlessly integrates with 9 different system, streamlining your application for maximum efficiency.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div className={styles.cardFooter}>
|
|
||||||
<a href={"/guides/integrations/"}>Learn Here
|
|
||||||
{/* <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" fill={"currentColor"}>
|
|
||||||
<path d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"/>
|
|
||||||
</svg> */}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div className={clsx(styles.card)}>
|
|
||||||
<div>
|
|
||||||
<div className={styles.cardLogo}>
|
|
||||||
<img alt={"Feature logo"} src={"/img/homepage-new/bg-book.png"}/>
|
|
||||||
</div>
|
|
||||||
<div className={styles.cardContent}>
|
|
||||||
<h3>Error Codes</h3>
|
|
||||||
<p>Navigate through common error codes with explanations and solutions to resolve them quickly.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div className={styles.cardFooter}>
|
|
||||||
<a href={"/guides/error-codes/"}>Learn Here
|
|
||||||
{/* <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" fill={"currentColor"}>
|
|
||||||
<path d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"/>
|
|
||||||
</svg> */}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
);
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function FeatureCard({ imgSrc, title, description, href }) {
|
||||||
|
return (
|
||||||
|
<div className="bg-gray-200 dark:bg-gray-700 w-full rounded-lg relative flex flex-col justify-between mb-8 md:mb-0 md:mr-8 p-2">
|
||||||
|
<div>
|
||||||
|
<div className="h-32 w-full">
|
||||||
|
<img alt={'Feature logo'} src={imgSrc} />
|
||||||
|
</div>
|
||||||
|
<div className="mt-12 p-8">
|
||||||
|
<h3 className="text-lg font-semibold">{title}</h3>
|
||||||
|
<p>{description}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="p-8 mb-2 pt-0">
|
||||||
|
<a
|
||||||
|
href={href}
|
||||||
|
className="btn bg-black hover:bg-gray-600 dark:bg-blue-500 text-white font-normal py-2 px-4 rounded-xl"
|
||||||
|
>
|
||||||
|
Learn more
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
@ -1,87 +0,0 @@
|
|||||||
.features {
|
|
||||||
padding-top: 2rem;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cards {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
justify-content: center; /* Center align the cards */
|
|
||||||
gap: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card {
|
|
||||||
background-color: #ECECEF;
|
|
||||||
width: calc(33.33% - 2rem); /* Adjust width for responsiveness */
|
|
||||||
border-radius: 15px;
|
|
||||||
position: relative;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 2rem; /* Add margin between cards */
|
|
||||||
padding: 1rem; /* Add padding to cards */
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 768px) {
|
|
||||||
.card {
|
|
||||||
width: calc(50% - 2rem); /* Adjust width for smaller screens */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 576px) {
|
|
||||||
.card {
|
|
||||||
width: calc(100% - 2rem); /* Adjust width for mobile screens */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardContent {
|
|
||||||
margin-top: 3rem;
|
|
||||||
padding: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardLogo {
|
|
||||||
height: 130px;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardFooter {
|
|
||||||
padding-left: 2rem;
|
|
||||||
padding-right: 2rem;
|
|
||||||
padding-bottom: 2rem;
|
|
||||||
padding-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardLogo img {
|
|
||||||
object-fit: cover;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card p {
|
|
||||||
font-size: 1rem;
|
|
||||||
padding-top: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card h3 {
|
|
||||||
font-size: 1.25rem;
|
|
||||||
font-weight: 600;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card a {
|
|
||||||
all: unset;
|
|
||||||
color: white;
|
|
||||||
background-color: #1C1E21;
|
|
||||||
padding: 0.75rem 1.25rem;
|
|
||||||
border-radius: 6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card a svg {
|
|
||||||
padding-top: 12px;
|
|
||||||
height: 1.5rem;
|
|
||||||
width: 1.5rem;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card a:hover {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
@ -1,109 +1,106 @@
|
|||||||
import styles from "../HomepageTerinaryFeatures/styles.module.css";
|
|
||||||
import clsx from "clsx";
|
|
||||||
|
|
||||||
export default function HomepageTerinaryFeatures() {
|
export default function HomepageTerinaryFeatures() {
|
||||||
return (
|
return (
|
||||||
<section className={styles.features}>
|
<section className="py-20 flex items-center">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<div className={clsx(styles.cards)}>
|
<div className="flex justify-center flex-wrap gap-8">
|
||||||
<div className={clsx(styles.card)}>
|
<div className="bg-gray-200 dark:bg-gray-800 w-72 rounded-lg relative flex flex-col p-8">
|
||||||
<div className={styles.cardHeader}>
|
<div className="flex items-center gap-4">
|
||||||
<img alt={"Icon"} src={"/img/homepage-new/roket.png"} />
|
<img alt={"Icon"} src={"/img/homepage-new/roket.png"} />
|
||||||
<h3>Get Started</h3>
|
<h5 className="text-gray-700 dark:text-gray-200">Get Started</h5>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.cardContent}>
|
<div className="mt-5 justify-center">
|
||||||
<p>Kick off your journey with Jan easily and install your AI locally.</p>
|
<p className="text-gray-700 dark:text-gray-200">Easily kick off your journey with Jan by installing your AI locally.</p>
|
||||||
<ul>
|
<ul className="mt-5">
|
||||||
<li>
|
<li className="font-semibold list-disc mb-4">
|
||||||
<a href={"/guides/"}>
|
<a href={"/guides/"} className=" dark:text-blue-400">
|
||||||
Quickstart
|
Quickstart
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li className="font-semibold list-disc mb-4">
|
||||||
<a href={"/guides/install/"}>
|
<a href={"/guides/install/"} className="dark:text-blue-400">
|
||||||
Installation
|
Installation
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li className="font-semibold list-disc mb-4">
|
||||||
<a href={"/guides/models-list/"}>
|
<a href={"/guides/models-list/"} className="dark:text-blue-400">
|
||||||
Pre-configured Models
|
Pre-configured Models
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className={clsx(styles.card)}>
|
<div className="bg-gray-200 dark:bg-gray-800 w-72 rounded-lg relative flex flex-col p-8">
|
||||||
<div className={styles.cardHeader}>
|
<div className="flex items-center gap-4">
|
||||||
<img alt={"Icon"} src={"/img/homepage-new/buku.png"} />
|
<img alt={"Icon"} src={"/img/homepage-new/buku.png"} />
|
||||||
<h3>Settings</h3>
|
<h5 className="text-gray-700 dark:text-gray-200">Settings</h5>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.cardContent}>
|
<div className="mt-5 justify-center">
|
||||||
<p>Learn how to manage the thread history and configure your installed AI.</p>
|
<p className="text-gray-700 dark:text-gray-200">Discover how to manage Jan and configure your installed AI.</p>
|
||||||
<ul>
|
<ul className="mt-5">
|
||||||
<li>
|
<li className="font-semibold list-disc mb-4">
|
||||||
<a href={"/guides/thread/"}>
|
<a href={"/guides/thread/"} className="dark:text-blue-400">
|
||||||
Thread Management
|
Thread Management
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li className="font-semibold list-disc mb-4">
|
||||||
<a href={"/guides/start-server/"}>
|
<a href={"/guides/start-server/"} className="dark:text-blue-400">
|
||||||
Local Server
|
Local Server
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li className="font-semibold list-disc mb-4">
|
||||||
<a href={"/guides/advanced-settings/"}>
|
<a href={"/guides/advanced-settings/"} className="dark:text-blue-400">
|
||||||
Advanced Settings
|
Advanced Settings
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className={clsx(styles.card)}>
|
<div className="bg-gray-200 dark:bg-gray-800 w-72 rounded-lg relative flex flex-col p-8">
|
||||||
<div className={styles.cardHeader}>
|
<div className="flex items-center gap-4">
|
||||||
<img alt={"Icon"} src={"/img/homepage-new/setting.png"} />
|
<img alt={"Icon"} src={"/img/homepage-new/setting.png"} />
|
||||||
<h3>Features</h3>
|
<h5 className="text-gray-700 dark:text-gray-200">Features</h5>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.cardContent}>
|
<div className="mt-5 justify-center">
|
||||||
<p>Explore our key features designed to enhance your experience.</p>
|
<p className="text-gray-700 dark:text-gray-200">Explore key features designed to enhance your experience with Jan.</p>
|
||||||
<ul>
|
<ul className="mt-5">
|
||||||
<li>
|
<li className="font-semibold list-disc mb-4">
|
||||||
<a href={"/guides/models-setup/"}>
|
<a href={"/guides/models-setup/"} className="dark:text-blue-400">
|
||||||
Models Setup
|
Models Setup
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li className="font-semibold list-disc mb-4">
|
||||||
<a href={"/guides/extensions/"}>
|
<a href={"/guides/extensions/"} className="dark:text-blue-400">
|
||||||
Extensions
|
Extensions
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li className="font-semibold list-disc mb-4">
|
||||||
<a href={"/guides/integrations/"}>
|
<a href={"/guides/integrations/"} className="dark:text-blue-400">
|
||||||
Integrations
|
Integrations
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className={clsx(styles.card)}>
|
<div className="bg-gray-200 dark:bg-gray-800 w-72 rounded-lg relative flex flex-col p-8">
|
||||||
<div className={styles.cardHeader}>
|
<div className="flex items-center gap-4">
|
||||||
<img alt={"Icon"} src={"/img/homepage-new/doa.png"} />
|
<img alt={"Icon"} src={"/img/homepage-new/doa.png"} />
|
||||||
<h3>Troubleshooting</h3>
|
<h5 className="text-gray-700 dark:text-gray-200">Troubleshooting</h5>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.cardContent}>
|
<div className="mt-5 justify-center">
|
||||||
<p>Find solutions to common issues, including error codes, and FAQs.</p>
|
<p className="text-gray-700 dark:text-gray-200">Find solutions to common issues, including error codes, and FAQs.</p>
|
||||||
<ul>
|
<ul className="mt-5">
|
||||||
<li>
|
<li className="font-semibold list-disc mb-4">
|
||||||
<a href={"/guides/error-codes/"}>
|
<a href={"/guides/error-codes/"} className="dark:text-blue-400">
|
||||||
Error Codes
|
Error Codes
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li className="font-semibold list-disc mb-4">
|
||||||
<a href={"/guides/common-error/"}>
|
<a href={"/guides/common-error/"} className="dark:text-blue-400">
|
||||||
Common Errors
|
Common Errors
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li className="font-semibold list-disc mb-4">
|
||||||
<a href={"/guides/faqs/"}>
|
<a href={"/guides/faqs/"} className="dark:text-blue-400">
|
||||||
FAQ
|
FAQ
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@ -1,68 +0,0 @@
|
|||||||
.features {
|
|
||||||
padding-top: 5rem;
|
|
||||||
padding-bottom: 5rem;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cards {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 768px) {
|
|
||||||
.cards {
|
|
||||||
gap: 2rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.card {
|
|
||||||
background-color: #ECECEF;
|
|
||||||
width: 275px;
|
|
||||||
border-radius: 15px;
|
|
||||||
position: relative;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
/* justify-content: space-between; */
|
|
||||||
padding: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardContent {
|
|
||||||
margin-top: 1rem;
|
|
||||||
justify-content: start;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardContent li {
|
|
||||||
font-weight: 600;
|
|
||||||
list-style: circle;
|
|
||||||
margin: 1rem;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardContent li::marker {
|
|
||||||
color: #2563EB;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardHeader {
|
|
||||||
display: flex;
|
|
||||||
align-content: center;
|
|
||||||
gap: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardHeader img {
|
|
||||||
/*width: 40px;*/
|
|
||||||
height: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card p {
|
|
||||||
font-size: 1rem;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card h3 {
|
|
||||||
font-size: 1.2rem;
|
|
||||||
font-weight: 600;
|
|
||||||
}
|
|
||||||
@ -1,8 +1,56 @@
|
|||||||
|
/* Hide descriptions in cards without a description */
|
||||||
.DocCardList--no-description .card p {
|
.DocCardList--no-description .card p {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For dark theme */
|
/* For dark theme */
|
||||||
[data-theme="dark"] .DocSearch {
|
[data-theme='dark'] .DocSearch {
|
||||||
--docsearch-hit-active-color: #090a11; /* Keep the color unchanged */
|
--docsearch-hit-active-color: #090a11; /* Keep the color unchanged */
|
||||||
}
|
}
|
||||||
|
/* Sidebar styles based on Docusaurus light theme */
|
||||||
|
[data-theme='light'] .head_Menu div {
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: var(--ifm-background-color);
|
||||||
|
margin-left: 0.7rem;
|
||||||
|
font-size: larger;
|
||||||
|
color: var(--ifm-font-color-base);
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme='light'] .head_Menu li {
|
||||||
|
font-weight: normal;
|
||||||
|
background-color: var(--ifm-background-color);
|
||||||
|
margin-bottom: 5px;
|
||||||
|
color: var(--ifm-font-color-base);
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme='light'] .head_SubMenu div {
|
||||||
|
font-weight: normal;
|
||||||
|
background-color: var(--ifm-background-color);
|
||||||
|
margin-left: 0rem;
|
||||||
|
font-size: medium;
|
||||||
|
color: var(--ifm-font-color-base);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dark mode styles based on Docusaurus dark theme */
|
||||||
|
[data-theme='dark'] .head_Menu div {
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: var(--ifm-background-color);
|
||||||
|
color: var(--ifm-font-color-base);
|
||||||
|
margin-left: 0.7rem;
|
||||||
|
font-size: larger;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme='dark'] .head_Menu li {
|
||||||
|
font-weight: normal;
|
||||||
|
background-color: var(--ifm-background-color);
|
||||||
|
margin-bottom: 5px;
|
||||||
|
color: var(--ifm-font-color-base);
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme='dark'] .head_SubMenu div {
|
||||||
|
font-weight: normal;
|
||||||
|
background-color: var(--ifm-background-color);
|
||||||
|
color: var(--ifm-font-color-base);
|
||||||
|
margin-left: 0rem;
|
||||||
|
font-size: medium;
|
||||||
|
}
|
||||||
|
|||||||
@ -1,22 +1,22 @@
|
|||||||
import clsx from 'clsx'
|
import React from 'react';
|
||||||
import useDocusaurusContext from '@docusaurus/useDocusaurusContext'
|
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
||||||
import Layout from '@theme/Layout'
|
import Layout from '@theme/Layout';
|
||||||
import Heading from '@theme/Heading'
|
import Heading from '@theme/Heading';
|
||||||
|
import { DocSearch } from '@docsearch/react';
|
||||||
|
import HomepagePrimaryFeatures from '../components/HomepagePrimaryFeatures';
|
||||||
|
import HomepageSecondaryFeatures from '../components/HomepageSecondaryFeatures';
|
||||||
|
import HomepageTerinaryFeatures from '../components/HomepageTerinaryFeatures';
|
||||||
|
|
||||||
import styles from './docs.module.css'
|
import styles from './docs.module.css'
|
||||||
import HomepagePrimaryFeatures from '../components/HomepagePrimaryFeatures'
|
|
||||||
import HomepageSecondaryFeatures from '../components/HomepageSecondaryFeatures'
|
|
||||||
import HomepageTerinaryFeatures from '../components/HomepageTerinaryFeatures'
|
|
||||||
import { DocSearch } from '@docsearch/react'
|
|
||||||
import NavbarExtended from '../theme/NavbarExtension'
|
|
||||||
|
|
||||||
function HomepageHeader() {
|
function HomepageHeader() {
|
||||||
const { siteConfig } = useDocusaurusContext()
|
const { siteConfig } = useDocusaurusContext();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<header className={clsx(styles.heroBanner)}>
|
<header className="bg-white dark:bg-gray-800 py-16 h-[60vh] text-center relative overflow-hidden">
|
||||||
<NavbarExtended />
|
<div className="bg-custom-img w-full h-full absolute top-0 left-0 bg-cover bg-center"></div>
|
||||||
<div className="container">
|
<div className="container relative z-10">
|
||||||
<Heading as="h1" className={clsx(styles.heroTitle)}>
|
<Heading as="h1" className="text-2xl md:text-3xl lg:text-5xl font-semibold text-white dark:text-gray-200 mb-8 mt-8">
|
||||||
Hello, how can we help?
|
Hello, how can we help?
|
||||||
</Heading>
|
</Heading>
|
||||||
<div className={styles.searchBar}>
|
<div className={styles.searchBar}>
|
||||||
@ -28,30 +28,30 @@ function HomepageHeader() {
|
|||||||
insight={true}
|
insight={true}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<p className={clsx(styles.heroSubtitle)}>
|
|
||||||
Open-source ChatGPT alternative that runs 100% offline on your
|
<p className="text-lg md:text-xl lg:text-2xl text-white dark:text-gray-200 mt-8">
|
||||||
computer.
|
Open-source ChatGPT alternative that runs 100% offline on your computer.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Home() {
|
export default function Home() {
|
||||||
const { siteConfig } = useDocusaurusContext()
|
const { siteConfig } = useDocusaurusContext();
|
||||||
return (
|
return (
|
||||||
<Layout
|
<Layout
|
||||||
title={`Docs`}
|
title="Docs"
|
||||||
description="Description will go into a meta tag in <head />"
|
description="Description will go into a meta tag in <head />"
|
||||||
>
|
>
|
||||||
<div className={clsx(styles.homeBg)}>
|
<div className="bg-white dark:bg-gray-800">
|
||||||
<HomepageHeader />
|
<HomepageHeader />
|
||||||
<main style={{ backgroundColor: 'whitesmoke' }}>
|
<main className="bg-whitesmoke dark:bg-gray-900">
|
||||||
<HomepagePrimaryFeatures />
|
<HomepagePrimaryFeatures />
|
||||||
<HomepageSecondaryFeatures />
|
<HomepageSecondaryFeatures />
|
||||||
<HomepageTerinaryFeatures />
|
<HomepageTerinaryFeatures />
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
</Layout>
|
</Layout>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,47 +1,3 @@
|
|||||||
/**
|
|
||||||
* CSS files with the .module.css suffix will be treated as CSS modules
|
|
||||||
* and scoped locally.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.heroBanner {
|
|
||||||
padding: 4rem 0;
|
|
||||||
text-align: center;
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 996px) {
|
|
||||||
.heroBanner {
|
|
||||||
padding: 2rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 1400px) {
|
|
||||||
.homeBg {
|
|
||||||
background-size: auto 600px !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.homeBg {
|
|
||||||
background-image: url('/img/homepage-new/bg.png') !important;
|
|
||||||
background-size: contain;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
.heroTitle {
|
|
||||||
font-size: 3rem;
|
|
||||||
font-weight: 600;
|
|
||||||
color: white;
|
|
||||||
margin-top: 4rem;
|
|
||||||
margin-bottom: 3rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 1024px) {
|
|
||||||
.heroTitle {
|
|
||||||
font-size: 2rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.searchBar {
|
.searchBar {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
max-width: 580px;
|
max-width: 580px;
|
||||||
@ -88,8 +44,3 @@
|
|||||||
padding: 0px 5px;
|
padding: 0px 5px;
|
||||||
margin: 0px 10px;
|
margin: 0px 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.heroSubtitle {
|
|
||||||
font-size: 1.25rem;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
h1,
|
h1,
|
||||||
.h1 {
|
.h1 {
|
||||||
line-height: 48px;
|
|
||||||
font-size: 40px;
|
font-size: 40px;
|
||||||
@apply font-bold text-black dark:text-white;
|
@apply font-bold text-black dark:text-white;
|
||||||
}
|
}
|
||||||
@ -8,35 +7,24 @@ h2,
|
|||||||
.h2 {
|
.h2 {
|
||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
@apply font-bold text-black dark:text-white;
|
@apply font-bold text-black dark:text-white;
|
||||||
line-height: 40px;
|
|
||||||
}
|
}
|
||||||
h3,
|
h3,
|
||||||
.h3 {
|
.h3 {
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
@apply font-bold text-black dark:text-white;
|
@apply font-bold text-black dark:text-white;
|
||||||
line-height: 40px;
|
|
||||||
}
|
}
|
||||||
h4,
|
h4,
|
||||||
.h4 {
|
.h4 {
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
@apply font-bold text-black dark:text-white;
|
@apply font-bold text-black dark:text-white;
|
||||||
line-height: 32px;
|
|
||||||
}
|
}
|
||||||
h5,
|
h5,
|
||||||
.h5 {
|
.h5 {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
@apply font-bold text-black dark:text-white;
|
@apply font-bold text-black dark:text-white;
|
||||||
line-height: 28px;
|
|
||||||
}
|
}
|
||||||
h6,
|
h6,
|
||||||
.h6 {
|
.h6 {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
@apply font-bold text-black dark:text-white;
|
@apply font-bold text-black dark:text-white;
|
||||||
line-height: 24px;
|
|
||||||
}
|
|
||||||
p {
|
|
||||||
line-height: 24px;
|
|
||||||
}
|
|
||||||
.paragraph {
|
|
||||||
line-height: 24px;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
.theme-doc-markdown {
|
.theme-doc-markdown,
|
||||||
|
.markdown {
|
||||||
a,
|
a,
|
||||||
p,
|
p,
|
||||||
span,
|
span,
|
||||||
li {
|
li {
|
||||||
@apply leading-loose;
|
@apply leading-relaxed;
|
||||||
}
|
}
|
||||||
a {
|
a {
|
||||||
@apply text-blue-600 dark:text-blue-400;
|
@apply text-blue-600 dark:text-blue-400;
|
||||||
@ -18,7 +19,6 @@
|
|||||||
ol {
|
ol {
|
||||||
padding-left: 28px;
|
padding-left: 28px;
|
||||||
li {
|
li {
|
||||||
@apply leading-loose;
|
|
||||||
p {
|
p {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
@ -34,14 +34,19 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
h1,
|
h1,
|
||||||
h2 {
|
h2,
|
||||||
@apply mb-3;
|
h3 {
|
||||||
|
@apply mb-2;
|
||||||
}
|
}
|
||||||
|
|
||||||
table {
|
table {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: table;
|
display: table;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.task-list-item {
|
.task-list-item {
|
||||||
|
|||||||
BIN
docs/src/theme/DocCard/assets/logs-error.png
Normal file
BIN
docs/src/theme/DocCard/assets/logs-error.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.6 KiB |
@ -45,6 +45,7 @@ import gpu from './assets/gpu.png';
|
|||||||
import mistral from './assets/mistral.png';
|
import mistral from './assets/mistral.png';
|
||||||
import lm from './assets/lm.png';
|
import lm from './assets/lm.png';
|
||||||
import ollama from './assets/ollama.png';
|
import ollama from './assets/ollama.png';
|
||||||
|
import logsError from './assets/logs-error.png';
|
||||||
|
|
||||||
function CardContainer({href, children}) {
|
function CardContainer({href, children}) {
|
||||||
return (
|
return (
|
||||||
@ -166,7 +167,7 @@ function CardLink({item}) {
|
|||||||
<img src={amiss} alt="Logo" width={'20px'} height={'20px'} style={{marginRight: '5px'}} />
|
<img src={amiss} alt="Logo" width={'20px'} height={'20px'} style={{marginRight: '5px'}} />
|
||||||
) : (item.label === "Broken Build") ? (
|
) : (item.label === "Broken Build") ? (
|
||||||
<img src={broken} alt="Logo" width={'20px'} height={'20px'} style={{marginRight: '5px'}} />
|
<img src={broken} alt="Logo" width={'20px'} height={'20px'} style={{marginRight: '5px'}} />
|
||||||
) : (item.label === "Jan not using GPU") ? (
|
) : (item.label === "Troubleshooting NVIDIA GPU") ? (
|
||||||
<img src={gpu} alt="Logo" width={'20px'} height={'20px'} style={{marginRight: '5px'}} />
|
<img src={gpu} alt="Logo" width={'20px'} height={'20px'} style={{marginRight: '5px'}} />
|
||||||
) : (item.label === "Mistral AI") ? (
|
) : (item.label === "Mistral AI") ? (
|
||||||
<img src={mistral} alt="Logo" width={'20px'} height={'20px'} style={{marginRight: '5px'}} />
|
<img src={mistral} alt="Logo" width={'20px'} height={'20px'} style={{marginRight: '5px'}} />
|
||||||
@ -174,10 +175,15 @@ function CardLink({item}) {
|
|||||||
<img src={lm} alt="Logo" width={'20px'} height={'20px'} style={{marginRight: '5px'}} />
|
<img src={lm} alt="Logo" width={'20px'} height={'20px'} style={{marginRight: '5px'}} />
|
||||||
) : (item.label === "Ollama") ? (
|
) : (item.label === "Ollama") ? (
|
||||||
<img src={ollama} alt="Logo" width={'20px'} height={'20px'} style={{marginRight: '5px'}} />
|
<img src={ollama} alt="Logo" width={'20px'} height={'20px'} style={{marginRight: '5px'}} />
|
||||||
|
) : (item.label === "How to Get Error Logs") ? (
|
||||||
|
<img src={logsError} alt="Logo" width={'20px'} height={'20px'} style={{marginRight: '5px'}} />
|
||||||
) : (
|
) : (
|
||||||
// If not "Customize Engine Settings", use default icon
|
// If not "Customize Engine Settings", use default icon
|
||||||
'📄️'
|
'📄️'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const doc = useDocById(item.docId ?? undefined);
|
const doc = useDocById(item.docId ?? undefined);
|
||||||
return (
|
return (
|
||||||
<CardLayout
|
<CardLayout
|
||||||
|
|||||||
@ -14,6 +14,11 @@ import Footer from "@site/src/containers/Footer";
|
|||||||
import LayoutProvider from "@theme/Layout/Provider";
|
import LayoutProvider from "@theme/Layout/Provider";
|
||||||
import ErrorPageContent from "@theme/ErrorPageContent";
|
import ErrorPageContent from "@theme/ErrorPageContent";
|
||||||
import styles from "./styles.module.scss";
|
import styles from "./styles.module.scss";
|
||||||
|
import NavBarExtension from "../NavbarExtension";
|
||||||
|
import { useLocation } from "react-router-dom";
|
||||||
|
|
||||||
|
const allowedPaths = ["/docs/", "/developer/", "/api-reference/", "/guides/", "/guides", "/docs", "/developer", "/api-reference", "/changelog"];
|
||||||
|
|
||||||
export default function Layout(props) {
|
export default function Layout(props) {
|
||||||
const {
|
const {
|
||||||
children,
|
children,
|
||||||
@ -24,6 +29,11 @@ export default function Layout(props) {
|
|||||||
description,
|
description,
|
||||||
} = props;
|
} = props;
|
||||||
useKeyboardNavigation();
|
useKeyboardNavigation();
|
||||||
|
|
||||||
|
const location = useLocation();
|
||||||
|
|
||||||
|
const isAllowedPath = allowedPaths.some(path => location.pathname.startsWith(path));
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<LayoutProvider>
|
<LayoutProvider>
|
||||||
<PageMetadata title={title} description={description} />
|
<PageMetadata title={title} description={description} />
|
||||||
@ -32,14 +42,20 @@ export default function Layout(props) {
|
|||||||
|
|
||||||
<AnnouncementBar />
|
<AnnouncementBar />
|
||||||
|
|
||||||
<Navbar />
|
<Navbar/>
|
||||||
|
|
||||||
|
{isAllowedPath ? <NavBarExtension /> : ""}
|
||||||
|
|
||||||
|
{/* {console.log("Is allowed path?", location.pathname)} */}
|
||||||
|
|
||||||
|
|
||||||
<div
|
<div
|
||||||
id={SkipToContentFallbackId}
|
id={SkipToContentFallbackId}
|
||||||
className={clsx(
|
className={clsx(
|
||||||
ThemeClassNames.wrapper.main,
|
ThemeClassNames.wrapper.main,
|
||||||
styles.mainWrapper,
|
styles.mainWrapper,
|
||||||
wrapperClassName
|
wrapperClassName,
|
||||||
|
isAllowedPath && "mt-0 md:mt-11"
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<ErrorBoundary fallback={(params) => <ErrorPageContent {...params} />}>
|
<ErrorBoundary fallback={(params) => <ErrorPageContent {...params} />}>
|
||||||
|
|||||||
@ -1,25 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import Link from '@docusaurus/Link';
|
|
||||||
import css from "./NavPageContainer.module.css";
|
|
||||||
|
|
||||||
export default function NavPageContainer() {
|
|
||||||
return (
|
|
||||||
<div className={css.NavPageContainer}>
|
|
||||||
<Link to="/guides" className={css.NavPageItem}>
|
|
||||||
Guide
|
|
||||||
</Link>
|
|
||||||
<Link
|
|
||||||
to="/developer"
|
|
||||||
className={css.NavPageItem}
|
|
||||||
>
|
|
||||||
Developer
|
|
||||||
</Link>
|
|
||||||
<Link
|
|
||||||
to="/api-reference"
|
|
||||||
className={css.NavPageItem}
|
|
||||||
>
|
|
||||||
API Reference
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
.NavPageContainer {
|
|
||||||
margin-right: auto;
|
|
||||||
display: flex;
|
|
||||||
align-items: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.NavPageItem {
|
|
||||||
margin: 0 30px;
|
|
||||||
font-size: 16px;
|
|
||||||
font-weight: normal;
|
|
||||||
color: #262a2f;
|
|
||||||
cursor: pointer;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
@ -1,13 +1,48 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import css from "./index.module.css";
|
import { NavLink, useLocation } from "react-router-dom";
|
||||||
import NavPageContainer from "./NavPageContainer";
|
|
||||||
|
|
||||||
|
export default function NavBarExtension() {
|
||||||
|
const location = useLocation();
|
||||||
|
|
||||||
|
|
||||||
export default function NavBar() {
|
|
||||||
return (
|
return (
|
||||||
<div className={css.NavBar}>
|
<nav className="bg-white dark:bg-gray-800 h-12 px-10 pt-3 flex items-center justify-between fixed top-14 left-0 w-full z-50 hidden md:block">
|
||||||
<NavPageContainer />
|
<div className="flex items-center space-x-16">
|
||||||
</div>
|
<NavLink
|
||||||
|
to="/docs"
|
||||||
|
className="text-gray-700 font-medium hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-200"
|
||||||
|
activeClassName="text-gray-900 dark:text-gray-100 font-bold border-b-2 border-gray-900 dark:border-gray-100"
|
||||||
|
>
|
||||||
|
Docs
|
||||||
|
</NavLink>
|
||||||
|
<NavLink
|
||||||
|
to="/guides"
|
||||||
|
className="text-gray-700 font-medium hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-200"
|
||||||
|
activeClassName="text-gray-900 dark:text-gray-100 font-bold border-b-2 border-gray-900 dark:border-gray-100"
|
||||||
|
>
|
||||||
|
Guides
|
||||||
|
</NavLink>
|
||||||
|
<NavLink
|
||||||
|
to="/developer"
|
||||||
|
className="text-gray-700 font-medium hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-200"
|
||||||
|
activeClassName="text-gray-900 dark:text-gray-100 font-semibold border-b-2 border-gray-900 dark:border-gray-100"
|
||||||
|
>
|
||||||
|
Developer
|
||||||
|
</NavLink>
|
||||||
|
<NavLink
|
||||||
|
to="/api-reference"
|
||||||
|
className="text-gray-700 font-medium hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-200"
|
||||||
|
activeClassName="text-gray-900 dark:text-gray-100 font-semibold border-b-2 border-gray-900 dark:border-gray-100"
|
||||||
|
>
|
||||||
|
API Reference
|
||||||
|
</NavLink>
|
||||||
|
<NavLink
|
||||||
|
to="/changelog"
|
||||||
|
className="text-gray-700 font-medium hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-200"
|
||||||
|
activeClassName="text-gray-900 dark:text-gray-100 font-bold border-b-2 border-gray-900 dark:border-gray-100"
|
||||||
|
>
|
||||||
|
Changelog
|
||||||
|
</NavLink>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user