fix: merge conflict
50
.github/workflows/jan-electron-build-nightly.yml
vendored
@ -68,13 +68,13 @@ jobs:
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: jan-mac-x64-${{ steps.version_update.outputs.new_version }}.dmg
|
||||
name: jan-mac-x64-${{ steps.version_update.outputs.new_version }}
|
||||
path: ./electron/dist/jan-mac-x64-${{ steps.version_update.outputs.new_version }}.dmg
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: jan-mac-arm64-${{ steps.version_update.outputs.new_version }}.dmg
|
||||
name: jan-mac-arm64-${{ steps.version_update.outputs.new_version }}
|
||||
path: ./electron/dist/jan-mac-arm64-${{ steps.version_update.outputs.new_version }}.dmg
|
||||
|
||||
build-windows-x64:
|
||||
@ -124,7 +124,7 @@ jobs:
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: jan-win-x64-${{ steps.version_update.outputs.new_version }}.exe
|
||||
name: jan-win-x64-${{ steps.version_update.outputs.new_version }}
|
||||
path: ./electron/dist/*.exe
|
||||
|
||||
build-linux-x64:
|
||||
@ -170,14 +170,21 @@ jobs:
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: jan-linux-amd64-${{ steps.version_update.outputs.new_version }}.deb
|
||||
name: jan-linux-amd64-${{ steps.version_update.outputs.new_version }}
|
||||
path: ./electron/dist/*.deb
|
||||
|
||||
noti-discord-nightly:
|
||||
noti-discord-nightly-and-update-url-readme:
|
||||
needs: [build-macos, build-windows-x64, build-linux-x64]
|
||||
environment: production
|
||||
if: github.event_name == 'schedule'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: "0"
|
||||
token: ${{ secrets.PAT_SERVICE_ACCOUNT }}
|
||||
|
||||
- name: Notify Discord
|
||||
uses: Ilshidur/action-discord@master
|
||||
with:
|
||||
@ -185,14 +192,45 @@ jobs:
|
||||
env:
|
||||
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
||||
|
||||
noti-discord-manual:
|
||||
- name: Update README.md with artifact URL
|
||||
run: |
|
||||
sed -i "s|<a href='https://github.com/janhq/jan/actions/runs/.*'>|<a href='https://github.com/janhq/jan/actions/runs/${GITHUB_RUN_ID}'>|" README.md
|
||||
git config --global user.email "service@jan.ai"
|
||||
git config --global user.name "Service Account"
|
||||
git add README.md
|
||||
git commit -m "${GITHUB_REPOSITORY}: Update README.md with nightly build artifact URL"
|
||||
git -c http.extraheader="AUTHORIZATION: bearer ${{ secrets.PAT_SERVICE_ACCOUNT }}" push origin HEAD:main
|
||||
env:
|
||||
GITHUB_RUN_ID: ${{ github.run_id }}
|
||||
|
||||
noti-discord-manual-and-update-url-readme:
|
||||
needs: [build-macos, build-windows-x64, build-linux-x64]
|
||||
environment: production
|
||||
if: github.event_name == 'workflow_dispatch'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: "0"
|
||||
token: ${{ secrets.PAT_SERVICE_ACCOUNT }}
|
||||
|
||||
- name: Notify Discord
|
||||
uses: Ilshidur/action-discord@master
|
||||
with:
|
||||
args: "Manual build artifact: https://github.com/janhq/jan/actions/runs/{{ GITHUB_RUN_ID }}"
|
||||
env:
|
||||
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
||||
|
||||
# Update README.md with artifact URL if manual build from main branch
|
||||
- name: Update README.md with artifact URL
|
||||
if: github.ref == 'refs/heads/main'
|
||||
run: |
|
||||
sed -i "s|<a href='https://github.com/janhq/jan/actions/runs/.*'>|<a href='https://github.com/janhq/jan/actions/runs/${GITHUB_RUN_ID}'>|" README.md
|
||||
git config --global user.email "service@jan.ai"
|
||||
git config --global user.name "Service Account"
|
||||
git add README.md
|
||||
git commit -m "${GITHUB_REPOSITORY}: Update README.md with nightly build artifact URL"
|
||||
git -c http.extraheader="AUTHORIZATION: bearer ${{ secrets.PAT_SERVICE_ACCOUNT }}" push origin HEAD:main
|
||||
env:
|
||||
GITHUB_RUN_ID: ${{ github.run_id }}
|
||||
@ -11,6 +11,9 @@ on:
|
||||
- "package.json"
|
||||
- "node_modules/**"
|
||||
- "yarn.lock"
|
||||
- "core/**"
|
||||
- "extensions/**"
|
||||
- "!README.md"
|
||||
|
||||
pull_request:
|
||||
branches:
|
||||
@ -43,6 +46,11 @@ jobs:
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- name: "Cleanup cache"
|
||||
continue-on-error: true
|
||||
run: |
|
||||
make clean
|
||||
|
||||
- name: Linter and test
|
||||
run: |
|
||||
make test
|
||||
@ -69,6 +77,13 @@ jobs:
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
# Clean cache, continue on error
|
||||
- name: "Cleanup cache"
|
||||
shell: powershell
|
||||
continue-on-error: true
|
||||
run: |
|
||||
make clean
|
||||
|
||||
- name: Linter and test
|
||||
shell: powershell
|
||||
run: |
|
||||
@ -92,6 +107,11 @@ jobs:
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- name: "Cleanup cache"
|
||||
continue-on-error: true
|
||||
run: |
|
||||
make clean
|
||||
|
||||
- name: Linter and test
|
||||
run: |
|
||||
export DISPLAY=$(w -h | awk 'NR==1 {print $2}')
|
||||
|
||||
48
.github/workflows/update-release-url.yml
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
name: Update Download URLs
|
||||
|
||||
on:
|
||||
release:
|
||||
types:
|
||||
- published
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
update-readme:
|
||||
runs-on: ubuntu-latest
|
||||
environment: production
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: "0"
|
||||
token: ${{ secrets.PAT_SERVICE_ACCOUNT }}
|
||||
ref: main
|
||||
|
||||
- name: Get Latest Release
|
||||
uses: pozetroninc/github-action-get-latest-release@v0.7.0
|
||||
id: get-latest-release
|
||||
with:
|
||||
repository: ${{ github.repository }}
|
||||
|
||||
- name: Update Download URLs in README.md
|
||||
run: |
|
||||
echo "Latest Release: ${{ steps.get-latest-release.outputs.release }}"
|
||||
tag=$(/bin/echo -n "${{ steps.get-latest-release.outputs.release }}")
|
||||
echo "Tag: $tag"
|
||||
# Remove the v prefix
|
||||
release=${tag:1}
|
||||
echo "Release: $release"
|
||||
sed -i "s|<a href='https://github.com/janhq/jan/releases/download/v.*/jan-win-x64-.*'>|<a href='https://github.com/janhq/jan/releases/download/v${release}/jan-win-x64-${release}.exe'>|" README.md
|
||||
sed -i "s|<a href='https://github.com/janhq/jan/releases/download/v.*/jan-mac-x64-.*'>|<a href='https://github.com/janhq/jan/releases/download/v${release}/jan-mac-x64-${release}.dmg'>|" README.md
|
||||
sed -i "s|<a href='https://github.com/janhq/jan/releases/download/v.*/jan-mac-arm64-.*'>|<a href='https://github.com/janhq/jan/releases/download/v${release}/jan-mac-arm64-${release}.dmg'>|" README.md
|
||||
sed -i "s|<a href='https://github.com/janhq/jan/releases/download/v.*/jan-linux-amd64-.*'>|<a href='https://github.com/janhq/jan/releases/download/v${release}/jan-linux-amd64-${release}.deb'>|" README.md
|
||||
|
||||
- name: Commit and Push changes
|
||||
if: github.event_name == 'release'
|
||||
run: |
|
||||
git config --global user.email "service@jan.ai"
|
||||
git config --global user.name "Service Account"
|
||||
git add README.md
|
||||
git commit -m "Update README.md with Stable Download URLs"
|
||||
git -c http.extraheader="AUTHORIZATION: bearer ${{ secrets.PAT_SERVICE_ACCOUNT }}" push origin HEAD:main
|
||||
10
.gitignore
vendored
@ -17,7 +17,9 @@ package-lock.json
|
||||
core/lib/**
|
||||
|
||||
# Nitro binary files
|
||||
extensions/inference-extension/nitro/*/nitro
|
||||
extensions/inference-extension/nitro/*/*.exe
|
||||
extensions/inference-extension/nitro/*/*.dll
|
||||
extensions/inference-extension/nitro/*/*.metal
|
||||
extensions/inference-nitro-extension/bin/*/nitro
|
||||
extensions/inference-nitro-extension/bin/*/*.metal
|
||||
extensions/inference-nitro-extension/bin/*/*.exe
|
||||
extensions/inference-nitro-extension/bin/*/*.dll
|
||||
extensions/inference-nitro-extension/bin/*/*.exp
|
||||
extensions/inference-nitro-extension/bin/*/*.lib
|
||||
76
README.md
@ -1,4 +1,4 @@
|
||||
# Jan - Own Your AI
|
||||
# Jan - Bring AI to your Desktop
|
||||
|
||||

|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
|
||||
> ⚠️ **Jan is currently in Development**: Expect breaking changes and bugs!
|
||||
|
||||
Jan is a free, open-source alternative to OpenAI's platform that runs on a local folder of open-format files.
|
||||
Jan is an open-source ChatGPT alternative that runs 100% offline on your computer.
|
||||
|
||||
**Jan runs on any hardware.** From PCs to multi-GPU clusters, Jan supports universal architectures:
|
||||
|
||||
@ -31,27 +31,83 @@ Jan is a free, open-source alternative to OpenAI's platform that runs on a local
|
||||
- [x] Linux Debian
|
||||
- [x] Windows x64
|
||||
|
||||
> Download Jan at https://jan.ai/
|
||||
## Download
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td style="text-align:center"><b>Version Type</b></td>
|
||||
<td style="text-align:center"><b>Windows</b></td>
|
||||
<td colspan="2" style="text-align:center"><b>MacOS</b></td>
|
||||
<td style="text-align:center"><b>Linux</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align:center"><b>Stable (Recommended)</b></td>
|
||||
<td style="text-align:center">
|
||||
<a href='https://github.com/janhq/jan/releases/download/v0.4.0/jan-win-x64-0.4.0.exe'>
|
||||
<img src='./docs/static/img/windows.png' style="height:14px; width: 14px" />
|
||||
<b>jan.exe</b>
|
||||
</a>
|
||||
</td>
|
||||
<td style="text-align:center">
|
||||
<a href='https://github.com/janhq/jan/releases/download/v0.4.0/jan-mac-x64-0.4.0.dmg'>
|
||||
<img src='./docs/static/img/mac.png' style="height:15px; width: 15px" />
|
||||
<b>Intel</b>
|
||||
</a>
|
||||
</td>
|
||||
<td style="text-align:center">
|
||||
<a href='https://github.com/janhq/jan/releases/download/v0.4.0/jan-mac-arm64-0.4.0.dmg'>
|
||||
<img src='./docs/static/img/mac.png' style="height:15px; width: 15px" />
|
||||
<b>M1/M2</b>
|
||||
</a>
|
||||
</td>
|
||||
<td style="text-align:center">
|
||||
<a href='https://github.com/janhq/jan/releases/download/v0.4.0/jan-linux-amd64-0.4.0.deb'>
|
||||
<img src='./docs/static/img/linux.png' style="height:14px; width: 14px" />
|
||||
<b>jan.deb</b>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="text-align: center">
|
||||
<td style="text-align:center"><b>Experimental (Nighlty Build)</b></td>
|
||||
<td style="text-align:center" colspan="4">
|
||||
<a href='https://github.com/janhq/jan/actions/runs/7190839060'>
|
||||
<b>Github action artifactory</b>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
Download the latest version of Jan at https://jan.ai/ or visit the **[GitHub Releases](https://github.com/janhq/jan/releases)** to download any previous release.
|
||||
|
||||
## Demo
|
||||
|
||||
<p align="center">
|
||||
<video src="https://github.com/janhq/jan/assets/89722390/47988dcc-13ed-4ca0-87f7-74d00f4d47d8">
|
||||
<video src="https://github.com/janhq/jan/assets/89722390/43adfddc-7980-4ae6-b544-719f04660dd7">
|
||||
</video>
|
||||
</p>
|
||||
|
||||
_Video: Jan v0.3.0 on Mac Air M2, 16GB Ventura_
|
||||
|
||||
_Video: Jan v0.4.0 on Mac Air M2, 16GB Ventura_
|
||||
|
||||
## Quicklinks
|
||||
|
||||
#### Jan
|
||||
- [Jan website](https://jan.ai/)
|
||||
- [Jan Github](https://github.com/janhq/jan)
|
||||
- [User Guides](https://jan.ai/docs)
|
||||
- [Developer docs](https://jan.ai/docs)
|
||||
- [API reference](https://jan.ai/api/overview)
|
||||
- [Nitro Github](https://nitro.jan.ai): Nitro is a C++ inference engine
|
||||
- [Developer docs](https://jan.ai/docs/extensions/)
|
||||
- [API reference](https://jan.ai/api-reference/)
|
||||
- [Specs](https://jan.ai/specs/)
|
||||
|
||||
#### Nitro:
|
||||
Nitro is a high-efficiency C++ inference engine for edge computing, powering Jan. It is lightweight and embeddable, ideal for product integration.
|
||||
- [Nitro Website](https://nitro.jan.ai)
|
||||
- [Nitro Github](https://github.com/janhq/nitro)
|
||||
- [Documentation](https://nitro.jan.ai/docs)
|
||||
- [API Reference](https://nitro.jan.ai/api-reference)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
As Jan is development mode, you might get stuck on a broken build.
|
||||
As Jan is in development mode, you might get stuck on a broken build.
|
||||
|
||||
To reset your installation:
|
||||
|
||||
|
||||
13
core/.editorconfig
Normal file
@ -0,0 +1,13 @@
|
||||
#root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
max_line_length = 100
|
||||
indent_size = 2
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
12
core/.gitignore
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
node_modules
|
||||
coverage
|
||||
.nyc_output
|
||||
.DS_Store
|
||||
*.log
|
||||
.vscode
|
||||
.idea
|
||||
dist
|
||||
compiled
|
||||
.awcache
|
||||
.rpt2_cache
|
||||
docs
|
||||
@ -8,28 +8,83 @@
|
||||
],
|
||||
"homepage": "https://jan.ai",
|
||||
"license": "AGPL-3.0",
|
||||
"main": "lib/index.js",
|
||||
"types": "lib/index.d.ts",
|
||||
"directories": {
|
||||
"lib": "lib",
|
||||
"test": "__tests__"
|
||||
},
|
||||
"exports": {
|
||||
".": "./lib/index.js"
|
||||
},
|
||||
"main": "dist/core.umd.js",
|
||||
"module": "dist/core.es5.js",
|
||||
"typings": "dist/types/index.d.ts",
|
||||
"files": [
|
||||
"lib",
|
||||
"README.md",
|
||||
"LICENSE.md",
|
||||
"package.json",
|
||||
"!.DS_Store"
|
||||
"dist"
|
||||
],
|
||||
"author": "Jan <service@jan.ai>",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": ""
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "echo \"Error: run tests from root\" && exit 1",
|
||||
"build": "tsc"
|
||||
"lint": "tslint --project tsconfig.json -t codeFrame 'src/**/*.ts' 'test/**/*.ts'",
|
||||
"prebuild": "rimraf dist",
|
||||
"build": "tsc --module commonjs && rollup -c rollup.config.ts",
|
||||
"start": "rollup -c rollup.config.ts -w"
|
||||
},
|
||||
"lint-staged": {
|
||||
"{src,test}/**/*.ts": [
|
||||
"prettier --write",
|
||||
"git add"
|
||||
]
|
||||
},
|
||||
"config": {
|
||||
"commitizen": {
|
||||
"path": "node_modules/cz-conventional-changelog"
|
||||
}
|
||||
},
|
||||
"jest": {
|
||||
"transform": {
|
||||
".(ts|tsx)": "ts-jest"
|
||||
},
|
||||
"testEnvironment": "node",
|
||||
"testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$",
|
||||
"moduleFileExtensions": [
|
||||
"ts",
|
||||
"tsx",
|
||||
"js"
|
||||
],
|
||||
"coveragePathIgnorePatterns": [
|
||||
"/node_modules/",
|
||||
"/test/"
|
||||
],
|
||||
"coverageThreshold": {
|
||||
"global": {
|
||||
"branches": 90,
|
||||
"functions": 95,
|
||||
"lines": 95,
|
||||
"statements": 95
|
||||
}
|
||||
},
|
||||
"collectCoverageFrom": [
|
||||
"src/*.{js,ts}"
|
||||
]
|
||||
},
|
||||
"prettier": {
|
||||
"semi": false,
|
||||
"singleQuote": true
|
||||
},
|
||||
"commitlint": {
|
||||
"extends": [
|
||||
"@commitlint/config-conventional"
|
||||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^12.0.2",
|
||||
"rollup": "^2.38.5",
|
||||
"rollup-plugin-commonjs": "^9.1.8",
|
||||
"rollup-plugin-json": "^3.1.0",
|
||||
"rollup-plugin-node-resolve": "^5.2.0",
|
||||
"rollup-plugin-sourcemaps": "^0.6.3",
|
||||
"rollup-plugin-typescript2": "^0.36.0",
|
||||
"ts-node": "^7.0.1",
|
||||
"tslib": "^2.6.2",
|
||||
"typescript": "^5.2.2"
|
||||
}
|
||||
}
|
||||
|
||||
37
core/rollup.config.ts
Normal file
@ -0,0 +1,37 @@
|
||||
import resolve from 'rollup-plugin-node-resolve'
|
||||
import commonjs from 'rollup-plugin-commonjs'
|
||||
import sourceMaps from 'rollup-plugin-sourcemaps'
|
||||
import typescript from 'rollup-plugin-typescript2'
|
||||
import json from 'rollup-plugin-json'
|
||||
|
||||
const pkg = require('./package.json')
|
||||
|
||||
const libraryName = 'core'
|
||||
|
||||
export default {
|
||||
input: `src/index.ts`,
|
||||
output: [
|
||||
{ file: pkg.main, name: libraryName, format: 'umd', sourcemap: true },
|
||||
{ file: pkg.module, format: 'es', sourcemap: true },
|
||||
],
|
||||
// Indicate here external modules you don't wanna include in your bundle (i.e.: 'lodash')
|
||||
external: [],
|
||||
watch: {
|
||||
include: 'src/**',
|
||||
},
|
||||
plugins: [
|
||||
// Allow json resolution
|
||||
json(),
|
||||
// Compile TypeScript files
|
||||
typescript({ useTsconfigDeclarationDir: true }),
|
||||
// Allow bundling cjs modules (unlike webpack, rollup doesn't understand cjs)
|
||||
commonjs(),
|
||||
// Allow node_modules resolution, so you can use 'external' to control
|
||||
// which external modules to include in the bundle
|
||||
// https://github.com/rollup/rollup-plugin-node-resolve#usage
|
||||
resolve(),
|
||||
|
||||
// Resolve source maps to the original source
|
||||
sourceMaps(),
|
||||
],
|
||||
}
|
||||
9
core/src/@global/index.d.ts
vendored
@ -1,7 +1,10 @@
|
||||
export {};
|
||||
export {}
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
core?: any;
|
||||
namespace NodeJS {
|
||||
interface Global {
|
||||
core: any
|
||||
}
|
||||
}
|
||||
var core: any | undefined
|
||||
}
|
||||
|
||||
100
core/src/api/index.ts
Normal file
@ -0,0 +1,100 @@
|
||||
/**
|
||||
* App Route APIs
|
||||
* @description Enum of all the routes exposed by the app
|
||||
*/
|
||||
export enum AppRoute {
|
||||
setNativeThemeLight = 'setNativeThemeLight',
|
||||
setNativeThemeDark = 'setNativeThemeDark',
|
||||
setNativeThemeSystem = 'setNativeThemeSystem',
|
||||
appDataPath = 'appDataPath',
|
||||
appVersion = 'appVersion',
|
||||
getResourcePath = 'getResourcePath',
|
||||
openExternalUrl = 'openExternalUrl',
|
||||
openAppDirectory = 'openAppDirectory',
|
||||
openFileExplore = 'openFileExplorer',
|
||||
relaunch = 'relaunch',
|
||||
}
|
||||
|
||||
export enum AppEvent {
|
||||
onAppUpdateDownloadUpdate = 'onAppUpdateDownloadUpdate',
|
||||
onAppUpdateDownloadError = 'onAppUpdateDownloadError',
|
||||
onAppUpdateDownloadSuccess = 'onAppUpdateDownloadSuccess',
|
||||
}
|
||||
|
||||
export enum DownloadRoute {
|
||||
abortDownload = 'abortDownload',
|
||||
downloadFile = 'downloadFile',
|
||||
pauseDownload = 'pauseDownload',
|
||||
resumeDownload = 'resumeDownload',
|
||||
}
|
||||
|
||||
export enum DownloadEvent {
|
||||
onFileDownloadUpdate = 'onFileDownloadUpdate',
|
||||
onFileDownloadError = 'onFileDownloadError',
|
||||
onFileDownloadSuccess = 'onFileDownloadSuccess',
|
||||
}
|
||||
|
||||
export enum ExtensionRoute {
|
||||
baseExtensions = 'baseExtensions',
|
||||
getActiveExtensions = 'getActiveExtensions',
|
||||
installExtension = 'installExtension',
|
||||
invokeExtensionFunc = 'invokeExtensionFunc',
|
||||
updateExtension = 'updateExtension',
|
||||
uninstallExtension = 'uninstallExtension',
|
||||
}
|
||||
export enum FileSystemRoute {
|
||||
appendFile = 'appendFile',
|
||||
copyFile = 'copyFile',
|
||||
deleteFile = 'deleteFile',
|
||||
exists = 'exists',
|
||||
getResourcePath = 'getResourcePath',
|
||||
getUserSpace = 'getUserSpace',
|
||||
isDirectory = 'isDirectory',
|
||||
listFiles = 'listFiles',
|
||||
mkdir = 'mkdir',
|
||||
readFile = 'readFile',
|
||||
readLineByLine = 'readLineByLine',
|
||||
rmdir = 'rmdir',
|
||||
writeFile = 'writeFile',
|
||||
}
|
||||
|
||||
export type ApiFunction = (...args: any[]) => any
|
||||
|
||||
export type AppRouteFunctions = {
|
||||
[K in AppRoute]: ApiFunction
|
||||
}
|
||||
|
||||
export type AppEventFunctions = {
|
||||
[K in AppEvent]: ApiFunction
|
||||
}
|
||||
|
||||
export type DownloadRouteFunctions = {
|
||||
[K in DownloadRoute]: ApiFunction
|
||||
}
|
||||
|
||||
export type DownloadEventFunctions = {
|
||||
[K in DownloadEvent]: ApiFunction
|
||||
}
|
||||
|
||||
export type ExtensionRouteFunctions = {
|
||||
[K in ExtensionRoute]: ApiFunction
|
||||
}
|
||||
|
||||
export type FileSystemRouteFunctions = {
|
||||
[K in FileSystemRoute]: ApiFunction
|
||||
}
|
||||
|
||||
export type APIFunctions = AppRouteFunctions &
|
||||
AppEventFunctions &
|
||||
DownloadRouteFunctions &
|
||||
DownloadEventFunctions &
|
||||
ExtensionRouteFunctions &
|
||||
FileSystemRouteFunctions
|
||||
|
||||
export const APIRoutes = [
|
||||
...Object.values(AppRoute),
|
||||
...Object.values(DownloadRoute),
|
||||
...Object.values(ExtensionRoute),
|
||||
...Object.values(FileSystemRoute),
|
||||
]
|
||||
export const APIEvents = [...Object.values(AppEvent), ...Object.values(DownloadEvent)]
|
||||
@ -7,12 +7,11 @@
|
||||
* @returns Promise<any>
|
||||
*
|
||||
*/
|
||||
const executeOnMain: (
|
||||
extension: string,
|
||||
method: string,
|
||||
...args: any[]
|
||||
) => Promise<any> = (extension, method, ...args) =>
|
||||
window.core?.api?.invokeExtensionFunc(extension, method, ...args);
|
||||
const executeOnMain: (extension: string, method: string, ...args: any[]) => Promise<any> = (
|
||||
extension,
|
||||
method,
|
||||
...args
|
||||
) => global.core?.api?.invokeExtensionFunc(extension, method, ...args)
|
||||
|
||||
/**
|
||||
* Downloads a file from a URL and saves it to the local file system.
|
||||
@ -20,10 +19,8 @@ const executeOnMain: (
|
||||
* @param {string} fileName - The name to use for the downloaded file.
|
||||
* @returns {Promise<any>} A promise that resolves when the file is downloaded.
|
||||
*/
|
||||
const downloadFile: (url: string, fileName: string) => Promise<any> = (
|
||||
url,
|
||||
fileName
|
||||
) => window.core?.api?.downloadFile(url, fileName);
|
||||
const downloadFile: (url: string, fileName: string) => Promise<any> = (url, fileName) =>
|
||||
global.core?.api?.downloadFile(url, fileName)
|
||||
|
||||
/**
|
||||
* Aborts the download of a specific file.
|
||||
@ -31,20 +28,13 @@ const downloadFile: (url: string, fileName: string) => Promise<any> = (
|
||||
* @returns {Promise<any>} A promise that resolves when the download has been aborted.
|
||||
*/
|
||||
const abortDownload: (fileName: string) => Promise<any> = (fileName) =>
|
||||
window.core.api?.abortDownload(fileName);
|
||||
|
||||
/**
|
||||
* Retrieves the path to the app data directory using the `coreAPI` object.
|
||||
* If the `coreAPI` object is not available, the function returns `undefined`.
|
||||
* @returns A Promise that resolves with the path to the app data directory, or `undefined` if the `coreAPI` object is not available.
|
||||
*/
|
||||
const appDataPath: () => Promise<any> = () => window.core.api?.appDataPath();
|
||||
global.core.api?.abortDownload(fileName)
|
||||
|
||||
/**
|
||||
* Gets the user space path.
|
||||
* @returns {Promise<any>} A Promise that resolves with the user space path.
|
||||
*/
|
||||
const getUserSpace = (): Promise<string> => window.core.api?.getUserSpace();
|
||||
const getUserSpace = (): Promise<string> => global.core.api?.getUserSpace()
|
||||
|
||||
/**
|
||||
* Opens the file explorer at a specific path.
|
||||
@ -52,10 +42,9 @@ const getUserSpace = (): Promise<string> => window.core.api?.getUserSpace();
|
||||
* @returns {Promise<any>} A promise that resolves when the file explorer is opened.
|
||||
*/
|
||||
const openFileExplorer: (path: string) => Promise<any> = (path) =>
|
||||
window.core.api?.openFileExplorer(path);
|
||||
global.core.api?.openFileExplorer(path)
|
||||
|
||||
const getResourcePath: () => Promise<string> = () =>
|
||||
window.core.api?.getResourcePath();
|
||||
const getResourcePath: () => Promise<string> = () => global.core.api?.getResourcePath()
|
||||
|
||||
/**
|
||||
* Register extension point function type definition
|
||||
@ -64,8 +53,8 @@ export type RegisterExtensionPoint = (
|
||||
extensionName: string,
|
||||
extensionId: string,
|
||||
method: Function,
|
||||
priority?: number
|
||||
) => void;
|
||||
priority?: number,
|
||||
) => void
|
||||
|
||||
/**
|
||||
* Functions exports
|
||||
@ -74,8 +63,7 @@ export {
|
||||
executeOnMain,
|
||||
downloadFile,
|
||||
abortDownload,
|
||||
appDataPath,
|
||||
getUserSpace,
|
||||
openFileExplorer,
|
||||
getResourcePath,
|
||||
};
|
||||
}
|
||||
|
||||
@ -8,6 +8,18 @@ export enum EventName {
|
||||
OnMessageResponse = "OnMessageResponse",
|
||||
/** The `OnMessageUpdate` event is emitted when a message is updated. */
|
||||
OnMessageUpdate = "OnMessageUpdate",
|
||||
/** The `OnModelInit` event is emitted when a model inits. */
|
||||
OnModelInit = "OnModelInit",
|
||||
/** The `OnModelReady` event is emitted when a model ready. */
|
||||
OnModelReady = "OnModelReady",
|
||||
/** The `OnModelFail` event is emitted when a model fails loading. */
|
||||
OnModelFail = "OnModelFail",
|
||||
/** The `OnModelStop` event is emitted when a model start to stop. */
|
||||
OnModelStop = "OnModelStop",
|
||||
/** The `OnModelStopped` event is emitted when a model stopped ok. */
|
||||
OnModelStopped = "OnModelStopped",
|
||||
/** The `OnInferenceStopped` event is emitted when a inference is stopped. */
|
||||
OnInferenceStopped = "OnInferenceStopped",
|
||||
}
|
||||
|
||||
/**
|
||||
@ -20,7 +32,7 @@ const on: (eventName: string, handler: Function) => void = (
|
||||
eventName,
|
||||
handler
|
||||
) => {
|
||||
window.core?.events?.on(eventName, handler);
|
||||
global.core?.events?.on(eventName, handler);
|
||||
};
|
||||
|
||||
/**
|
||||
@ -33,7 +45,7 @@ const off: (eventName: string, handler: Function) => void = (
|
||||
eventName,
|
||||
handler
|
||||
) => {
|
||||
window.core?.events?.off(eventName, handler);
|
||||
global.core?.events?.off(eventName, handler);
|
||||
};
|
||||
|
||||
/**
|
||||
@ -43,7 +55,7 @@ const off: (eventName: string, handler: Function) => void = (
|
||||
* @param object The object to pass to the event callback.
|
||||
*/
|
||||
const emit: (eventName: string, object: any) => void = (eventName, object) => {
|
||||
window.core?.events?.emit(eventName, object);
|
||||
global.core?.events?.emit(eventName, object);
|
||||
};
|
||||
|
||||
export const events = {
|
||||
|
||||
@ -5,26 +5,10 @@ import { BaseExtension } from "../extension";
|
||||
* Inference extension. Start, stop and inference models.
|
||||
*/
|
||||
export abstract class InferenceExtension extends BaseExtension {
|
||||
/**
|
||||
* Initializes the model for the extension.
|
||||
* @param modelId - The ID of the model to initialize.
|
||||
*/
|
||||
abstract initModel(modelId: string, settings?: ModelSettingParams): Promise<void>;
|
||||
|
||||
/**
|
||||
* Stops the model for the extension.
|
||||
*/
|
||||
abstract stopModel(): Promise<void>;
|
||||
|
||||
/**
|
||||
* Stops the streaming inference.
|
||||
*/
|
||||
abstract stopInference(): Promise<void>;
|
||||
|
||||
/**
|
||||
* Processes an inference request.
|
||||
* @param data - The data for the inference request.
|
||||
* @returns The result of the inference request.
|
||||
*/
|
||||
abstract inferenceRequest(data: MessageRequest): Promise<ThreadMessage>;
|
||||
abstract inference(data: MessageRequest): Promise<ThreadMessage>;
|
||||
}
|
||||
|
||||
@ -5,54 +5,52 @@
|
||||
* @returns {Promise<any>} A Promise that resolves when the file is written successfully.
|
||||
*/
|
||||
const writeFile: (path: string, data: string) => Promise<any> = (path, data) =>
|
||||
window.core.api?.writeFile(path, data);
|
||||
global.core.api?.writeFile(path, data)
|
||||
|
||||
/**
|
||||
* Checks whether the path is a directory.
|
||||
* @param path - The path to check.
|
||||
* @returns {boolean} A boolean indicating whether the path is a directory.
|
||||
*/
|
||||
const isDirectory = (path: string): Promise<boolean> =>
|
||||
window.core.api?.isDirectory(path);
|
||||
const isDirectory = (path: string): Promise<boolean> => global.core.api?.isDirectory(path)
|
||||
|
||||
/**
|
||||
* Reads the contents of a file at the specified path.
|
||||
* @param {string} path - The path of the file to read.
|
||||
* @returns {Promise<any>} A Promise that resolves with the contents of the file.
|
||||
*/
|
||||
const readFile: (path: string) => Promise<any> = (path) =>
|
||||
window.core.api?.readFile(path);
|
||||
|
||||
const readFile: (path: string) => Promise<any> = (path) => global.core.api?.readFile(path)
|
||||
/**
|
||||
* Check whether the file exists
|
||||
* @param {string} path
|
||||
* @returns {boolean} A boolean indicating whether the path is a file.
|
||||
*/
|
||||
const exists = (path: string): Promise<boolean> => global.core.api?.exists(path)
|
||||
/**
|
||||
* List the directory files
|
||||
* @param {string} path - The path of the directory to list files.
|
||||
* @returns {Promise<any>} A Promise that resolves with the contents of the directory.
|
||||
*/
|
||||
const listFiles: (path: string) => Promise<any> = (path) =>
|
||||
window.core.api?.listFiles(path);
|
||||
|
||||
const listFiles: (path: string) => Promise<any> = (path) => global.core.api?.listFiles(path)
|
||||
/**
|
||||
* Creates a directory at the specified path.
|
||||
* @param {string} path - The path of the directory to create.
|
||||
* @returns {Promise<any>} A Promise that resolves when the directory is created successfully.
|
||||
*/
|
||||
const mkdir: (path: string) => Promise<any> = (path) =>
|
||||
window.core.api?.mkdir(path);
|
||||
const mkdir: (path: string) => Promise<any> = (path) => global.core.api?.mkdir(path)
|
||||
|
||||
/**
|
||||
* Removes a directory at the specified path.
|
||||
* @param {string} path - The path of the directory to remove.
|
||||
* @returns {Promise<any>} A Promise that resolves when the directory is removed successfully.
|
||||
*/
|
||||
const rmdir: (path: string) => Promise<any> = (path) =>
|
||||
window.core.api?.rmdir(path);
|
||||
const rmdir: (path: string) => Promise<any> = (path) => global.core.api?.rmdir(path)
|
||||
/**
|
||||
* Deletes a file from the local file system.
|
||||
* @param {string} path - The path of the file to delete.
|
||||
* @returns {Promise<any>} A Promise that resolves when the file is deleted.
|
||||
*/
|
||||
const deleteFile: (path: string) => Promise<any> = (path) =>
|
||||
window.core.api?.deleteFile(path);
|
||||
const deleteFile: (path: string) => Promise<any> = (path) => global.core.api?.deleteFile(path)
|
||||
|
||||
/**
|
||||
* Appends data to a file at the specified path.
|
||||
@ -60,10 +58,10 @@ const deleteFile: (path: string) => Promise<any> = (path) =>
|
||||
* @param data data to append
|
||||
*/
|
||||
const appendFile: (path: string, data: string) => Promise<any> = (path, data) =>
|
||||
window.core.api?.appendFile(path, data);
|
||||
global.core.api?.appendFile(path, data)
|
||||
|
||||
const copyFile: (src: string, dest: string) => Promise<any> = (src, dest) =>
|
||||
window.core.api?.copyFile(src, dest);
|
||||
global.core.api?.copyFile(src, dest)
|
||||
|
||||
/**
|
||||
* Reads a file line by line.
|
||||
@ -71,12 +69,13 @@ const copyFile: (src: string, dest: string) => Promise<any> = (src, dest) =>
|
||||
* @returns {Promise<any>} A promise that resolves to the lines of the file.
|
||||
*/
|
||||
const readLineByLine: (path: string) => Promise<any> = (path) =>
|
||||
window.core.api?.readLineByLine(path);
|
||||
global.core.api?.readLineByLine(path)
|
||||
|
||||
export const fs = {
|
||||
isDirectory,
|
||||
writeFile,
|
||||
readFile,
|
||||
exists,
|
||||
listFiles,
|
||||
mkdir,
|
||||
rmdir,
|
||||
@ -84,4 +83,4 @@ export const fs = {
|
||||
appendFile,
|
||||
readLineByLine,
|
||||
copyFile,
|
||||
};
|
||||
}
|
||||
|
||||
@ -2,34 +2,39 @@
|
||||
* Export all types.
|
||||
* @module
|
||||
*/
|
||||
export * from "./types/index";
|
||||
export * from './types/index'
|
||||
|
||||
/**
|
||||
* Export all routes
|
||||
*/
|
||||
export * from './api'
|
||||
|
||||
/**
|
||||
* Export Core module
|
||||
* @module
|
||||
*/
|
||||
export * from "./core";
|
||||
export * from './core'
|
||||
|
||||
/**
|
||||
* Export Event module.
|
||||
* @module
|
||||
*/
|
||||
export * from "./events";
|
||||
export * from './events'
|
||||
|
||||
/**
|
||||
* Export Filesystem module.
|
||||
* @module
|
||||
*/
|
||||
export * from "./fs";
|
||||
export * from './fs'
|
||||
|
||||
/**
|
||||
* Export Extension module.
|
||||
* @module
|
||||
*/
|
||||
export * from "./extension";
|
||||
export * from './extension'
|
||||
|
||||
/**
|
||||
* Export all base extensions.
|
||||
* @module
|
||||
*/
|
||||
export * from "./extensions/index";
|
||||
export * from './extensions/index'
|
||||
|
||||
@ -41,8 +41,8 @@ export type MessageRequest = {
|
||||
/** Messages for constructing a chat completion request **/
|
||||
messages?: ChatCompletionMessage[];
|
||||
|
||||
/** Runtime parameters for constructing a chat completion request **/
|
||||
parameters?: ModelRuntimeParam;
|
||||
/** Settings for constructing a chat completion request **/
|
||||
model?: ModelInfo;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -71,9 +71,9 @@ export type ThreadMessage = {
|
||||
object: string;
|
||||
/** Thread id, default is a ulid. **/
|
||||
thread_id: string;
|
||||
/** The role of the author of this message. **/
|
||||
/** The assistant id of this thread. **/
|
||||
assistant_id?: string;
|
||||
// TODO: comment
|
||||
/** The role of the author of this message. **/
|
||||
role: ChatCompletionRole;
|
||||
/** The content of this message. **/
|
||||
content: ThreadContent[];
|
||||
@ -125,8 +125,6 @@ export interface Thread {
|
||||
title: string;
|
||||
/** Assistants in this thread. **/
|
||||
assistants: ThreadAssistantInfo[];
|
||||
// if the thread has been init will full assistant info
|
||||
isFinishInit: boolean;
|
||||
/** The timestamp indicating when this thread was created, represented in ISO 8601 format. **/
|
||||
created: number;
|
||||
/** The timestamp indicating when this thread was updated, represented in ISO 8601 format. **/
|
||||
@ -153,7 +151,8 @@ export type ThreadAssistantInfo = {
|
||||
export type ModelInfo = {
|
||||
id: string;
|
||||
settings: ModelSettingParams;
|
||||
parameters: ModelRuntimeParam;
|
||||
parameters: ModelRuntimeParams;
|
||||
engine?: InferenceEngine;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -165,7 +164,19 @@ export type ThreadState = {
|
||||
waitingForResponse: boolean;
|
||||
error?: Error;
|
||||
lastMessage?: string;
|
||||
isFinishInit?: boolean;
|
||||
};
|
||||
/**
|
||||
* Represents the inference engine.
|
||||
* @stored
|
||||
*/
|
||||
|
||||
enum InferenceEngine {
|
||||
nitro = "nitro",
|
||||
openai = "openai",
|
||||
triton_trtllm = "triton_trtllm",
|
||||
hf_endpoint = "hf_endpoint",
|
||||
}
|
||||
|
||||
/**
|
||||
* Model type defines the shape of a model object.
|
||||
@ -183,6 +194,11 @@ export interface Model {
|
||||
*/
|
||||
version: number;
|
||||
|
||||
/**
|
||||
* The format of the model.
|
||||
*/
|
||||
format: string;
|
||||
|
||||
/**
|
||||
* The model download source. It can be an external url or a local filepath.
|
||||
*/
|
||||
@ -213,7 +229,7 @@ export interface Model {
|
||||
* Default: "to_download"
|
||||
* Enum: "to_download" "downloading" "ready" "running"
|
||||
*/
|
||||
state: ModelState;
|
||||
state?: ModelState;
|
||||
|
||||
/**
|
||||
* The model settings.
|
||||
@ -223,18 +239,23 @@ export interface Model {
|
||||
/**
|
||||
* The model runtime parameters.
|
||||
*/
|
||||
parameters: ModelRuntimeParam;
|
||||
parameters: ModelRuntimeParams;
|
||||
|
||||
/**
|
||||
* Metadata of the model.
|
||||
*/
|
||||
metadata: ModelMetadata;
|
||||
/**
|
||||
* The model engine.
|
||||
*/
|
||||
engine: InferenceEngine;
|
||||
}
|
||||
|
||||
export type ModelMetadata = {
|
||||
author: string;
|
||||
tags: string[];
|
||||
size: number;
|
||||
cover?: string;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -254,6 +275,7 @@ export type ModelSettingParams = {
|
||||
ngl?: number;
|
||||
embedding?: boolean;
|
||||
n_parallel?: number;
|
||||
cpu_threads?: number;
|
||||
system_prompt?: string;
|
||||
user_prompt?: string;
|
||||
ai_prompt?: string;
|
||||
@ -262,13 +284,16 @@ export type ModelSettingParams = {
|
||||
/**
|
||||
* The available model runtime parameters.
|
||||
*/
|
||||
export type ModelRuntimeParam = {
|
||||
export type ModelRuntimeParams = {
|
||||
temperature?: number;
|
||||
token_limit?: number;
|
||||
top_k?: number;
|
||||
top_p?: number;
|
||||
stream?: boolean;
|
||||
max_tokens?: number;
|
||||
stop?: string[];
|
||||
frequency_penalty?: number;
|
||||
presence_penalty?: number;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@ -1,15 +1,19 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es2016",
|
||||
"module": "ES6",
|
||||
"outDir": "./lib",
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"moduleResolution": "node",
|
||||
"target": "es5",
|
||||
"module": "es2015",
|
||||
"lib": ["es2015", "es2016", "es2017", "dom"],
|
||||
"strict": true,
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"declaration": true,
|
||||
"rootDir": "./src"
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"declarationDir": "dist/types",
|
||||
"outDir": "dist/lib",
|
||||
"importHelpers": true,
|
||||
"typeRoots": ["node_modules/@types"]
|
||||
},
|
||||
"include": ["./src"],
|
||||
"exclude": ["lib", "node_modules", "**/*.test.ts", "**/__mocks__/*"]
|
||||
"include": ["src"]
|
||||
}
|
||||
|
||||
6
core/tslint.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"extends": [
|
||||
"tslint-config-standard",
|
||||
"tslint-config-prettier"
|
||||
]
|
||||
}
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: About Jan
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
Jan believes in the need for an open source AI ecosystem, and are building the infra and tooling to allow open source AIs to compete on a level playing field with proprietary ones.
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Community
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
- [ ] Social media links
|
||||
@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Build an Assistant
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Extending Jan
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Build a Module
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Build a Theme
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Build a Tool
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: How Jan Works
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
- Local Filesystem
|
||||
|
||||
@ -4,18 +4,18 @@ slug: /guides
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords:
|
||||
[
|
||||
Jan AI,
|
||||
Jan,
|
||||
ChatGPT alternative,
|
||||
on-premises AI,
|
||||
local API server,
|
||||
local AI,
|
||||
llm,
|
||||
private AI,
|
||||
conversational AI,
|
||||
no-subscription fee,
|
||||
large language model,
|
||||
]
|
||||
---
|
||||
|
||||
Jan is a ChatGPT-alternative that runs on your own computer, with a [local API server](/api).
|
||||
Jan is a ChatGPT-alternative that runs on your own computer, with a [local API server](/api-reference/).
|
||||
|
||||
Jan uses [open-source AI models](/docs/models), stores data in [open file formats](/specs/data-structures), is highly customizable via [extensions](/docs/extensions).
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Model Management
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Quickstart
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
- Write in the style of comics, explanation
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: API Server
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
:::warning
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Engineering
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
## Connecting to Rigs
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
title: Onboarding Checklist
|
||||
slug: /handbook
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
# Welcome
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Hardware Examples
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
## Add your own example
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: From Source
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
# Install Jan from Source
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Linux
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
# Installing Jan on Linux
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Mac
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
# Installing Jan on MacOS
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Overview
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
Getting up and running open-source AI models on your own computer with Jan is quick and easy. Jan is lightweight and can run on a variety of hardware and platform versions. Specific requirements tailored to your platform are outlined below.
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Windows
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
# Installing Jan on Windows
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
title: Architecture
|
||||
slug: /specs
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
:::warning
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
title: "Assistants"
|
||||
slug: /specs/assistants
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
:::caution
|
||||
@ -40,6 +40,10 @@ In Jan, assistants are `primary` entities with the following capabilities:
|
||||
|
||||
## `assistant.json`
|
||||
|
||||
- Each `assistant` folder contains an `assistant.json` file, which is a representation of an assistant.
|
||||
- `assistant.json` contains metadata and model parameter overrides
|
||||
- There are no required fields.
|
||||
|
||||
```js
|
||||
{
|
||||
"id": "asst_abc123", // Defaults to foldername
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
title: Chats
|
||||
slug: /specs/chats
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
:::caution
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
title: "Files"
|
||||
slug: /specs/files
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
:::warning
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
title: "Fine-tuning"
|
||||
slug: /specs/finetuning
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
Todo: @hiro
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
title: Messages
|
||||
slug: /specs/messages
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
:::caution
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
title: Models
|
||||
slug: /specs/models
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
:::caution
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
title: Prompts
|
||||
slug: /specs/prompts
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
- [ ] /prompts folder
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
title: Threads
|
||||
slug: /specs/threads
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
:::caution
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: File-based Approach
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
:::warning
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Jan (Assistant)
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
## Jan: a "global" assistant
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
title: Chat
|
||||
slug: /specs/chat
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
title: Hub
|
||||
slug: /specs/hub
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
title: Settings
|
||||
slug: /specs/settings
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
title: System Monitor
|
||||
slug: /specs/system-monitor
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: User Interface
|
||||
description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.
|
||||
keywords: [Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee]
|
||||
keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ]
|
||||
---
|
||||
|
||||
:::warning
|
||||
|
||||
@ -3,7 +3,6 @@
|
||||
|
||||
require("dotenv").config();
|
||||
|
||||
const lightCodeTheme = require("prism-react-renderer/themes/github");
|
||||
const darkCodeTheme = require("prism-react-renderer/themes/dracula");
|
||||
|
||||
/** @type {import('@docusaurus/types').Config} */
|
||||
@ -118,7 +117,6 @@ const config = {
|
||||
requiredPropsFirst: true,
|
||||
noAutoAuth: true,
|
||||
hideDownloadButton: true,
|
||||
disableSearch: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -127,7 +125,7 @@ const config = {
|
||||
|
||||
// Docs: https://docusaurus.io/docs/api/themes/configuration
|
||||
themeConfig: {
|
||||
image: "img/jan-social-card.png",
|
||||
image: "img/og-image.png",
|
||||
// Only for react live
|
||||
liveCodeBlock: {
|
||||
playgroundPosition: "bottom",
|
||||
@ -135,48 +133,78 @@ const config = {
|
||||
docs: {
|
||||
sidebar: {
|
||||
hideable: true,
|
||||
autoCollapseCategories: true,
|
||||
autoCollapseCategories: false,
|
||||
},
|
||||
},
|
||||
// SEO Docusarus
|
||||
metadata: [
|
||||
{ name: 'description', content: 'Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.' },
|
||||
{ name: 'keywords', content: 'Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee' },
|
||||
{ name: 'robots', content: 'index, follow' },
|
||||
{ property: 'og:title', content: 'Run your own AI | Jan' },
|
||||
{ property: 'og:description', content: 'Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.' },
|
||||
{ property: 'og:image', content: 'https://jan.ai/img/jan-social-card.png' },
|
||||
{ property: 'og:type', content: 'website' },
|
||||
{ property: 'twitter:card', content: 'summary_large_image' },
|
||||
{ property: 'twitter:site', content: '@janhq_' },
|
||||
{ property: 'twitter:title', content: 'Run your own AI | Jan' },
|
||||
{ property: 'twitter:description', content: 'Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.' },
|
||||
{ property: 'twitter:image', content: 'https://jan.ai/img/jan-social-card.png' },
|
||||
{
|
||||
name: "description",
|
||||
content:
|
||||
"Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable.",
|
||||
},
|
||||
{
|
||||
name: "keywords",
|
||||
content:
|
||||
"Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ",
|
||||
},
|
||||
{ name: "robots", content: "index, follow" },
|
||||
{
|
||||
property: "og:title",
|
||||
content: "Jan | Open-source ChatGPT Alternative",
|
||||
},
|
||||
{
|
||||
property: "og:description",
|
||||
content:
|
||||
"Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable.",
|
||||
},
|
||||
{
|
||||
property: "og:image",
|
||||
content: "https://jan.ai/img/og-image.png",
|
||||
},
|
||||
{ property: "og:type", content: "website" },
|
||||
{ property: "twitter:card", content: "summary_large_image" },
|
||||
{ property: "twitter:site", content: "@janhq_" },
|
||||
{
|
||||
property: "twitter:title",
|
||||
content: "Jan | Open-source ChatGPT Alternative",
|
||||
},
|
||||
{
|
||||
property: "twitter:description",
|
||||
content:
|
||||
"Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable.",
|
||||
},
|
||||
{
|
||||
property: "twitter:image",
|
||||
content: "https://jan.ai/img/og-image.png",
|
||||
},
|
||||
],
|
||||
headTags: [
|
||||
// Declare a <link> preconnect tag
|
||||
{
|
||||
tagName: 'link',
|
||||
tagName: "link",
|
||||
attributes: {
|
||||
rel: 'preconnect',
|
||||
href: 'https://jan.ai/',
|
||||
rel: "preconnect",
|
||||
href: "https://jan.ai/",
|
||||
},
|
||||
},
|
||||
// Declare some json-ld structured data
|
||||
{
|
||||
tagName: 'script',
|
||||
tagName: "script",
|
||||
attributes: {
|
||||
type: 'application/ld+json',
|
||||
type: "application/ld+json",
|
||||
},
|
||||
innerHTML: JSON.stringify({
|
||||
'@context': 'https://schema.org/',
|
||||
'@type': 'localAI',
|
||||
name: 'Jan',
|
||||
description: "Jan is a ChatGPT-alternative that runs on your own computer, with a local API server.",
|
||||
keywords: "Jan, ChatGPT alternative, on-premises AI, local API server, local AI, llm, conversational AI, no-subscription fee",
|
||||
"@context": "https://schema.org/",
|
||||
"@type": "localAI",
|
||||
name: "Jan",
|
||||
description:
|
||||
"Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable.",
|
||||
keywords:
|
||||
"Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ",
|
||||
applicationCategory: "BusinessApplication",
|
||||
operatingSystem: "Multiple",
|
||||
url: 'https://jan.ai/',
|
||||
url: "https://jan.ai/",
|
||||
}),
|
||||
},
|
||||
],
|
||||
@ -234,10 +262,10 @@ const config = {
|
||||
prism: {
|
||||
theme: darkCodeTheme,
|
||||
darkTheme: darkCodeTheme,
|
||||
additionalLanguages: ["python"],
|
||||
additionalLanguages: ["python", "powershell", "bash"],
|
||||
},
|
||||
colorMode: {
|
||||
defaultMode: "dark",
|
||||
defaultMode: "light",
|
||||
disableSwitch: false,
|
||||
respectPrefersColorScheme: false,
|
||||
},
|
||||
|
||||
@ -1,28 +1,32 @@
|
||||
openapi: 3.0.0
|
||||
info:
|
||||
title: API Reference
|
||||
description: |
|
||||
description: >
|
||||
# Introduction
|
||||
Jan API is compatible with the [OpenAI API](https://platform.openai.com/docs/api-reference).
|
||||
version: "0.1.8"
|
||||
|
||||
Jan API is compatible with the [OpenAI
|
||||
API](https://platform.openai.com/docs/api-reference).
|
||||
version: 0.1.8
|
||||
contact:
|
||||
name: Jan Discord
|
||||
url: https://discord.gg/7EcEz7MrvA
|
||||
url: "https://discord.gg/7EcEz7MrvA"
|
||||
license:
|
||||
name: AGPLv3
|
||||
url: https://github.com/janhq/nitro/blob/main/LICENSE
|
||||
url: "https://github.com/janhq/nitro/blob/main/LICENSE"
|
||||
servers:
|
||||
- url: https://localhost:1337/v1/
|
||||
- url: "https://localhost:1337/v1/"
|
||||
tags:
|
||||
- name: Models
|
||||
description: List and describe the various models available in the API.
|
||||
- name: Chat
|
||||
description: |
|
||||
Given a list of messages comprising a conversation, the model will return a response.
|
||||
|
||||
description: >
|
||||
Given a list of messages comprising a conversation, the model will return
|
||||
a response.
|
||||
- name: Messages
|
||||
description: |
|
||||
Messages capture a conversation's content. This can include the content from LLM responses and other metadata from [chat completions](/specs/chats).
|
||||
description: >
|
||||
Messages capture a conversation's content. This can include the content
|
||||
from LLM responses and other metadata from [chat
|
||||
completions](/specs/chats).
|
||||
- name: Threads
|
||||
- name: Assistants
|
||||
description: Configures and utilizes different AI assistants for varied tasks
|
||||
@ -44,8 +48,10 @@ paths:
|
||||
- Chat
|
||||
summary: |
|
||||
Create chat completion
|
||||
description: |
|
||||
Creates a model response for the given chat conversation. <a href = "https://platform.openai.com/docs/api-reference/chat/create"> Equivalent to OpenAI's create chat completion. </a>
|
||||
description: >
|
||||
Creates a model response for the given chat conversation. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/chat/create"> Equivalent
|
||||
to OpenAI's create chat completion. </a>
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
@ -59,9 +65,10 @@ paths:
|
||||
schema:
|
||||
$ref: "specs/chat.yaml#/components/schemas/ChatCompletionResponse"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
source: |
|
||||
curl -X POST 'http://localhost:3982/inferences/llamacpp/chat_completion' \
|
||||
- lang: cURL
|
||||
source: >
|
||||
curl -X POST
|
||||
'http://localhost:3982/inferences/llamacpp/chat_completion' \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"llama_model_path": "/path/to/your/model.gguf",
|
||||
@ -72,16 +79,17 @@ paths:
|
||||
},
|
||||
]
|
||||
}'
|
||||
|
||||
### MODELS
|
||||
/models:
|
||||
get:
|
||||
operationId: listModels
|
||||
tags:
|
||||
- Models
|
||||
summary: List models
|
||||
description: |
|
||||
Lists the currently available models, and provides basic information about each one such as the owner and availability. <a href = "https://platform.openai.com/docs/api-reference/models/list"> Equivalent to OpenAI's list model. </a>
|
||||
description: >
|
||||
Lists the currently available models, and provides basic information
|
||||
about each one such as the owner and availability. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/models/list"> Equivalent
|
||||
to OpenAI's list model. </a>
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
@ -90,7 +98,7 @@ paths:
|
||||
schema:
|
||||
$ref: "specs/models.yaml#/components/schemas/ListModelsResponse"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl https://localhost:1337/v1/models
|
||||
post:
|
||||
@ -108,27 +116,29 @@ paths:
|
||||
schema:
|
||||
$ref: "specs/models.yaml#/components/schemas/DownloadModelResponse"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl -X POST https://localhost:1337/v1/models
|
||||
/models/{model_id}:
|
||||
"/models/{model_id}":
|
||||
get:
|
||||
operationId: retrieveModel
|
||||
tags:
|
||||
- Models
|
||||
summary: Retrieve model
|
||||
description: |
|
||||
Get a model instance, providing basic information about the model such as the owner and permissioning. <a href = "https://platform.openai.com/docs/api-reference/models/retrieve"> Equivalent to OpenAI's retrieve model. </a>
|
||||
description: >
|
||||
Get a model instance, providing basic information about the model such
|
||||
as the owner and permissioning. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/models/retrieve">
|
||||
Equivalent to OpenAI's retrieve model. </a>
|
||||
parameters:
|
||||
- in: path
|
||||
name: model_id
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
# ideally this will be an actual ID, so this will always work from browser
|
||||
example: zephyr-7b
|
||||
description: |
|
||||
The ID of the model to use for this request
|
||||
The ID of the model to use for this request.
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
@ -137,16 +147,18 @@ paths:
|
||||
schema:
|
||||
$ref: "specs/models.yaml#/components/schemas/GetModelResponse"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl https://localhost:1337/v1/models/zephyr-7b
|
||||
curl https://localhost:1337/v1/models/{model_id}
|
||||
delete:
|
||||
operationId: deleteModel
|
||||
tags:
|
||||
- Models
|
||||
summary: Delete model
|
||||
description: |
|
||||
Delete a model. <a href = "https://platform.openai.com/docs/api-reference/models/delete"> Equivalent to OpenAI's delete model. </a>
|
||||
description: >
|
||||
Delete a model. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/models/delete">
|
||||
Equivalent to OpenAI's delete model. </a>
|
||||
parameters:
|
||||
- in: path
|
||||
name: model
|
||||
@ -164,10 +176,10 @@ paths:
|
||||
schema:
|
||||
$ref: "specs/models.yaml#/components/schemas/DeleteModelResponse"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl -X DELETE https://localhost:1337/v1/models/zephyr-7b
|
||||
/models/{model_id}/start:
|
||||
curl -X DELETE https://localhost:1337/v1/models/{model_id}
|
||||
"/models/{model_id}/start":
|
||||
put:
|
||||
operationId: startModel
|
||||
tags:
|
||||
@ -181,7 +193,6 @@ paths:
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
# ideally this will be an actual ID, so this will always work from browser
|
||||
example: zephyr-7b
|
||||
description: |
|
||||
The ID of the model to use for this request
|
||||
@ -193,10 +204,10 @@ paths:
|
||||
schema:
|
||||
$ref: "specs/models.yaml#/components/schemas/StartModelResponse"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl -X PUT https://localhost:1337/v1/models/zephyr-7b/start
|
||||
/models/{model_id}/stop:
|
||||
curl -X PUT https://localhost:1337/v1/models/{model_id}/start
|
||||
"/models/{model_id}/stop":
|
||||
put:
|
||||
operationId: stopModel
|
||||
tags:
|
||||
@ -210,7 +221,6 @@ paths:
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
# ideally this will be an actual ID, so this will always work from browser
|
||||
example: zephyr-7b
|
||||
description: The ID of the model to use for this request
|
||||
responses:
|
||||
@ -221,19 +231,19 @@ paths:
|
||||
schema:
|
||||
$ref: "specs/models.yaml#/components/schemas/StopModelResponse"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl -X PUT https://localhost:1337/v1/models/zephyr-7b/stop
|
||||
|
||||
### THREADS
|
||||
curl -X PUT https://localhost:1337/v1/models/{model_id}/stop
|
||||
/threads:
|
||||
post:
|
||||
operationId: createThread
|
||||
tags:
|
||||
- Threads
|
||||
summary: Create thread
|
||||
description: |
|
||||
Create a thread. <a href = "https://platform.openai.com/docs/api-reference/threads/createThread"> Equivalent to OpenAI's create thread. </a>
|
||||
description: >
|
||||
Create a thread. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/threads/createThread">
|
||||
Equivalent to OpenAI's create thread. </a>
|
||||
requestBody:
|
||||
required: false
|
||||
content:
|
||||
@ -243,18 +253,18 @@ paths:
|
||||
properties:
|
||||
messages:
|
||||
type: array
|
||||
description: "Initial set of messages for the thread."
|
||||
description: Initial set of messages for the thread.
|
||||
items:
|
||||
$ref: 'specs/threads.yaml#/components/schemas/ThreadMessageObject'
|
||||
$ref: "specs/threads.yaml#/components/schemas/ThreadMessageObject"
|
||||
responses:
|
||||
"200":
|
||||
description: Thread created successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: 'specs/threads.yaml#/components/schemas/CreateThreadResponse'
|
||||
$ref: "specs/threads.yaml#/components/schemas/CreateThreadResponse"
|
||||
x-codeSamples:
|
||||
- lang: "cURL"
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl -X POST http://localhost:1337/v1/threads \
|
||||
-H "Content-Type: application/json" \
|
||||
@ -283,33 +293,38 @@ paths:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: 'specs/threads.yaml#/components/schemas/ThreadObject'
|
||||
$ref: "specs/threads.yaml#/components/schemas/ThreadObject"
|
||||
example:
|
||||
- id: "thread_abc123"
|
||||
object: "thread"
|
||||
- id: thread_abc123
|
||||
object: thread
|
||||
created_at: 1699014083
|
||||
assistants: ["assistant-001"]
|
||||
assistants:
|
||||
- assistant-001
|
||||
metadata: {}
|
||||
messages: []
|
||||
- id: "thread_abc456"
|
||||
object: "thread"
|
||||
- id: thread_abc456
|
||||
object: thread
|
||||
created_at: 1699014083
|
||||
assistants: ["assistant-002", "assistant-003"]
|
||||
assistants:
|
||||
- assistant-002
|
||||
- assistant-003
|
||||
metadata: {}
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl http://localhost:1337/v1/threads \
|
||||
-H "Content-Type: application/json" \
|
||||
|
||||
/threads/{thread_id}:
|
||||
"/threads/{thread_id}":
|
||||
get:
|
||||
operationId: getThread
|
||||
tags:
|
||||
- Threads
|
||||
summary: Retrieve thread
|
||||
description: |
|
||||
Retrieves detailed information about a specific thread using its thread_id. <a href = "https://platform.openai.com/docs/api-reference/threads/getThread"> Equivalent to OpenAI's retrieve thread. </a>
|
||||
description: >
|
||||
Retrieves detailed information about a specific thread using its
|
||||
thread_id. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/threads/getThread">
|
||||
Equivalent to OpenAI's retrieve thread. </a>
|
||||
parameters:
|
||||
- in: path
|
||||
name: thread_id
|
||||
@ -319,7 +334,6 @@ paths:
|
||||
example: thread_abc123
|
||||
description: |
|
||||
The ID of the thread to retrieve.
|
||||
|
||||
responses:
|
||||
"200":
|
||||
description: Thread details retrieved successfully
|
||||
@ -328,7 +342,7 @@ paths:
|
||||
schema:
|
||||
$ref: "specs/threads.yaml#/components/schemas/GetThreadResponse"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl http://localhost:1337/v1/threads/{thread_id}
|
||||
post:
|
||||
@ -336,8 +350,10 @@ paths:
|
||||
tags:
|
||||
- Threads
|
||||
summary: Modify thread
|
||||
description: |
|
||||
Modifies a thread. <a href = "https://platform.openai.com/docs/api-reference/threads/modifyThread"> Equivalent to OpenAI's modify thread. </a>
|
||||
description: >
|
||||
Modifies a thread. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/threads/modifyThread">
|
||||
Equivalent to OpenAI's modify thread. </a>
|
||||
parameters:
|
||||
- in: path
|
||||
name: thread_id
|
||||
@ -347,7 +363,6 @@ paths:
|
||||
example: thread_abc123
|
||||
description: |
|
||||
The ID of the thread to be modified.
|
||||
|
||||
requestBody:
|
||||
required: false
|
||||
content:
|
||||
@ -357,18 +372,18 @@ paths:
|
||||
properties:
|
||||
messages:
|
||||
type: array
|
||||
description: "Set of messages to update in the thread."
|
||||
description: Set of messages to update in the thread.
|
||||
items:
|
||||
$ref: 'specs/threads.yaml#/components/schemas/ThreadMessageObject'
|
||||
$ref: "specs/threads.yaml#/components/schemas/ThreadMessageObject"
|
||||
responses:
|
||||
"200":
|
||||
description: Thread modified successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: 'specs/threads.yaml#/components/schemas/ModifyThreadResponse'
|
||||
$ref: "specs/threads.yaml#/components/schemas/ModifyThreadResponse"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl -X POST http://localhost:1337/v1/threads/{thread_id} \
|
||||
-H "Content-Type: application/json" \
|
||||
@ -387,8 +402,10 @@ paths:
|
||||
tags:
|
||||
- Threads
|
||||
summary: Delete thread
|
||||
description: |
|
||||
Delete a thread. <a href = "https://platform.openai.com/docs/api-reference/threads/deleteThread"> Equivalent to OpenAI's delete thread. </a>
|
||||
description: >
|
||||
Delete a thread. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/threads/deleteThread">
|
||||
Equivalent to OpenAI's delete thread. </a>
|
||||
parameters:
|
||||
- in: path
|
||||
name: thread_id
|
||||
@ -404,20 +421,19 @@ paths:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: 'specs/threads.yaml#/components/schemas/DeleteThreadResponse'
|
||||
$ref: "specs/threads.yaml#/components/schemas/DeleteThreadResponse"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl -X DELETE http://localhost:1337/v1/threads/{thread_id}
|
||||
|
||||
/threads/{thread_id}/assistants:
|
||||
"/threads/{thread_id}/assistants":
|
||||
get:
|
||||
operationId: getThreadAssistants
|
||||
tags:
|
||||
- Threads
|
||||
summary: Get Thread.Assistants
|
||||
description: |
|
||||
Can achieve this goal by calling Get thread API
|
||||
Can achieve this goal by calling Get thread API.
|
||||
parameters:
|
||||
- in: path
|
||||
name: thread_id
|
||||
@ -434,29 +450,26 @@ paths:
|
||||
schema:
|
||||
$ref: "specs/threads.yaml#/components/schemas/GetThreadResponse"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl http://localhost:1337/v1/threads/{thread_id}/assistants
|
||||
|
||||
/threads/{thread_id}/assistants/{assistants_id}:
|
||||
"/threads/{thread_id}/assistants/{assistants_id}":
|
||||
post:
|
||||
operationId: postThreadAssistants
|
||||
tags:
|
||||
- Threads
|
||||
summary: Modify Thread.Assistants
|
||||
description: |
|
||||
|
||||
|
||||
Can achieve this goal by calling Modify Assistant API with thread.assistant[]
|
||||
|
||||
/threads/{thread_id}/:
|
||||
description: >
|
||||
Can achieve this goal by calling Modify Assistant API with
|
||||
thread.assistant[].
|
||||
"/threads/{thread_id}/":
|
||||
get:
|
||||
operationId: listThreadMessage
|
||||
tags:
|
||||
- Threads
|
||||
summary: List Thread.Messages
|
||||
description: |
|
||||
Can achieve this goal by calling Get Thread API
|
||||
Can achieve this goal by calling Get Thread API.
|
||||
parameters:
|
||||
- in: path
|
||||
name: thread_id
|
||||
@ -473,19 +486,246 @@ paths:
|
||||
schema:
|
||||
$ref: "specs/threads.yaml#/components/schemas/GetThreadResponse"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl http://localhost:1337/v1/threads/{thread_id}
|
||||
|
||||
### MESSAGES
|
||||
/threads/{thread_id}/messages:
|
||||
/assistants/:
|
||||
get:
|
||||
operationId: listAssistants
|
||||
tags:
|
||||
- Assistants
|
||||
summary: List assistants
|
||||
description: >
|
||||
Return a list of assistants. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/assistants/listAssistants">
|
||||
Equivalent to OpenAI's list assistants. </a>
|
||||
responses:
|
||||
"200":
|
||||
description: List of threads retrieved successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
example:
|
||||
- id: asst_abc123
|
||||
object: assistant
|
||||
version: 1
|
||||
created_at: 1698984975
|
||||
name: Math Tutor
|
||||
description: null
|
||||
avatar: "https://pic.png"
|
||||
models:
|
||||
- model_id: model_0
|
||||
instructions: Be concise
|
||||
events:
|
||||
in: []
|
||||
out: []
|
||||
metadata: {}
|
||||
- id: asst_abc456
|
||||
object: assistant
|
||||
version: 1
|
||||
created_at: 1698984975
|
||||
name: Physics Tutor
|
||||
description: null
|
||||
avatar: "https://pic.png"
|
||||
models:
|
||||
- model_id: model_1
|
||||
instructions: Be concise!
|
||||
events:
|
||||
in: []
|
||||
out: []
|
||||
metadata: {}
|
||||
responses: null
|
||||
x-codeSamples:
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl http://localhost:1337/v1/assistants \
|
||||
-H "Content-Type: application/json" \
|
||||
post:
|
||||
operationId: createAssistant
|
||||
tags:
|
||||
- Assistants
|
||||
summary: Create assistant
|
||||
description: >
|
||||
Create an assistant with a model and instructions. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/assistants/createAssistant">
|
||||
Equivalent to OpenAI's create assistants. </a>
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
models:
|
||||
type: array
|
||||
description: >-
|
||||
List of models associated with the assistant. Jan-specific
|
||||
property.
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
model_id:
|
||||
type: string
|
||||
example: model_0
|
||||
responses:
|
||||
"200":
|
||||
description: null
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: >-
|
||||
specs/assistants.yaml#/components/schemas/CreateAssistantResponse
|
||||
x-codeSamples:
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl http://localhost:1337/v1/assistants \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"models": [
|
||||
{
|
||||
"model_id": "model_0"
|
||||
}
|
||||
]
|
||||
}'
|
||||
"/assistants/{assistant_id}":
|
||||
get:
|
||||
operationId: getAssistant
|
||||
tags:
|
||||
- Assistants
|
||||
summary: Retrieve assistant
|
||||
description: >
|
||||
Retrieves an assistant. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/assistants/getAssistant">
|
||||
Equivalent to OpenAI's retrieve assistants. </a>
|
||||
parameters:
|
||||
- in: path
|
||||
name: assistant_id
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
example: asst_abc123
|
||||
description: |
|
||||
The ID of the assistant to retrieve.
|
||||
responses:
|
||||
"200":
|
||||
description: null
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: >-
|
||||
specs/assistants.yaml#/components/schemas/RetrieveAssistantResponse
|
||||
x-codeSamples:
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl http://localhost:1337/v1/assistants/{assistant_id} \
|
||||
-H "Content-Type: application/json" \
|
||||
post:
|
||||
operationId: modifyAssistant
|
||||
tags:
|
||||
- Assistants
|
||||
summary: Modify assistant
|
||||
description: >
|
||||
Modifies an assistant. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/assistants/modifyAssistant">
|
||||
Equivalent to OpenAI's modify assistant. </a>
|
||||
parameters:
|
||||
- in: path
|
||||
name: assistant_id
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
example: asst_abc123
|
||||
description: |
|
||||
The ID of the assistant to modify.
|
||||
requestBody:
|
||||
required: false
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
models:
|
||||
type: array
|
||||
description: >-
|
||||
List of models associated with the assistant. Jan-specific
|
||||
property.
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
model_id:
|
||||
type: string
|
||||
example: model_0
|
||||
name:
|
||||
type: string
|
||||
description: Name of the assistant.
|
||||
example: Physics Tutor
|
||||
instructions:
|
||||
type: string
|
||||
description: A system prompt for the assistant.
|
||||
example: Be concise!
|
||||
responses:
|
||||
"200":
|
||||
description: null
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: >-
|
||||
specs/assistants.yaml#/components/schemas/ModifyAssistantResponse
|
||||
x-codeSamples:
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl http://localhost:1337/v1/assistants/{assistant_id} \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"models": [
|
||||
{
|
||||
"model_id": "model_0"
|
||||
}
|
||||
],
|
||||
"name": "Physics Tutor",
|
||||
"instructions": "Be concise!",
|
||||
}'
|
||||
delete:
|
||||
operationId: deleteAssistant
|
||||
tags:
|
||||
- Assistants
|
||||
summary: Delete assistant
|
||||
description: >
|
||||
Delete an assistant. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/assistants/deleteAssistant">
|
||||
Equivalent to OpenAI's delete assistant. </a>
|
||||
parameters:
|
||||
- in: path
|
||||
name: assistant_id
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
example: asst_abc123
|
||||
description: |
|
||||
The ID of the assistant to delete.
|
||||
responses:
|
||||
"200":
|
||||
description: Deletion status
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: >-
|
||||
specs/assistants.yaml#/components/schemas/DeleteAssistantResponse
|
||||
x-codeSamples:
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl -X DELETE http://localhost:1337/v1/assistants/{assistant_id}
|
||||
"/threads/{thread_id}/messages":
|
||||
get:
|
||||
operationId: listMessages
|
||||
tags:
|
||||
- Messages
|
||||
summary: List messages
|
||||
description: |
|
||||
Retrieves all messages from the given thread. <a href = "https://platform.openai.com/docs/api-reference/messages/listMessages"> Equivalent to OpenAI's list messages. </a>
|
||||
description: >
|
||||
Retrieves all messages from the given thread. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/messages/listMessages">
|
||||
Equivalent to OpenAI's list messages. </a>
|
||||
parameters:
|
||||
- in: path
|
||||
name: thread_id
|
||||
@ -503,7 +743,7 @@ paths:
|
||||
schema:
|
||||
$ref: "specs/messages.yaml#/components/schemas/ListMessagesResponse"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl http://localhost:1337/v1/threads/{thread_id}/messages \
|
||||
-H "Content-Type: application/json"
|
||||
@ -512,8 +752,10 @@ paths:
|
||||
tags:
|
||||
- Messages
|
||||
summary: Create message
|
||||
description: |
|
||||
Create a message. <a href = "https://platform.openai.com/docs/api-reference/messages/createMessage"> Equivalent to OpenAI's list messages. </a>
|
||||
description: >
|
||||
Create a message. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/messages/createMessage">
|
||||
Equivalent to OpenAI's list messages. </a>
|
||||
parameters:
|
||||
- in: path
|
||||
name: thread_id
|
||||
@ -533,18 +775,16 @@ paths:
|
||||
role:
|
||||
type: string
|
||||
description: |
|
||||
"Role of the sender, either 'user' or 'assistant'."
|
||||
|
||||
<span style="color:#228B22">OpenAI compatible</span>
|
||||
example: "user"
|
||||
enum: ["user", "assistant"]
|
||||
Role of the sender, either 'user' or 'assistant'.
|
||||
example: user
|
||||
enum:
|
||||
- user
|
||||
- assistant
|
||||
content:
|
||||
type: string
|
||||
description: |
|
||||
"Text content of the message."
|
||||
|
||||
<span style="color:#228B22">OpenAI compatible</span>
|
||||
example: "How does AI work? Explain it in simple terms."
|
||||
Text content of the message.
|
||||
example: How does AI work? Explain it in simple terms.
|
||||
required:
|
||||
- role
|
||||
- content
|
||||
@ -556,7 +796,7 @@ paths:
|
||||
schema:
|
||||
$ref: "specs/messages.yaml#/components/schemas/CreateMessageResponse"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
- lang: cURL
|
||||
source: |
|
||||
curl -X POST http://localhost:1337/v1/threads/{thread_id}/messages \
|
||||
-H "Content-Type: application/json" \
|
||||
@ -564,15 +804,17 @@ paths:
|
||||
"role": "user",
|
||||
"content": "How does AI work? Explain it in simple terms."
|
||||
}'
|
||||
|
||||
/threads/{thread_id}/messages/{message_id}:
|
||||
"/threads/{thread_id}/messages/{message_id}":
|
||||
get:
|
||||
operationId: retrieveMessage
|
||||
tags:
|
||||
- Messages
|
||||
summary: Retrieve message
|
||||
description: |
|
||||
Retrieve a specific message from a thread using its thread_id and message_id. <a href = "https://platform.openai.com/docs/api-reference/messages/getMessage"> Equivalent to OpenAI's retrieve messages. </a>
|
||||
description: >
|
||||
Retrieve a specific message from a thread using its thread_id and
|
||||
message_id. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/messages/getMessage">
|
||||
Equivalent to OpenAI's retrieve messages. </a>
|
||||
parameters:
|
||||
- in: path
|
||||
name: thread_id
|
||||
@ -582,7 +824,6 @@ paths:
|
||||
example: thread_abc123
|
||||
description: |
|
||||
The ID of the thread containing the message.
|
||||
|
||||
- in: path
|
||||
name: message_id
|
||||
required: true
|
||||
@ -591,7 +832,6 @@ paths:
|
||||
example: msg_abc123
|
||||
description: |
|
||||
The ID of the message to retrieve.
|
||||
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
@ -600,20 +840,22 @@ paths:
|
||||
schema:
|
||||
$ref: "specs/messages.yaml#/components/schemas/GetMessageResponse"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
source: |
|
||||
curl http://localhost:1337/v1/threads/{thread_id}/messages/{message_id} \
|
||||
- lang: cURL
|
||||
source: >
|
||||
curl
|
||||
http://localhost:1337/v1/threads/{thread_id}/messages/{message_id} \
|
||||
-H "Content-Type: application/json"
|
||||
|
||||
/threads/{thread_id}/messages/{message_id}/files:
|
||||
"/threads/{thread_id}/messages/{message_id}/files":
|
||||
get:
|
||||
operationId: listMessageFiles
|
||||
tags:
|
||||
- Messages
|
||||
summary: |
|
||||
List message files
|
||||
description: |
|
||||
Returns a list of message files. <a href = "https://platform.openai.com/docs/api-reference/messages/listMessageFiles"> Equivalent to OpenAI's list message files. </a>
|
||||
description: >
|
||||
Returns a list of message files. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/messages/listMessageFiles">
|
||||
Equivalent to OpenAI's list message files. </a>
|
||||
parameters:
|
||||
- in: path
|
||||
name: thread_id
|
||||
@ -623,7 +865,6 @@ paths:
|
||||
example: thread_abc123
|
||||
description: |
|
||||
The ID of the thread containing the message.
|
||||
|
||||
- in: path
|
||||
name: message_id
|
||||
required: true
|
||||
@ -632,28 +873,32 @@ paths:
|
||||
example: msg_abc123
|
||||
description: |
|
||||
The ID of the message whose files are to be listed.
|
||||
|
||||
responses:
|
||||
"200":
|
||||
description: List of files retrieved successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "specs/messages.yaml#/components/schemas/ListMessageFilesResponse"
|
||||
$ref: >-
|
||||
specs/messages.yaml#/components/schemas/ListMessageFilesResponse
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
source: |
|
||||
curl http://localhost:1337/v1/threads/{thread_id}/messages/{message_id}/files \
|
||||
- lang: cURL
|
||||
source: >
|
||||
curl
|
||||
http://localhost:1337/v1/threads/{thread_id}/messages/{message_id}/files
|
||||
\
|
||||
-H "Content-Type: application/json"
|
||||
|
||||
/threads/{thread_id}/messages/{message_id}/files/{file_id}:
|
||||
"/threads/{thread_id}/messages/{message_id}/files/{file_id}":
|
||||
get:
|
||||
operationId: retrieveMessageFile
|
||||
tags:
|
||||
- Messages
|
||||
summary: Retrieve message file
|
||||
description: |
|
||||
Retrieves a file associated with a specific message in a thread. <a href = "https://platform.openai.com/docs/api-reference/messages/getMessageFile"> Equivalent to OpenAI's retrieve message file. </a>
|
||||
description: >
|
||||
Retrieves a file associated with a specific message in a thread. <a
|
||||
href =
|
||||
"https://platform.openai.com/docs/api-reference/messages/getMessageFile">
|
||||
Equivalent to OpenAI's retrieve message file. </a>
|
||||
parameters:
|
||||
- in: path
|
||||
name: thread_id
|
||||
@ -663,7 +908,6 @@ paths:
|
||||
example: thread_abc123
|
||||
description: |
|
||||
The ID of the thread containing the message.
|
||||
|
||||
- in: path
|
||||
name: message_id
|
||||
required: true
|
||||
@ -672,7 +916,6 @@ paths:
|
||||
example: msg_abc123
|
||||
description: |
|
||||
The ID of the message associated with the file.
|
||||
|
||||
- in: path
|
||||
name: file_id
|
||||
required: true
|
||||
@ -681,7 +924,6 @@ paths:
|
||||
example: file-abc123
|
||||
description: |
|
||||
The ID of the file to retrieve.
|
||||
|
||||
responses:
|
||||
"200":
|
||||
description: File retrieved successfully
|
||||
@ -690,17 +932,20 @@ paths:
|
||||
schema:
|
||||
$ref: "specs/messages.yaml#/components/schemas/MessageFileObject"
|
||||
x-codeSamples:
|
||||
- lang: "curl"
|
||||
source: |
|
||||
curl http://localhost:1337/v1/threads/{thread_id}/messages/{message_id}/files/{file_id} \
|
||||
- lang: cURL
|
||||
source: >
|
||||
curl
|
||||
http://localhost:1337/v1/threads/{thread_id}/messages/{message_id}/files/{file_id}
|
||||
\
|
||||
-H "Content-Type: application/json"
|
||||
|
||||
x-webhooks:
|
||||
ModelObject:
|
||||
post:
|
||||
summary: The model object
|
||||
description: |
|
||||
Describe a model offering that can be used with the API. <a href = "https://platform.openai.com/docs/api-reference/models/object"> Equivalent to OpenAI's model object. </a>
|
||||
description: >
|
||||
Describe a model offering that can be used with the API. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/models/object">
|
||||
Equivalent to OpenAI's model object. </a>
|
||||
operationId: ModelObject
|
||||
tags:
|
||||
- Models
|
||||
@ -708,12 +953,29 @@ x-webhooks:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: 'specs/models.yaml#/components/schemas/ModelObject'
|
||||
$ref: "specs/models.yaml#/components/schemas/ModelObject"
|
||||
AssistantObject:
|
||||
post:
|
||||
summary: The assistant object
|
||||
description: >
|
||||
Build assistants that can call models and use tools to perform tasks.
|
||||
<a href = "https://platform.openai.com/docs/api-reference/assistants">
|
||||
Equivalent to OpenAI's assistants object. </a>
|
||||
operationId: AssistantObjects
|
||||
tags:
|
||||
- Assistants
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "specs/assistants.yaml#/components/schemas/AssistantObject"
|
||||
MessageObject:
|
||||
post:
|
||||
summary: The message object
|
||||
description: |
|
||||
Information about a message in the thread. <a href = "https://platform.openai.com/docs/api-reference/messages/object"> Equivalent to OpenAI's message object. </a>
|
||||
description: >
|
||||
Information about a message in the thread. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/messages/object">
|
||||
Equivalent to OpenAI's message object. </a>
|
||||
operationId: MessageObject
|
||||
tags:
|
||||
- Messages
|
||||
@ -721,11 +983,14 @@ x-webhooks:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: 'specs/messages.yaml#/components/schemas/MessageObject'
|
||||
$ref: "specs/messages.yaml#/components/schemas/MessageObject"
|
||||
ThreadObject:
|
||||
post:
|
||||
summary: The thread object
|
||||
description: Represents a thread that contains messages. <a href = "https://platform.openai.com/docs/api-reference/threads/object"> Equivalent to OpenAI's thread object. </a>
|
||||
description: >-
|
||||
Represents a thread that contains messages. <a href =
|
||||
"https://platform.openai.com/docs/api-reference/threads/object">
|
||||
Equivalent to OpenAI's thread object. </a>
|
||||
operationId: ThreadObject
|
||||
tags:
|
||||
- Threads
|
||||
@ -733,4 +998,4 @@ x-webhooks:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: 'specs/threads.yaml#/components/schemas/ThreadObject'
|
||||
$ref: "specs/threads.yaml#/components/schemas/ThreadObject"
|
||||
|
||||
@ -1,59 +0,0 @@
|
||||
AssistantObject:
|
||||
type: object
|
||||
properties:
|
||||
avatar:
|
||||
type: string
|
||||
description: "URL of the assistant's avatar. Jan-specific property."
|
||||
example: "https://lala.png"
|
||||
id:
|
||||
type: string
|
||||
description: "The identifier of the assistant."
|
||||
example: "asst_abc123"
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating it's an assistant."
|
||||
default: "assistant"
|
||||
version:
|
||||
type: integer
|
||||
description: "Version number of the assistant."
|
||||
example: 1
|
||||
created_at:
|
||||
type: integer
|
||||
format: int64
|
||||
description: "Unix timestamp representing the creation time of the assistant."
|
||||
name:
|
||||
type: string
|
||||
description: "Name of the assistant."
|
||||
example: "Math Tutor"
|
||||
description:
|
||||
type: string
|
||||
description: "Description of the assistant. Can be null."
|
||||
models:
|
||||
type: array
|
||||
description: "List of models associated with the assistant. Jan-specific property."
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
model_id:
|
||||
type: string
|
||||
# Additional properties for models can be added here
|
||||
events:
|
||||
type: object
|
||||
description: "Event subscription settings for the assistant."
|
||||
properties:
|
||||
in:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
out:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
# If there are specific event types, they can be detailed here
|
||||
metadata:
|
||||
type: object
|
||||
description: "Metadata associated with the assistant."
|
||||
required:
|
||||
- name
|
||||
- models
|
||||
- events
|
||||
318
docs/openapi/specs/assistants.yaml
Normal file
@ -0,0 +1,318 @@
|
||||
components:
|
||||
schemas:
|
||||
AssistantObject:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: The identifier of the assistant.
|
||||
example: asst_abc123
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating it's an assistant."
|
||||
default: assistant
|
||||
version:
|
||||
type: integer
|
||||
description: Version number of the assistant.
|
||||
example: 1
|
||||
created_at:
|
||||
type: integer
|
||||
format: int64
|
||||
description: Unix timestamp representing the creation time of the assistant.
|
||||
example: 1698984975
|
||||
name:
|
||||
type: string
|
||||
description: Name of the assistant.
|
||||
example: Math Tutor
|
||||
description:
|
||||
type: string
|
||||
description: Description of the assistant. Can be null.
|
||||
example: null
|
||||
avatar:
|
||||
type: string
|
||||
description: URL of the assistant's avatar. Jan-specific property.
|
||||
example: "https://pic.png"
|
||||
models:
|
||||
type: array
|
||||
description: List of models associated with the assistant. Jan-specific property.
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
model_id:
|
||||
type: string
|
||||
example: model_0
|
||||
instructions:
|
||||
type: string
|
||||
description: A system prompt for the assistant.
|
||||
example: Be concise
|
||||
events:
|
||||
type: object
|
||||
description: Event subscription settings for the assistant.
|
||||
properties:
|
||||
in:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
out:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
description: Metadata associated with the assistant.
|
||||
ListAssistantsResponse: null
|
||||
CreateAssistantResponse:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: The identifier of the assistant.
|
||||
example: asst_abc123
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating it's an assistant."
|
||||
default: assistant
|
||||
version:
|
||||
type: integer
|
||||
description: Version number of the assistant.
|
||||
example: 1
|
||||
created_at:
|
||||
type: integer
|
||||
format: int64
|
||||
description: Unix timestamp representing the creation time of the assistant.
|
||||
example: 1698984975
|
||||
name:
|
||||
type: string
|
||||
description: Name of the assistant.
|
||||
example: Math Tutor
|
||||
description:
|
||||
type: string
|
||||
description: Description of the assistant. Can be null.
|
||||
example: null
|
||||
avatar:
|
||||
type: string
|
||||
description: URL of the assistant's avatar. Jan-specific property.
|
||||
example: "https://pic.png"
|
||||
models:
|
||||
type: array
|
||||
description: List of models associated with the assistant. Jan-specific property.
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
model_id:
|
||||
type: string
|
||||
example: model_0
|
||||
instructions:
|
||||
type: string
|
||||
description: A system prompt for the assistant.
|
||||
example: Be concise
|
||||
events:
|
||||
type: object
|
||||
description: Event subscription settings for the assistant.
|
||||
properties:
|
||||
in:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
out:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
description: Metadata associated with the assistant.
|
||||
RetrieveAssistantResponse:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: The identifier of the assistant.
|
||||
example: asst_abc123
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating it's an assistant."
|
||||
default: assistant
|
||||
version:
|
||||
type: integer
|
||||
description: Version number of the assistant.
|
||||
example: 1
|
||||
created_at:
|
||||
type: integer
|
||||
format: int64
|
||||
description: Unix timestamp representing the creation time of the assistant.
|
||||
example: 1698984975
|
||||
name:
|
||||
type: string
|
||||
description: Name of the assistant.
|
||||
example: Math Tutor
|
||||
description:
|
||||
type: string
|
||||
description: Description of the assistant. Can be null.
|
||||
example: null
|
||||
avatar:
|
||||
type: string
|
||||
description: URL of the assistant's avatar. Jan-specific property.
|
||||
example: "https://pic.png"
|
||||
models:
|
||||
type: array
|
||||
description: List of models associated with the assistant. Jan-specific property.
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
model_id:
|
||||
type: string
|
||||
example: model_0
|
||||
instructions:
|
||||
type: string
|
||||
description: A system prompt for the assistant.
|
||||
example: Be concise
|
||||
events:
|
||||
type: object
|
||||
description: Event subscription settings for the assistant.
|
||||
properties:
|
||||
in:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
out:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
description: Metadata associated with the assistant.
|
||||
ModifyAssistantObject:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: The identifier of the assistant.
|
||||
example: asst_abc123
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating it's an assistant."
|
||||
default: assistant
|
||||
version:
|
||||
type: integer
|
||||
description: Version number of the assistant.
|
||||
example: 1
|
||||
created_at:
|
||||
type: integer
|
||||
format: int64
|
||||
description: Unix timestamp representing the creation time of the assistant.
|
||||
example: 1698984975
|
||||
name:
|
||||
type: string
|
||||
description: Name of the assistant.
|
||||
example: Math Tutor
|
||||
description:
|
||||
type: string
|
||||
description: Description of the assistant. Can be null.
|
||||
example: null
|
||||
avatar:
|
||||
type: string
|
||||
description: URL of the assistant's avatar. Jan-specific property.
|
||||
example: "https://pic.png"
|
||||
models:
|
||||
type: array
|
||||
description: List of models associated with the assistant. Jan-specific property.
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
model_id:
|
||||
type: string
|
||||
example: model_0
|
||||
instructions:
|
||||
type: string
|
||||
description: A system prompt for the assistant.
|
||||
example: Be concise
|
||||
events:
|
||||
type: object
|
||||
description: Event subscription settings for the assistant.
|
||||
properties:
|
||||
in:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
out:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
description: Metadata associated with the assistant.
|
||||
ModifyAssistantResponse:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: The identifier of the assistant.
|
||||
example: asst_abc123
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating it's an assistant."
|
||||
default: assistant
|
||||
version:
|
||||
type: integer
|
||||
description: Version number of the assistant.
|
||||
example: 1
|
||||
created_at:
|
||||
type: integer
|
||||
format: int64
|
||||
description: Unix timestamp representing the creation time of the assistant.
|
||||
example: 1698984975
|
||||
name:
|
||||
type: string
|
||||
description: Name of the assistant.
|
||||
example: Physics Tutor
|
||||
description:
|
||||
type: string
|
||||
description: Description of the assistant. Can be null.
|
||||
example: null
|
||||
avatar:
|
||||
type: string
|
||||
description: URL of the assistant's avatar. Jan-specific property.
|
||||
example: "https://pic.png"
|
||||
models:
|
||||
type: array
|
||||
description: List of models associated with the assistant. Jan-specific property.
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
model_id:
|
||||
type: string
|
||||
example: model_0
|
||||
instructions:
|
||||
type: string
|
||||
description: A system prompt for the assistant.
|
||||
example: Be concise!
|
||||
events:
|
||||
type: object
|
||||
description: Event subscription settings for the assistant.
|
||||
properties:
|
||||
in:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
out:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
description: Metadata associated with the assistant.
|
||||
DeleteAssistantResponse:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: The identifier of the deleted assistant.
|
||||
example: asst_abc123
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating the assistant has been deleted."
|
||||
example: assistant.deleted
|
||||
deleted:
|
||||
type: boolean
|
||||
description: Indicates whether the assistant was successfully deleted.
|
||||
example: true
|
||||
@ -6,48 +6,59 @@ components:
|
||||
messages:
|
||||
type: arrays
|
||||
description: |
|
||||
Contains input data or prompts for the model to process
|
||||
Contains input data or prompts for the model to process.
|
||||
example:
|
||||
[
|
||||
{ "content": "Hello there :wave:", "role": "assistant" },
|
||||
{ "content": "Can you write a long story", "role": "user" },
|
||||
]
|
||||
- content: "Hello there :wave:"
|
||||
role: assistant
|
||||
- content: Can you write a long story
|
||||
role: user
|
||||
stream:
|
||||
type: boolean
|
||||
default: true
|
||||
description: Enables continuous output generation, allowing for streaming of model responses
|
||||
description: >-
|
||||
Enables continuous output generation, allowing for streaming of
|
||||
model responses.
|
||||
model:
|
||||
type: string
|
||||
example: "gpt-3.5-turbo"
|
||||
description: Specifies the model being used for inference or processing tasks
|
||||
example: gpt-3.5-turbo
|
||||
description: Specifies the model being used for inference or processing tasks.
|
||||
max_tokens:
|
||||
type: number
|
||||
default: 2048
|
||||
description: The maximum number of tokens the model will generate in a single response
|
||||
description: >-
|
||||
The maximum number of tokens the model will generate in a single
|
||||
response.
|
||||
stop:
|
||||
type: arrays
|
||||
example: ["hello"]
|
||||
description: Defines specific tokens or phrases at which the model will stop generating further output
|
||||
example:
|
||||
- hello
|
||||
description: >-
|
||||
Defines specific tokens or phrases at which the model will stop
|
||||
generating further output/
|
||||
frequency_penalty:
|
||||
type: number
|
||||
default: 0
|
||||
description: Adjusts the likelihood of the model repeating words or phrases in its output
|
||||
description: >-
|
||||
Adjusts the likelihood of the model repeating words or phrases in
|
||||
its output.
|
||||
presence_penalty:
|
||||
type: number
|
||||
default: 0
|
||||
description: Influences the generation of new and varied concepts in the model's output
|
||||
description: >-
|
||||
Influences the generation of new and varied concepts in the model's
|
||||
output.
|
||||
temperature:
|
||||
type: number
|
||||
default: 0.7
|
||||
min: 0
|
||||
max: 1
|
||||
description: Controls the randomness of the model's output
|
||||
description: Controls the randomness of the model's output.
|
||||
top_p:
|
||||
type: number
|
||||
default: 0.95
|
||||
min: 0
|
||||
max: 1
|
||||
description: Set probability threshold for more relevant outputs
|
||||
description: Set probability threshold for more relevant outputs.
|
||||
cache_prompt:
|
||||
type: boolean
|
||||
default: true
|
||||
@ -58,59 +69,62 @@ components:
|
||||
messages:
|
||||
type: arrays
|
||||
description: |
|
||||
Contains input data or prompts for the model to process
|
||||
Contains input data or prompts for the model to process.
|
||||
example:
|
||||
[
|
||||
{ "content": "Hello there :wave:", "role": "assistant" },
|
||||
{ "content": "Can you write a long story", "role": "user" },
|
||||
]
|
||||
- content: "Hello there :wave:"
|
||||
role: assistant
|
||||
- content: Can you write a long story
|
||||
role: user
|
||||
model:
|
||||
type: string
|
||||
example: model-zephyr-7B
|
||||
description: |
|
||||
Specifies the model being used for inference or processing tasks
|
||||
Specifies the model being used for inference or processing tasks.
|
||||
stream:
|
||||
type: boolean
|
||||
default: true
|
||||
description: |
|
||||
Enables continuous output generation, allowing for streaming of model responses
|
||||
description: >
|
||||
Enables continuous output generation, allowing for streaming of
|
||||
model responses.
|
||||
max_tokens:
|
||||
type: number
|
||||
default: 2048
|
||||
description: |
|
||||
The maximum number of tokens the model will generate in a single response
|
||||
description: >
|
||||
The maximum number of tokens the model will generate in a single
|
||||
response.
|
||||
stop:
|
||||
type: arrays
|
||||
example: ["hello"]
|
||||
description: |
|
||||
Defines specific tokens or phrases at which the model will stop generating further output
|
||||
example:
|
||||
- hello
|
||||
description: >
|
||||
Defines specific tokens or phrases at which the model will stop
|
||||
generating further output.
|
||||
frequency_penalty:
|
||||
type: number
|
||||
default: 0
|
||||
description: |
|
||||
Adjusts the likelihood of the model repeating words or phrases in its output
|
||||
description: >
|
||||
Adjusts the likelihood of the model repeating words or phrases in
|
||||
its output.
|
||||
presence_penalty:
|
||||
type: number
|
||||
default: 0
|
||||
description: |
|
||||
Influences the generation of new and varied concepts in the model's output
|
||||
description: >
|
||||
Influences the generation of new and varied concepts in the model's
|
||||
output.
|
||||
temperature:
|
||||
type: number
|
||||
default: 0.7
|
||||
min: 0
|
||||
max: 1
|
||||
description: |
|
||||
Controls the randomness of the model's output
|
||||
Controls the randomness of the model's output.
|
||||
top_p:
|
||||
type: number
|
||||
default: 0.95
|
||||
min: 0
|
||||
max: 1
|
||||
description: |
|
||||
Set probability threshold for more relevant outputs
|
||||
|
||||
|
||||
|
||||
Set probability threshold for more relevant outputs.
|
||||
ChatCompletionResponse:
|
||||
type: object
|
||||
description: Description of the response structure
|
||||
@ -125,7 +139,7 @@ components:
|
||||
type: string
|
||||
nullable: true
|
||||
example: null
|
||||
description: Reason for finishing the response, if applicable
|
||||
description: "Reason for finishing the response, if applicable"
|
||||
index:
|
||||
type: integer
|
||||
example: 0
|
||||
@ -135,7 +149,7 @@ components:
|
||||
properties:
|
||||
content:
|
||||
type: string
|
||||
example: "Hello user. What can I help you with?"
|
||||
example: Hello user. What can I help you with?
|
||||
description: Content of the message
|
||||
role:
|
||||
type: string
|
||||
|
||||
@ -6,34 +6,37 @@ components:
|
||||
id:
|
||||
type: string
|
||||
description: |
|
||||
"Sequential or UUID identifier of the message."
|
||||
Sequential or UUID identifier of the message.
|
||||
example: 0
|
||||
object:
|
||||
type: string
|
||||
description: |
|
||||
"Type of the object, defaults to 'thread.message'."
|
||||
Type of the object, defaults to 'thread.message'.
|
||||
example: thread.message
|
||||
created_at:
|
||||
type: integer
|
||||
format: int64
|
||||
description: |
|
||||
"Unix timestamp representing the creation time of the message."
|
||||
Unix timestamp representing the creation time of the message.
|
||||
thread_id:
|
||||
type: string
|
||||
description: |
|
||||
"Identifier of the thread to which this message belongs. Defaults to parent thread."
|
||||
example: "thread_asdf"
|
||||
description: >
|
||||
Identifier of the thread to which this message belongs. Defaults to
|
||||
parent thread.
|
||||
example: thread_asdf
|
||||
assistant_id:
|
||||
type: string
|
||||
description: |
|
||||
"Identifier of the assistant involved in the message. Defaults to parent thread."
|
||||
description: >
|
||||
Identifier of the assistant involved in the message. Defaults to
|
||||
parent thread.
|
||||
example: jan
|
||||
role:
|
||||
type: string
|
||||
enum: ["user", "assistant"]
|
||||
enum:
|
||||
- user
|
||||
- assistant
|
||||
description: |
|
||||
"Role of the sender, either 'user' or 'assistant'."
|
||||
|
||||
Role of the sender, either 'user' or 'assistant'.
|
||||
content:
|
||||
type: array
|
||||
items:
|
||||
@ -42,37 +45,33 @@ components:
|
||||
type:
|
||||
type: string
|
||||
description: |
|
||||
"Type of content, e.g., 'text'."
|
||||
|
||||
|
||||
Type of content, e.g., 'text'.
|
||||
text:
|
||||
type: object
|
||||
properties:
|
||||
value:
|
||||
type: string
|
||||
description: |
|
||||
"Text content of the message."
|
||||
example: "Hi!?"
|
||||
Text content of the message.
|
||||
example: Hi!?
|
||||
annotations:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: |
|
||||
"Annotations for the text content, if any."
|
||||
Annotations for the text content, if any.
|
||||
example: []
|
||||
metadata:
|
||||
type: object
|
||||
description: |
|
||||
"Metadata associated with the message, defaults to an empty object."
|
||||
|
||||
Metadata associated with the message, defaults to an empty object.
|
||||
example: {}
|
||||
|
||||
GetMessageResponse:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: "The identifier of the message."
|
||||
description: The identifier of the message.
|
||||
example: msg_abc123
|
||||
object:
|
||||
type: string
|
||||
@ -81,11 +80,11 @@ components:
|
||||
created_at:
|
||||
type: integer
|
||||
format: int64
|
||||
description: "Unix timestamp representing the creation time of the message."
|
||||
description: Unix timestamp representing the creation time of the message.
|
||||
example: 1699017614
|
||||
thread_id:
|
||||
type: string
|
||||
description: "Identifier of the thread to which this message belongs."
|
||||
description: Identifier of the thread to which this message belongs.
|
||||
example: thread_abc123
|
||||
role:
|
||||
type: string
|
||||
@ -105,8 +104,8 @@ components:
|
||||
properties:
|
||||
value:
|
||||
type: string
|
||||
description: "Text content of the message."
|
||||
example: "How does AI work? Explain it in simple terms."
|
||||
description: Text content of the message.
|
||||
example: How does AI work? Explain it in simple terms.
|
||||
annotations:
|
||||
type: array
|
||||
items:
|
||||
@ -129,15 +128,14 @@ components:
|
||||
example: null
|
||||
metadata:
|
||||
type: object
|
||||
description: "Metadata associated with the message."
|
||||
description: Metadata associated with the message.
|
||||
example: {}
|
||||
|
||||
CreateMessageResponse:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: "The identifier of the created message."
|
||||
description: The identifier of the created message.
|
||||
example: msg_abc123
|
||||
object:
|
||||
type: string
|
||||
@ -146,11 +144,11 @@ components:
|
||||
created_at:
|
||||
type: integer
|
||||
format: int64
|
||||
description: "Unix timestamp representing the creation time of the message."
|
||||
description: Unix timestamp representing the creation time of the message.
|
||||
example: 1699017614
|
||||
thread_id:
|
||||
type: string
|
||||
description: "Identifier of the thread to which this message belongs."
|
||||
description: Identifier of the thread to which this message belongs.
|
||||
example: thread_abc123
|
||||
role:
|
||||
type: string
|
||||
@ -170,8 +168,8 @@ components:
|
||||
properties:
|
||||
value:
|
||||
type: string
|
||||
description: "Text content of the message."
|
||||
example: "How does AI work? Explain it in simple terms."
|
||||
description: Text content of the message.
|
||||
example: How does AI work? Explain it in simple terms.
|
||||
annotations:
|
||||
type: array
|
||||
items:
|
||||
@ -194,39 +192,37 @@ components:
|
||||
example: null
|
||||
metadata:
|
||||
type: object
|
||||
description: "Metadata associated with the message."
|
||||
description: Metadata associated with the message.
|
||||
example: {}
|
||||
|
||||
ListMessagesResponse:
|
||||
type: object
|
||||
properties:
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating it's a list."
|
||||
default: "list"
|
||||
default: list
|
||||
data:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/ListMessageObject'
|
||||
$ref: "#/components/schemas/ListMessageObject"
|
||||
first_id:
|
||||
type: string
|
||||
description: "Identifier of the first message in the list."
|
||||
example: "msg_abc123"
|
||||
description: Identifier of the first message in the list.
|
||||
example: msg_abc123
|
||||
last_id:
|
||||
type: string
|
||||
description: "Identifier of the last message in the list."
|
||||
example: "msg_abc456"
|
||||
description: Identifier of the last message in the list.
|
||||
example: msg_abc456
|
||||
has_more:
|
||||
type: boolean
|
||||
description: "Indicates whether there are more messages to retrieve."
|
||||
description: Indicates whether there are more messages to retrieve.
|
||||
example: false
|
||||
|
||||
ListMessageObject:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: "The identifier of the message."
|
||||
description: The identifier of the message.
|
||||
example: msg_abc123
|
||||
object:
|
||||
type: string
|
||||
@ -235,11 +231,11 @@ components:
|
||||
created_at:
|
||||
type: integer
|
||||
format: int64
|
||||
description: "Unix timestamp representing the creation time of the message."
|
||||
description: Unix timestamp representing the creation time of the message.
|
||||
example: 1699017614
|
||||
thread_id:
|
||||
type: string
|
||||
description: "Identifier of the thread to which this message belongs."
|
||||
description: Identifier of the thread to which this message belongs.
|
||||
example: thread_abc123
|
||||
role:
|
||||
type: string
|
||||
@ -258,8 +254,8 @@ components:
|
||||
properties:
|
||||
value:
|
||||
type: string
|
||||
description: "Text content of the message."
|
||||
example: "How does AI work? Explain it in simple terms."
|
||||
description: Text content of the message.
|
||||
example: How does AI work? Explain it in simple terms.
|
||||
annotations:
|
||||
type: array
|
||||
items:
|
||||
@ -281,38 +277,36 @@ components:
|
||||
example: null
|
||||
metadata:
|
||||
type: object
|
||||
description: "Metadata associated with the message."
|
||||
description: Metadata associated with the message.
|
||||
example: {}
|
||||
|
||||
MessageFileObject:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: "The identifier of the file."
|
||||
description: The identifier of the file.
|
||||
example: file-abc123
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating it's a thread message file."
|
||||
description: Type of the object, indicating it's a thread message file.
|
||||
example: thread.message.file
|
||||
created_at:
|
||||
type: integer
|
||||
format: int64
|
||||
description: "Unix timestamp representing the creation time of the file."
|
||||
description: Unix timestamp representing the creation time of the file.
|
||||
example: 1699061776
|
||||
message_id:
|
||||
type: string
|
||||
description: "Identifier of the message to which this file is associated."
|
||||
description: Identifier of the message to which this file is associated.
|
||||
example: msg_abc123
|
||||
|
||||
ListMessageFilesResponse:
|
||||
type: object
|
||||
properties:
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating it's a list."
|
||||
default: "list"
|
||||
description: Type of the object, indicating it's a list.
|
||||
default: list
|
||||
data:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/MessageFileObject'
|
||||
$ref: "#/components/schemas/MessageFileObject"
|
||||
|
||||
@ -5,7 +5,8 @@ components:
|
||||
properties:
|
||||
object:
|
||||
type: string
|
||||
enum: [list]
|
||||
enum:
|
||||
- list
|
||||
data:
|
||||
type: array
|
||||
items:
|
||||
@ -13,68 +14,75 @@ components:
|
||||
required:
|
||||
- object
|
||||
- data
|
||||
|
||||
Model:
|
||||
type: object
|
||||
properties:
|
||||
type:
|
||||
type: string
|
||||
default: "model"
|
||||
description: "The type of the object."
|
||||
default: model
|
||||
description: The type of the object.
|
||||
version:
|
||||
type: string
|
||||
default: "1"
|
||||
description: "The version number of the model."
|
||||
description: The version number of the model.
|
||||
id:
|
||||
type: string
|
||||
description: "Unique identifier used in chat-completions model_name, matches folder name."
|
||||
example: "zephyr-7b"
|
||||
description: >-
|
||||
Unique identifier used in chat-completions model_name, matches
|
||||
folder name.
|
||||
example: zephyr-7b
|
||||
name:
|
||||
type: string
|
||||
description: "Name of the model."
|
||||
example: "Zephyr 7B"
|
||||
description: Name of the model.
|
||||
example: Zephyr 7B
|
||||
owned_by:
|
||||
type: string
|
||||
description: "Compatibility field for OpenAI."
|
||||
description: Compatibility field for OpenAI.
|
||||
default: ""
|
||||
created:
|
||||
type: integer
|
||||
format: int64
|
||||
description: "Unix timestamp representing the creation time."
|
||||
description: Unix timestamp representing the creation time.
|
||||
description:
|
||||
type: string
|
||||
description: "Description of the model."
|
||||
description: Description of the model.
|
||||
state:
|
||||
type: string
|
||||
enum: [null, "downloading", "ready", "starting", "stopping"]
|
||||
description: "Current state of the model."
|
||||
enum:
|
||||
- null
|
||||
- downloading
|
||||
- ready
|
||||
- starting
|
||||
- stopping
|
||||
description: Current state of the model.
|
||||
format:
|
||||
type: string
|
||||
description: "State format of the model, distinct from the engine."
|
||||
example: "ggufv3"
|
||||
example: ggufv3
|
||||
source_url:
|
||||
type: string
|
||||
format: uri
|
||||
description: "URL to the source of the model."
|
||||
example: "https://huggingface.co/TheBloke/zephyr-7B-beta-GGUF/blob/main/zephyr-7b-beta.Q4_K_M.gguf"
|
||||
description: URL to the source of the model.
|
||||
example: >-
|
||||
https://huggingface.co/TheBloke/zephyr-7B-beta-GGUF/blob/main/zephyr-7b-beta.Q4_K_M.gguf
|
||||
settings:
|
||||
type: object
|
||||
properties:
|
||||
ctx_len:
|
||||
type: string
|
||||
description: "Context length."
|
||||
description: Context length.
|
||||
example: "2048"
|
||||
ngl:
|
||||
type: string
|
||||
description: "Number of layers."
|
||||
description: Number of layers.
|
||||
example: "100"
|
||||
embedding:
|
||||
type: string
|
||||
description: "Indicates if embedding is enabled."
|
||||
description: Indicates if embedding is enabled.
|
||||
example: "true"
|
||||
n_parallel:
|
||||
type: string
|
||||
description: "Number of parallel processes."
|
||||
description: Number of parallel processes.
|
||||
example: "4"
|
||||
additionalProperties: false
|
||||
parameters:
|
||||
@ -82,155 +90,237 @@ components:
|
||||
properties:
|
||||
temperature:
|
||||
type: string
|
||||
description: "Temperature setting for the model."
|
||||
description: Temperature setting for the model.
|
||||
example: "0.7"
|
||||
token_limit:
|
||||
type: string
|
||||
description: "Token limit for the model."
|
||||
description: Token limit for the model.
|
||||
example: "2048"
|
||||
top_k:
|
||||
type: string
|
||||
description: "Top-k setting for the model."
|
||||
description: Top-k setting for the model.
|
||||
example: "0"
|
||||
top_p:
|
||||
type: string
|
||||
description: "Top-p setting for the model."
|
||||
description: Top-p setting for the model.
|
||||
example: "1"
|
||||
stream:
|
||||
type: string
|
||||
description: "Indicates if streaming is enabled."
|
||||
description: Indicates if streaming is enabled.
|
||||
example: "true"
|
||||
additionalProperties: false
|
||||
metadata:
|
||||
type: object
|
||||
description: "Additional metadata."
|
||||
description: Additional metadata.
|
||||
assets:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: "List of assets related to the model."
|
||||
description: List of assets related to the model.
|
||||
required:
|
||||
- source_url
|
||||
|
||||
ModelObject:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: |
|
||||
"The identifier of the model."
|
||||
|
||||
example: "zephyr-7b"
|
||||
The identifier of the model.
|
||||
example: zephyr-7b
|
||||
object:
|
||||
type: string
|
||||
description: |
|
||||
"The type of the object, indicating it's a model."
|
||||
|
||||
default: "model"
|
||||
The type of the object, indicating it's a model.
|
||||
default: model
|
||||
created:
|
||||
type: integer
|
||||
format: int64
|
||||
description: |
|
||||
"Unix timestamp representing the creation time of the model."
|
||||
|
||||
example: "1253935178"
|
||||
Unix timestamp representing the creation time of the model.
|
||||
example: 1253935178
|
||||
owned_by:
|
||||
type: string
|
||||
description: |
|
||||
"The entity that owns the model."
|
||||
|
||||
example: "_"
|
||||
|
||||
The entity that owns the model.
|
||||
example: _
|
||||
GetModelResponse:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: "The identifier of the model."
|
||||
example: "zephyr-7b"
|
||||
description: The identifier of the model.
|
||||
example: zephyr-7b
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating it's a model."
|
||||
default: "model"
|
||||
default: model
|
||||
created:
|
||||
type: integer
|
||||
format: int64
|
||||
description: "Unix timestamp representing the creation time of the model."
|
||||
description: Unix timestamp representing the creation time of the model.
|
||||
owned_by:
|
||||
type: string
|
||||
description: "The entity that owns the model."
|
||||
example: "_"
|
||||
description: The entity that owns the model.
|
||||
example: _
|
||||
state:
|
||||
type: string
|
||||
enum: [not_downloaded, downloaded, running, stopped]
|
||||
description: "The current state of the model."
|
||||
enum:
|
||||
- not_downloaded
|
||||
- downloaded
|
||||
- running
|
||||
- stopped
|
||||
description: The current state of the model.
|
||||
source_url:
|
||||
type: string
|
||||
format: uri
|
||||
description: "URL to the source of the model."
|
||||
example: "https://huggingface.co/TheBloke/zephyr-7B-beta-GGUF/blob/main/zephyr-7b-beta.Q4_K_M.gguf"
|
||||
parameters:
|
||||
description: URL to the source of the model.
|
||||
example: >-
|
||||
https://huggingface.co/TheBloke/zephyr-7B-beta-GGUF/blob/main/zephyr-7b-beta.Q4_K_M.gguf
|
||||
engine_parameters:
|
||||
type: object
|
||||
properties:
|
||||
pre_prompt:
|
||||
type: string
|
||||
description: Predefined prompt used for setting up internal configurations.
|
||||
default: ""
|
||||
example: Initial setup complete.
|
||||
system_prompt:
|
||||
type: string
|
||||
description: Prefix used for system-level prompts.
|
||||
default: "SYSTEM: "
|
||||
user_prompt:
|
||||
type: string
|
||||
description: Prefix used for user prompts.
|
||||
default: "USER: "
|
||||
ai_prompt:
|
||||
type: string
|
||||
description: Prefix used for assistant prompts.
|
||||
default: "ASSISTANT: "
|
||||
ngl:
|
||||
type: integer
|
||||
description: >-
|
||||
Number of neural network layers loaded onto the GPU for
|
||||
acceleration.
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
default: 100
|
||||
example: 100
|
||||
ctx_len:
|
||||
type: integer
|
||||
description: >-
|
||||
Context length for model operations, varies based on the
|
||||
specific model.
|
||||
minimum: 128
|
||||
maximum: 4096
|
||||
default: 2048
|
||||
example: 2048
|
||||
n_parallel:
|
||||
type: integer
|
||||
description: >-
|
||||
Number of parallel operations, relevant when continuous batching
|
||||
is enabled.
|
||||
minimum: 1
|
||||
maximum: 10
|
||||
default: 1
|
||||
example: 4
|
||||
cont_batching:
|
||||
type: boolean
|
||||
description: Indicates if continuous batching is used for processing.
|
||||
default: false
|
||||
example: false
|
||||
cpu_threads:
|
||||
type: integer
|
||||
description: Number of threads allocated for CPU-based inference.
|
||||
minimum: 1
|
||||
example: 8
|
||||
embedding:
|
||||
type: boolean
|
||||
description: Indicates if embedding layers are enabled in the model.
|
||||
default: true
|
||||
example: true
|
||||
model_parameters:
|
||||
type: object
|
||||
properties:
|
||||
ctx_len:
|
||||
type: integer
|
||||
description: "Context length."
|
||||
description: Maximum context length the model can handle.
|
||||
minimum: 0
|
||||
maximum: 4096
|
||||
default: 2048
|
||||
example: 2048
|
||||
ngl:
|
||||
type: integer
|
||||
description: "Number of layers."
|
||||
description: Number of layers in the neural network.
|
||||
minimum: 1
|
||||
maximum: 100
|
||||
default: 100
|
||||
example: 100
|
||||
embedding:
|
||||
type: boolean
|
||||
description: "Indicates if embedding is enabled."
|
||||
description: Indicates if embedding layers are used.
|
||||
default: true
|
||||
example: true
|
||||
n_parallel:
|
||||
type: integer
|
||||
description: "Number of parallel processes."
|
||||
description: Number of parallel processes the model can run.
|
||||
minimum: 1
|
||||
maximum: 10
|
||||
default: 1
|
||||
example: 4
|
||||
# pre_prompt:
|
||||
# type: string
|
||||
# description: "Predefined prompt for initiating the chat."
|
||||
# example: "A chat between a curious user and an artificial intelligence"
|
||||
# user_prompt:
|
||||
# type: string
|
||||
# description: "Format of user's prompt."
|
||||
# example: "USER: "
|
||||
# ai_prompt:
|
||||
# type: string
|
||||
# description: "Format of AI's response."
|
||||
# example: "ASSISTANT: "
|
||||
temperature:
|
||||
type: string
|
||||
description: "Temperature setting for the model."
|
||||
example: "0.7"
|
||||
type: number
|
||||
description: >-
|
||||
Controls randomness in model's responses. Higher values lead to
|
||||
more random responses.
|
||||
minimum: 0
|
||||
maximum: 2
|
||||
default: 0.7
|
||||
example: 0.7
|
||||
token_limit:
|
||||
type: string
|
||||
description: "Token limit for the model."
|
||||
example: "2048"
|
||||
type: integer
|
||||
description: >-
|
||||
Maximum number of tokens the model can generate in a single
|
||||
response.
|
||||
minimum: 1
|
||||
maximum: 4096
|
||||
default: 2048
|
||||
example: 2048
|
||||
top_k:
|
||||
type: string
|
||||
description: "Top-k setting for the model."
|
||||
example: "0"
|
||||
type: integer
|
||||
description: >-
|
||||
Limits the model to consider only the top k most likely next
|
||||
tokens at each step.
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
default: 0
|
||||
example: 0
|
||||
top_p:
|
||||
type: string
|
||||
description: "Top-p setting for the model."
|
||||
example: "1"
|
||||
type: number
|
||||
description: >-
|
||||
Nucleus sampling parameter. The model considers the smallest set
|
||||
of tokens whose cumulative probability exceeds the top_p value.
|
||||
minimum: 0
|
||||
maximum: 1
|
||||
default: 1
|
||||
example: 1
|
||||
metadata:
|
||||
type: object
|
||||
properties:
|
||||
engine:
|
||||
type: string
|
||||
description: "The engine used by the model."
|
||||
example: "llamacpp"
|
||||
description: The engine used by the model.
|
||||
enum:
|
||||
- nitro
|
||||
- openai
|
||||
- hf_inference
|
||||
quantization:
|
||||
type: string
|
||||
description: "Quantization parameter of the model."
|
||||
example: "Q3_K_L"
|
||||
description: Quantization parameter of the model.
|
||||
example: Q3_K_L
|
||||
size:
|
||||
type: string
|
||||
description: "Size of the model."
|
||||
example: "7B"
|
||||
description: Size of the model.
|
||||
example: 7B
|
||||
required:
|
||||
- id
|
||||
- object
|
||||
@ -240,77 +330,71 @@ components:
|
||||
- source_url
|
||||
- parameters
|
||||
- metadata
|
||||
|
||||
DeleteModelResponse:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: "The identifier of the model that was deleted."
|
||||
example: "model-zephyr-7B"
|
||||
description: The identifier of the model that was deleted.
|
||||
example: model-zephyr-7B
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating it's a model."
|
||||
default: "model"
|
||||
description: Type of the object, indicating it's a model.
|
||||
default: model
|
||||
deleted:
|
||||
type: boolean
|
||||
description: "Indicates whether the model was successfully deleted."
|
||||
description: Indicates whether the model was successfully deleted.
|
||||
example: true
|
||||
|
||||
|
||||
StartModelResponse:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: "The identifier of the model that was started."
|
||||
example: "model-zephyr-7B"
|
||||
description: The identifier of the model that was started.
|
||||
example: model-zephyr-7B
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating it's a model."
|
||||
default: "model"
|
||||
description: Type of the object, indicating it's a model.
|
||||
default: model
|
||||
state:
|
||||
type: string
|
||||
description: "The current state of the model after the start operation."
|
||||
example: "running"
|
||||
description: The current state of the model after the start operation.
|
||||
example: running
|
||||
required:
|
||||
- id
|
||||
- object
|
||||
- state
|
||||
|
||||
StopModelResponse:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: "The identifier of the model that was started."
|
||||
example: "model-zephyr-7B"
|
||||
description: The identifier of the model that was started.
|
||||
example: model-zephyr-7B
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating it's a model."
|
||||
default: "model"
|
||||
description: Type of the object, indicating it's a model.
|
||||
default: model
|
||||
state:
|
||||
type: string
|
||||
description: "The current state of the model after the start operation."
|
||||
example: "stopped"
|
||||
description: The current state of the model after the start operation.
|
||||
example: stopped
|
||||
required:
|
||||
- id
|
||||
- object
|
||||
- state
|
||||
|
||||
DownloadModelResponse:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: "The identifier of the model that was started."
|
||||
example: "model-zephyr-7B"
|
||||
description: The identifier of the model that was started.
|
||||
example: model-zephyr-7B
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating it's a model."
|
||||
default: "model"
|
||||
description: Type of the object, indicating it's a model.
|
||||
default: model
|
||||
state:
|
||||
type: string
|
||||
description: "The current state of the model after the start operation."
|
||||
example: "downloaded"
|
||||
|
||||
description: The current state of the model after the start operation.
|
||||
example: downloaded
|
||||
|
||||
@ -6,123 +6,111 @@ components:
|
||||
id:
|
||||
type: string
|
||||
description: |
|
||||
"The identifier of the thread, defaults to foldername."
|
||||
|
||||
The identifier of the thread, defaults to foldername.
|
||||
example: thread_....
|
||||
object:
|
||||
type: string
|
||||
description: |
|
||||
"Type of the object, defaults to thread."
|
||||
|
||||
Type of the object, defaults to thread.
|
||||
example: thread
|
||||
title:
|
||||
type: string
|
||||
description: |
|
||||
"A brief summary or description of the thread, defaults to an empty string."
|
||||
|
||||
|
||||
example: "funny physics joke"
|
||||
description: >
|
||||
A brief summary or description of the thread, defaults to an empty
|
||||
string.
|
||||
example: funny physics joke
|
||||
assistants:
|
||||
type: array
|
||||
description: |
|
||||
|
||||
description: ""
|
||||
items:
|
||||
properties:
|
||||
assistant_id:
|
||||
type: string
|
||||
description: |
|
||||
The identifier of assistant, defaults to "jan"
|
||||
|
||||
|
||||
example: jan
|
||||
model:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: |
|
||||
|
||||
description: ""
|
||||
example: ...
|
||||
settings:
|
||||
type: object
|
||||
description: |
|
||||
Defaults to and overrides assistant.json's "settings" (and if none, then model.json "settings")
|
||||
|
||||
|
||||
description: >
|
||||
Defaults to and overrides assistant.json's "settings" (and
|
||||
if none, then model.json "settings")
|
||||
parameters:
|
||||
type: object
|
||||
description: |
|
||||
Defaults to and overrides assistant.json's "parameters" (and if none, then model.json "parameters")
|
||||
|
||||
|
||||
description: >
|
||||
Defaults to and overrides assistant.json's "parameters"
|
||||
(and if none, then model.json "parameters")
|
||||
created:
|
||||
type: integer
|
||||
format: int64
|
||||
description: |
|
||||
"Unix timestamp representing the creation time of the thread, defaults to file creation time."
|
||||
|
||||
description: >
|
||||
Unix timestamp representing the creation time of the thread,
|
||||
defaults to file creation time.
|
||||
example: 1231231
|
||||
metadata:
|
||||
type: object
|
||||
description: |
|
||||
"Metadata associated with the thread, defaults to an empty object."
|
||||
|
||||
Metadata associated with the thread, defaults to an empty object.
|
||||
example: {}
|
||||
|
||||
GetThreadResponse:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: "The identifier of the thread."
|
||||
description: The identifier of the thread.
|
||||
example: thread_abc123
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object"
|
||||
description: Type of the object
|
||||
example: thread
|
||||
created_at:
|
||||
type: integer
|
||||
format: int64
|
||||
description: "Unix timestamp representing the creation time of the thread."
|
||||
description: Unix timestamp representing the creation time of the thread.
|
||||
example: 1699014083
|
||||
assistants:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: "List of assistants involved in the thread."
|
||||
example: ["assistant-001"]
|
||||
description: List of assistants involved in the thread.
|
||||
example:
|
||||
- assistant-001
|
||||
metadata:
|
||||
type: object
|
||||
description: "Metadata associated with the thread."
|
||||
description: Metadata associated with the thread.
|
||||
example: {}
|
||||
messages:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: "List of messages within the thread."
|
||||
description: List of messages within the thread.
|
||||
example: []
|
||||
|
||||
CreateThreadResponse:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: "The identifier of the newly created thread."
|
||||
description: The identifier of the newly created thread.
|
||||
example: thread_abc123
|
||||
object:
|
||||
type: string
|
||||
description: "Type of the object, indicating it's a thread."
|
||||
description: Type of the object, indicating it's a thread.
|
||||
example: thread
|
||||
created_at:
|
||||
type: integer
|
||||
format: int64
|
||||
description: "Unix timestamp representing the creation time of the thread."
|
||||
description: Unix timestamp representing the creation time of the thread.
|
||||
example: 1699014083
|
||||
metadata:
|
||||
type: object
|
||||
description: "Metadata associated with the newly created thread."
|
||||
description: Metadata associated with the newly created thread.
|
||||
example: {}
|
||||
|
||||
ThreadMessageObject:
|
||||
type: object
|
||||
properties:
|
||||
@ -130,21 +118,19 @@ components:
|
||||
type: string
|
||||
description: |
|
||||
"Role of the sender, either 'user' or 'assistant'."
|
||||
|
||||
enum: ["user", "assistant"]
|
||||
enum:
|
||||
- user
|
||||
- assistant
|
||||
content:
|
||||
type: string
|
||||
description: |
|
||||
"Text content of the message."
|
||||
|
||||
file_ids:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: |
|
||||
"Array of file IDs associated with the message, if any."
|
||||
|
||||
|
||||
ModifyThreadResponse:
|
||||
type: object
|
||||
properties:
|
||||
@ -160,19 +146,18 @@ components:
|
||||
created_at:
|
||||
type: integer
|
||||
format: int64
|
||||
description: "Unix timestamp representing the creation time of the thread."
|
||||
description: Unix timestamp representing the creation time of the thread.
|
||||
example: 1699014083
|
||||
metadata:
|
||||
type: object
|
||||
description: "Metadata associated with the modified thread."
|
||||
description: Metadata associated with the modified thread.
|
||||
example: {}
|
||||
|
||||
DeleteThreadResponse:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: "The identifier of the deleted thread."
|
||||
description: The identifier of the deleted thread.
|
||||
example: thread_abc123
|
||||
object:
|
||||
type: string
|
||||
@ -180,5 +165,5 @@ components:
|
||||
example: thread.deleted
|
||||
deleted:
|
||||
type: boolean
|
||||
description: "Indicates whether the thread was successfully deleted."
|
||||
description: Indicates whether the thread was successfully deleted.
|
||||
example: true
|
||||
@ -38,6 +38,7 @@
|
||||
"react-icons": "^4.11.0",
|
||||
"redocusaurus": "^2.0.0",
|
||||
"sass": "^1.69.3",
|
||||
"tailwind-merge": "^2.1.0",
|
||||
"tailwindcss": "^3.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@ -27,7 +27,7 @@ export default function AnnoncementBanner() {
|
||||
|
||||
return (
|
||||
<div className="h-10 w-full flex-shrink-0 bg-blue-600">
|
||||
<div className="container flex h-full items-center justify-between py-0.5">
|
||||
<div className="px-4 lg:px-10 flex h-full items-center justify-between py-0.5">
|
||||
<div className="flex h-6 items-center shadow-sm">
|
||||
<a
|
||||
href="https://github.com/janhq/jan"
|
||||
@ -66,7 +66,12 @@ export default function AnnoncementBanner() {
|
||||
<div className="flex items-center gap-x-3">
|
||||
{socials.map((social, i) => {
|
||||
return (
|
||||
<a key={i} href={social.href} target="_blank">
|
||||
<a
|
||||
aria-label={`social-${i}`}
|
||||
key={i}
|
||||
href={social.href}
|
||||
target="_blank"
|
||||
>
|
||||
{social.icon}
|
||||
</a>
|
||||
);
|
||||
@ -1,36 +1,37 @@
|
||||
import React, { useState, useEffect } from "react";
|
||||
import axios from "axios";
|
||||
import { FaWindows, FaApple, FaLinux } from "react-icons/fa";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
|
||||
const systemsTemplate = [
|
||||
{
|
||||
name: "Download for Mac (M1/M2)",
|
||||
logo: require("@site/static/img/apple-logo-white.png").default,
|
||||
name: "Mac M1, M2, M3",
|
||||
logo: FaApple,
|
||||
fileFormat: "{appname}-mac-arm64-{tag}.dmg",
|
||||
comingSoon: false,
|
||||
},
|
||||
{
|
||||
name: "Download for Mac (Intel)",
|
||||
logo: require("@site/static/img/apple-logo-white.png").default,
|
||||
name: "Mac (Intel)",
|
||||
logo: FaApple,
|
||||
fileFormat: "{appname}-mac-x64-{tag}.dmg",
|
||||
comingSoon: false,
|
||||
},
|
||||
{
|
||||
name: "Download for Windows",
|
||||
logo: require("@site/static/img/windows-logo-white.png").default,
|
||||
name: "Windows",
|
||||
logo: FaWindows,
|
||||
fileFormat: "{appname}-win-x64-{tag}.exe",
|
||||
comingSoon: true,
|
||||
},
|
||||
{
|
||||
name: "Download for Linux",
|
||||
logo: require("@site/static/img/linux-logo-white.png").default,
|
||||
name: "Linux",
|
||||
logo: FaLinux,
|
||||
fileFormat: "{appname}-linux-amd64-{tag}.deb",
|
||||
comingSoon: true,
|
||||
},
|
||||
];
|
||||
|
||||
function classNames(...classes) {
|
||||
return classes.filter(Boolean).join(" ");
|
||||
}
|
||||
|
||||
export default function DownloadLink() {
|
||||
export default function DownloadApp() {
|
||||
const [systems, setSystems] = useState(systemsTemplate);
|
||||
const [defaultSystem, setDefaultSystem] = useState(systems[0]);
|
||||
|
||||
const getLatestReleaseInfo = async (repoOwner, repoName) => {
|
||||
const url = `https://api.github.com/repos/${repoOwner}/${repoName}/releases/latest`;
|
||||
@ -50,30 +51,6 @@ export default function DownloadLink() {
|
||||
return match ? match[1] : null;
|
||||
};
|
||||
|
||||
const changeDefaultSystem = async (systems) => {
|
||||
const userAgent = navigator.userAgent;
|
||||
|
||||
const arc = await navigator?.userAgentData?.getHighEntropyValues([
|
||||
"architecture",
|
||||
]);
|
||||
|
||||
if (userAgent.includes("Windows")) {
|
||||
// windows user
|
||||
setDefaultSystem(systems[2]);
|
||||
} else if (userAgent.includes("Linux")) {
|
||||
// linux user
|
||||
setDefaultSystem(systems[3]);
|
||||
} else if (
|
||||
userAgent.includes("Mac OS") &&
|
||||
arc &&
|
||||
arc.architecture === "arm"
|
||||
) {
|
||||
setDefaultSystem(systems[0]);
|
||||
} else {
|
||||
setDefaultSystem(systems[1]);
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
const updateDownloadLinks = async () => {
|
||||
try {
|
||||
@ -88,7 +65,7 @@ export default function DownloadLink() {
|
||||
"Failed to extract appname from file name:",
|
||||
firstAssetName
|
||||
);
|
||||
changeDefaultSystem(systems);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -108,7 +85,6 @@ export default function DownloadLink() {
|
||||
});
|
||||
|
||||
setSystems(updatedSystems);
|
||||
changeDefaultSystem(updatedSystems);
|
||||
} catch (error) {
|
||||
console.error("Failed to update download links:", error);
|
||||
}
|
||||
@ -118,10 +94,39 @@ export default function DownloadLink() {
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div className="mt-2">
|
||||
<a href={defaultSystem.href}>
|
||||
<span className="text-blue-600 font-bold">Download Jan</span>
|
||||
<div>
|
||||
<div className="flex flex-col lg:flex-row items-center justify-center gap-4 mb-4">
|
||||
<span className="text-zinc-500 text-lg font-medium inline-block">
|
||||
Download for PC
|
||||
</span>
|
||||
<div className="bg-yellow-50 text-yellow-700 space-x-2 px-4 py-2 border border-yellow-400 rounded-lg text-base">
|
||||
<span>🚧</span>
|
||||
<span className="font-semibold">Warning:</span>
|
||||
<span className="font-medium">
|
||||
Jan is in the process of being built. Expect bugs!
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="mx-auto text-center">
|
||||
{systems.map((system, i) => (
|
||||
<a
|
||||
key={i}
|
||||
href={system.href || ""}
|
||||
className={twMerge(
|
||||
"btn-shadow inline-flex m-2 px-4 rounded-lg text-lg font-semibold cursor-pointer justify-center items-center space-x-2 border border-zinc-200 dark:border-gray-700 text-black dark:text-white bg-zinc-50 min-w-[150px] dark:bg-[#18181B] h-[36px]",
|
||||
system.comingSoon && "pointer-events-none"
|
||||
)}
|
||||
>
|
||||
<system.logo />
|
||||
<span className="text-sm">{system.name}</span>
|
||||
{system.comingSoon && (
|
||||
<span className="bg-zinc-200 py-0.5 px-2 inline-block ml-2 rounded-md text-xs h-[20px] dark:text-black">
|
||||
Coming Soon
|
||||
</span>
|
||||
)}
|
||||
</a>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@ -3,26 +3,27 @@ import { Fragment } from "react";
|
||||
import { Menu, Transition } from "@headlessui/react";
|
||||
import { ChevronDownIcon } from "@heroicons/react/20/solid";
|
||||
import axios from "axios";
|
||||
import { FaWindows, FaApple, FaLinux } from "react-icons/fa";
|
||||
|
||||
const systemsTemplate = [
|
||||
{
|
||||
name: "Download for Mac (M1/M2)",
|
||||
logo: require("@site/static/img/apple-logo-white.png").default,
|
||||
name: "Download for Mac (M1/M2/M3)",
|
||||
logo: FaApple,
|
||||
fileFormat: "{appname}-mac-arm64-{tag}.dmg",
|
||||
},
|
||||
{
|
||||
name: "Download for Mac (Intel)",
|
||||
logo: require("@site/static/img/apple-logo-white.png").default,
|
||||
logo: FaApple,
|
||||
fileFormat: "{appname}-mac-x64-{tag}.dmg",
|
||||
},
|
||||
{
|
||||
name: "Download for Windows",
|
||||
logo: require("@site/static/img/windows-logo-white.png").default,
|
||||
logo: FaWindows,
|
||||
fileFormat: "{appname}-win-x64-{tag}.exe",
|
||||
},
|
||||
{
|
||||
name: "Download for Linux",
|
||||
logo: require("@site/static/img/linux-logo-white.png").default,
|
||||
logo: FaLinux,
|
||||
fileFormat: "{appname}-linux-amd64-{tag}.deb",
|
||||
},
|
||||
];
|
||||
@ -56,21 +57,13 @@ export default function Dropdown() {
|
||||
const changeDefaultSystem = async (systems) => {
|
||||
const userAgent = navigator.userAgent;
|
||||
|
||||
const arc = await navigator?.userAgentData?.getHighEntropyValues([
|
||||
"architecture",
|
||||
]);
|
||||
|
||||
if (userAgent.includes("Windows")) {
|
||||
// windows user
|
||||
setDefaultSystem(systems[2]);
|
||||
} else if (userAgent.includes("Linux")) {
|
||||
// linux user
|
||||
setDefaultSystem(systems[3]);
|
||||
} else if (
|
||||
userAgent.includes("Mac OS") &&
|
||||
arc &&
|
||||
arc.architecture === "arm"
|
||||
) {
|
||||
} else if (userAgent.includes("Mac OS")) {
|
||||
setDefaultSystem(systems[0]);
|
||||
} else {
|
||||
setDefaultSystem(systems[1]);
|
||||
@ -123,14 +116,14 @@ export default function Dropdown() {
|
||||
return (
|
||||
<div className="inline-flex align-items-stretch">
|
||||
<a
|
||||
className="cursor-pointer relative inline-flex items-center rounded-l-md border-0 px-3.5 py-2.5 text-base font-semibold text-white bg-blue-600 hover:bg-blue-500 hover:text-white"
|
||||
href={defaultSystem.href}
|
||||
href={defaultSystem.href || ""}
|
||||
className="cursor-pointer relative inline-flex items-center rounded-l-md border-0 px-4 py-3 text-base font-semibold dark:bg-white dark:text-black bg-black text-white dark:hover:text-black hover:text-white"
|
||||
>
|
||||
<img src={defaultSystem.logo} alt="Logo" className="h-5 mr-3 -mt-1" />
|
||||
<defaultSystem.logo className="h-5 mr-3 -mt-1" />
|
||||
{defaultSystem.name}
|
||||
</a>
|
||||
<Menu as="div" className="relative -ml-px block">
|
||||
<Menu.Button className="cursor-pointer relative inline-flex items-center rounded-r-md border-l border-blue-500 h-full text-white bg-blue-600 w-8 justify-center">
|
||||
<Menu.Button className="cursor-pointer relative inline-flex items-center rounded-r-md border-l border-gray-600 h-full dark:bg-white dark:text-black bg-black text-white dark:hover:text-black hover:text-white w-8 justify-center">
|
||||
<span className="sr-only">Open OS options</span>
|
||||
<ChevronDownIcon className="h-6 w-6" aria-hidden="true" />
|
||||
</Menu.Button>
|
||||
@ -143,7 +136,7 @@ export default function Dropdown() {
|
||||
leaveFrom="transform opacity-100 scale-100"
|
||||
leaveTo="transform opacity-0 scale-95"
|
||||
>
|
||||
<Menu.Items className="absolute right-0 z-10 mt-1 w-72 text-left origin-top-right rounded-md bg-blue-600 shadow-2xl ring-1 ring-black ring-opacity-5 focus:outline-none overflow-hidden">
|
||||
<Menu.Items className="absolute right-0 z-10 mt-1 w-80 text-left origin-top-right rounded-md dark:bg-white dark:text-black bg-black text-white dark:hover:text-black hover:text-white shadow-2xl ring-1 ring-black ring-opacity-5 focus:outline-none overflow-hidden">
|
||||
<div className="overflow-hidden">
|
||||
{systems.map((system) => (
|
||||
<Menu.Item
|
||||
@ -152,18 +145,18 @@ export default function Dropdown() {
|
||||
>
|
||||
{({ active }) => (
|
||||
<a
|
||||
href={system.href}
|
||||
href={system.href || ""}
|
||||
className={classNames(
|
||||
active ? "bg-blue-500 hover:text-white" : "text-white",
|
||||
"flex px-4 py-3 items-center text-white hover:text-white"
|
||||
active
|
||||
? "dark:bg-blue-100 bg-gray-900 hover:text-white dark:text-black"
|
||||
: "text-white dark:text-black",
|
||||
"flex px-4 py-3 items-center text-white hover:text-white dark:text-black"
|
||||
)}
|
||||
>
|
||||
<img
|
||||
src={system.logo}
|
||||
alt="Logo"
|
||||
className="w-3 mr-3 -mt-1 flex-shrink-0"
|
||||
/>
|
||||
<span className="text-white">{system.name}</span>
|
||||
<system.logo className="w-3 mr-3 -mt-1 flex-shrink-0" />
|
||||
<span className="text-white dark:text-black font-medium">
|
||||
{system.name}
|
||||
</span>
|
||||
</a>
|
||||
)}
|
||||
</Menu.Item>
|
||||
@ -1,19 +1,37 @@
|
||||
import React from "react";
|
||||
|
||||
import { AiOutlineGithub, AiOutlineTwitter } from "react-icons/ai";
|
||||
import { BiLogoDiscordAlt } from "react-icons/bi";
|
||||
|
||||
const socials = [
|
||||
{
|
||||
icon: <AiOutlineTwitter className="text-xl text-black dark:text-white" />,
|
||||
href: "https://twitter.com/janhq_",
|
||||
},
|
||||
{
|
||||
icon: <BiLogoDiscordAlt className="text-xl text-black dark:text-white" />,
|
||||
href: "https://discord.com/invite/FTk2MvZwJH",
|
||||
},
|
||||
{
|
||||
icon: <AiOutlineGithub className="text-lg text-black dark:text-white" />,
|
||||
href: "https://github.com/janhq/jan",
|
||||
},
|
||||
];
|
||||
|
||||
const menus = [
|
||||
{
|
||||
name: "For Developers",
|
||||
child: [
|
||||
{
|
||||
menu: "Documentation (WIP)",
|
||||
menu: "Documentation",
|
||||
path: "/intro",
|
||||
},
|
||||
{
|
||||
menu: "Hardware (WIP)",
|
||||
menu: "Hardware",
|
||||
path: "/hardware",
|
||||
},
|
||||
{
|
||||
menu: "API Reference (WIP)",
|
||||
menu: "API Reference",
|
||||
path: "/api-reference",
|
||||
},
|
||||
{
|
||||
@ -67,22 +85,43 @@ const getCurrentYear = new Date().getFullYear();
|
||||
|
||||
export default function Footer() {
|
||||
return (
|
||||
<footer className="flex-shrink-0 border-t dark:border-gray-800 border-gray-200 py-10">
|
||||
<footer className="flex-shrink-0 dark:bg-[#09090B]/10 bg-[#D4D4D8]/10 relative overflow-hidden py-10">
|
||||
<div className="container">
|
||||
<div className="grid grid-cols-2 gap-8 md:grid-cols-2 lg:grid-cols-6">
|
||||
<div className="lg:col-span-3 col-span-2">
|
||||
<h6 className="mb-3">Jan</h6>
|
||||
<div className="flex items-center space-x-2 mb-3">
|
||||
<img alt="Jan Logo" src="/img/logo.svg" />
|
||||
<h2 className="h6">Jan</h2>
|
||||
</div>
|
||||
<div className="w-full lg:w-1/2">
|
||||
<p className="dark:text-gray-400 text-gray-600">
|
||||
Run Large Language Models locally on Windows, Mac and Linux.
|
||||
Available on Desktop and Cloud-Native.
|
||||
Jan is the open-source, self-hosted
|
||||
<br className="hidden lg:block" />
|
||||
alternative to ChatGPT.
|
||||
</p>
|
||||
|
||||
<div className="mt-4">
|
||||
<div className="flex items-center gap-x-3">
|
||||
{socials.map((social, i) => {
|
||||
return (
|
||||
<a
|
||||
aria-label={`social-${i}`}
|
||||
key={i}
|
||||
href={social.href}
|
||||
target="_blank"
|
||||
>
|
||||
{social.icon}
|
||||
</a>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{menus.map((menu, i) => {
|
||||
return (
|
||||
<div key={i} className="lg:text-right">
|
||||
<h6 className="mb-3">{menu.name}</h6>
|
||||
<h2 className="mb-3 h6">{menu.name}</h2>
|
||||
<ul>
|
||||
{menu.child.map((child, i) => {
|
||||
return (
|
||||
@ -103,7 +142,7 @@ export default function Footer() {
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
<div className="container mt-8">
|
||||
<div className="container mt-6">
|
||||
<span className="dark:text-gray-300 text-gray-700">
|
||||
©{getCurrentYear} Jan AI Pte Ltd.
|
||||
</span>
|
||||
47
docs/src/containers/SocialButton/index.js
Normal file
@ -0,0 +1,47 @@
|
||||
import React from "react";
|
||||
import { FaGithub, FaDiscord } from "react-icons/fa";
|
||||
import { RiStarSFill } from "react-icons/ri";
|
||||
import { useAppStars } from "@site/src/hooks/useAppStars";
|
||||
import { useDiscordWidget } from "@site/src/hooks/useDiscordWidget";
|
||||
|
||||
export default function SocialButton() {
|
||||
const { stargazers } = useAppStars();
|
||||
const { data } = useDiscordWidget();
|
||||
|
||||
return (
|
||||
<div className="flex items-center space-x-2 justify-start">
|
||||
<a
|
||||
href="https://github.com/janhq/jan"
|
||||
target="_blank"
|
||||
className="inline-flex px-4 py-3 rounded-lg font-semibold cursor-pointer justify-center items-center space-x-4 border border-gray-400 dark:border-gray-700 text-white bg-black hover:text-white"
|
||||
>
|
||||
<span>
|
||||
<FaGithub className="text-3xl" />
|
||||
</span>
|
||||
<div className="flex-col">
|
||||
<p className="text-base">Github</p>
|
||||
<p className="text-sm text-white flex items-center space-x-1">
|
||||
<RiStarSFill className="text-lg text-[#FEC928]" />
|
||||
<span>{stargazers.count} stars</span>
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
<a
|
||||
href="https://discord.gg/FTk2MvZwJH"
|
||||
target="_blank"
|
||||
className="text-white bg-[#5765F2] hover:bg-[#5765F2] hover:text-white inline-flex px-4 py-3 rounded-lg font-semibold cursor-pointer justify-center items-center space-x-4"
|
||||
>
|
||||
<span>
|
||||
<FaDiscord className="text-3xl" />
|
||||
</span>
|
||||
<div className="flex-col">
|
||||
<p className="text-base">Discord</p>
|
||||
<div className="text-sm text-white flex items-center space-x-1">
|
||||
<div className="w-2 h-2 bg-green-500 rounded-full" />
|
||||
<span>{data.presence_count} online</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
28
docs/src/hooks/useDiscordWidget.js
Normal file
@ -0,0 +1,28 @@
|
||||
import React, { useEffect, useState } from "react";
|
||||
|
||||
import axios from "axios";
|
||||
import { isAxiosError } from "axios";
|
||||
|
||||
export const useDiscordWidget = () => {
|
||||
const [data, setData] = useState({});
|
||||
|
||||
useEffect(() => {
|
||||
const updateData = async () => {
|
||||
try {
|
||||
const { data } = await axios.get(
|
||||
"https://discord.com/api/guilds/1107178041848909847/widget.json"
|
||||
);
|
||||
setData({
|
||||
...data,
|
||||
});
|
||||
} catch (error) {
|
||||
if (isAxiosError(error)) {
|
||||
console.error("Failed to get stargazers:", error);
|
||||
}
|
||||
}
|
||||
};
|
||||
updateData();
|
||||
}, []);
|
||||
|
||||
return { data };
|
||||
};
|
||||
@ -1,281 +1,335 @@
|
||||
import React from "react";
|
||||
import Dropdown from "@site/src/components/Elements/dropdown";
|
||||
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
|
||||
import DownloadApp from "@site/src/containers/DownloadApp";
|
||||
|
||||
import useBaseUrl from "@docusaurus/useBaseUrl";
|
||||
import Layout from "@theme/Layout";
|
||||
import AnnoncementBanner from "@site/src/components/Announcement";
|
||||
|
||||
import { AiOutlineGithub } from "react-icons/ai";
|
||||
import Banner from "@site/src/containers/Banner";
|
||||
|
||||
import ThemedImage from "@theme/ThemedImage";
|
||||
|
||||
import DownloadLink from "@site/src/components/Elements/downloadLink";
|
||||
import SocialButton from "@site/src/containers/SocialButton";
|
||||
|
||||
import { IoArrowDown } from "react-icons/io5";
|
||||
|
||||
import Dropdown from "@site/src/containers/Elements/dropdown";
|
||||
|
||||
import useIsBrowser from "@docusaurus/useIsBrowser";
|
||||
|
||||
export default function Home() {
|
||||
const { siteConfig } = useDocusaurusContext();
|
||||
const isBrowser = useIsBrowser();
|
||||
|
||||
const handleAnchorLink = () => {
|
||||
document
|
||||
.getElementById("download-section")
|
||||
.scrollIntoView({ behavior: "smooth" });
|
||||
};
|
||||
|
||||
const userAgent = isBrowser && navigator.userAgent;
|
||||
const isBrowserChrome = isBrowser && userAgent.includes("Chrome");
|
||||
|
||||
return (
|
||||
<>
|
||||
<AnnoncementBanner />
|
||||
<Banner />
|
||||
<Layout
|
||||
title={`${siteConfig.tagline}`}
|
||||
description="Jan is a ChatGPT-alternative that runs on your own computer, with a local API server."
|
||||
title="Open-source ChatGPT Alternative"
|
||||
description="Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable."
|
||||
>
|
||||
<main className="bg-gray-50 dark:bg-gray-950/95 relative">
|
||||
<div className="relative">
|
||||
<ThemedImage
|
||||
alt="App screenshot"
|
||||
sources={{
|
||||
light: useBaseUrl("/img/bg-hero-light.svg"),
|
||||
dark: useBaseUrl("/img/bg-hero-dark.svg"),
|
||||
}}
|
||||
className="absolute w-full h-full opacity-10 dark:opacity-20 top-0 object-cover blur-3xl"
|
||||
<main>
|
||||
<div className="grid grid-cols-1 lg:grid-cols-12 -mt-1 gap-8 items-center relative min-h-[calc(100vh-96px)] ">
|
||||
<div className="col-span-full lg:col-start-2 lg:col-span-5 text-left relative z-10 px-4 py-6">
|
||||
<img
|
||||
src="/img/homepage/element-hero-blur.webp"
|
||||
alt="Element blur"
|
||||
className="hidden lg:block absolute blur-3xl opacity-30 right-32 -bottom-32"
|
||||
/>
|
||||
<div className="flex items-center space-x-2 mb-3">
|
||||
<img alt="Jan Logo" src="img/logo.svg" width={36} height={36} />
|
||||
<span className="text-zinc-500 text-4xl font-medium">
|
||||
Meet Jan
|
||||
</span>
|
||||
</div>
|
||||
<h1 className="text-5xl lg:text-7xl font-semibold leading-tight lg:leading-tight mt-2">
|
||||
Bringing AI to <br /> your Desktop{" "}
|
||||
<span className="relative w-16 h-16 inline-block">
|
||||
<img
|
||||
src="/img/homepage/element-hero-heading.png"
|
||||
alt="Element hero heading"
|
||||
className="object-contain inline-block"
|
||||
width={64}
|
||||
height={64}
|
||||
/>
|
||||
<div className="container pt-16">
|
||||
<div className="grid grid-cols-1 items-center gap-4">
|
||||
<div className="relative z-10 text-center ">
|
||||
{/* TODO: Add upcoming events here */}
|
||||
{/* <div className="bg-red-50 mb-4 inline-flex items-center py-1 rounded-full px-4 gap-x-2">
|
||||
<span className="font-bold uppercase text-blue-600">
|
||||
Event
|
||||
</span>
|
||||
<a href="/events/nvidia-llm-day-nov-23">
|
||||
<p className="font-bold">
|
||||
8 Nov 2023: Nvidia LLM Day (Hanoi)
|
||||
</p>
|
||||
</a>
|
||||
</div> */}
|
||||
<h1 className="bg-gradient-to-r dark:from-white from-black to-gray-500 dark:to-gray-400 bg-clip-text text-4xl lg:text-6xl font-bold leading-tight text-transparent dark:text-transparent lg:leading-tight">
|
||||
Own your AI
|
||||
</h1>
|
||||
<p className="text-xl leading-relaxed lg:text-2xl lg:leading-relaxed text-gray-500 dark:text-gray-400">
|
||||
A
|
||||
<span className="dark:text-white text-black">
|
||||
free, open-source
|
||||
</span>
|
||||
alternative to OpenAI
|
||||
<br />
|
||||
that runs on your
|
||||
<span className="dark:text-white text-black">
|
||||
personal computer
|
||||
</span>
|
||||
<p className="text-2xl mt-3 leading-relaxed text-zinc-500">
|
||||
Open-source ChatGPT alternative that runs{" "}
|
||||
<br className="hidden lg:block" /> 100% offline on your
|
||||
computer.
|
||||
</p>
|
||||
|
||||
<div className="my-6 flex flex-col-reverse md:flex-row items-center justify-center gap-4 relative z-20">
|
||||
<button
|
||||
type="button"
|
||||
className="cursor-pointer relative hidden md:inline-flex items-center px-4 py-2.5 text-base font-semibold rounded-lg border border-gray-400 dark:border-gray-700 text-gray-600 dark:text-white"
|
||||
onClick={() =>
|
||||
window.open(
|
||||
"https://github.com/janhq/jan",
|
||||
"_blank",
|
||||
"noreferrer"
|
||||
)
|
||||
}
|
||||
<div className="mt-8"></div>
|
||||
<div className="mt-8">
|
||||
{!isBrowserChrome ? (
|
||||
<div
|
||||
onClick={() => handleAnchorLink()}
|
||||
className="inline-flex px-4 py-3 rounded-lg text-lg font-semibold cursor-pointer justify-center items-center space-x-2 dark:bg-white dark:text-black bg-black text-white dark:hover:text-black hover:text-white scroll-smooth"
|
||||
>
|
||||
View Github
|
||||
</button>
|
||||
<span>Download Jan for PC</span>
|
||||
</div>
|
||||
) : (
|
||||
<Dropdown />
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div
|
||||
onClick={() => handleAnchorLink()}
|
||||
className="hidden lg:inline-block cursor-pointer"
|
||||
>
|
||||
<div className="mt-16 flex items-center space-x-2">
|
||||
<p>Find out more</p>
|
||||
<IoArrowDown size={24} className="animate-bounce-down" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="text-center relative ">
|
||||
<div className="p-3 border dark:border-gray-500 border-gray-400 inline-block rounded-lg">
|
||||
<div className="col-span-full lg:col-span-6 h-full">
|
||||
<div className="relative text-center h-full">
|
||||
<ThemedImage
|
||||
alt="App screenshot"
|
||||
className="w-full object-cover mr-auto h-full"
|
||||
alt="App screenshots"
|
||||
sources={{
|
||||
light: useBaseUrl("/img/desktop-llm-chat-light.png"),
|
||||
dark: useBaseUrl("/img/desktop-llm-chat-dark.png"),
|
||||
light: useBaseUrl(
|
||||
"/img/homepage/app-base-screen-light.webp"
|
||||
),
|
||||
dark: useBaseUrl("/img/homepage/app-base-screen-dark.webp"),
|
||||
}}
|
||||
width={1000}
|
||||
className="rounded-md mx-auto"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
className="dark:bg-[#09090B]/20 border-t border-zinc-200 dark:border-gray-800 py-10 lg:py-16"
|
||||
id="download-section"
|
||||
>
|
||||
<div className="container">
|
||||
<div className="w-full lg:w-3/4 mx-auto">
|
||||
<DownloadApp />
|
||||
</div>
|
||||
</div>
|
||||
<div className="container mt-40 text-center">
|
||||
<h2>AI that you control</h2>
|
||||
<p className="text-base mt-2 w-full lg:w-2/5 mx-auto leading-relaxed">
|
||||
Private. Local. Infinitely Customizable.
|
||||
</p>
|
||||
<div className="grid text-left lg:grid-cols-2 mt-16 gap-4">
|
||||
<div className="card relative min-h-[380px] lg:min-h-[460px]">
|
||||
</div>
|
||||
|
||||
<div className="dark:bg-[#09090B]/20 pb-10 lg:pb-36">
|
||||
<div className="container h-full ">
|
||||
<div className="w-full lg:w-3/4 mx-auto relative rounded-xl py-10">
|
||||
<img
|
||||
src="/img/card-element.png"
|
||||
alt="Element"
|
||||
className="absolute w-full bottom-0 left-0"
|
||||
/>
|
||||
<div className="p-8 relative z-40">
|
||||
<h5>Personal AI that runs on your computer</h5>
|
||||
<p className="mt-2">
|
||||
Jan runs directly on your local machine, offering privacy,
|
||||
convenience and customizability.
|
||||
</p>
|
||||
<ThemedImage
|
||||
alt="Group Chat"
|
||||
sources={{
|
||||
light: useBaseUrl("/img/group-chat-light.png"),
|
||||
dark: useBaseUrl("/img/group-chat-dark.png"),
|
||||
}}
|
||||
className="mt-10"
|
||||
src="/img/homepage/element-bg-open-source.webp"
|
||||
alt="Element Open Source BG"
|
||||
className="absolute w-full h-full object-cover rounded-xl top-0"
|
||||
/>
|
||||
<div className="grid grid-cols-12 gap-4 px-4 items-center relative z-20">
|
||||
<div className="col-span-full lg:col-span-7 order-2 lg:order-1 relative">
|
||||
<div className="relative lg:-left-14 overflow-hidden rounded-lg group">
|
||||
<div className="hidden group-hover:flex absolute top-0 left-0 rounded-lg bg-black/30 w-full h-full items-center justify-center transition-all">
|
||||
<a
|
||||
href="https://github.com/orgs/janhq/projects/5/views/12"
|
||||
target="_blank"
|
||||
className="inline-flex px-4 py-3 rounded-lg text-lg font-semibold cursor-pointer justify-center items-center space-x-2 text-black bg-white hover:text-black"
|
||||
>
|
||||
<span>View Roadmap</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div className="card relative min-h-[380px] lg:min-h-[460px]">
|
||||
<div className="p-8">
|
||||
<h5>Extendable via App and Plugin framework</h5>
|
||||
<p className="mt-2">
|
||||
Jan has a versatile app and plugin framework, allowing you
|
||||
to customize it to your needs.
|
||||
</p>
|
||||
</div>
|
||||
<ThemedImage
|
||||
alt="Framework"
|
||||
sources={{
|
||||
light: useBaseUrl("/img/card-framework-light.png"),
|
||||
dark: useBaseUrl("/img/card-framework-dark.png"),
|
||||
}}
|
||||
className="w-11/12 ml-auto mt-auto"
|
||||
/>
|
||||
</div>
|
||||
<div className="card relative min-h-[380px] lg:min-h-[460px]">
|
||||
<div className="p-8">
|
||||
<h5>
|
||||
Private and offline, your data never leaves your machine
|
||||
</h5>
|
||||
<p className="mt-2">
|
||||
Your conversations and data are with an AI that runs on your
|
||||
computer, where only you have access.
|
||||
</p>
|
||||
</div>
|
||||
<ThemedImage
|
||||
alt="Group Chat"
|
||||
sources={{
|
||||
light: useBaseUrl("/img/card-nitro-light.png"),
|
||||
dark: useBaseUrl("/img/card-nitro-dark.png"),
|
||||
}}
|
||||
className="w-3/4 mx-auto mt-auto"
|
||||
/>
|
||||
</div>
|
||||
<div className="card relative min-h-[380px] lg:min-h-[460px]">
|
||||
<div className="p-8">
|
||||
<h5>No subscription fees, the AI runs on your computer</h5>
|
||||
<p className="mt-2">
|
||||
Say goodbye to monthly subscriptions or usage-based APIs.
|
||||
Jan runs 100% free on your own hardware.
|
||||
</p>
|
||||
</div>
|
||||
<ThemedImage
|
||||
alt="Group Chat"
|
||||
sources={{
|
||||
light: useBaseUrl("/img/card-free-light.png"),
|
||||
dark: useBaseUrl("/img/card-free-dark.png"),
|
||||
}}
|
||||
className="w-full mt-auto mx-auto"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="container lg:px-20 py-40 lg:py-[200px] text-center lg:text-left">
|
||||
<div className="flex flex-col lg:flex-row space-y-20 lg:space-y-0">
|
||||
<div>
|
||||
<h1 className="bg-gradient-to-r dark:from-white from-black to-gray-500 dark:to-gray-400 bg-clip-text text-4xl lg:text-6xl font-bold leading-tight text-transparent dark:text-transparent lg:leading-tight">
|
||||
Your AI, forever.
|
||||
</h1>
|
||||
<p className="text-lg lg:text-2xl mt-2">
|
||||
Apps come and go, but your AI and data should last.{" "}
|
||||
</p>
|
||||
<div className="w-full lg:w-3/4 mt-8">
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-10 lg:gap-24">
|
||||
<div>
|
||||
<img
|
||||
src="/img/ic-park-solid-unlock.svg"
|
||||
alt="Icon - Lock"
|
||||
className="w-8 mb-4 mx-auto lg:mx-0"
|
||||
src="/img/homepage/roadmap.webp"
|
||||
alt="Element Roadmap"
|
||||
className="h-full w-full object-cover"
|
||||
/>
|
||||
<p>
|
||||
Jan uses open, standard and non-proprietary files stored
|
||||
locally on your device.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<img
|
||||
src="img/ic-baseline-control-camera.svg"
|
||||
alt="Icon - Camera"
|
||||
className="w-8 mb-4 mx-auto lg:mx-0"
|
||||
/>
|
||||
<p>
|
||||
You have total control over your AI, which means you can
|
||||
use Jan offline and switch to another app easily if you
|
||||
want.
|
||||
</div>
|
||||
<div className="col-span-full lg:col-span-5 order-1 lg:order-2 text-black">
|
||||
<p className="text-4xl font-semibold">100% open source</p>
|
||||
<p className="leading-relaxed w-full lg:w-3/4 mt-4">
|
||||
Our core team believes that AI should be open source, and
|
||||
Jan is built in public.
|
||||
</p>
|
||||
<div className="mt-6">
|
||||
<SocialButton />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="w-full lg:w-80 text-center">
|
||||
<div className="dark:bg-[#27272A] bg-zinc-100 pt-10 lg:pt-20 pb-10">
|
||||
<div className="container">
|
||||
<div className="w-full lg:w-3/4 mx-auto relative">
|
||||
<div className="grid grid-cols-1 lg:grid-cols-12 gap-8 items-center">
|
||||
<div className="col-span-5">
|
||||
<p className="text-3xl xl:text-4xl font-semibold">
|
||||
Desktop App
|
||||
</p>
|
||||
<p className="text-zinc-600 dark:text-zinc-400 mt-4 text-lg leading-relaxed">
|
||||
<b className="text-bold text-black dark:text-white">
|
||||
10x productivity
|
||||
</b>{" "}
|
||||
with customizable AI <br className="hidden lg:block" />{" "}
|
||||
assistants, global hotkeys, and in-line AI.
|
||||
</p>
|
||||
</div>
|
||||
<div className="col-span-7">
|
||||
<div className="bg-white dark:bg-[#09090B]/50 h-[375px] border border-zinc-200 dark:border-gray-800 rounded-xl overflow-hidden">
|
||||
<ThemedImage
|
||||
alt="App screenshot"
|
||||
className="object-cover w-full object-center mx-auto h-full lg:-left-4 relative"
|
||||
alt="App screenshots"
|
||||
sources={{
|
||||
light: useBaseUrl("/img/jan-icon-light.png"),
|
||||
dark: useBaseUrl("/img/jan-icon-dark.png"),
|
||||
light: useBaseUrl(
|
||||
"/img/homepage/desktop-app-light.webp"
|
||||
),
|
||||
dark: useBaseUrl(
|
||||
"/img/homepage/desktop-app-dark.webp"
|
||||
),
|
||||
}}
|
||||
className="w-40 lg:w-full mx-auto"
|
||||
/>
|
||||
<p className="mt-1 font-bold">100% free on your own hardware</p>
|
||||
<DownloadLink />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="container pb-40 text-center">
|
||||
<h2>
|
||||
We are open-source. <br /> Join Jan community.
|
||||
<div className="dark:bg-[#27272A] bg-zinc-100 lg:pb-20 pb-10 pt-10">
|
||||
<div className="container">
|
||||
<div className="w-full lg:w-3/4 mx-auto relative ">
|
||||
<div className="grid grid-cols-1 lg:grid-cols-12 gap-8 items-center">
|
||||
<div className="col-span-5">
|
||||
<div className="flex items-center">
|
||||
<p className="text-3xl xl:text-4xl font-semibold">
|
||||
Mobile App
|
||||
</p>
|
||||
<span className="bg-gray-300 dark:bg-gray-700 py-0.5 px-2 inline-block ml-2 rounded-lg text-sm mt-1 font-medium">
|
||||
Coming Soon
|
||||
</span>
|
||||
</div>
|
||||
<p className="text-zinc-600 dark:text-zinc-400 mt-4 text-lg leading-relaxed">
|
||||
Take your AI assistants on the go.{" "}
|
||||
<br className="hidden lg:block" /> Seamless integration
|
||||
into your
|
||||
<b className="text-bold text-black dark:text-white">
|
||||
mobile <br className="hidden lg:block" /> workflows
|
||||
</b>
|
||||
with elegant features.
|
||||
</p>
|
||||
</div>
|
||||
<div className="col-span-7">
|
||||
<div className="bg-white dark:bg-[#09090B]/50 h-[375px] border border-zinc-200 dark:border-gray-800 rounded-xl">
|
||||
<ThemedImage
|
||||
className="object-cover w-full object-center mx-auto h-full"
|
||||
alt="App screenshots"
|
||||
sources={{
|
||||
light: useBaseUrl(
|
||||
"/img/homepage/mobile-app-light.webp"
|
||||
),
|
||||
dark: useBaseUrl(
|
||||
"/img/homepage/mobile-app-dark.webp"
|
||||
),
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="dark:bg-[#09090B]/20">
|
||||
<div className="container py-12 lg:py-32">
|
||||
<div className="w-full xl:w-10/12 mx-auto relative">
|
||||
<div className="text-center">
|
||||
<div className="card-link-bg dark:card-link-bg-dark px-4 py-2 inline-flex rounded-xl items-center space-x-6 h-[60px]">
|
||||
<img
|
||||
src="/img/homepage/ic-offline.webp"
|
||||
alt="Icon Offline"
|
||||
className="w-9 flex-shrink-0"
|
||||
/>
|
||||
<img
|
||||
src="/img/homepage/ic-private.webp"
|
||||
alt="Icon Offline"
|
||||
className="w-12 flex-shrink-0"
|
||||
/>
|
||||
<img
|
||||
src="/img/homepage/ic-folder.webp"
|
||||
alt="Icon Offline"
|
||||
className="w-9 flex-shrink-0"
|
||||
/>
|
||||
</div>
|
||||
<div className="mt-8">
|
||||
<h2 className="text-3xl lg:text-4xl font-semibold">
|
||||
Offline and Local First
|
||||
</h2>
|
||||
<div className="mt-14">
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
|
||||
<a href="https://discord.com/invite/FTk2MvZwJH" target="_blank">
|
||||
<div className="card h-52 relative flex items-center justify-center">
|
||||
<div className="relative z-50">
|
||||
<img
|
||||
src="/img/discord-logo.png"
|
||||
alt="Discord logo"
|
||||
className="w-28"
|
||||
/>
|
||||
</div>
|
||||
<p className="mt-2 text-zinc-600 dark:text-zinc-400 text-lg leading-relaxed">
|
||||
Conversations, preferences, and model usage stay on{" "}
|
||||
<br className="hidden lg:block" /> your computer—secure,
|
||||
exportable, and can be deleted at any time.
|
||||
</p>
|
||||
|
||||
<div className="card-link card-link-bg dark:card-link-bg-dark absolute right-4 top-5">
|
||||
Join our Discord
|
||||
<div className="grid grid-cols-12 mt-10 lg:mt-20 text-left gap-8">
|
||||
<div className="col-span-full lg:col-span-4">
|
||||
<div className="dark:bg-[#27272A] bg-zinc-100 rounded-xl p-8 min-h-[450px]">
|
||||
<h2 className="text-3xl lg:text-4xl font-semibold">
|
||||
OpenAI Compatible
|
||||
</h2>
|
||||
<p className="mt-4 leading-relaxed text-zinc-600 dark:text-zinc-400 text-lg">
|
||||
Jan provides an OpenAI-equivalent API{" "}
|
||||
<br className="hidden lg:block" /> server at
|
||||
<b>localhost:</b>
|
||||
<span className="bg-blue-600 text-white font-bold py-0.5 px-2 rounded-lg">
|
||||
1337
|
||||
</span>{" "}
|
||||
that can be used as a drop-in replacement with
|
||||
compatible apps.
|
||||
</p>
|
||||
|
||||
<div className="mt-6">
|
||||
<div className="mb-4">
|
||||
<div className="bg-white dark:bg-[#18181B] shadow-lg py-2 px-4 inline-flex rounded-xl">
|
||||
<p className="font-medium">
|
||||
/chats/completions
|
||||
</p>
|
||||
</div>
|
||||
<ThemedImage
|
||||
alt="Discord Element"
|
||||
sources={{
|
||||
light: useBaseUrl("/img/discord-element-light.png"),
|
||||
dark: useBaseUrl("/img/discord-element-dark.png"),
|
||||
}}
|
||||
className="absolute"
|
||||
/>
|
||||
</div>
|
||||
</a>
|
||||
<a href="https://github.com/janhq/jan" target="_blank">
|
||||
<div className="card h-52 relative flex items-center justify-center">
|
||||
<div className="relative z-50">
|
||||
<AiOutlineGithub className="text-8xl dark:text-white text-black" />
|
||||
<div className="mb-4">
|
||||
<div className="bg-white dark:bg-[#18181B] shadow-lg py-2 px-4 inline-flex rounded-xl">
|
||||
<p className="font-medium">
|
||||
Local server and API
|
||||
</p>
|
||||
</div>
|
||||
<div className="card-link card-link-bg dark:card-link-bg-dark absolute right-4 top-5">
|
||||
View Github
|
||||
</div>
|
||||
<div className="mb-4">
|
||||
<div className="bg-white dark:bg-[#18181B] shadow-lg py-2 px-4 inline-flex rounded-xl">
|
||||
<p className="font-medium">
|
||||
<span className="inline-block mr-2">
|
||||
Assistants framework
|
||||
</span>
|
||||
<span className="bg-gray-300 dark:bg-gray-700 py-0.5 px-2 inline-block rounded-lg text-sm">
|
||||
Coming Soon
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-span-full lg:col-span-8 items-center">
|
||||
<div className="card-gradient rounded-xl h-full relative text-center min-h-[450px]">
|
||||
<img
|
||||
alt="Github Element"
|
||||
src="/img/github-element-dark.png"
|
||||
className="absolute left-8"
|
||||
src="/img/homepage/status.webp"
|
||||
alt="Element status"
|
||||
className="w-10/12 lg:p-20 object-cover absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2"
|
||||
/>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -1,31 +0,0 @@
|
||||
@layer components {
|
||||
.card-link-bg {
|
||||
background: linear-gradient(180deg, #fff 0%, #fff 100%);
|
||||
box-shadow:
|
||||
0px 10px 10px -5px rgba(0, 0, 0, 0.1),
|
||||
0px 20px 25px -5px rgba(0, 0, 0, 0.1),
|
||||
0px 1px 2px 0px #f1f1f1 inset;
|
||||
}
|
||||
|
||||
.card-link-bg-dark {
|
||||
background: linear-gradient(180deg, #101118 0%, #101118 100%);
|
||||
box-shadow:
|
||||
0px 10px 10px -5px rgba(0, 0, 0, 0.3),
|
||||
0px 1px 2px 0px #525154 inset;
|
||||
}
|
||||
.card {
|
||||
@apply rounded-3xl border bg-gray-100 border-gray-100 dark:border-[#202231] dark:bg-[#111217];
|
||||
|
||||
&-link {
|
||||
display: inline-flex;
|
||||
padding: 8px 16px;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
border-radius: 16px;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,18 +0,0 @@
|
||||
@layer components {
|
||||
.el-blur-hero {
|
||||
height: 200px;
|
||||
background: linear-gradient(
|
||||
180deg,
|
||||
hsl(296, 100%, 67%) 0%,
|
||||
hsl(253, 100%, 57%) 100%
|
||||
);
|
||||
z-index: 2;
|
||||
border-bottom-left-radius: 100%;
|
||||
border-bottom-right-radius: 100%;
|
||||
border-top-left-radius: 100%;
|
||||
border-top-right-radius: 100%;
|
||||
filter: blur(100px);
|
||||
-webkit-filter: blur(100px);
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
@ -1,7 +1,7 @@
|
||||
@layer base {
|
||||
|
||||
html[data-theme="light"] {
|
||||
--ifm-background-color: white;
|
||||
--custom-radial-blur: #e1e7fd;
|
||||
--ifm-background-color: #fff;
|
||||
--ifm-color-primary: #2563eb; /* New Primary Blue */
|
||||
--ifm-color-primary-dark: #204fcf; /* Darker Blue */
|
||||
--ifm-color-primary-darker: #1b45b7; /* Even Darker Blue */
|
||||
@ -13,8 +13,10 @@
|
||||
--ifm-navbar-link-hover-color: inherit;
|
||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
html[data-theme="dark"] {
|
||||
--ifm-background-color: black;
|
||||
--custom-radial-blur: #1d1b48;
|
||||
--ifm-background-color: #18181b;
|
||||
--ifm-color-primary: #ffffff; /* New Primary Blue */
|
||||
--ifm-color-primary-dark: #204fcf; /* Darker Blue */
|
||||
--ifm-color-primary-darker: #1b45b7; /* Even Darker Blue */
|
||||
@ -24,12 +26,18 @@
|
||||
--ifm-color-primary-lightest: #3a8bff; /* Lightest Blue */
|
||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
pre,
|
||||
code {
|
||||
@apply text-sm;
|
||||
}
|
||||
|
||||
body {
|
||||
@apply text-base;
|
||||
@apply antialiased;
|
||||
@apply bg-white dark:bg-black;
|
||||
@apply text-gray-800 dark:text-gray-300;
|
||||
@apply bg-white dark:bg-[#18181B];
|
||||
}
|
||||
|
||||
img {
|
||||
pointer-events: none;
|
||||
}
|
||||
@ -44,7 +52,7 @@
|
||||
display: inline-block;
|
||||
padding: 2px 8px;
|
||||
margin: 0;
|
||||
background-color: #228B22;
|
||||
background-color: #228b22;
|
||||
color: #000;
|
||||
font-size: 13px;
|
||||
vertical-align: middle;
|
||||
@ -52,4 +60,8 @@
|
||||
border-radius: 4px;
|
||||
font-weight: var(--ifm-font-weight-bold);
|
||||
}
|
||||
|
||||
.btn-shadow {
|
||||
box-shadow: 0px 1px 2px 0px rgba(16, 24, 40, 0.05);
|
||||
}
|
||||
}
|
||||
47
docs/src/styles/components/card.scss
Normal file
@ -0,0 +1,47 @@
|
||||
@layer components {
|
||||
.card-gradient {
|
||||
background: radial-gradient(
|
||||
58.83% 95.12% at 62.37% 97.91%,
|
||||
rgba(238, 203, 255, 0.59) 0%,
|
||||
rgba(255, 255, 255, 0) 100%
|
||||
),
|
||||
linear-gradient(
|
||||
155deg,
|
||||
rgba(50, 107, 255, 0.8) 68.16%,
|
||||
rgba(194, 226, 255, 0.8) 94.33%
|
||||
);
|
||||
|
||||
backdrop-filter: blur(7.174633026123047px);
|
||||
}
|
||||
|
||||
.card-link-bg {
|
||||
background: linear-gradient(180deg, #fafafa 0%, #ededed 100%);
|
||||
box-shadow:
|
||||
0px 4px 12px 0px rgba(0, 0, 0, 0.12),
|
||||
0px -1px 1px 0px rgba(0, 0, 0, 0.1) inset,
|
||||
0px 1px 1px 0px #fff inset;
|
||||
}
|
||||
|
||||
.card-link-bg-dark {
|
||||
background: var(--color-bg-elevated, #27272a);
|
||||
box-shadow:
|
||||
0px 4px 12px 0px rgba(0, 0, 0, 0.12),
|
||||
0px -1px 1px 0px rgba(0, 0, 0, 0.1) inset,
|
||||
0px 1px 1px 0px #4c4c4c inset;
|
||||
}
|
||||
.card {
|
||||
@apply rounded-xl border bg-gray-50 border-gray-50 dark:border-[#202231] dark:bg-[#111217]/50;
|
||||
|
||||
&-link {
|
||||
display: inline-flex;
|
||||
padding: 8px 16px;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
border-radius: 16px;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2,8 +2,12 @@
|
||||
@import "tailwindcss/components";
|
||||
@import "tailwindcss/utilities";
|
||||
|
||||
@import "./typography.scss";
|
||||
@import "./tweaks.scss";
|
||||
@import "./base.scss";
|
||||
@import "./components.scss";
|
||||
@import "./card.scss";
|
||||
@import "./components/base.scss";
|
||||
@import "./components/typography.scss";
|
||||
@import "./components/card.scss";
|
||||
|
||||
@import "./tweaks/navbar.scss";
|
||||
@import "./tweaks/breadcrumb.scss";
|
||||
@import "./tweaks/markdown.scss";
|
||||
@import "./tweaks/redocusaurus.scss";
|
||||
@import "./tweaks/sidebar.scss";
|
||||
|
||||
@ -1,126 +0,0 @@
|
||||
.redocusaurus {
|
||||
div[data-section-id] {
|
||||
min-height: auto;
|
||||
}
|
||||
}
|
||||
|
||||
[class*="docItemCol_"] {
|
||||
@apply p-4 lg:px-16 lg:py-4;
|
||||
}
|
||||
|
||||
[class*="breadcrumbsContainer_"] {
|
||||
margin-bottom: 40px !important;
|
||||
}
|
||||
|
||||
.theme-doc-footer {
|
||||
margin-top: 40px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.menu.thin-scrollbar {
|
||||
padding: 32px 10px;
|
||||
}
|
||||
|
||||
[class*="iconExternalLink_"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.navbar {
|
||||
@apply px-0 lg:h-16 border-b border-gray-200 dark:border-gray-800 bg-white/50 backdrop-blur-lg dark:bg-black/50 shadow-none;
|
||||
|
||||
.navbar__toggle {
|
||||
width: 24px;
|
||||
}
|
||||
|
||||
.navbar-sidebar__backdrop {
|
||||
height: 100dvh;
|
||||
}
|
||||
|
||||
.navbar-sidebar {
|
||||
height: 100dvh;
|
||||
.navbar-sidebar__close {
|
||||
width: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar__title {
|
||||
@apply text-lg;
|
||||
}
|
||||
.navbar__brand {
|
||||
margin-right: 24px;
|
||||
&:hover {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
.navbar__inner {
|
||||
@apply container;
|
||||
}
|
||||
}
|
||||
|
||||
.breadcrumbs__item {
|
||||
position: relative;
|
||||
&:first-child {
|
||||
.breadcrumbs__link {
|
||||
vertical-align: middle;
|
||||
margin-top: -2px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[class*="docMainContainer_"],
|
||||
[class*="docSidebarContainer_"] {
|
||||
@apply bg-gray-50 dark:bg-gray-950/95;
|
||||
}
|
||||
|
||||
.navbar-sidebar {
|
||||
@apply bg-gray-50 dark:bg-gray-900;
|
||||
}
|
||||
|
||||
.theme-doc-sidebar-container {
|
||||
@apply border-gray-200 dark:border-gray-800;
|
||||
}
|
||||
|
||||
.theme-doc-markdown {
|
||||
a {
|
||||
@apply text-blue-600 dark:text-blue-400;
|
||||
}
|
||||
ul {
|
||||
list-style: revert;
|
||||
}
|
||||
ol {
|
||||
list-style: decimal;
|
||||
}
|
||||
ul,
|
||||
ol {
|
||||
padding-left: 32px;
|
||||
li {
|
||||
@apply leading-loose;
|
||||
line-height: 1.5;
|
||||
}
|
||||
+ div {
|
||||
margin-top: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.markdown h1:first-child,
|
||||
.markdown > p {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.theme-code-block {
|
||||
font-size: 14px;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
.table-of-contents {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.task-list-item {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
18
docs/src/styles/tweaks/breadcrumb.scss
Normal file
@ -0,0 +1,18 @@
|
||||
.breadcrumbs {
|
||||
@apply mb-8;
|
||||
|
||||
&__item {
|
||||
position: relative;
|
||||
&:first-child {
|
||||
.breadcrumbs__link {
|
||||
vertical-align: middle;
|
||||
margin-top: -2px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__link {
|
||||
padding-top: 2px;
|
||||
padding-bottom: 2px;
|
||||
}
|
||||
}
|
||||
47
docs/src/styles/tweaks/markdown.scss
Normal file
@ -0,0 +1,47 @@
|
||||
.theme-doc-markdown {
|
||||
a {
|
||||
@apply text-blue-600 dark:text-blue-400 underline;
|
||||
}
|
||||
ul {
|
||||
list-style: revert;
|
||||
}
|
||||
ol {
|
||||
list-style: decimal;
|
||||
}
|
||||
ul,
|
||||
ol {
|
||||
padding-left: 16px;
|
||||
li {
|
||||
@apply leading-normal;
|
||||
p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
p {
|
||||
@apply mb-2;
|
||||
}
|
||||
h1 {
|
||||
&:first-child {
|
||||
@apply mb-4;
|
||||
}
|
||||
}
|
||||
|
||||
h1,
|
||||
h2 {
|
||||
@apply mb-3;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
display: table;
|
||||
}
|
||||
}
|
||||
|
||||
.task-list-item {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
25
docs/src/styles/tweaks/navbar.scss
Normal file
@ -0,0 +1,25 @@
|
||||
.navbar {
|
||||
@apply bg-transparent py-0 shadow-none px-0;
|
||||
|
||||
&__inner {
|
||||
@apply border border-gray-200 dark:border-gray-800 bg-white/80 dark:bg-[#09090B]/50 backdrop-blur-md flex items-center h-14 px-4 lg:px-8 relative;
|
||||
}
|
||||
|
||||
&__logo {
|
||||
@apply flex items-center;
|
||||
}
|
||||
|
||||
&__brand {
|
||||
&:hover {
|
||||
@apply dark:text-white text-black;
|
||||
}
|
||||
}
|
||||
|
||||
&__title {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
[class*="searchBox_"] {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
33
docs/src/styles/tweaks/redocusaurus.scss
Normal file
@ -0,0 +1,33 @@
|
||||
.redocusaurus {
|
||||
.menu-content {
|
||||
top: 80px !important;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.redoc-markdown {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.scrollbar-container {
|
||||
ul > li > label {
|
||||
margin-bottom: 4px;
|
||||
background-color: transparent;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: var(--ifm-menu-color);
|
||||
}
|
||||
|
||||
ul > li > ul > li > label {
|
||||
background-color: transparent;
|
||||
font-weight: 500;
|
||||
&:hover {
|
||||
@apply dark:bg-gray-800/50 bg-gray-100;
|
||||
}
|
||||
&.active {
|
||||
@apply dark:bg-gray-800/50 bg-gray-100;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
45
docs/src/styles/tweaks/sidebar.scss
Normal file
@ -0,0 +1,45 @@
|
||||
// * Classname from Docusaurus template
|
||||
// * We just overide the styling with applied class from tailwind
|
||||
|
||||
[class*="docSidebarContainer_"] {
|
||||
margin-top: 0 !important;
|
||||
@apply dark:border-gray-800 border-gray-300;
|
||||
}
|
||||
|
||||
[class*="sidebar_"] {
|
||||
padding-top: 0px !important;
|
||||
}
|
||||
|
||||
.navbar-sidebar__back {
|
||||
padding-top: 20px !important;
|
||||
}
|
||||
|
||||
[class*="sidebarViewport_"] {
|
||||
top: 80px !important;
|
||||
// height: unset !important;
|
||||
}
|
||||
|
||||
[class*="docItemCol_"] {
|
||||
@apply lg:px-8;
|
||||
}
|
||||
|
||||
// * Including custom sidebar table of content
|
||||
.table-of-contents {
|
||||
@apply text-base py-0 dark:border-gray-800 border-gray-300;
|
||||
}
|
||||
|
||||
.menu__caret:before {
|
||||
background: var(--ifm-menu-link-sublist-icon) 50% / 1.5rem 1.5rem;
|
||||
}
|
||||
|
||||
[class*="codeBlockContainer_"] {
|
||||
margin: 4px;
|
||||
}
|
||||
|
||||
[class*="codeBlockTitle_"] {
|
||||
border-bottom: 1px solid #52525a !important;
|
||||
}
|
||||
|
||||
[class*="iconExternalLink_"] {
|
||||
display: none;
|
||||
}
|
||||
@ -10,7 +10,7 @@ import { useKeyboardNavigation } from "@docusaurus/theme-common/internal";
|
||||
import SkipToContent from "@theme/SkipToContent";
|
||||
import AnnouncementBar from "@theme/AnnouncementBar";
|
||||
import Navbar from "@theme/Navbar";
|
||||
import Footer from "@site/src/components/Footer";
|
||||
import Footer from "@site/src/containers/Footer";
|
||||
import LayoutProvider from "@theme/Layout/Provider";
|
||||
import ErrorPageContent from "@theme/ErrorPageContent";
|
||||
import styles from "./styles.module.scss";
|
||||
|
||||
BIN
docs/static/img/apple-logo-white.png
vendored
|
Before Width: | Height: | Size: 2.1 KiB |
167
docs/static/img/bg-hero-dark.svg
vendored
@ -1,167 +0,0 @@
|
||||
<svg width="1440" height="900" viewBox="0 0 1440 900" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<mask id="mask0_68_822" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="1440" height="900">
|
||||
<rect width="1440" height="900" fill="#C4C4C4"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_68_822)">
|
||||
<rect x="-66" y="-0.478027" width="1572" height="950.938" fill="#2F307D"/>
|
||||
<g filter="url(#filter0_f_68_822)">
|
||||
<path d="M-57.8301 396.173L744.277 -13.1623L1108.87 -13.1624L1555.07 95.9939L-9.21778 706.098L-57.8301 396.173Z" fill="url(#paint0_linear_68_822)"/>
|
||||
</g>
|
||||
<g filter="url(#filter1_f_68_822)">
|
||||
<path d="M-101.107 383.634L800.122 -0.623145L1108.87 -13.1624L1555.07 95.9939L-9.21663 706.098L-101.107 383.634Z" fill="url(#paint1_linear_68_822)"/>
|
||||
</g>
|
||||
<g filter="url(#filter2_f_68_822)">
|
||||
<ellipse cx="329.847" cy="107.571" rx="329.847" ry="107.571" transform="matrix(0.914846 -0.403803 0.330497 0.943807 508.14 342.034)" fill="#E73800"/>
|
||||
</g>
|
||||
<g filter="url(#filter3_f_68_822)">
|
||||
<path d="M673.463 29.4612C498.517 54.805 280.304 103.381 65.8544 29.4612C54.5674 23.8293 45.914 29.8836 101.596 99.1566C171.198 185.748 398.816 149.844 673.463 29.4612Z" fill="#4463B1"/>
|
||||
</g>
|
||||
<g opacity="0.4" filter="url(#filter4_f_68_822)">
|
||||
<path d="M609.751 41.4427C470.997 61.5436 297.927 100.07 127.841 41.4427C118.889 36.9759 112.026 41.7777 156.188 96.72C211.392 165.398 391.922 136.922 609.751 41.4427Z" fill="#4463B1"/>
|
||||
</g>
|
||||
<path d="M683.23 327.829C1018.31 164.095 1157.2 156.298 1478.39 218.673L1584.3 429.188L35.639 906.746C7.28175 901.548 89.4594 770.301 313.426 571.481C355.643 534.003 348.151 491.563 683.23 327.829Z" fill="url(#paint2_linear_68_822)"/>
|
||||
<g opacity="0.7" filter="url(#filter5_f_68_822)">
|
||||
<path d="M898.979 256.588C1242.14 115.511 1157.2 156.298 1478.39 218.673L1584.3 429.189L47.792 902.848C19.4347 897.65 -12.9736 787.454 84.2516 629.958C205.783 433.087 499.515 420.813 898.979 256.588Z" fill="#4463B1"/>
|
||||
</g>
|
||||
<g filter="url(#filter6_f_68_822)">
|
||||
<path d="M806.495 345.372C1198.82 247.081 1179.04 156.299 1534.2 218.674L1584.3 429.189L-114.729 902.848C-146.086 897.65 -181.922 787.454 -74.4129 629.958C59.9733 433.087 510.846 419.442 806.495 345.372Z" fill="#4463B1"/>
|
||||
</g>
|
||||
<g filter="url(#filter7_f_68_822)">
|
||||
<ellipse cx="329.847" cy="107.571" rx="329.847" ry="107.571" transform="matrix(0.914846 -0.403803 0.330497 0.943807 -67.2598 503.045)" fill="#4463B1"/>
|
||||
</g>
|
||||
<g opacity="0.4" filter="url(#filter8_f_68_822)">
|
||||
<ellipse cx="329.847" cy="156.166" rx="329.847" ry="156.166" transform="matrix(0.914846 -0.403803 0.330497 0.943807 437.842 560.226)" fill="#4463B1"/>
|
||||
</g>
|
||||
<g filter="url(#filter9_f_68_822)">
|
||||
<ellipse cx="329.847" cy="107.571" rx="329.847" ry="107.571" transform="matrix(0.914846 -0.403803 0.330497 0.943807 980.781 431.732)" fill="#3A78F0"/>
|
||||
</g>
|
||||
<g filter="url(#filter10_f_68_822)">
|
||||
<ellipse cx="296.397" cy="165.703" rx="296.397" ry="165.703" transform="matrix(0.914846 -0.403803 0.330497 0.943807 -370.611 508.381)" fill="#2A4EAB"/>
|
||||
</g>
|
||||
<g filter="url(#filter11_f_68_822)">
|
||||
<path d="M-431 798.106V1422H1785V340.827L-431 798.106Z" fill="white"/>
|
||||
</g>
|
||||
<g filter="url(#filter12_f_68_822)">
|
||||
<path d="M1168.87 194.6L1651.63 -51L1531.83 244.697L1168.87 194.6Z" fill="#2A4EAB"/>
|
||||
</g>
|
||||
<g opacity="0.4" filter="url(#filter13_f_68_822)">
|
||||
<path d="M303.606 802.698L1065.95 450.301L1427.09 399.795L1877.64 402.328L376.107 978.65L303.606 802.698Z" fill="url(#paint3_linear_68_822)"/>
|
||||
</g>
|
||||
<g opacity="0.4" filter="url(#filter14_f_68_822)">
|
||||
<path d="M888 621.314L1690.16 377.877L2054.78 377.877L2501 442.793L936.615 805.63L888 621.314Z" fill="url(#paint4_linear_68_822)"/>
|
||||
</g>
|
||||
<g opacity="0.4" filter="url(#filter15_f_68_822)">
|
||||
<path d="M839.773 675.305L1706.82 339.905L2012.39 295.317L2463.11 306.023L954.084 854.616L839.773 675.305Z" fill="url(#paint5_linear_68_822)"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_f_68_822" x="-64.8301" y="-20.1624" width="1626.9" height="733.26" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="3.5" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<filter id="filter1_f_68_822" x="-125.107" y="-37.1624" width="1704.18" height="767.26" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="12" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<filter id="filter2_f_68_822" x="377.575" y="-21.1177" width="935.751" height="662.969" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="82" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<filter id="filter3_f_68_822" x="-10.4902" y="-40.1458" width="751.953" height="255.045" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="34" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<filter id="filter4_f_68_822" x="85.2227" y="4.16821" width="560.528" height="166.417" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="18" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<filter id="filter5_f_68_822" x="7.91602" y="150.332" width="1587.38" height="763.516" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="5.5" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<filter id="filter6_f_68_822" x="-192.659" y="152.168" width="1822.96" height="796.68" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="23" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<filter id="filter7_f_68_822" x="-197.824" y="139.894" width="935.751" height="662.969" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="82" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<filter id="filter8_f_68_822" x="321.022" y="211.765" width="940.382" height="725.316" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="82" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<filter id="filter9_f_68_822" x="850.217" y="68.5803" width="935.751" height="662.969" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="82" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<filter id="filter10_f_68_822" x="-485.376" y="184.142" width="881.373" height="721.889" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="82" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<filter id="filter11_f_68_822" x="-587" y="184.827" width="2528" height="1393.17" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="78" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<filter id="filter12_f_68_822" x="1100.87" y="-119" width="618.759" height="431.697" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="34" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<filter id="filter13_f_68_822" x="296.605" y="392.795" width="1588.03" height="592.855" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="3.5" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<filter id="filter14_f_68_822" x="881" y="370.877" width="1627" height="441.754" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="3.5" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<filter id="filter15_f_68_822" x="815.773" y="271.317" width="1671.34" height="607.299" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="12" result="effect1_foregroundBlur_68_822"/>
|
||||
</filter>
|
||||
<linearGradient id="paint0_linear_68_822" x1="748.618" y1="-13.1624" x2="81.6937" y2="550.866" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FF7D54"/>
|
||||
<stop offset="1" stop-color="white" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_68_822" x1="501.216" y1="242.185" x2="29.7383" y2="626.281" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.0104167" stop-color="#91B0ED"/>
|
||||
<stop offset="0.458333" stop-color="#437DD5"/>
|
||||
<stop offset="1" stop-color="#8A3AF0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_68_822" x1="1164.15" y1="269.352" x2="415.258" y2="536.803" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#819CFF"/>
|
||||
<stop offset="0.65537" stop-color="#E73800"/>
|
||||
<stop offset="1" stop-color="#819CFF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_68_822" x1="1070.25" y1="449.7" x2="767.856" y2="1036.35" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#3A4CF0"/>
|
||||
<stop offset="1" stop-color="white" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint4_linear_68_822" x1="1694.5" y1="377.877" x2="1316" y2="916.154" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#D73AF0"/>
|
||||
<stop offset="1" stop-color="white" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint5_linear_68_822" x1="1427.52" y1="519.254" x2="1201.79" y2="922.897" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.166667" stop-color="#FF9471"/>
|
||||
<stop offset="0.541667" stop-color="#DBC0C6" stop-opacity="0.69"/>
|
||||
<stop offset="0.791667" stop-color="#C2DEFF" stop-opacity="0.62"/>
|
||||
<stop offset="1" stop-color="#9492FF" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 11 KiB |
136
docs/static/img/bg-hero-light.svg
vendored
@ -1,136 +0,0 @@
|
||||
<svg width="1440" height="900" viewBox="0 0 1440 900" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="-1.50195" y="-3.47998" width="1491.69" height="872.683" fill="#9535E1"/>
|
||||
<g filter="url(#filter0_f_2_1567)">
|
||||
<path d="M5.8584 407.846L767.131 -16.7519L1113.17 -16.752L1536.64 96.4744L51.9959 729.328L5.8584 407.846Z" fill="url(#paint0_linear_2_1567)"/>
|
||||
</g>
|
||||
<g filter="url(#filter1_f_2_1567)">
|
||||
<path d="M-35.2168 394.84L820.132 -3.7452L1113.17 -16.752L1536.64 96.4744L51.9959 729.328L-35.2168 394.84Z" fill="url(#paint1_linear_2_1567)"/>
|
||||
</g>
|
||||
<g filter="url(#filter2_f_2_1567)">
|
||||
<ellipse cx="317.98" cy="110.585" rx="317.98" ry="110.585" transform="matrix(0.900676 -0.434491 0.305122 0.952313 607.015 273.158)" fill="#9D70FF"/>
|
||||
</g>
|
||||
<g filter="url(#filter3_f_2_1567)">
|
||||
<ellipse cx="317.98" cy="110.585" rx="317.98" ry="110.585" transform="matrix(0.900676 -0.434491 0.305122 0.952313 373 356.521)" fill="#9D70FF"/>
|
||||
</g>
|
||||
<g opacity="0.4" filter="url(#filter4_f_2_1567)">
|
||||
<path d="M699.922 27.4613C533.882 53.7501 326.778 104.137 123.246 27.4613C112.534 21.6194 104.321 27.8994 157.168 99.7555C223.227 189.576 439.257 152.333 699.922 27.4613Z" fill="#FDFF89"/>
|
||||
</g>
|
||||
<g opacity="0.3" filter="url(#filter5_f_2_1567)">
|
||||
<path d="M639.454 39.8894C507.763 60.7398 343.504 100.703 182.077 39.8894C173.581 35.256 167.067 40.2369 208.981 97.2278C261.374 168.466 432.714 138.928 639.454 39.8894Z" fill="#FDFF89"/>
|
||||
</g>
|
||||
<path d="M709.192 336.955C1027.21 167.115 1159.03 159.028 1463.87 223.728L1564.39 442.093L94.5687 937.458C67.655 932.066 145.649 795.925 358.213 589.691C398.281 550.817 391.171 506.794 709.192 336.955Z" fill="url(#paint2_linear_2_1567)"/>
|
||||
<g filter="url(#filter6_f_2_1567)">
|
||||
<path d="M921.752 286.407C1258.49 184.451 1159.03 159.028 1463.87 223.729L1564.39 442.093L106.102 933.414C79.1886 928.022 48.4301 813.717 140.706 650.348C256.05 446.137 667.995 363.239 921.752 286.407Z" fill="#81F7FF"/>
|
||||
</g>
|
||||
<g filter="url(#filter7_f_2_1567)">
|
||||
<path d="M826.182 355.152C1198.54 253.196 1179.76 159.029 1516.84 223.729L1564.39 442.094L-48.144 933.414C-77.9044 928.023 -111.916 813.718 -9.88045 650.349C117.664 446.137 545.583 431.983 826.182 355.152Z" fill="#81F7FF"/>
|
||||
</g>
|
||||
<g filter="url(#filter8_f_2_1567)">
|
||||
<ellipse cx="317.98" cy="110.585" rx="317.98" ry="110.585" transform="matrix(0.900676 -0.434491 0.305122 0.952313 -3.0918 518.704)" fill="#707EFF"/>
|
||||
</g>
|
||||
<g opacity="0.8" filter="url(#filter9_f_2_1567)">
|
||||
<ellipse cx="380.177" cy="161.796" rx="380.177" ry="161.796" transform="matrix(0.933505 -0.358564 0.247194 0.968966 476.48 543.488)" fill="#8026F1"/>
|
||||
</g>
|
||||
<g filter="url(#filter10_f_2_1567)">
|
||||
<ellipse cx="317.98" cy="110.585" rx="317.98" ry="110.585" transform="matrix(0.900676 -0.434491 0.305122 0.952313 991.594 444.731)" fill="#FFBAF4"/>
|
||||
</g>
|
||||
<g filter="url(#filter11_f_2_1567)">
|
||||
<ellipse cx="285.734" cy="170.346" rx="285.734" ry="170.346" transform="matrix(0.900676 -0.434491 0.305122 0.952313 -291 524.239)" fill="url(#paint3_linear_2_1567)"/>
|
||||
</g>
|
||||
<g filter="url(#filter12_f_2_1567)">
|
||||
<path d="M-5 784.943V1160H1577V397.063L-5 784.943Z" fill="white"/>
|
||||
</g>
|
||||
<g filter="url(#filter13_f_2_1567)">
|
||||
<path d="M1170.11 198.758L1628.29 -56L1514.59 250.723L1170.11 198.758Z" fill="#9651ED"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_f_2_1567" x="-1.1416" y="-23.752" width="1544.79" height="760.08" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="3.5" result="effect1_foregroundBlur_2_1567"/>
|
||||
</filter>
|
||||
<filter id="filter1_f_2_1567" x="-59.2168" y="-40.752" width="1619.86" height="794.08" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="12" result="effect1_foregroundBlur_2_1567"/>
|
||||
</filter>
|
||||
<filter id="filter2_f_2_1567" x="474.748" y="-97.4189" width="904.811" height="675.458" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="82" result="effect1_foregroundBlur_2_1567"/>
|
||||
</filter>
|
||||
<filter id="filter3_f_2_1567" x="240.733" y="-14.0562" width="904.811" height="675.458" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="82" result="effect1_foregroundBlur_2_1567"/>
|
||||
</filter>
|
||||
<filter id="filter4_f_2_1567" x="47.3262" y="-42.2056" width="720.596" height="259.483" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="34" result="effect1_foregroundBlur_2_1567"/>
|
||||
</filter>
|
||||
<filter id="filter5_f_2_1567" x="139.795" y="2.56738" width="535.658" height="169.938" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="18" result="effect1_foregroundBlur_2_1567"/>
|
||||
</filter>
|
||||
<filter id="filter6_f_2_1567" x="64.6963" y="174.236" width="1513.69" height="773.177" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="7" result="effect1_foregroundBlur_2_1567"/>
|
||||
</filter>
|
||||
<filter id="filter7_f_2_1567" x="-124.449" y="156.459" width="1734.83" height="822.956" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="23" result="effect1_foregroundBlur_2_1567"/>
|
||||
</filter>
|
||||
<filter id="filter8_f_2_1567" x="-135.358" y="148.127" width="904.811" height="675.458" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="82" result="effect1_foregroundBlur_2_1567"/>
|
||||
</filter>
|
||||
<filter id="filter9_f_2_1567" x="350.197" y="192.19" width="1042.35" height="743.511" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="82" result="effect1_foregroundBlur_2_1567"/>
|
||||
</filter>
|
||||
<filter id="filter10_f_2_1567" x="859.328" y="74.1538" width="904.811" height="675.458" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="82" result="effect1_foregroundBlur_2_1567"/>
|
||||
</filter>
|
||||
<filter id="filter11_f_2_1567" x="-408.271" y="194.025" width="853.202" height="736.576" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="82" result="effect1_foregroundBlur_2_1567"/>
|
||||
</filter>
|
||||
<filter id="filter12_f_2_1567" x="-137" y="265.063" width="1846" height="1026.94" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="66" result="effect1_foregroundBlur_2_1567"/>
|
||||
</filter>
|
||||
<filter id="filter13_f_2_1567" x="1102.11" y="-124" width="594.182" height="442.723" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="34" result="effect1_foregroundBlur_2_1567"/>
|
||||
</filter>
|
||||
<linearGradient id="paint0_linear_2_1567" x1="771.251" y1="-16.752" x2="92.1733" y2="508.724" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FED237"/>
|
||||
<stop offset="1" stop-color="#FF0000" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_2_1567" x1="803.5" y1="-0.783345" x2="870.787" y2="283.645" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FFC700"/>
|
||||
<stop offset="0.53125" stop-color="#FF18BE" stop-opacity="0.484375"/>
|
||||
<stop offset="1" stop-color="#6100FF" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_2_1567" x1="1165.62" y1="276.298" x2="441.526" y2="512.908" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#9281FF"/>
|
||||
<stop offset="0.65537" stop-color="#81F7FF"/>
|
||||
<stop offset="1" stop-color="#81D1FF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_2_1567" x1="373.961" y1="100.557" x2="261.156" y2="328.531" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#9651EE"/>
|
||||
<stop offset="1" stop-color="#51C8EE"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 9.3 KiB |
BIN
docs/static/img/card-element.png
vendored
|
Before Width: | Height: | Size: 22 KiB |
BIN
docs/static/img/card-framework-dark.png
vendored
|
Before Width: | Height: | Size: 68 KiB |
BIN
docs/static/img/card-framework-light.png
vendored
|
Before Width: | Height: | Size: 67 KiB |
BIN
docs/static/img/card-free-dark.png
vendored
|
Before Width: | Height: | Size: 236 KiB |
BIN
docs/static/img/card-free-light.png
vendored
|
Before Width: | Height: | Size: 181 KiB |
BIN
docs/static/img/card-nitro-dark.png
vendored
|
Before Width: | Height: | Size: 73 KiB |
BIN
docs/static/img/card-nitro-light.png
vendored
|
Before Width: | Height: | Size: 82 KiB |
BIN
docs/static/img/chat.png
vendored
|
Before Width: | Height: | Size: 64 KiB |
BIN
docs/static/img/desktop-explore-models-dark.png
vendored
|
Before Width: | Height: | Size: 434 KiB |
BIN
docs/static/img/desktop-explore-models-light.png
vendored
|
Before Width: | Height: | Size: 435 KiB |
BIN
docs/static/img/desktop-explore-models.png
vendored
|
Before Width: | Height: | Size: 129 KiB |
BIN
docs/static/img/desktop-llm-chat-dark.png
vendored
|
Before Width: | Height: | Size: 246 KiB |
BIN
docs/static/img/desktop-llm-chat-light.png
vendored
|
Before Width: | Height: | Size: 244 KiB |