Compare commits
1 Commits
dev
...
fix/deprec
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
81ccfffc5b |
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -1,5 +1,5 @@
|
|||||||
blank_issues_enabled: true
|
blank_issues_enabled: true
|
||||||
contact_links:
|
contact_links:
|
||||||
- name: Jan Discussions
|
- name: Jan Discussions
|
||||||
url: https://github.com/orgs/janhq/discussions/categories/q-a
|
url: https://github.com/orgs/menloresearch/discussions/categories/q-a
|
||||||
about: Get help, discuss features & roadmap, and share your projects
|
about: Get help, discuss features & roadmap, and share your projects
|
||||||
|
|||||||
4
.github/workflows/jan-server-web-ci-dev.yml
vendored
@ -12,7 +12,7 @@ jobs:
|
|||||||
build-and-preview:
|
build-and-preview:
|
||||||
runs-on: [ubuntu-24-04-docker]
|
runs-on: [ubuntu-24-04-docker]
|
||||||
env:
|
env:
|
||||||
MENLO_PLATFORM_BASE_URL: "https://api-dev.jan.ai/v1"
|
JAN_API_BASE: "https://api-dev.jan.ai/v1"
|
||||||
permissions:
|
permissions:
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
contents: write
|
contents: write
|
||||||
@ -52,7 +52,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Build docker image
|
- name: Build docker image
|
||||||
run: |
|
run: |
|
||||||
docker build --build-arg MENLO_PLATFORM_BASE_URL=${{ env.MENLO_PLATFORM_BASE_URL }} -t ${{ steps.vars.outputs.FULL_IMAGE }} .
|
docker build --build-arg JAN_API_BASE=${{ env.JAN_API_BASE }} -t ${{ steps.vars.outputs.FULL_IMAGE }} .
|
||||||
|
|
||||||
- name: Push docker image
|
- name: Push docker image
|
||||||
if: github.event_name == 'push'
|
if: github.event_name == 'push'
|
||||||
|
|||||||
4
.github/workflows/jan-server-web-ci-prod.yml
vendored
@ -13,7 +13,7 @@ jobs:
|
|||||||
deployments: write
|
deployments: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
env:
|
env:
|
||||||
MENLO_PLATFORM_BASE_URL: "https://api.jan.ai/v1"
|
JAN_API_BASE: "https://api.jan.ai/v1"
|
||||||
GA_MEASUREMENT_ID: "G-YK53MX8M8M"
|
GA_MEASUREMENT_ID: "G-YK53MX8M8M"
|
||||||
CLOUDFLARE_PROJECT_NAME: "jan-server-web"
|
CLOUDFLARE_PROJECT_NAME: "jan-server-web"
|
||||||
steps:
|
steps:
|
||||||
@ -43,7 +43,7 @@ jobs:
|
|||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: make config-yarn && yarn install && yarn build:core && make build-web-app
|
run: make config-yarn && yarn install && yarn build:core && make build-web-app
|
||||||
env:
|
env:
|
||||||
MENLO_PLATFORM_BASE_URL: ${{ env.MENLO_PLATFORM_BASE_URL }}
|
JAN_API_BASE: ${{ env.JAN_API_BASE }}
|
||||||
GA_MEASUREMENT_ID: ${{ env.GA_MEASUREMENT_ID }}
|
GA_MEASUREMENT_ID: ${{ env.GA_MEASUREMENT_ID }}
|
||||||
|
|
||||||
- name: Publish to Cloudflare Pages Production
|
- name: Publish to Cloudflare Pages Production
|
||||||
|
|||||||
4
.github/workflows/jan-server-web-ci-stag.yml
vendored
@ -12,7 +12,7 @@ jobs:
|
|||||||
build-and-preview:
|
build-and-preview:
|
||||||
runs-on: [ubuntu-24-04-docker]
|
runs-on: [ubuntu-24-04-docker]
|
||||||
env:
|
env:
|
||||||
MENLO_PLATFORM_BASE_URL: "https://api-stag.jan.ai/v1"
|
JAN_API_BASE: "https://api-stag.jan.ai/v1"
|
||||||
permissions:
|
permissions:
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
contents: write
|
contents: write
|
||||||
@ -52,7 +52,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Build docker image
|
- name: Build docker image
|
||||||
run: |
|
run: |
|
||||||
docker build --build-arg MENLO_PLATFORM_BASE_URL=${{ env.MENLO_PLATFORM_BASE_URL }} -t ${{ steps.vars.outputs.FULL_IMAGE }} .
|
docker build --build-arg JAN_API_BASE=${{ env.JAN_API_BASE }} -t ${{ steps.vars.outputs.FULL_IMAGE }} .
|
||||||
|
|
||||||
- name: Push docker image
|
- name: Push docker image
|
||||||
if: github.event_name == 'push'
|
if: github.event_name == 'push'
|
||||||
|
|||||||
108
.github/workflows/jan-tauri-build-nightly.yaml
vendored
@ -168,62 +168,62 @@ jobs:
|
|||||||
AWS_DEFAULT_REGION: ${{ secrets.DELTA_AWS_REGION }}
|
AWS_DEFAULT_REGION: ${{ secrets.DELTA_AWS_REGION }}
|
||||||
AWS_EC2_METADATA_DISABLED: 'true'
|
AWS_EC2_METADATA_DISABLED: 'true'
|
||||||
|
|
||||||
# noti-discord-nightly-and-update-url-readme:
|
noti-discord-nightly-and-update-url-readme:
|
||||||
# needs:
|
needs:
|
||||||
# [
|
[
|
||||||
# build-macos,
|
build-macos,
|
||||||
# build-windows-x64,
|
build-windows-x64,
|
||||||
# build-linux-x64,
|
build-linux-x64,
|
||||||
# get-update-version,
|
get-update-version,
|
||||||
# set-public-provider,
|
set-public-provider,
|
||||||
# sync-temp-to-latest,
|
sync-temp-to-latest,
|
||||||
# ]
|
]
|
||||||
# secrets: inherit
|
secrets: inherit
|
||||||
# if: github.event_name == 'schedule'
|
if: github.event_name == 'schedule'
|
||||||
# uses: ./.github/workflows/template-noti-discord-and-update-url-readme.yml
|
uses: ./.github/workflows/template-noti-discord-and-update-url-readme.yml
|
||||||
# with:
|
with:
|
||||||
# ref: refs/heads/dev
|
ref: refs/heads/dev
|
||||||
# build_reason: Nightly
|
build_reason: Nightly
|
||||||
# push_to_branch: dev
|
push_to_branch: dev
|
||||||
# new_version: ${{ needs.get-update-version.outputs.new_version }}
|
new_version: ${{ needs.get-update-version.outputs.new_version }}
|
||||||
|
|
||||||
# noti-discord-pre-release-and-update-url-readme:
|
noti-discord-pre-release-and-update-url-readme:
|
||||||
# needs:
|
needs:
|
||||||
# [
|
[
|
||||||
# build-macos,
|
build-macos,
|
||||||
# build-windows-x64,
|
build-windows-x64,
|
||||||
# build-linux-x64,
|
build-linux-x64,
|
||||||
# get-update-version,
|
get-update-version,
|
||||||
# set-public-provider,
|
set-public-provider,
|
||||||
# sync-temp-to-latest,
|
sync-temp-to-latest,
|
||||||
# ]
|
]
|
||||||
# secrets: inherit
|
secrets: inherit
|
||||||
# if: github.event_name == 'push'
|
if: github.event_name == 'push'
|
||||||
# uses: ./.github/workflows/template-noti-discord-and-update-url-readme.yml
|
uses: ./.github/workflows/template-noti-discord-and-update-url-readme.yml
|
||||||
# with:
|
with:
|
||||||
# ref: refs/heads/dev
|
ref: refs/heads/dev
|
||||||
# build_reason: Pre-release
|
build_reason: Pre-release
|
||||||
# push_to_branch: dev
|
push_to_branch: dev
|
||||||
# new_version: ${{ needs.get-update-version.outputs.new_version }}
|
new_version: ${{ needs.get-update-version.outputs.new_version }}
|
||||||
|
|
||||||
# noti-discord-manual-and-update-url-readme:
|
noti-discord-manual-and-update-url-readme:
|
||||||
# needs:
|
needs:
|
||||||
# [
|
[
|
||||||
# build-macos,
|
build-macos,
|
||||||
# build-windows-x64,
|
build-windows-x64,
|
||||||
# build-linux-x64,
|
build-linux-x64,
|
||||||
# get-update-version,
|
get-update-version,
|
||||||
# set-public-provider,
|
set-public-provider,
|
||||||
# sync-temp-to-latest,
|
sync-temp-to-latest,
|
||||||
# ]
|
]
|
||||||
# secrets: inherit
|
secrets: inherit
|
||||||
# if: github.event_name == 'workflow_dispatch' && github.event.inputs.public_provider == 'aws-s3'
|
if: github.event_name == 'workflow_dispatch' && github.event.inputs.public_provider == 'aws-s3'
|
||||||
# uses: ./.github/workflows/template-noti-discord-and-update-url-readme.yml
|
uses: ./.github/workflows/template-noti-discord-and-update-url-readme.yml
|
||||||
# with:
|
with:
|
||||||
# ref: refs/heads/dev
|
ref: refs/heads/dev
|
||||||
# build_reason: Manual
|
build_reason: Manual
|
||||||
# push_to_branch: dev
|
push_to_branch: dev
|
||||||
# new_version: ${{ needs.get-update-version.outputs.new_version }}
|
new_version: ${{ needs.get-update-version.outputs.new_version }}
|
||||||
|
|
||||||
comment-pr-build-url:
|
comment-pr-build-url:
|
||||||
needs:
|
needs:
|
||||||
|
|||||||
6
.github/workflows/jan-tauri-build.yaml
vendored
@ -82,11 +82,11 @@ jobs:
|
|||||||
VERSION=${{ needs.get-update-version.outputs.new_version }}
|
VERSION=${{ needs.get-update-version.outputs.new_version }}
|
||||||
PUB_DATE=$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ")
|
PUB_DATE=$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ")
|
||||||
LINUX_SIGNATURE="${{ needs.build-linux-x64.outputs.APPIMAGE_SIG }}"
|
LINUX_SIGNATURE="${{ needs.build-linux-x64.outputs.APPIMAGE_SIG }}"
|
||||||
LINUX_URL="https://github.com/janhq/jan/releases/download/v${{ needs.get-update-version.outputs.new_version }}/${{ needs.build-linux-x64.outputs.APPIMAGE_FILE_NAME }}"
|
LINUX_URL="https://github.com/menloresearch/jan/releases/download/v${{ needs.get-update-version.outputs.new_version }}/${{ needs.build-linux-x64.outputs.APPIMAGE_FILE_NAME }}"
|
||||||
WINDOWS_SIGNATURE="${{ needs.build-windows-x64.outputs.WIN_SIG }}"
|
WINDOWS_SIGNATURE="${{ needs.build-windows-x64.outputs.WIN_SIG }}"
|
||||||
WINDOWS_URL="https://github.com/janhq/jan/releases/download/v${{ needs.get-update-version.outputs.new_version }}/${{ needs.build-windows-x64.outputs.FILE_NAME }}"
|
WINDOWS_URL="https://github.com/menloresearch/jan/releases/download/v${{ needs.get-update-version.outputs.new_version }}/${{ needs.build-windows-x64.outputs.FILE_NAME }}"
|
||||||
DARWIN_SIGNATURE="${{ needs.build-macos.outputs.MAC_UNIVERSAL_SIG }}"
|
DARWIN_SIGNATURE="${{ needs.build-macos.outputs.MAC_UNIVERSAL_SIG }}"
|
||||||
DARWIN_URL="https://github.com/janhq/jan/releases/download/v${{ needs.get-update-version.outputs.new_version }}/${{ needs.build-macos.outputs.TAR_NAME }}"
|
DARWIN_URL="https://github.com/menloresearch/jan/releases/download/v${{ needs.get-update-version.outputs.new_version }}/${{ needs.build-macos.outputs.TAR_NAME }}"
|
||||||
|
|
||||||
jq --arg version "$VERSION" \
|
jq --arg version "$VERSION" \
|
||||||
--arg pub_date "$PUB_DATE" \
|
--arg pub_date "$PUB_DATE" \
|
||||||
|
|||||||
@ -29,7 +29,7 @@ jobs:
|
|||||||
local max_retries=3
|
local max_retries=3
|
||||||
local tag
|
local tag
|
||||||
while [ $retries -lt $max_retries ]; do
|
while [ $retries -lt $max_retries ]; do
|
||||||
tag=$(curl -s https://api.github.com/repos/janhq/jan/releases/latest | jq -r .tag_name)
|
tag=$(curl -s https://api.github.com/repos/menloresearch/jan/releases/latest | jq -r .tag_name)
|
||||||
if [ -n "$tag" ] && [ "$tag" != "null" ]; then
|
if [ -n "$tag" ] && [ "$tag" != "null" ]; then
|
||||||
echo $tag
|
echo $tag
|
||||||
return
|
return
|
||||||
|
|||||||
@ -50,6 +50,6 @@ jobs:
|
|||||||
- macOS Universal: https://delta.jan.ai/nightly/Jan-nightly_{{ VERSION }}_universal.dmg
|
- macOS Universal: https://delta.jan.ai/nightly/Jan-nightly_{{ VERSION }}_universal.dmg
|
||||||
- Linux Deb: https://delta.jan.ai/nightly/Jan-nightly_{{ VERSION }}_amd64.deb
|
- Linux Deb: https://delta.jan.ai/nightly/Jan-nightly_{{ VERSION }}_amd64.deb
|
||||||
- Linux AppImage: https://delta.jan.ai/nightly/Jan-nightly_{{ VERSION }}_amd64.AppImage
|
- Linux AppImage: https://delta.jan.ai/nightly/Jan-nightly_{{ VERSION }}_amd64.AppImage
|
||||||
- Github action run: https://github.com/janhq/jan/actions/runs/{{ GITHUB_RUN_ID }}
|
- Github action run: https://github.com/menloresearch/jan/actions/runs/{{ GITHUB_RUN_ID }}
|
||||||
env:
|
env:
|
||||||
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
||||||
|
|||||||
@ -70,9 +70,10 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "Version: ${{ inputs.new_version }}"
|
echo "Version: ${{ inputs.new_version }}"
|
||||||
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = false' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
|
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = false' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
|
||||||
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
|
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
|
||||||
if [ "${{ inputs.channel }}" != "stable" ]; then
|
if [ "${{ inputs.channel }}" != "stable" ]; then
|
||||||
jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
|
jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun",
|
||||||
|
"usr/lib/Jan-${{ inputs.channel }}/resources/lib/libvulkan.so": "resources/lib/libvulkan.so"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
|
||||||
mv /tmp/tauri.linux.conf.json ./src-tauri/tauri.linux.conf.json
|
mv /tmp/tauri.linux.conf.json ./src-tauri/tauri.linux.conf.json
|
||||||
fi
|
fi
|
||||||
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
|
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
|
||||||
@ -82,7 +83,7 @@ jobs:
|
|||||||
|
|
||||||
jq --arg version "${{ inputs.new_version }}" '.version = $version' ./src-tauri/plugins/tauri-plugin-hardware/package.json > /tmp/package.json
|
jq --arg version "${{ inputs.new_version }}" '.version = $version' ./src-tauri/plugins/tauri-plugin-hardware/package.json > /tmp/package.json
|
||||||
mv /tmp/package.json ./src-tauri/plugins/tauri-plugin-hardware/package.json
|
mv /tmp/package.json ./src-tauri/plugins/tauri-plugin-hardware/package.json
|
||||||
|
|
||||||
echo "---------./src-tauri/plugins/tauri-plugin-hardware/package.json---------"
|
echo "---------./src-tauri/plugins/tauri-plugin-hardware/package.json---------"
|
||||||
cat ./src-tauri/plugins/tauri-plugin-hardware/package.json
|
cat ./src-tauri/plugins/tauri-plugin-hardware/package.json
|
||||||
|
|
||||||
@ -95,7 +96,7 @@ jobs:
|
|||||||
ctoml ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml package.version "${{ inputs.new_version }}"
|
ctoml ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml package.version "${{ inputs.new_version }}"
|
||||||
echo "---------./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml---------"
|
echo "---------./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml---------"
|
||||||
cat ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml
|
cat ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml
|
||||||
|
|
||||||
ctoml ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml package.version "${{ inputs.new_version }}"
|
ctoml ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml package.version "${{ inputs.new_version }}"
|
||||||
echo "---------./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml---------"
|
echo "---------./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml---------"
|
||||||
cat ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml
|
cat ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml
|
||||||
@ -124,7 +125,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
RELEASE_CHANNEL: '${{ inputs.channel }}'
|
RELEASE_CHANNEL: '${{ inputs.channel }}'
|
||||||
AUTO_UPDATER_DISABLED: ${{ inputs.disable_updater && 'true' || 'false' }}
|
AUTO_UPDATER_DISABLED: ${{ inputs.disable_updater && 'true' || 'false' }}
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
@ -135,4 +136,4 @@ jobs:
|
|||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: jan-linux-amd64-${{ inputs.new_version }}-AppImage
|
name: jan-linux-amd64-${{ inputs.new_version }}-AppImage
|
||||||
path: ./src-tauri/target/release/bundle/appimage/*.AppImage
|
path: ./src-tauri/target/release/bundle/appimage/*.AppImage
|
||||||
@ -91,9 +91,10 @@ jobs:
|
|||||||
echo "Version: ${{ inputs.new_version }}"
|
echo "Version: ${{ inputs.new_version }}"
|
||||||
# Update tauri.conf.json
|
# Update tauri.conf.json
|
||||||
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = true' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
|
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = true' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
|
||||||
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
|
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
|
||||||
if [ "${{ inputs.channel }}" != "stable" ]; then
|
if [ "${{ inputs.channel }}" != "stable" ]; then
|
||||||
jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
|
jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun",
|
||||||
|
"usr/lib/Jan-${{ inputs.channel }}/resources/lib/libvulkan.so": "resources/lib/libvulkan.so"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
|
||||||
mv /tmp/tauri.linux.conf.json ./src-tauri/tauri.linux.conf.json
|
mv /tmp/tauri.linux.conf.json ./src-tauri/tauri.linux.conf.json
|
||||||
fi
|
fi
|
||||||
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
|
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
|
||||||
@ -103,7 +104,7 @@ jobs:
|
|||||||
|
|
||||||
jq --arg version "${{ inputs.new_version }}" '.version = $version' ./src-tauri/plugins/tauri-plugin-hardware/package.json > /tmp/package.json
|
jq --arg version "${{ inputs.new_version }}" '.version = $version' ./src-tauri/plugins/tauri-plugin-hardware/package.json > /tmp/package.json
|
||||||
mv /tmp/package.json ./src-tauri/plugins/tauri-plugin-hardware/package.json
|
mv /tmp/package.json ./src-tauri/plugins/tauri-plugin-hardware/package.json
|
||||||
|
|
||||||
echo "---------./src-tauri/plugins/tauri-plugin-hardware/package.json---------"
|
echo "---------./src-tauri/plugins/tauri-plugin-hardware/package.json---------"
|
||||||
cat ./src-tauri/plugins/tauri-plugin-hardware/package.json
|
cat ./src-tauri/plugins/tauri-plugin-hardware/package.json
|
||||||
|
|
||||||
@ -116,7 +117,7 @@ jobs:
|
|||||||
ctoml ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml package.version "${{ inputs.new_version }}"
|
ctoml ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml package.version "${{ inputs.new_version }}"
|
||||||
echo "---------./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml---------"
|
echo "---------./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml---------"
|
||||||
cat ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml
|
cat ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml
|
||||||
|
|
||||||
ctoml ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml package.version "${{ inputs.new_version }}"
|
ctoml ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml package.version "${{ inputs.new_version }}"
|
||||||
echo "---------./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml---------"
|
echo "---------./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml---------"
|
||||||
cat ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml
|
cat ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml
|
||||||
@ -127,7 +128,7 @@ jobs:
|
|||||||
|
|
||||||
# Temporarily enable devtool on prod build
|
# Temporarily enable devtool on prod build
|
||||||
ctoml ./src-tauri/Cargo.toml dependencies.tauri.features[] "devtools"
|
ctoml ./src-tauri/Cargo.toml dependencies.tauri.features[] "devtools"
|
||||||
cat ./src-tauri/Cargo.toml
|
cat ./src-tauri/Cargo.toml
|
||||||
|
|
||||||
# Change app name for beta and nightly builds
|
# Change app name for beta and nightly builds
|
||||||
if [ "${{ inputs.channel }}" != "stable" ]; then
|
if [ "${{ inputs.channel }}" != "stable" ]; then
|
||||||
@ -138,7 +139,7 @@ jobs:
|
|||||||
.github/scripts/rename-tauri-app.sh ./src-tauri/tauri.conf.json ${{ inputs.channel }}
|
.github/scripts/rename-tauri-app.sh ./src-tauri/tauri.conf.json ${{ inputs.channel }}
|
||||||
|
|
||||||
cat ./src-tauri/tauri.conf.json
|
cat ./src-tauri/tauri.conf.json
|
||||||
|
|
||||||
# Update Cargo.toml
|
# Update Cargo.toml
|
||||||
ctoml ./src-tauri/Cargo.toml package.name "Jan-${{ inputs.channel }}"
|
ctoml ./src-tauri/Cargo.toml package.name "Jan-${{ inputs.channel }}"
|
||||||
ctoml ./src-tauri/Cargo.toml dependencies.tauri.features[] "devtools"
|
ctoml ./src-tauri/Cargo.toml dependencies.tauri.features[] "devtools"
|
||||||
@ -183,3 +184,4 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: jan-linux-amd64-flatpak-${{ inputs.new_version }}-AppImage
|
name: jan-linux-amd64-flatpak-${{ inputs.new_version }}-AppImage
|
||||||
path: ./src-tauri/target/release/bundle/appimage/*.AppImage
|
path: ./src-tauri/target/release/bundle/appimage/*.AppImage
|
||||||
|
|
||||||
|
|||||||
@ -108,9 +108,10 @@ jobs:
|
|||||||
echo "Version: ${{ inputs.new_version }}"
|
echo "Version: ${{ inputs.new_version }}"
|
||||||
# Update tauri.conf.json
|
# Update tauri.conf.json
|
||||||
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = true' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
|
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = true' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
|
||||||
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
|
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
|
||||||
if [ "${{ inputs.channel }}" != "stable" ]; then
|
if [ "${{ inputs.channel }}" != "stable" ]; then
|
||||||
jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
|
jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun",
|
||||||
|
"usr/lib/Jan-${{ inputs.channel }}/resources/lib/libvulkan.so": "resources/lib/libvulkan.so"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
|
||||||
mv /tmp/tauri.linux.conf.json ./src-tauri/tauri.linux.conf.json
|
mv /tmp/tauri.linux.conf.json ./src-tauri/tauri.linux.conf.json
|
||||||
fi
|
fi
|
||||||
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
|
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
|
||||||
@ -120,7 +121,7 @@ jobs:
|
|||||||
|
|
||||||
jq --arg version "${{ inputs.new_version }}" '.version = $version' ./src-tauri/plugins/tauri-plugin-hardware/package.json > /tmp/package.json
|
jq --arg version "${{ inputs.new_version }}" '.version = $version' ./src-tauri/plugins/tauri-plugin-hardware/package.json > /tmp/package.json
|
||||||
mv /tmp/package.json ./src-tauri/plugins/tauri-plugin-hardware/package.json
|
mv /tmp/package.json ./src-tauri/plugins/tauri-plugin-hardware/package.json
|
||||||
|
|
||||||
echo "---------./src-tauri/plugins/tauri-plugin-hardware/package.json---------"
|
echo "---------./src-tauri/plugins/tauri-plugin-hardware/package.json---------"
|
||||||
cat ./src-tauri/plugins/tauri-plugin-hardware/package.json
|
cat ./src-tauri/plugins/tauri-plugin-hardware/package.json
|
||||||
|
|
||||||
@ -133,7 +134,7 @@ jobs:
|
|||||||
ctoml ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml package.version "${{ inputs.new_version }}"
|
ctoml ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml package.version "${{ inputs.new_version }}"
|
||||||
echo "---------./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml---------"
|
echo "---------./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml---------"
|
||||||
cat ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml
|
cat ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml
|
||||||
|
|
||||||
ctoml ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml package.version "${{ inputs.new_version }}"
|
ctoml ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml package.version "${{ inputs.new_version }}"
|
||||||
echo "---------./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml---------"
|
echo "---------./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml---------"
|
||||||
cat ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml
|
cat ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml
|
||||||
@ -155,7 +156,7 @@ jobs:
|
|||||||
.github/scripts/rename-tauri-app.sh ./src-tauri/tauri.conf.json ${{ inputs.channel }}
|
.github/scripts/rename-tauri-app.sh ./src-tauri/tauri.conf.json ${{ inputs.channel }}
|
||||||
|
|
||||||
cat ./src-tauri/tauri.conf.json
|
cat ./src-tauri/tauri.conf.json
|
||||||
|
|
||||||
# Update Cargo.toml
|
# Update Cargo.toml
|
||||||
ctoml ./src-tauri/Cargo.toml package.name "Jan-${{ inputs.channel }}"
|
ctoml ./src-tauri/Cargo.toml package.name "Jan-${{ inputs.channel }}"
|
||||||
ctoml ./src-tauri/Cargo.toml dependencies.tauri.features[] "devtools"
|
ctoml ./src-tauri/Cargo.toml dependencies.tauri.features[] "devtools"
|
||||||
|
|||||||
@ -49,8 +49,6 @@ jobs:
|
|||||||
# Update tauri.conf.json
|
# Update tauri.conf.json
|
||||||
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = false' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
|
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = false' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
|
||||||
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
|
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
|
||||||
jq '.bundle.windows.nsis.template = "tauri.bundle.windows.nsis.template"' ./src-tauri/tauri.windows.conf.json > /tmp/tauri.windows.conf.json
|
|
||||||
mv /tmp/tauri.windows.conf.json ./src-tauri/tauri.windows.conf.json
|
|
||||||
jq '.bundle.windows.signCommand = "echo External build - skipping signature: %1"' ./src-tauri/tauri.windows.conf.json > /tmp/tauri.windows.conf.json
|
jq '.bundle.windows.signCommand = "echo External build - skipping signature: %1"' ./src-tauri/tauri.windows.conf.json > /tmp/tauri.windows.conf.json
|
||||||
mv /tmp/tauri.windows.conf.json ./src-tauri/tauri.windows.conf.json
|
mv /tmp/tauri.windows.conf.json ./src-tauri/tauri.windows.conf.json
|
||||||
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
|
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
|
||||||
@ -82,36 +80,6 @@ jobs:
|
|||||||
echo "---------./src-tauri/Cargo.toml---------"
|
echo "---------./src-tauri/Cargo.toml---------"
|
||||||
cat ./src-tauri/Cargo.toml
|
cat ./src-tauri/Cargo.toml
|
||||||
|
|
||||||
generate_build_version() {
|
|
||||||
### Examble
|
|
||||||
### input 0.5.6 output will be 0.5.6 and 0.5.6.0
|
|
||||||
### input 0.5.6-rc2-beta output will be 0.5.6 and 0.5.6.2
|
|
||||||
### input 0.5.6-1213 output will be 0.5.6 and and 0.5.6.1213
|
|
||||||
local new_version="$1"
|
|
||||||
local base_version
|
|
||||||
local t_value
|
|
||||||
# Check if it has a "-"
|
|
||||||
if [[ "$new_version" == *-* ]]; then
|
|
||||||
base_version="${new_version%%-*}" # part before -
|
|
||||||
suffix="${new_version#*-}" # part after -
|
|
||||||
# Check if it is rcX-beta
|
|
||||||
if [[ "$suffix" =~ ^rc([0-9]+)-beta$ ]]; then
|
|
||||||
t_value="${BASH_REMATCH[1]}"
|
|
||||||
else
|
|
||||||
t_value="$suffix"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
base_version="$new_version"
|
|
||||||
t_value="0"
|
|
||||||
fi
|
|
||||||
# Export two values
|
|
||||||
new_base_version="$base_version"
|
|
||||||
new_build_version="${base_version}.${t_value}"
|
|
||||||
}
|
|
||||||
generate_build_version ${{ inputs.new_version }}
|
|
||||||
sed -i "s/jan_version/$new_base_version/g" ./src-tauri/tauri.bundle.windows.nsis.template
|
|
||||||
sed -i "s/jan_build/$new_build_version/g" ./src-tauri/tauri.bundle.windows.nsis.template
|
|
||||||
|
|
||||||
if [ "${{ inputs.channel }}" != "stable" ]; then
|
if [ "${{ inputs.channel }}" != "stable" ]; then
|
||||||
jq '.plugins.updater.endpoints = ["https://delta.jan.ai/${{ inputs.channel }}/latest.json"]' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
|
jq '.plugins.updater.endpoints = ["https://delta.jan.ai/${{ inputs.channel }}/latest.json"]' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
|
||||||
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
|
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
|
||||||
@ -135,14 +103,7 @@ jobs:
|
|||||||
chmod +x .github/scripts/rename-workspace.sh
|
chmod +x .github/scripts/rename-workspace.sh
|
||||||
.github/scripts/rename-workspace.sh ./package.json ${{ inputs.channel }}
|
.github/scripts/rename-workspace.sh ./package.json ${{ inputs.channel }}
|
||||||
cat ./package.json
|
cat ./package.json
|
||||||
sed -i "s/jan_productname/Jan-${{ inputs.channel }}/g" ./src-tauri/tauri.bundle.windows.nsis.template
|
|
||||||
sed -i "s/jan_mainbinaryname/jan-${{ inputs.channel }}/g" ./src-tauri/tauri.bundle.windows.nsis.template
|
|
||||||
else
|
|
||||||
sed -i "s/jan_productname/Jan/g" ./src-tauri/tauri.bundle.windows.nsis.template
|
|
||||||
sed -i "s/jan_mainbinaryname/jan/g" ./src-tauri/tauri.bundle.windows.nsis.template
|
|
||||||
fi
|
fi
|
||||||
echo "---------nsis.template---------"
|
|
||||||
cat ./src-tauri/tauri.bundle.windows.nsis.template
|
|
||||||
- name: Build app
|
- name: Build app
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@ -54,8 +54,6 @@ on:
|
|||||||
value: ${{ jobs.build-windows-x64.outputs.WIN_SIG }}
|
value: ${{ jobs.build-windows-x64.outputs.WIN_SIG }}
|
||||||
FILE_NAME:
|
FILE_NAME:
|
||||||
value: ${{ jobs.build-windows-x64.outputs.FILE_NAME }}
|
value: ${{ jobs.build-windows-x64.outputs.FILE_NAME }}
|
||||||
MSI_FILE_NAME:
|
|
||||||
value: ${{ jobs.build-windows-x64.outputs.MSI_FILE_NAME }}
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-windows-x64:
|
build-windows-x64:
|
||||||
@ -63,7 +61,6 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
WIN_SIG: ${{ steps.metadata.outputs.WIN_SIG }}
|
WIN_SIG: ${{ steps.metadata.outputs.WIN_SIG }}
|
||||||
FILE_NAME: ${{ steps.metadata.outputs.FILE_NAME }}
|
FILE_NAME: ${{ steps.metadata.outputs.FILE_NAME }}
|
||||||
MSI_FILE_NAME: ${{ steps.metadata.outputs.MSI_FILE_NAME }}
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
@ -98,15 +95,9 @@ jobs:
|
|||||||
# Update tauri.conf.json
|
# Update tauri.conf.json
|
||||||
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = true' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
|
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = true' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
|
||||||
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
|
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
|
||||||
jq '.bundle.windows.nsis.template = "tauri.bundle.windows.nsis.template"' ./src-tauri/tauri.windows.conf.json > /tmp/tauri.windows.conf.json
|
|
||||||
mv /tmp/tauri.windows.conf.json ./src-tauri/tauri.windows.conf.json
|
|
||||||
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
|
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
|
||||||
mv /tmp/package.json web-app/package.json
|
mv /tmp/package.json web-app/package.json
|
||||||
|
|
||||||
# Add sign commands to tauri.windows.conf.json
|
|
||||||
jq '.bundle.windows.signCommand = "powershell -ExecutionPolicy Bypass -File ./sign.ps1 %1"' ./src-tauri/tauri.windows.conf.json > /tmp/tauri.windows.conf.json
|
|
||||||
mv /tmp/tauri.windows.conf.json ./src-tauri/tauri.windows.conf.json
|
|
||||||
|
|
||||||
# Update tauri plugin versions
|
# Update tauri plugin versions
|
||||||
|
|
||||||
jq --arg version "${{ inputs.new_version }}" '.version = $version' ./src-tauri/plugins/tauri-plugin-hardware/package.json > /tmp/package.json
|
jq --arg version "${{ inputs.new_version }}" '.version = $version' ./src-tauri/plugins/tauri-plugin-hardware/package.json > /tmp/package.json
|
||||||
@ -133,35 +124,9 @@ jobs:
|
|||||||
echo "---------./src-tauri/Cargo.toml---------"
|
echo "---------./src-tauri/Cargo.toml---------"
|
||||||
cat ./src-tauri/Cargo.toml
|
cat ./src-tauri/Cargo.toml
|
||||||
|
|
||||||
generate_build_version() {
|
# Add sign commands to tauri.windows.conf.json
|
||||||
### Example
|
jq '.bundle.windows.signCommand = "powershell -ExecutionPolicy Bypass -File ./sign.ps1 %1"' ./src-tauri/tauri.windows.conf.json > /tmp/tauri.windows.conf.json
|
||||||
### input 0.5.6 output will be 0.5.6 and 0.5.6.0
|
mv /tmp/tauri.windows.conf.json ./src-tauri/tauri.windows.conf.json
|
||||||
### input 0.5.6-rc2-beta output will be 0.5.6 and 0.5.6.2
|
|
||||||
### input 0.5.6-1213 output will be 0.5.6 and and 0.5.6.1213
|
|
||||||
local new_version="$1"
|
|
||||||
local base_version
|
|
||||||
local t_value
|
|
||||||
# Check if it has a "-"
|
|
||||||
if [[ "$new_version" == *-* ]]; then
|
|
||||||
base_version="${new_version%%-*}" # part before -
|
|
||||||
suffix="${new_version#*-}" # part after -
|
|
||||||
# Check if it is rcX-beta
|
|
||||||
if [[ "$suffix" =~ ^rc([0-9]+)-beta$ ]]; then
|
|
||||||
t_value="${BASH_REMATCH[1]}"
|
|
||||||
else
|
|
||||||
t_value="$suffix"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
base_version="$new_version"
|
|
||||||
t_value="0"
|
|
||||||
fi
|
|
||||||
# Export two values
|
|
||||||
new_base_version="$base_version"
|
|
||||||
new_build_version="${base_version}.${t_value}"
|
|
||||||
}
|
|
||||||
generate_build_version ${{ inputs.new_version }}
|
|
||||||
sed -i "s/jan_version/$new_base_version/g" ./src-tauri/tauri.bundle.windows.nsis.template
|
|
||||||
sed -i "s/jan_build/$new_build_version/g" ./src-tauri/tauri.bundle.windows.nsis.template
|
|
||||||
|
|
||||||
echo "---------tauri.windows.conf.json---------"
|
echo "---------tauri.windows.conf.json---------"
|
||||||
cat ./src-tauri/tauri.windows.conf.json
|
cat ./src-tauri/tauri.windows.conf.json
|
||||||
@ -195,14 +160,7 @@ jobs:
|
|||||||
chmod +x .github/scripts/rename-workspace.sh
|
chmod +x .github/scripts/rename-workspace.sh
|
||||||
.github/scripts/rename-workspace.sh ./package.json ${{ inputs.channel }}
|
.github/scripts/rename-workspace.sh ./package.json ${{ inputs.channel }}
|
||||||
cat ./package.json
|
cat ./package.json
|
||||||
sed -i "s/jan_productname/Jan-${{ inputs.channel }}/g" ./src-tauri/tauri.bundle.windows.nsis.template
|
|
||||||
sed -i "s/jan_mainbinaryname/jan-${{ inputs.channel }}/g" ./src-tauri/tauri.bundle.windows.nsis.template
|
|
||||||
else
|
|
||||||
sed -i "s/jan_productname/Jan/g" ./src-tauri/tauri.bundle.windows.nsis.template
|
|
||||||
sed -i "s/jan_mainbinaryname/jan/g" ./src-tauri/tauri.bundle.windows.nsis.template
|
|
||||||
fi
|
fi
|
||||||
echo "---------nsis.template---------"
|
|
||||||
cat ./src-tauri/tauri.bundle.windows.nsis.template
|
|
||||||
|
|
||||||
- name: Install AzureSignTool
|
- name: Install AzureSignTool
|
||||||
run: |
|
run: |
|
||||||
@ -231,15 +189,9 @@ jobs:
|
|||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: jan-windows-exe-${{ inputs.new_version }}
|
name: jan-windows-${{ inputs.new_version }}
|
||||||
path: |
|
path: |
|
||||||
./src-tauri/target/release/bundle/nsis/*.exe
|
./src-tauri/target/release/bundle/nsis/*.exe
|
||||||
- name: Upload Artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: jan-windows-msi-${{ inputs.new_version }}
|
|
||||||
path: |
|
|
||||||
./src-tauri/target/release/bundle/msi/*.msi
|
|
||||||
|
|
||||||
## Set output filename for windows
|
## Set output filename for windows
|
||||||
- name: Set output filename for windows
|
- name: Set output filename for windows
|
||||||
@ -249,18 +201,13 @@ jobs:
|
|||||||
if [ "${{ inputs.channel }}" != "stable" ]; then
|
if [ "${{ inputs.channel }}" != "stable" ]; then
|
||||||
FILE_NAME=Jan-${{ inputs.channel }}_${{ inputs.new_version }}_x64-setup.exe
|
FILE_NAME=Jan-${{ inputs.channel }}_${{ inputs.new_version }}_x64-setup.exe
|
||||||
WIN_SIG=$(cat Jan-${{ inputs.channel }}_${{ inputs.new_version }}_x64-setup.exe.sig)
|
WIN_SIG=$(cat Jan-${{ inputs.channel }}_${{ inputs.new_version }}_x64-setup.exe.sig)
|
||||||
|
|
||||||
MSI_FILE="Jan-${{ inputs.channel }}_${{ inputs.new_version }}_x64_en-US.msi"
|
|
||||||
else
|
else
|
||||||
FILE_NAME=Jan_${{ inputs.new_version }}_x64-setup.exe
|
FILE_NAME=Jan_${{ inputs.new_version }}_x64-setup.exe
|
||||||
WIN_SIG=$(cat Jan_${{ inputs.new_version }}_x64-setup.exe.sig)
|
WIN_SIG=$(cat Jan_${{ inputs.new_version }}_x64-setup.exe.sig)
|
||||||
|
|
||||||
MSI_FILE="Jan_${{ inputs.new_version }}_x64_en-US.msi"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "::set-output name=WIN_SIG::$WIN_SIG"
|
echo "::set-output name=WIN_SIG::$WIN_SIG"
|
||||||
echo "::set-output name=FILE_NAME::$FILE_NAME"
|
echo "::set-output name=FILE_NAME::$FILE_NAME"
|
||||||
echo "::set-output name=MSI_FILE_NAME::$MSI_FILE"
|
|
||||||
id: metadata
|
id: metadata
|
||||||
|
|
||||||
## Upload to s3 for nightly and beta
|
## Upload to s3 for nightly and beta
|
||||||
|
|||||||
3
.gitignore
vendored
@ -21,13 +21,11 @@ src-tauri/resources/lib
|
|||||||
src-tauri/icons
|
src-tauri/icons
|
||||||
!src-tauri/icons/icon.png
|
!src-tauri/icons/icon.png
|
||||||
src-tauri/gen/apple
|
src-tauri/gen/apple
|
||||||
src-tauri/gen/android
|
|
||||||
src-tauri/resources/bin
|
src-tauri/resources/bin
|
||||||
|
|
||||||
# Helper tools
|
# Helper tools
|
||||||
.opencode
|
.opencode
|
||||||
OpenCode.md
|
OpenCode.md
|
||||||
Claude.md
|
|
||||||
archive/
|
archive/
|
||||||
.cache/
|
.cache/
|
||||||
|
|
||||||
@ -62,4 +60,3 @@ src-tauri/resources/
|
|||||||
## test
|
## test
|
||||||
test-data
|
test-data
|
||||||
llm-docs
|
llm-docs
|
||||||
.claude/agents
|
|
||||||
|
|||||||
@ -143,7 +143,7 @@ jan/
|
|||||||
|
|
||||||
**Option 1: The Easy Way (Make)**
|
**Option 1: The Easy Way (Make)**
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/janhq/jan
|
git clone https://github.com/menloresearch/jan
|
||||||
cd jan
|
cd jan
|
||||||
make dev
|
make dev
|
||||||
```
|
```
|
||||||
@ -152,8 +152,8 @@ make dev
|
|||||||
|
|
||||||
### Reporting Bugs
|
### Reporting Bugs
|
||||||
|
|
||||||
- **Ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/janhq/jan/issues)
|
- **Ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/menloresearch/jan/issues)
|
||||||
- If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/janhq/jan/issues/new)
|
- If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/menloresearch/jan/issues/new)
|
||||||
- Include your system specs and error logs - it helps a ton
|
- Include your system specs and error logs - it helps a ton
|
||||||
|
|
||||||
### Suggesting Enhancements
|
### Suggesting Enhancements
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
# Stage 1: Build stage with Node.js and Yarn v4
|
# Stage 1: Build stage with Node.js and Yarn v4
|
||||||
FROM node:20-alpine AS builder
|
FROM node:20-alpine AS builder
|
||||||
|
|
||||||
ARG MENLO_PLATFORM_BASE_URL=https://api-dev.menlo.ai/v1
|
ARG JAN_API_BASE=https://api-dev.jan.ai/v1
|
||||||
ENV MENLO_PLATFORM_BASE_URL=$MENLO_PLATFORM_BASE_URL
|
ENV JAN_API_BASE=$JAN_API_BASE
|
||||||
|
|
||||||
# Install build dependencies
|
# Install build dependencies
|
||||||
RUN apk add --no-cache \
|
RUN apk add --no-cache \
|
||||||
|
|||||||
51
Makefile
@ -41,25 +41,9 @@ else
|
|||||||
@echo "Not macOS; skipping Rust target installation."
|
@echo "Not macOS; skipping Rust target installation."
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Install required Rust targets for Android builds
|
|
||||||
install-android-rust-targets:
|
|
||||||
@echo "Checking and installing Android Rust targets..."
|
|
||||||
@rustup target list --installed | grep -q "aarch64-linux-android" || rustup target add aarch64-linux-android
|
|
||||||
@rustup target list --installed | grep -q "armv7-linux-androideabi" || rustup target add armv7-linux-androideabi
|
|
||||||
@rustup target list --installed | grep -q "i686-linux-android" || rustup target add i686-linux-android
|
|
||||||
@rustup target list --installed | grep -q "x86_64-linux-android" || rustup target add x86_64-linux-android
|
|
||||||
@echo "Android Rust targets ready!"
|
|
||||||
|
|
||||||
# Install required Rust targets for iOS builds
|
|
||||||
install-ios-rust-targets:
|
|
||||||
@echo "Checking and installing iOS Rust targets..."
|
|
||||||
@rustup target list --installed | grep -q "aarch64-apple-ios" || rustup target add aarch64-apple-ios
|
|
||||||
@rustup target list --installed | grep -q "aarch64-apple-ios-sim" || rustup target add aarch64-apple-ios-sim
|
|
||||||
@rustup target list --installed | grep -q "x86_64-apple-ios" || rustup target add x86_64-apple-ios
|
|
||||||
@echo "iOS Rust targets ready!"
|
|
||||||
|
|
||||||
dev: install-and-build
|
dev: install-and-build
|
||||||
yarn download:bin
|
yarn download:bin
|
||||||
|
yarn download:lib
|
||||||
yarn dev
|
yarn dev
|
||||||
|
|
||||||
# Web application targets
|
# Web application targets
|
||||||
@ -74,41 +58,12 @@ build-web-app: install-web-app
|
|||||||
yarn build:core
|
yarn build:core
|
||||||
yarn build:web-app
|
yarn build:web-app
|
||||||
|
|
||||||
serve-web-app:
|
serve-web-app:
|
||||||
yarn serve:web-app
|
yarn serve:web-app
|
||||||
|
|
||||||
build-serve-web-app: build-web-app
|
build-serve-web-app: build-web-app
|
||||||
yarn serve:web-app
|
yarn serve:web-app
|
||||||
|
|
||||||
# Mobile
|
|
||||||
dev-android: install-and-build install-android-rust-targets
|
|
||||||
@echo "Setting up Android development environment..."
|
|
||||||
@if [ ! -d "src-tauri/gen/android" ]; then \
|
|
||||||
echo "Android app not initialized. Initializing..."; \
|
|
||||||
yarn tauri android init; \
|
|
||||||
fi
|
|
||||||
@echo "Sourcing Android environment setup..."
|
|
||||||
@bash autoqa/scripts/setup-android-env.sh echo "Android environment ready"
|
|
||||||
@echo "Starting Android development server..."
|
|
||||||
yarn dev:android
|
|
||||||
|
|
||||||
dev-ios: install-and-build install-ios-rust-targets
|
|
||||||
@echo "Setting up iOS development environment..."
|
|
||||||
ifeq ($(shell uname -s),Darwin)
|
|
||||||
@if [ ! -d "src-tauri/gen/ios" ]; then \
|
|
||||||
echo "iOS app not initialized. Initializing..."; \
|
|
||||||
yarn tauri ios init; \
|
|
||||||
fi
|
|
||||||
@echo "Checking iOS development requirements..."
|
|
||||||
@xcrun --version > /dev/null 2>&1 || (echo "❌ Xcode command line tools not found. Install with: xcode-select --install" && exit 1)
|
|
||||||
@xcrun simctl list devices available | grep -q "iPhone\|iPad" || (echo "❌ No iOS simulators found. Install simulators through Xcode." && exit 1)
|
|
||||||
@echo "Starting iOS development server..."
|
|
||||||
yarn dev:ios
|
|
||||||
else
|
|
||||||
@echo "❌ iOS development is only supported on macOS"
|
|
||||||
@exit 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Linting
|
# Linting
|
||||||
lint: install-and-build
|
lint: install-and-build
|
||||||
yarn lint
|
yarn lint
|
||||||
@ -116,7 +71,9 @@ lint: install-and-build
|
|||||||
# Testing
|
# Testing
|
||||||
test: lint
|
test: lint
|
||||||
yarn download:bin
|
yarn download:bin
|
||||||
|
yarn download:lib
|
||||||
ifeq ($(OS),Windows_NT)
|
ifeq ($(OS),Windows_NT)
|
||||||
|
yarn download:windows-installer
|
||||||
endif
|
endif
|
||||||
yarn test
|
yarn test
|
||||||
yarn copy:assets:tauri
|
yarn copy:assets:tauri
|
||||||
|
|||||||
41
README.md
@ -1,24 +1,26 @@
|
|||||||
# Jan - Open-source ChatGPT replacement
|
# Jan - Local AI Assistant
|
||||||
|
|
||||||
<img width="2048" height="280" alt="github jan banner" src="https://github.com/user-attachments/assets/f3f87889-c133-433b-b250-236218150d3f" />
|

|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
||||||
<img alt="GitHub commit activity" src="https://img.shields.io/github/commit-activity/m/janhq/jan"/>
|
<img alt="GitHub commit activity" src="https://img.shields.io/github/commit-activity/m/menloresearch/jan"/>
|
||||||
<img alt="Github Last Commit" src="https://img.shields.io/github/last-commit/janhq/jan"/>
|
<img alt="Github Last Commit" src="https://img.shields.io/github/last-commit/menloresearch/jan"/>
|
||||||
<img alt="Github Contributors" src="https://img.shields.io/github/contributors/janhq/jan"/>
|
<img alt="Github Contributors" src="https://img.shields.io/github/contributors/menloresearch/jan"/>
|
||||||
<img alt="GitHub closed issues" src="https://img.shields.io/github/issues-closed/janhq/jan"/>
|
<img alt="GitHub closed issues" src="https://img.shields.io/github/issues-closed/menloresearch/jan"/>
|
||||||
<img alt="Discord" src="https://img.shields.io/discord/1107178041848909847?label=discord"/>
|
<img alt="Discord" src="https://img.shields.io/discord/1107178041848909847?label=discord"/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://www.jan.ai/docs/desktop">Getting Started</a>
|
<a href="https://jan.ai/docs/quickstart">Getting Started</a>
|
||||||
- <a href="https://discord.gg/Exe46xPMbK">Community</a>
|
- <a href="https://jan.ai/docs">Docs</a>
|
||||||
- <a href="https://jan.ai/changelog">Changelog</a>
|
- <a href="https://jan.ai/changelog">Changelog</a>
|
||||||
- <a href="https://github.com/janhq/jan/issues">Bug reports</a>
|
- <a href="https://github.com/menloresearch/jan/issues">Bug reports</a>
|
||||||
|
- <a href="https://discord.gg/AsJ8krTT3N">Discord</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
Jan is bringing the best of open-source AI in an easy-to-use product. Download and run LLMs with **full control** and **privacy**.
|
Jan is an AI assistant that can run 100% offline on your device. Download and run LLMs with
|
||||||
|
**full control** and **privacy**.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@ -27,36 +29,41 @@ The easiest way to get started is by downloading one of the following versions f
|
|||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><b>Platform</b></td>
|
<td><b>Platform</b></td>
|
||||||
<td><b>Download</b></td>
|
<td><b>Stable</b></td>
|
||||||
|
<td><b>Nightly</b></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><b>Windows</b></td>
|
<td><b>Windows</b></td>
|
||||||
<td><a href='https://app.jan.ai/download/latest/win-x64'>jan.exe</a></td>
|
<td><a href='https://app.jan.ai/download/latest/win-x64'>jan.exe</a></td>
|
||||||
|
<td><a href='https://app.jan.ai/download/nightly/win-x64'>jan.exe</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><b>macOS</b></td>
|
<td><b>macOS</b></td>
|
||||||
<td><a href='https://app.jan.ai/download/latest/mac-universal'>jan.dmg</a></td>
|
<td><a href='https://app.jan.ai/download/latest/mac-universal'>jan.dmg</a></td>
|
||||||
|
<td><a href='https://app.jan.ai/download/nightly/mac-universal'>jan.dmg</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><b>Linux (deb)</b></td>
|
<td><b>Linux (deb)</b></td>
|
||||||
<td><a href='https://app.jan.ai/download/latest/linux-amd64-deb'>jan.deb</a></td>
|
<td><a href='https://app.jan.ai/download/latest/linux-amd64-deb'>jan.deb</a></td>
|
||||||
|
<td><a href='https://app.jan.ai/download/nightly/linux-amd64-deb'>jan.deb</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><b>Linux (AppImage)</b></td>
|
<td><b>Linux (AppImage)</b></td>
|
||||||
<td><a href='https://app.jan.ai/download/latest/linux-amd64-appimage'>jan.AppImage</a></td>
|
<td><a href='https://app.jan.ai/download/latest/linux-amd64-appimage'>jan.AppImage</a></td>
|
||||||
|
<td><a href='https://app.jan.ai/download/nightly/linux-amd64-appimage'>jan.AppImage</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
Download from [jan.ai](https://jan.ai/) or [GitHub Releases](https://github.com/menloresearch/jan/releases).
|
||||||
|
|
||||||
Download from [jan.ai](https://jan.ai/) or [GitHub Releases](https://github.com/janhq/jan/releases).
|
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- **Local AI Models**: Download and run LLMs (Llama, Gemma, Qwen, GPT-oss etc.) from HuggingFace
|
- **Local AI Models**: Download and run LLMs (Llama, Gemma, Qwen, etc.) from HuggingFace
|
||||||
- **Cloud Integration**: Connect to GPT models via OpenAI, Claude models via Anthropic, Mistral, Groq, and others
|
- **Cloud Integration**: Connect to OpenAI, Anthropic, Mistral, Groq, and others
|
||||||
- **Custom Assistants**: Create specialized AI assistants for your tasks
|
- **Custom Assistants**: Create specialized AI assistants for your tasks
|
||||||
- **OpenAI-Compatible API**: Local server at `localhost:1337` for other applications
|
- **OpenAI-Compatible API**: Local server at `localhost:1337` for other applications
|
||||||
- **Model Context Protocol**: MCP integration for agentic capabilities
|
- **Model Context Protocol**: MCP integration for enhanced capabilities
|
||||||
- **Privacy First**: Everything runs locally when you want it to
|
- **Privacy First**: Everything runs locally when you want it to
|
||||||
|
|
||||||
## Build from Source
|
## Build from Source
|
||||||
@ -73,7 +80,7 @@ For those who enjoy the scenic route:
|
|||||||
### Run with Make
|
### Run with Make
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/janhq/jan
|
git clone https://github.com/menloresearch/jan
|
||||||
cd jan
|
cd jan
|
||||||
make dev
|
make dev
|
||||||
```
|
```
|
||||||
@ -128,7 +135,7 @@ Contributions welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for the full spiel
|
|||||||
|
|
||||||
## Contact
|
## Contact
|
||||||
|
|
||||||
- **Bugs**: [GitHub Issues](https://github.com/janhq/jan/issues)
|
- **Bugs**: [GitHub Issues](https://github.com/menloresearch/jan/issues)
|
||||||
- **Business**: hello@jan.ai
|
- **Business**: hello@jan.ai
|
||||||
- **Jobs**: hr@jan.ai
|
- **Jobs**: hr@jan.ai
|
||||||
- **General Discussion**: [Discord](https://discord.gg/FTk2MvZwJH)
|
- **General Discussion**: [Discord](https://discord.gg/FTk2MvZwJH)
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Core dependencies
|
# Core dependencies
|
||||||
cua-computer[all]~=0.3.5
|
cua-computer[all]~=0.3.5
|
||||||
cua-agent[all]~=0.3.0
|
cua-agent[all]~=0.3.0
|
||||||
cua-agent @ git+https://github.com/janhq/cua.git@compute-agent-0.3.0-patch#subdirectory=libs/python/agent
|
cua-agent @ git+https://github.com/menloresearch/cua.git@compute-agent-0.3.0-patch#subdirectory=libs/python/agent
|
||||||
|
|
||||||
# ReportPortal integration
|
# ReportPortal integration
|
||||||
reportportal-client~=5.6.5
|
reportportal-client~=5.6.5
|
||||||
|
|||||||
@ -1,80 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Android Development Environment Setup for Jan
|
|
||||||
|
|
||||||
# Ensure rustup's Rust toolchain is used instead of Homebrew's
|
|
||||||
export PATH="$HOME/.cargo/bin:$PATH"
|
|
||||||
|
|
||||||
# Set JAVA_HOME for Android builds
|
|
||||||
export JAVA_HOME=/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home
|
|
||||||
export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"
|
|
||||||
|
|
||||||
export ANDROID_HOME="$HOME/Library/Android/sdk"
|
|
||||||
export ANDROID_NDK_ROOT="$HOME/Library/Android/sdk/ndk/29.0.14033849"
|
|
||||||
export NDK_HOME="$HOME/Library/Android/sdk/ndk/29.0.14033849"
|
|
||||||
|
|
||||||
# Add Android tools to PATH
|
|
||||||
export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/emulator:$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin
|
|
||||||
|
|
||||||
# Set up CC and CXX for Android compilation
|
|
||||||
export CC_aarch64_linux_android="$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang"
|
|
||||||
export CXX_aarch64_linux_android="$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang++"
|
|
||||||
export AR_aarch64_linux_android="$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar"
|
|
||||||
export RANLIB_aarch64_linux_android="$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ranlib"
|
|
||||||
|
|
||||||
# Additional environment variables for Rust cross-compilation
|
|
||||||
export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang"
|
|
||||||
|
|
||||||
# Only set global CC and AR for Android builds (when IS_ANDROID is set)
|
|
||||||
if [ "$IS_ANDROID" = "true" ]; then
|
|
||||||
export CC="$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang"
|
|
||||||
export AR="$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar"
|
|
||||||
echo "Global CC and AR set for Android build"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Create symlinks for Android tools if they don't exist
|
|
||||||
mkdir -p ~/.local/bin
|
|
||||||
if [ ! -f ~/.local/bin/aarch64-linux-android-ranlib ]; then
|
|
||||||
ln -sf $NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ranlib ~/.local/bin/aarch64-linux-android-ranlib
|
|
||||||
fi
|
|
||||||
if [ ! -f ~/.local/bin/aarch64-linux-android-clang ]; then
|
|
||||||
ln -sf $NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang ~/.local/bin/aarch64-linux-android-clang
|
|
||||||
fi
|
|
||||||
if [ ! -f ~/.local/bin/aarch64-linux-android-clang++ ]; then
|
|
||||||
ln -sf $NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang++ ~/.local/bin/aarch64-linux-android-clang++
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Fix the broken clang symlinks by ensuring base clang is available
|
|
||||||
if [ ! -f ~/.local/bin/clang ]; then
|
|
||||||
ln -sf $NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang ~/.local/bin/clang
|
|
||||||
fi
|
|
||||||
if [ ! -f ~/.local/bin/clang++ ]; then
|
|
||||||
ln -sf $NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ ~/.local/bin/clang++
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Create symlinks for target-specific ar tools
|
|
||||||
if [ ! -f ~/.local/bin/aarch64-linux-android-ar ]; then
|
|
||||||
ln -sf $NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar ~/.local/bin/aarch64-linux-android-ar
|
|
||||||
fi
|
|
||||||
export PATH="$HOME/.local/bin:$PATH"
|
|
||||||
|
|
||||||
echo "Android environment configured:"
|
|
||||||
echo "ANDROID_HOME: $ANDROID_HOME"
|
|
||||||
echo "ANDROID_NDK_ROOT: $ANDROID_NDK_ROOT"
|
|
||||||
echo "PATH includes NDK toolchain: $(echo $PATH | grep -o "ndk.*bin" || echo "NOT FOUND")"
|
|
||||||
|
|
||||||
# Verify required tools
|
|
||||||
echo -e "\nChecking required tools:"
|
|
||||||
which adb && echo "✅ adb found" || echo "❌ adb not found"
|
|
||||||
which emulator && echo "✅ emulator found" || echo "❌ emulator not found"
|
|
||||||
which $CC_aarch64_linux_android && echo "✅ Android clang found" || echo "❌ Android clang not found"
|
|
||||||
|
|
||||||
# Show available AVDs
|
|
||||||
echo -e "\nAvailable Android Virtual Devices:"
|
|
||||||
emulator -list-avds 2>/dev/null || echo "No AVDs found"
|
|
||||||
|
|
||||||
# Execute the provided command
|
|
||||||
if [ "$1" ]; then
|
|
||||||
echo -e "\nExecuting: $@"
|
|
||||||
exec "$@"
|
|
||||||
fi
|
|
||||||
@ -13,7 +13,7 @@ import * as core from '@janhq/core'
|
|||||||
|
|
||||||
## Build an Extension
|
## Build an Extension
|
||||||
|
|
||||||
1. Download an extension template, for example, [https://github.com/janhq/extension-template](https://github.com/janhq/extension-template).
|
1. Download an extension template, for example, [https://github.com/menloresearch/extension-template](https://github.com/menloresearch/extension-template).
|
||||||
|
|
||||||
2. Update the source code:
|
2. Update the source code:
|
||||||
|
|
||||||
|
|||||||
@ -27,13 +27,11 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@npmcli/arborist": "^7.1.0",
|
"@npmcli/arborist": "^7.1.0",
|
||||||
"@types/node": "^22.10.0",
|
"@types/node": "^22.10.0",
|
||||||
"@types/react": "19.1.2",
|
|
||||||
"@vitest/coverage-v8": "^2.1.8",
|
"@vitest/coverage-v8": "^2.1.8",
|
||||||
"@vitest/ui": "^2.1.8",
|
"@vitest/ui": "^2.1.8",
|
||||||
"eslint": "8.57.0",
|
"eslint": "8.57.0",
|
||||||
"happy-dom": "^20.0.0",
|
"happy-dom": "^15.11.6",
|
||||||
"pacote": "^21.0.0",
|
"pacote": "^21.0.0",
|
||||||
"react": "19.0.0",
|
|
||||||
"request": "^2.88.2",
|
"request": "^2.88.2",
|
||||||
"request-progress": "^3.0.0",
|
"request-progress": "^3.0.0",
|
||||||
"rimraf": "^6.0.1",
|
"rimraf": "^6.0.1",
|
||||||
@ -46,8 +44,5 @@
|
|||||||
"rxjs": "^7.8.1",
|
"rxjs": "^7.8.1",
|
||||||
"ulidx": "^2.3.0"
|
"ulidx": "^2.3.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
|
||||||
"react": "19.0.0"
|
|
||||||
},
|
|
||||||
"packageManager": "yarn@4.5.3"
|
"packageManager": "yarn@4.5.3"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,7 +10,7 @@ export default defineConfig([
|
|||||||
sourcemap: true,
|
sourcemap: true,
|
||||||
},
|
},
|
||||||
platform: 'browser',
|
platform: 'browser',
|
||||||
external: ['path', 'react', 'react-dom', 'react/jsx-runtime'],
|
external: ['path'],
|
||||||
define: {
|
define: {
|
||||||
NODE: JSON.stringify(`${pkgJson.name}/${pkgJson.node}`),
|
NODE: JSON.stringify(`${pkgJson.name}/${pkgJson.node}`),
|
||||||
VERSION: JSON.stringify(pkgJson.version),
|
VERSION: JSON.stringify(pkgJson.version),
|
||||||
|
|||||||
@ -11,8 +11,6 @@ export enum ExtensionTypeEnum {
|
|||||||
HuggingFace = 'huggingFace',
|
HuggingFace = 'huggingFace',
|
||||||
Engine = 'engine',
|
Engine = 'engine',
|
||||||
Hardware = 'hardware',
|
Hardware = 'hardware',
|
||||||
RAG = 'rag',
|
|
||||||
VectorDB = 'vectorDB',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ExtensionType {
|
export interface ExtensionType {
|
||||||
|
|||||||
@ -250,4 +250,4 @@ describe('ConversationalExtension', () => {
|
|||||||
|
|
||||||
expect(retrievedAssistant.modelId).toBe('')
|
expect(retrievedAssistant.modelId).toBe('')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -182,7 +182,6 @@ export interface SessionInfo {
|
|||||||
port: number // llama-server output port (corrected from portid)
|
port: number // llama-server output port (corrected from portid)
|
||||||
model_id: string //name of the model
|
model_id: string //name of the model
|
||||||
model_path: string // path of the loaded model
|
model_path: string // path of the loaded model
|
||||||
is_embedding: boolean
|
|
||||||
api_key: string
|
api_key: string
|
||||||
mmproj_path?: string
|
mmproj_path?: string
|
||||||
}
|
}
|
||||||
|
|||||||
@ -131,4 +131,4 @@ describe('LocalOAIEngine', () => {
|
|||||||
expect(engine.loadedModel).toBeUndefined()
|
expect(engine.loadedModel).toBeUndefined()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -23,8 +23,3 @@ export { MCPExtension } from './mcp'
|
|||||||
* Base AI Engines.
|
* Base AI Engines.
|
||||||
*/
|
*/
|
||||||
export * from './engines'
|
export * from './engines'
|
||||||
|
|
||||||
export { RAGExtension, RAG_INTERNAL_SERVER } from './rag'
|
|
||||||
export type { AttachmentInput, IngestAttachmentsResult } from './rag'
|
|
||||||
export { VectorDBExtension } from './vector-db'
|
|
||||||
export type { SearchMode, VectorDBStatus, VectorChunkInput, VectorSearchResult, AttachmentFileInfo, VectorDBFileInput, VectorDBIngestOptions } from './vector-db'
|
|
||||||
|
|||||||
@ -96,4 +96,4 @@ describe('MCPExtension', () => {
|
|||||||
expect(healthy).toBe(true)
|
expect(healthy).toBe(true)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -1,6 +1,5 @@
|
|||||||
import { MCPInterface, MCPTool, MCPToolCallResult, MCPToolComponentProps } from '../../types'
|
import { MCPInterface, MCPTool, MCPToolCallResult } from '../../types'
|
||||||
import { BaseExtension, ExtensionTypeEnum } from '../extension'
|
import { BaseExtension, ExtensionTypeEnum } from '../extension'
|
||||||
import type { ComponentType } from 'react'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MCP (Model Context Protocol) extension for managing tools and server communication.
|
* MCP (Model Context Protocol) extension for managing tools and server communication.
|
||||||
@ -19,16 +18,4 @@ export abstract class MCPExtension extends BaseExtension implements MCPInterface
|
|||||||
abstract getConnectedServers(): Promise<string[]>
|
abstract getConnectedServers(): Promise<string[]>
|
||||||
abstract refreshTools(): Promise<void>
|
abstract refreshTools(): Promise<void>
|
||||||
abstract isHealthy(): Promise<boolean>
|
abstract isHealthy(): Promise<boolean>
|
||||||
|
}
|
||||||
/**
|
|
||||||
* Optional method to provide a custom UI component for tools
|
|
||||||
* @returns A React component or null if no custom component is provided
|
|
||||||
*/
|
|
||||||
getToolComponent?(): ComponentType<MCPToolComponentProps> | null
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Optional method to get the list of tool names that should be disabled by default
|
|
||||||
* @returns Array of tool names that should be disabled by default for new users
|
|
||||||
*/
|
|
||||||
getDefaultDisabledTools?(): Promise<string[]>
|
|
||||||
}
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
import { BaseExtension, ExtensionTypeEnum } from '../extension'
|
|
||||||
import type { MCPTool, MCPToolCallResult } from '../../types'
|
|
||||||
import type { AttachmentFileInfo } from './vector-db'
|
|
||||||
|
|
||||||
export interface AttachmentInput {
|
|
||||||
path: string
|
|
||||||
name?: string
|
|
||||||
type?: string
|
|
||||||
size?: number
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IngestAttachmentsResult {
|
|
||||||
filesProcessed: number
|
|
||||||
chunksInserted: number
|
|
||||||
files: AttachmentFileInfo[]
|
|
||||||
}
|
|
||||||
|
|
||||||
export const RAG_INTERNAL_SERVER = 'rag-internal'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* RAG extension base: exposes RAG tools and orchestration API.
|
|
||||||
*/
|
|
||||||
export abstract class RAGExtension extends BaseExtension {
|
|
||||||
type(): ExtensionTypeEnum | undefined {
|
|
||||||
return ExtensionTypeEnum.RAG
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract getTools(): Promise<MCPTool[]>
|
|
||||||
/**
|
|
||||||
* Lightweight list of tool names for quick routing/lookup.
|
|
||||||
*/
|
|
||||||
abstract getToolNames(): Promise<string[]>
|
|
||||||
abstract callTool(toolName: string, args: Record<string, unknown>): Promise<MCPToolCallResult>
|
|
||||||
|
|
||||||
abstract ingestAttachments(threadId: string, files: AttachmentInput[]): Promise<IngestAttachmentsResult>
|
|
||||||
}
|
|
||||||
@ -1,82 +0,0 @@
|
|||||||
import { BaseExtension, ExtensionTypeEnum } from '../extension'
|
|
||||||
|
|
||||||
export type SearchMode = 'auto' | 'ann' | 'linear'
|
|
||||||
|
|
||||||
export interface VectorDBStatus {
|
|
||||||
ann_available: boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface VectorChunkInput {
|
|
||||||
text: string
|
|
||||||
embedding: number[]
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface VectorSearchResult {
|
|
||||||
id: string
|
|
||||||
text: string
|
|
||||||
score?: number
|
|
||||||
file_id: string
|
|
||||||
chunk_file_order: number
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface AttachmentFileInfo {
|
|
||||||
id: string
|
|
||||||
name?: string
|
|
||||||
path?: string
|
|
||||||
type?: string
|
|
||||||
size?: number
|
|
||||||
chunk_count: number
|
|
||||||
}
|
|
||||||
|
|
||||||
// High-level input types for file ingestion
|
|
||||||
export interface VectorDBFileInput {
|
|
||||||
path: string
|
|
||||||
name?: string
|
|
||||||
type?: string
|
|
||||||
size?: number
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface VectorDBIngestOptions {
|
|
||||||
chunkSize: number
|
|
||||||
chunkOverlap: number
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Vector DB extension base: abstraction over local vector storage and search.
|
|
||||||
*/
|
|
||||||
export abstract class VectorDBExtension extends BaseExtension {
|
|
||||||
type(): ExtensionTypeEnum | undefined {
|
|
||||||
return ExtensionTypeEnum.VectorDB
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract getStatus(): Promise<VectorDBStatus>
|
|
||||||
abstract createCollection(threadId: string, dimension: number): Promise<void>
|
|
||||||
abstract insertChunks(
|
|
||||||
threadId: string,
|
|
||||||
fileId: string,
|
|
||||||
chunks: VectorChunkInput[]
|
|
||||||
): Promise<void>
|
|
||||||
abstract ingestFile(
|
|
||||||
threadId: string,
|
|
||||||
file: VectorDBFileInput,
|
|
||||||
opts: VectorDBIngestOptions
|
|
||||||
): Promise<AttachmentFileInfo>
|
|
||||||
abstract searchCollection(
|
|
||||||
threadId: string,
|
|
||||||
query_embedding: number[],
|
|
||||||
limit: number,
|
|
||||||
threshold: number,
|
|
||||||
mode?: SearchMode,
|
|
||||||
fileIds?: string[]
|
|
||||||
): Promise<VectorSearchResult[]>
|
|
||||||
abstract deleteChunks(threadId: string, ids: string[]): Promise<void>
|
|
||||||
abstract deleteFile(threadId: string, fileId: string): Promise<void>
|
|
||||||
abstract deleteCollection(threadId: string): Promise<void>
|
|
||||||
abstract listAttachments(threadId: string, limit?: number): Promise<AttachmentFileInfo[]>
|
|
||||||
abstract getChunks(
|
|
||||||
threadId: string,
|
|
||||||
fileId: string,
|
|
||||||
startOrder: number,
|
|
||||||
endOrder: number
|
|
||||||
): Promise<VectorSearchResult[]>
|
|
||||||
}
|
|
||||||
@ -131,4 +131,4 @@ describe('ModelManager', () => {
|
|||||||
expect(modelManager.models.get('model-2')).toEqual(model2)
|
expect(modelManager.models.get('model-2')).toEqual(model2)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -16,4 +16,4 @@ if (!window.core) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add any other global mocks needed for core tests
|
// Add any other global mocks needed for core tests
|
||||||
@ -1,2 +1,2 @@
|
|||||||
export * from './mcpEntity'
|
export * from './mcpEntity'
|
||||||
export * from './mcpInterface'
|
export * from './mcpInterface'
|
||||||
@ -21,18 +21,4 @@ export interface MCPServerInfo {
|
|||||||
name: string
|
name: string
|
||||||
connected: boolean
|
connected: boolean
|
||||||
tools?: MCPTool[]
|
tools?: MCPTool[]
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Props for MCP tool UI components
|
|
||||||
*/
|
|
||||||
export interface MCPToolComponentProps {
|
|
||||||
/** List of available MCP tools */
|
|
||||||
tools: MCPTool[]
|
|
||||||
|
|
||||||
/** Function to check if a specific tool is currently enabled */
|
|
||||||
isToolEnabled: (toolName: string) => boolean
|
|
||||||
|
|
||||||
/** Function to toggle a tool's enabled/disabled state */
|
|
||||||
onToolToggle: (toolName: string, enabled: boolean) => void
|
|
||||||
}
|
|
||||||
@ -29,4 +29,4 @@ export interface MCPInterface {
|
|||||||
* Check if MCP service is healthy
|
* Check if MCP service is healthy
|
||||||
*/
|
*/
|
||||||
isHealthy(): Promise<boolean>
|
isHealthy(): Promise<boolean>
|
||||||
}
|
}
|
||||||
@ -12,8 +12,6 @@ export type SettingComponentProps = {
|
|||||||
extensionName?: string
|
extensionName?: string
|
||||||
requireModelReload?: boolean
|
requireModelReload?: boolean
|
||||||
configType?: ConfigType
|
configType?: ConfigType
|
||||||
titleKey?: string
|
|
||||||
descriptionKey?: string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ConfigType = 'runtime' | 'setting'
|
export type ConfigType = 'runtime' | 'setting'
|
||||||
|
|||||||
@ -18,7 +18,7 @@ We try to **keep routes consistent** to maintain SEO.
|
|||||||
|
|
||||||
## How to Contribute
|
## How to Contribute
|
||||||
|
|
||||||
Refer to the [Contributing Guide](https://github.com/janhq/jan/blob/main/CONTRIBUTING.md) for more comprehensive information on how to contribute to the Jan project.
|
Refer to the [Contributing Guide](https://github.com/menloresearch/jan/blob/main/CONTRIBUTING.md) for more comprehensive information on how to contribute to the Jan project.
|
||||||
|
|
||||||
### Pre-requisites and Installation
|
### Pre-requisites and Installation
|
||||||
|
|
||||||
|
|||||||
@ -112,12 +112,6 @@
|
|||||||
/docs/remote-models/openrouter /docs/desktop/remote-models/openrouter 302
|
/docs/remote-models/openrouter /docs/desktop/remote-models/openrouter 302
|
||||||
/docs/server-examples/llmcord /docs/desktop/server-examples/llmcord 302
|
/docs/server-examples/llmcord /docs/desktop/server-examples/llmcord 302
|
||||||
/docs/server-examples/tabby /docs/desktop/server-examples/tabby 302
|
/docs/server-examples/tabby /docs/desktop/server-examples/tabby 302
|
||||||
/docs/built-in/tensorrt-llm /docs/desktop/llama-cpp 302
|
|
||||||
/docs/desktop/docs/desktop/linux /docs/desktop/install/linux 302
|
|
||||||
/windows /docs/desktop/install/windows 302
|
|
||||||
/docs/quickstart /docs/ 302
|
|
||||||
/docs/desktop/mac /docs/desktop/install/mac 302
|
|
||||||
/handbook/open-superintelligence /handbook/why/open-superintelligence 302
|
|
||||||
|
|
||||||
/guides/integrations/continue/ /docs/desktop/server-examples/continue-dev 302
|
/guides/integrations/continue/ /docs/desktop/server-examples/continue-dev 302
|
||||||
/continue-dev /docs/desktop/server-examples/continue-dev 302
|
/continue-dev /docs/desktop/server-examples/continue-dev 302
|
||||||
@ -136,4 +130,4 @@
|
|||||||
/local-server/troubleshooting /docs/desktop/troubleshooting 302
|
/local-server/troubleshooting /docs/desktop/troubleshooting 302
|
||||||
/mcp /docs/desktop/mcp 302
|
/mcp /docs/desktop/mcp 302
|
||||||
/quickstart /docs/desktop/quickstart 302
|
/quickstart /docs/desktop/quickstart 302
|
||||||
/server-examples/continue-dev /docs/desktop/server-examples/continue-dev 302
|
/server-examples/continue-dev /docs/desktop/server-examples/continue-dev 302
|
||||||
@ -6,7 +6,7 @@ const camelCase = (str) => {
|
|||||||
return str.replace(/[-_](\w)/g, (_, c) => c.toUpperCase())
|
return str.replace(/[-_](\w)/g, (_, c) => c.toUpperCase())
|
||||||
}
|
}
|
||||||
|
|
||||||
const categories = ['building-jan', 'research', 'guides']
|
const categories = ['building-jan', 'research']
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {import("plop").NodePlopAPI} plop
|
* @param {import("plop").NodePlopAPI} plop
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 262 KiB |
|
Before Width: | Height: | Size: 325 KiB |
|
Before Width: | Height: | Size: 355 KiB |
|
Before Width: | Height: | Size: 328 KiB |
|
Before Width: | Height: | Size: 402 KiB |
|
Before Width: | Height: | Size: 320 KiB |
|
Before Width: | Height: | Size: 395 KiB |
@ -1581,7 +1581,7 @@
|
|||||||
},
|
},
|
||||||
"cover": {
|
"cover": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"example": "https://raw.githubusercontent.com/janhq/jan/main/models/trinity-v1.2-7b/cover.png"
|
"example": "https://raw.githubusercontent.com/menloresearch/jan/main/models/trinity-v1.2-7b/cover.png"
|
||||||
},
|
},
|
||||||
"engine": {
|
"engine": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
|||||||
125
docs/public/sitemap-0.xml
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
|
||||||
|
<url><loc>https://jan.ai</loc><lastmod>2025-09-24T03:40:05.491Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/api-reference</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/api-reference/api-reference</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/api-reference/architecture</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/api-reference/configuration</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/api-reference/development</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/api-reference/installation</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/blog</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2023-12-21-faster-inference-across-platform</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-01-16-settings-options-right-panel</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-01-29-local-api-server</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-02-05-jan-data-folder</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-02-10-jan-is-more-stable</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-02-26-home-servers-with-helm</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-03-06-ui-revamp-settings</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-03-11-import-models</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-03-19-nitro-tensorrt-llm-extension</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-04-02-groq-api-integration</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-04-15-new-mistral-extension</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-04-25-llama3-command-r-hugginface</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-05-20-llamacpp-upgrade-new-remote-models</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-05-28-cohere-aya-23-8b-35b-phi-3-medium</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-06-21-nvidia-nim-support</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-07-15-claude-3-5-support</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-09-01-llama3-1-gemma2-support</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-09-17-improved-cpu-performance</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-10-24-jan-stable</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-11-22-jan-bugs</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-11.14-jan-supports-qwen-coder</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-12-03-jan-is-faster</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-12-05-jan-hot-fix-mac</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2024-12-30-jan-new-privacy</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2025-01-06-key-issues-resolved</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2025-01-23-deepseek-r1-jan</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2025-02-18-advanced-llama.cpp-settings</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2025-03-14-jan-security-patch</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2025-05-14-jan-qwen3-patch</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2025-06-19-jan-ui-revamp</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2025-06-26-jan-nano-mcp</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2025-07-17-responsive-ui</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2025-07-31-llamacpp-tutorials</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2025-08-07-gpt-oss</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2025-08-14-general-improvs</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2025-08-28-image-support</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/changelog/2025-09-18-auto-optimize-vision-imports</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/api-server</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/assistants</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/data-folder</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/install/linux</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/install/mac</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/install/windows</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/jan-models/jan-nano-128</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/jan-models/jan-nano-32</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/jan-models/jan-v1</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/jan-models/lucy</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/llama-cpp</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/llama-cpp-server</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/manage-models</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/mcp</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/mcp-examples/browser/browserbase</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/mcp-examples/data-analysis/e2b</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/mcp-examples/data-analysis/jupyter</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/mcp-examples/deepresearch/octagon</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/mcp-examples/design/canva</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/mcp-examples/productivity/linear</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/mcp-examples/productivity/todoist</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/mcp-examples/search/exa</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/mcp-examples/search/serper</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/model-parameters</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/privacy</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/privacy-policy</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/quickstart</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/remote-models/anthropic</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/remote-models/cohere</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/remote-models/google</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/remote-models/groq</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/remote-models/huggingface</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/remote-models/mistralai</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/remote-models/openai</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/remote-models/openrouter</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/server-examples/continue-dev</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/server-examples/llmcord</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/server-examples/n8n</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/server-examples/tabby</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/server-settings</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/server-troubleshooting</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/settings</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/desktop/troubleshooting</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/server</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/server/api-reference</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/server/api-reference-administration</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/server/api-reference-authentication</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/server/api-reference-chat</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/server/api-reference-chat-conversations</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/server/api-reference-conversations</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/server/api-reference-jan-responses</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/server/api-reference-jan-server</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/server/architecture</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/server/configuration</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/server/development</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/server/installation</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/docs/server/overview</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/download</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/handbook</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/handbook/betting-on-open-source</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/handbook/open-superintelligence</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/post/benchmarking-nvidia-tensorrt-llm</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/post/bitdefender</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/post/data-is-moat</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/post/deepresearch</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/post/deepseek-r1-locally</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/post/jan-v1-for-research</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/post/offline-chatgpt-alternative</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/post/qwen3-settings</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/post/rag-is-not-enough</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/post/run-ai-models-locally</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/post/run-gpt-oss-locally</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/privacy</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
<url><loc>https://jan.ai/support</loc><lastmod>2025-09-24T03:40:05.492Z</lastmod><changefreq>daily</changefreq><priority>1</priority></url>
|
||||||
|
</urlset>
|
||||||
@ -27,7 +27,7 @@ export const APIReference = () => {
|
|||||||
<ApiReferenceReact
|
<ApiReferenceReact
|
||||||
configuration={{
|
configuration={{
|
||||||
spec: {
|
spec: {
|
||||||
url: 'https://raw.githubusercontent.com/janhq/docs/main/public/openapi/jan.json',
|
url: 'https://raw.githubusercontent.com/menloresearch/docs/main/public/openapi/jan.json',
|
||||||
},
|
},
|
||||||
theme: 'alternate',
|
theme: 'alternate',
|
||||||
hideModels: true,
|
hideModels: true,
|
||||||
|
|||||||
@ -19,10 +19,6 @@ const Blog = () => {
|
|||||||
name: 'Research',
|
name: 'Research',
|
||||||
id: 'research',
|
id: 'research',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: 'Guides',
|
|
||||||
id: 'guides',
|
|
||||||
},
|
|
||||||
]
|
]
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@ -57,7 +57,7 @@ const Changelog = () => {
|
|||||||
<p className="text-base mt-2 leading-relaxed">
|
<p className="text-base mt-2 leading-relaxed">
|
||||||
Latest release updates from the Jan team. Check out our
|
Latest release updates from the Jan team. Check out our
|
||||||
<a
|
<a
|
||||||
href="https://github.com/orgs/janhq/projects/30"
|
href="https://github.com/orgs/menloresearch/projects/30"
|
||||||
className="text-blue-600 dark:text-blue-400 cursor-pointer"
|
className="text-blue-600 dark:text-blue-400 cursor-pointer"
|
||||||
>
|
>
|
||||||
Roadmap
|
Roadmap
|
||||||
@ -150,7 +150,7 @@ const Changelog = () => {
|
|||||||
|
|
||||||
<div className="text-center">
|
<div className="text-center">
|
||||||
<Link
|
<Link
|
||||||
href="https://github.com/janhq/jan/releases"
|
href="https://github.com/menloresearch/jan/releases"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
className="dark:nx-bg-neutral-900 dark:text-white bg-black text-white hover:text-white justify-center dark:border dark:border-neutral-800 flex-shrink-0 px-4 py-3 rounded-xl inline-flex items-center"
|
className="dark:nx-bg-neutral-900 dark:text-white bg-black text-white hover:text-white justify-center dark:border dark:border-neutral-800 flex-shrink-0 px-4 py-3 rounded-xl inline-flex items-center"
|
||||||
>
|
>
|
||||||
|
|||||||
@ -72,7 +72,7 @@ export default function CardDownload({ lastRelease }: Props) {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
...system,
|
...system,
|
||||||
href: `https://github.com/janhq/jan/releases/download/${lastRelease.tag_name}/${downloadUrl}`,
|
href: `https://github.com/menloresearch/jan/releases/download/${lastRelease.tag_name}/${downloadUrl}`,
|
||||||
size: asset ? formatFileSize(asset.size) : undefined,
|
size: asset ? formatFileSize(asset.size) : undefined,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -139,7 +139,7 @@ const DropdownDownload = ({ lastRelease }: Props) => {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
...system,
|
...system,
|
||||||
href: `https://github.com/janhq/jan/releases/download/${lastRelease.tag_name}/${downloadUrl}`,
|
href: `https://github.com/menloresearch/jan/releases/download/${lastRelease.tag_name}/${downloadUrl}`,
|
||||||
size: asset ? formatFileSize(asset.size) : undefined,
|
size: asset ? formatFileSize(asset.size) : undefined,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -16,10 +16,7 @@ const FOOTER_MENUS: FooterMenu[] = [
|
|||||||
{
|
{
|
||||||
title: 'Company',
|
title: 'Company',
|
||||||
links: [
|
links: [
|
||||||
{
|
{ name: 'Vision', href: '/', comingSoon: true },
|
||||||
name: 'Open Superintelligence',
|
|
||||||
href: '/handbook/why/open-superintelligence',
|
|
||||||
},
|
|
||||||
{ name: 'Handbook', href: '/handbook' },
|
{ name: 'Handbook', href: '/handbook' },
|
||||||
{ name: 'Community', href: 'https://discord.com/invite/FTk2MvZwJH' },
|
{ name: 'Community', href: 'https://discord.com/invite/FTk2MvZwJH' },
|
||||||
{ name: 'Careers', href: 'https://menlo.bamboohr.com/careers' },
|
{ name: 'Careers', href: 'https://menlo.bamboohr.com/careers' },
|
||||||
|
|||||||
@ -23,7 +23,7 @@ const BuiltWithLove = () => {
|
|||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col lg:flex-row gap-8 mt-8 items-center justify-center">
|
<div className="flex flex-col lg:flex-row gap-8 mt-8 items-center justify-center">
|
||||||
<a
|
<a
|
||||||
href="https://github.com/janhq/jan"
|
href="https://github.com/menloresearch/jan"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
className="dark:bg-white bg-black inline-flex w-56 px-4 py-3 rounded-xl cursor-pointer justify-center items-start space-x-4 "
|
className="dark:bg-white bg-black inline-flex w-56 px-4 py-3 rounded-xl cursor-pointer justify-center items-start space-x-4 "
|
||||||
>
|
>
|
||||||
|
|||||||
@ -44,7 +44,7 @@ const Hero = () => {
|
|||||||
<div className="mt-10 text-center">
|
<div className="mt-10 text-center">
|
||||||
<div>
|
<div>
|
||||||
<Link
|
<Link
|
||||||
href="https://github.com/janhq/jan/releases"
|
href="https://github.com/menloresearch/jan/releases"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
className="hidden lg:inline-block"
|
className="hidden lg:inline-block"
|
||||||
>
|
>
|
||||||
|
|||||||
@ -95,7 +95,7 @@ const Home = () => {
|
|||||||
<div className="container mx-auto relative z-10">
|
<div className="container mx-auto relative z-10">
|
||||||
<div className="flex justify-center items-center mt-14 lg:mt-20 px-4">
|
<div className="flex justify-center items-center mt-14 lg:mt-20 px-4">
|
||||||
<a
|
<a
|
||||||
href={`https://github.com/janhq/jan/releases/tag/${lastVersion}`}
|
href={`https://github.com/menloresearch/jan/releases/tag/${lastVersion}`}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="bg-black/40 px-3 lg:px-4 rounded-full h-10 inline-flex items-center max-w-full animate-fade-in delay-100"
|
className="bg-black/40 px-3 lg:px-4 rounded-full h-10 inline-flex items-center max-w-full animate-fade-in delay-100"
|
||||||
@ -270,7 +270,7 @@ const Home = () => {
|
|||||||
data-delay="600"
|
data-delay="600"
|
||||||
>
|
>
|
||||||
<a
|
<a
|
||||||
href="https://github.com/janhq/jan"
|
href="https://github.com/menloresearch/jan"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
>
|
>
|
||||||
@ -387,7 +387,7 @@ const Home = () => {
|
|||||||
</div>
|
</div>
|
||||||
<a
|
<a
|
||||||
className="hidden md:block"
|
className="hidden md:block"
|
||||||
href="https://github.com/janhq/jan"
|
href="https://github.com/menloresearch/jan"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
>
|
>
|
||||||
@ -413,7 +413,7 @@ const Home = () => {
|
|||||||
</p>
|
</p>
|
||||||
<a
|
<a
|
||||||
className="md:hidden mt-4 block w-full"
|
className="md:hidden mt-4 block w-full"
|
||||||
href="https://github.com/janhq/jan"
|
href="https://github.com/menloresearch/jan"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
>
|
>
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import { useRouter } from 'next/router'
|
|||||||
import { cn } from '@/lib/utils'
|
import { cn } from '@/lib/utils'
|
||||||
import { FaDiscord, FaGithub } from 'react-icons/fa'
|
import { FaDiscord, FaGithub } from 'react-icons/fa'
|
||||||
import { FiDownload } from 'react-icons/fi'
|
import { FiDownload } from 'react-icons/fi'
|
||||||
import { FaXTwitter, FaLinkedinIn } from 'react-icons/fa6'
|
import { FaXTwitter } from 'react-icons/fa6'
|
||||||
import { Button } from './ui/button'
|
import { Button } from './ui/button'
|
||||||
import LogoJanSVG from '@/assets/icons/logo-jan.svg'
|
import LogoJanSVG from '@/assets/icons/logo-jan.svg'
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ const Navbar = ({ noScroll }: { noScroll?: boolean }) => {
|
|||||||
})}
|
})}
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a
|
||||||
href="https://github.com/janhq/jan/releases/latest"
|
href="https://github.com/menloresearch/jan/releases/latest"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
>
|
>
|
||||||
@ -113,50 +113,13 @@ const Navbar = ({ noScroll }: { noScroll?: boolean }) => {
|
|||||||
</Button>
|
</Button>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li>
|
|
||||||
<div className={cn('flex gap-4', !isLanding && '!text-black')}>
|
|
||||||
<a
|
|
||||||
href="https://discord.com/invite/FTk2MvZwJH"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
className="rounded-lg flex items-center justify-center"
|
|
||||||
>
|
|
||||||
<FaDiscord className="size-5" />
|
|
||||||
</a>
|
|
||||||
<a
|
|
||||||
href="https://twitter.com/jandotai"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
className="rounded-lg flex items-center justify-center"
|
|
||||||
>
|
|
||||||
<FaXTwitter className="size-5" />
|
|
||||||
</a>
|
|
||||||
<a
|
|
||||||
href="https://linkedin.com/company/opensuperintelligence"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
className="rounded-lg flex items-center justify-center"
|
|
||||||
>
|
|
||||||
<FaLinkedinIn className="size-5" />
|
|
||||||
</a>
|
|
||||||
<a
|
|
||||||
href="https://github.com/janhq/jan"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
className="rounded-lg flex items-center justify-center"
|
|
||||||
>
|
|
||||||
<FaGithub className="size-5" />
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
{/* Mobile Download Button and Hamburger */}
|
{/* Mobile Download Button and Hamburger */}
|
||||||
<div className="lg:hidden flex items-center gap-3">
|
<div className="lg:hidden flex items-center gap-3">
|
||||||
<a
|
<a
|
||||||
href="https://github.com/janhq/jan/releases/latest"
|
href="https://github.com/menloresearch/jan/releases/latest"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
>
|
>
|
||||||
@ -270,15 +233,7 @@ const Navbar = ({ noScroll }: { noScroll?: boolean }) => {
|
|||||||
<FaXTwitter className="size-5" />
|
<FaXTwitter className="size-5" />
|
||||||
</a>
|
</a>
|
||||||
<a
|
<a
|
||||||
href="https://linkedin.com/company/opensuperintelligence"
|
href="https://github.com/menloresearch/jan"
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
className="text-black rounded-lg flex items-center justify-center"
|
|
||||||
>
|
|
||||||
<FaLinkedinIn className="size-5" />
|
|
||||||
</a>
|
|
||||||
<a
|
|
||||||
href="https://github.com/janhq/jan"
|
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="text-black rounded-lg flex items-center justify-center"
|
className="text-black rounded-lg flex items-center justify-center"
|
||||||
@ -296,7 +251,7 @@ const Navbar = ({ noScroll }: { noScroll?: boolean }) => {
|
|||||||
asChild
|
asChild
|
||||||
>
|
>
|
||||||
<a
|
<a
|
||||||
href="https://github.com/janhq/jan/releases/latest"
|
href="https://github.com/menloresearch/jan/releases/latest"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
>
|
>
|
||||||
|
|||||||
@ -1,283 +0,0 @@
|
|||||||
import React, { useState, useEffect, useCallback } from 'react'
|
|
||||||
import { AlertCircle, CheckCircle, Clock, RefreshCw } from 'lucide-react'
|
|
||||||
|
|
||||||
interface StatusData {
|
|
||||||
status:
|
|
||||||
| 'operational'
|
|
||||||
| 'degraded'
|
|
||||||
| 'partial_outage'
|
|
||||||
| 'major_outage'
|
|
||||||
| 'under_maintenance'
|
|
||||||
| 'unknown'
|
|
||||||
lastUpdated: string
|
|
||||||
incidents: Array<{
|
|
||||||
name: string
|
|
||||||
status: string
|
|
||||||
impact: string
|
|
||||||
}>
|
|
||||||
}
|
|
||||||
|
|
||||||
const StatusIcon = ({ status }: { status: string }) => {
|
|
||||||
switch (status) {
|
|
||||||
case 'operational':
|
|
||||||
return <CheckCircle className="w-5 h-5 text-green-500" />
|
|
||||||
case 'degraded':
|
|
||||||
case 'partial_outage':
|
|
||||||
return <AlertCircle className="w-5 h-5 text-yellow-500" />
|
|
||||||
case 'major_outage':
|
|
||||||
return <AlertCircle className="w-5 h-5 text-red-500" />
|
|
||||||
case 'under_maintenance':
|
|
||||||
return <Clock className="w-5 h-5 text-blue-500" />
|
|
||||||
default:
|
|
||||||
return <AlertCircle className="w-5 h-5 text-gray-500" />
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const getStatusColor = (status: string) => {
|
|
||||||
switch (status) {
|
|
||||||
case 'operational':
|
|
||||||
return 'bg-green-100 text-green-800 border-green-200 dark:bg-green-900/20 dark:text-green-300 dark:border-green-800'
|
|
||||||
case 'degraded':
|
|
||||||
case 'partial_outage':
|
|
||||||
return 'bg-yellow-100 text-yellow-800 border-yellow-200 dark:bg-yellow-900/20 dark:text-yellow-300 dark:border-yellow-800'
|
|
||||||
case 'major_outage':
|
|
||||||
return 'bg-red-100 text-red-800 border-red-200 dark:bg-red-900/20 dark:text-red-300 dark:border-red-800'
|
|
||||||
case 'under_maintenance':
|
|
||||||
return 'bg-blue-100 text-blue-800 border-blue-200 dark:bg-blue-900/20 dark:text-blue-300 dark:border-blue-800'
|
|
||||||
default:
|
|
||||||
return 'bg-gray-100 text-gray-800 border-gray-200 dark:bg-gray-900/20 dark:text-gray-300 dark:border-gray-800'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const getStatusText = (status: string) => {
|
|
||||||
switch (status) {
|
|
||||||
case 'operational':
|
|
||||||
return 'All Systems Operational'
|
|
||||||
case 'degraded':
|
|
||||||
return 'Degraded Performance'
|
|
||||||
case 'partial_outage':
|
|
||||||
return 'Partial Service Outage'
|
|
||||||
case 'major_outage':
|
|
||||||
return 'Major Service Outage'
|
|
||||||
case 'under_maintenance':
|
|
||||||
return 'Under Maintenance'
|
|
||||||
default:
|
|
||||||
return 'Status Unknown'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const OpenAIStatusChecker: React.FC = () => {
|
|
||||||
const [statusData, setStatusData] = useState<StatusData | null>(null)
|
|
||||||
const [loading, setLoading] = useState(true)
|
|
||||||
const [error, setError] = useState<string | null>(null)
|
|
||||||
const [lastRefresh, setLastRefresh] = useState<Date>(new Date())
|
|
||||||
|
|
||||||
const fetchStatus = useCallback(async () => {
|
|
||||||
setLoading(true)
|
|
||||||
setError(null)
|
|
||||||
|
|
||||||
try {
|
|
||||||
console.log('Fetching real OpenAI status...')
|
|
||||||
|
|
||||||
// Use CORS proxy to fetch real OpenAI status
|
|
||||||
const proxyUrl = 'https://api.allorigins.win/get?url='
|
|
||||||
const targetUrl = 'https://status.openai.com/api/v2/status.json'
|
|
||||||
|
|
||||||
const response = await fetch(proxyUrl + encodeURIComponent(targetUrl))
|
|
||||||
|
|
||||||
if (!response.ok) {
|
|
||||||
throw new Error(`Proxy returned ${response.status}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
const proxyData = await response.json()
|
|
||||||
const openaiData = JSON.parse(proxyData.contents)
|
|
||||||
|
|
||||||
console.log('Real OpenAI data received:', openaiData)
|
|
||||||
|
|
||||||
// Transform real OpenAI data to our format
|
|
||||||
const transformedData: StatusData = {
|
|
||||||
status: mapOpenAIStatusClient(
|
|
||||||
openaiData.status?.indicator || 'operational'
|
|
||||||
),
|
|
||||||
lastUpdated: openaiData.page?.updated_at || new Date().toISOString(),
|
|
||||||
incidents: (openaiData.incidents || []).slice(0, 3),
|
|
||||||
}
|
|
||||||
|
|
||||||
setStatusData(transformedData)
|
|
||||||
setLastRefresh(new Date())
|
|
||||||
console.log('✅ Real OpenAI status loaded successfully!')
|
|
||||||
} catch (err) {
|
|
||||||
console.error('Failed to fetch real status:', err)
|
|
||||||
|
|
||||||
// Fallback: try alternative proxy
|
|
||||||
try {
|
|
||||||
console.log('Trying alternative proxy...')
|
|
||||||
const altResponse = await fetch(
|
|
||||||
`https://cors-anywhere.herokuapp.com/https://status.openai.com/api/v2/summary.json`
|
|
||||||
)
|
|
||||||
|
|
||||||
if (altResponse.ok) {
|
|
||||||
const altData = await altResponse.json()
|
|
||||||
setStatusData({
|
|
||||||
status: mapOpenAIStatusClient(
|
|
||||||
altData.status?.indicator || 'operational'
|
|
||||||
),
|
|
||||||
lastUpdated: new Date().toISOString(),
|
|
||||||
incidents: [],
|
|
||||||
})
|
|
||||||
setLastRefresh(new Date())
|
|
||||||
console.log('✅ Alternative proxy worked!')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} catch (altErr) {
|
|
||||||
console.log('Alternative proxy also failed')
|
|
||||||
}
|
|
||||||
|
|
||||||
// Final fallback
|
|
||||||
setError('Unable to fetch real-time status')
|
|
||||||
setStatusData({
|
|
||||||
status: 'operational' as const,
|
|
||||||
lastUpdated: new Date().toISOString(),
|
|
||||||
incidents: [],
|
|
||||||
})
|
|
||||||
setLastRefresh(new Date())
|
|
||||||
console.log('Using fallback status')
|
|
||||||
} finally {
|
|
||||||
setLoading(false)
|
|
||||||
}
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
// Client-side status mapping function
|
|
||||||
const mapOpenAIStatusClient = (indicator: string): StatusData['status'] => {
|
|
||||||
switch (indicator.toLowerCase()) {
|
|
||||||
case 'none':
|
|
||||||
case 'operational':
|
|
||||||
return 'operational'
|
|
||||||
case 'minor':
|
|
||||||
return 'degraded'
|
|
||||||
case 'major':
|
|
||||||
return 'partial_outage'
|
|
||||||
case 'critical':
|
|
||||||
return 'major_outage'
|
|
||||||
case 'maintenance':
|
|
||||||
return 'under_maintenance'
|
|
||||||
default:
|
|
||||||
return 'operational' as const // Default to operational
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
fetchStatus()
|
|
||||||
// Refresh every 2 minutes for more real-time updates
|
|
||||||
const interval = setInterval(fetchStatus, 2 * 60 * 1000)
|
|
||||||
return () => clearInterval(interval)
|
|
||||||
}, [fetchStatus])
|
|
||||||
|
|
||||||
const handleRefresh = () => {
|
|
||||||
fetchStatus()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (loading && !statusData) {
|
|
||||||
return (
|
|
||||||
<div className="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6 border border-gray-200 dark:border-gray-700">
|
|
||||||
<div className="flex items-center justify-center space-x-3">
|
|
||||||
<RefreshCw className="w-6 h-6 text-blue-500 animate-spin" />
|
|
||||||
<span className="text-lg font-medium text-gray-700 dark:text-gray-300">
|
|
||||||
Checking OpenAI Status...
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (error) {
|
|
||||||
return (
|
|
||||||
<div className="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6 border border-red-200 dark:border-red-800">
|
|
||||||
<div className="flex items-center justify-between">
|
|
||||||
<div className="flex items-center space-x-3">
|
|
||||||
<AlertCircle className="w-6 h-6 text-red-500" />
|
|
||||||
<div>
|
|
||||||
<h3 className="text-lg font-semibold text-red-800 dark:text-red-300">
|
|
||||||
Unable to Check Status
|
|
||||||
</h3>
|
|
||||||
<p className="text-red-600 dark:text-red-400">{error}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<button
|
|
||||||
onClick={handleRefresh}
|
|
||||||
className="px-4 py-2 bg-red-100 hover:bg-red-200 dark:bg-red-900/20 dark:hover:bg-red-900/40 text-red-700 dark:text-red-300 rounded-lg font-medium transition-colors"
|
|
||||||
>
|
|
||||||
Retry
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6 border border-gray-200 dark:border-gray-700 my-6">
|
|
||||||
<div className="flex items-center justify-between mb-4">
|
|
||||||
<div className="flex items-center space-x-3">
|
|
||||||
<StatusIcon status={statusData?.status || 'unknown'} />
|
|
||||||
<div>
|
|
||||||
<h3 className="text-xl font-bold text-gray-900 dark:text-gray-100">
|
|
||||||
OpenAI Services
|
|
||||||
</h3>
|
|
||||||
<p className="text-sm text-gray-600 dark:text-gray-400">
|
|
||||||
Last updated: {new Date(lastRefresh).toLocaleTimeString()}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<button
|
|
||||||
onClick={handleRefresh}
|
|
||||||
disabled={loading}
|
|
||||||
className="p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors disabled:opacity-50"
|
|
||||||
>
|
|
||||||
<RefreshCw
|
|
||||||
className={`w-5 h-5 text-gray-600 dark:text-gray-400 ${loading ? 'animate-spin' : ''}`}
|
|
||||||
/>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
className={`inline-flex items-center px-4 py-2 rounded-full text-sm font-semibold border ${getStatusColor(statusData?.status || 'unknown')}`}
|
|
||||||
>
|
|
||||||
{getStatusText(statusData?.status || 'unknown')}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="mt-4 p-4 bg-gray-50 dark:bg-gray-700 rounded-lg">
|
|
||||||
<h4 className="font-semibold text-gray-900 dark:text-gray-100 mb-2">
|
|
||||||
Quick Status Check
|
|
||||||
</h4>
|
|
||||||
<div className="grid grid-cols-1 sm:grid-cols-3 gap-3 text-sm">
|
|
||||||
<div className="flex items-center justify-between">
|
|
||||||
<span className="text-gray-600 dark:text-gray-400">ChatGPT</span>
|
|
||||||
<StatusIcon status={statusData?.status || 'unknown'} />
|
|
||||||
</div>
|
|
||||||
<div className="flex items-center justify-between">
|
|
||||||
<span className="text-gray-600 dark:text-gray-400">API</span>
|
|
||||||
<StatusIcon status={statusData?.status || 'unknown'} />
|
|
||||||
</div>
|
|
||||||
<div className="flex items-center justify-between">
|
|
||||||
<span className="text-gray-600 dark:text-gray-400">Playground</span>
|
|
||||||
<StatusIcon status={statusData?.status || 'unknown'} />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="mt-4 text-xs text-gray-500 dark:text-gray-400 text-center">
|
|
||||||
{error
|
|
||||||
? 'Using fallback status • '
|
|
||||||
: '🟢 Real-time data from OpenAI • '}
|
|
||||||
Updated: {new Date(lastRefresh).toLocaleTimeString()}
|
|
||||||
<br />
|
|
||||||
<a
|
|
||||||
href="/post/is-chatgpt-down-use-jan#-is-chatgpt-down"
|
|
||||||
className="text-blue-500 hover:text-blue-600 dark:text-blue-400 dark:hover:text-blue-300 underline"
|
|
||||||
>
|
|
||||||
View detailed status guide
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
@ -120,7 +120,7 @@ export function DropdownButton({
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
...option,
|
...option,
|
||||||
href: `https://github.com/janhq/jan/releases/download/${lastRelease.tag_name}/${fileName}`,
|
href: `https://github.com/menloresearch/jan/releases/download/${lastRelease.tag_name}/${fileName}`,
|
||||||
size: asset ? formatFileSize(asset.size) : 'N/A',
|
size: asset ? formatFileSize(asset.size) : 'N/A',
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -18,7 +18,7 @@ description: Development setup, workflow, and contribution guidelines for Jan Se
|
|||||||
|
|
||||||
1. **Clone Repository**
|
1. **Clone Repository**
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/janhq/jan-server
|
git clone https://github.com/menloresearch/jan-server
|
||||||
cd jan-server
|
cd jan-server
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@ title: Installation
|
|||||||
description: Install and deploy Jan Server on Kubernetes using minikube and Helm.
|
description: Install and deploy Jan Server on Kubernetes using minikube and Helm.
|
||||||
---
|
---
|
||||||
|
|
||||||
# Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
Jan Server requires the following tools installed on your system:
|
Jan Server requires the following tools installed on your system:
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ Jan Server currently supports minikube for local development. Production Kuberne
|
|||||||
|
|
||||||
1. **Clone the repository**
|
1. **Clone the repository**
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/janhq/jan-server
|
git clone https://github.com/menloresearch/jan-server
|
||||||
cd jan-server
|
cd jan-server
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@ -24,4 +24,4 @@ Fixes 💫
|
|||||||
|
|
||||||
Update your product or download the latest: https://jan.ai
|
Update your product or download the latest: https://jan.ai
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.5).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.5).
|
||||||
@ -24,4 +24,4 @@ Jan now supports Mistral's new model Codestral. Thanks [Bartowski](https://huggi
|
|||||||
|
|
||||||
More GGUF models can run in Jan - we rebased to llama.cpp b3012.Big thanks to [ggerganov](https://github.com/ggerganov)
|
More GGUF models can run in Jan - we rebased to llama.cpp b3012.Big thanks to [ggerganov](https://github.com/ggerganov)
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.0).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.0).
|
||||||
|
|||||||
@ -28,4 +28,4 @@ Jan now understands LaTeX, allowing users to process and understand complex math
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.4.12).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.4.12).
|
||||||
|
|||||||
@ -28,4 +28,4 @@ Users can now connect to OpenAI's new model GPT-4o.
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
For more details, see the [GitHub release notes.](https://github.com/janhq/jan/releases/tag/v0.4.13)
|
For more details, see the [GitHub release notes.](https://github.com/menloresearch/jan/releases/tag/v0.4.13)
|
||||||
|
|||||||
@ -16,4 +16,4 @@ More GGUF models can run in Jan - we rebased to llama.cpp b2961.
|
|||||||
|
|
||||||
Huge shoutouts to [ggerganov](https://github.com/ggerganov) and contributors for llama.cpp, and [Bartowski](https://huggingface.co/bartowski) for GGUF models.
|
Huge shoutouts to [ggerganov](https://github.com/ggerganov) and contributors for llama.cpp, and [Bartowski](https://huggingface.co/bartowski) for GGUF models.
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.4.14).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.4.14).
|
||||||
|
|||||||
@ -26,4 +26,4 @@ We've updated to llama.cpp b3088 for better performance - thanks to [GG](https:/
|
|||||||
- Reduced chat font weight (back to normal!)
|
- Reduced chat font weight (back to normal!)
|
||||||
- Restored the maximize button
|
- Restored the maximize button
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.1).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.1).
|
||||||
|
|||||||
@ -32,4 +32,4 @@ We've restored the tooltip hover functionality, which makes it easier to access
|
|||||||
|
|
||||||
The right-click options for thread settings are now fully operational again. You can now manage your threads with this fix.
|
The right-click options for thread settings are now fully operational again. You can now manage your threads with this fix.
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.2).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.2).
|
||||||
|
|||||||
@ -23,4 +23,4 @@ We've been working on stability issues over the last few weeks. Jan is now more
|
|||||||
- Fixed the GPU memory utilization bar
|
- Fixed the GPU memory utilization bar
|
||||||
- Some UX and copy improvements
|
- Some UX and copy improvements
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.3).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.3).
|
||||||
|
|||||||
@ -32,4 +32,4 @@ Switching between threads used to reset your instruction settings. That’s fixe
|
|||||||
### Minor UI Tweaks & Bug Fixes
|
### Minor UI Tweaks & Bug Fixes
|
||||||
We’ve also resolved issues with the input slider on the right panel and tackled several smaller bugs to keep everything running smoothly.
|
We’ve also resolved issues with the input slider on the right panel and tackled several smaller bugs to keep everything running smoothly.
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.4).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.4).
|
||||||
|
|||||||
@ -23,4 +23,4 @@ Fixes 💫
|
|||||||
|
|
||||||
Update your product or download the latest: https://jan.ai
|
Update your product or download the latest: https://jan.ai
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.7).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.7).
|
||||||
@ -22,4 +22,4 @@ Jan v0.5.9 is here: fixing what needed fixing
|
|||||||
|
|
||||||
Update your product or download the latest: https://jan.ai
|
Update your product or download the latest: https://jan.ai
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.9).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.9).
|
||||||
@ -22,4 +22,4 @@ and various UI/UX enhancements 💫
|
|||||||
|
|
||||||
Update your product or download the latest: https://jan.ai
|
Update your product or download the latest: https://jan.ai
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.8).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.8).
|
||||||
@ -19,4 +19,4 @@ Jan v0.5.10 is live: Jan is faster, smoother, and more reliable.
|
|||||||
|
|
||||||
Update your product or download the latest: https://jan.ai
|
Update your product or download the latest: https://jan.ai
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.10).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.10).
|
||||||
@ -23,4 +23,4 @@ Jan v0.5.11 is here - critical issues fixed, Mac installation updated.
|
|||||||
|
|
||||||
Update your product or download the latest: https://jan.ai
|
Update your product or download the latest: https://jan.ai
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.11).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.11).
|
||||||
@ -25,4 +25,4 @@ Jan v0.5.11 is here - critical issues fixed, Mac installation updated.
|
|||||||
|
|
||||||
Update your product or download the latest: https://jan.ai
|
Update your product or download the latest: https://jan.ai
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.12).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.12).
|
||||||
@ -20,4 +20,4 @@ import ChangelogHeader from "@/components/Changelog/ChangelogHeader"
|
|||||||
|
|
||||||
Update your product or download the latest: https://jan.ai
|
Update your product or download the latest: https://jan.ai
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.13).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.13).
|
||||||
|
|||||||
@ -33,4 +33,4 @@ Llama
|
|||||||
|
|
||||||
Update your Jan or [download the latest](https://jan.ai/).
|
Update your Jan or [download the latest](https://jan.ai/).
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.14).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.14).
|
||||||
|
|||||||
@ -25,4 +25,4 @@ import ChangelogHeader from "@/components/Changelog/ChangelogHeader"
|
|||||||
|
|
||||||
Update your Jan or [download the latest](https://jan.ai/).
|
Update your Jan or [download the latest](https://jan.ai/).
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.15).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.15).
|
||||||
|
|||||||
@ -26,4 +26,4 @@ import ChangelogHeader from "@/components/Changelog/ChangelogHeader"
|
|||||||
|
|
||||||
Update your Jan or [download the latest](https://jan.ai/).
|
Update your Jan or [download the latest](https://jan.ai/).
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.16).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.16).
|
||||||
|
|||||||
@ -20,4 +20,4 @@ import ChangelogHeader from "@/components/Changelog/ChangelogHeader"
|
|||||||
|
|
||||||
Update your Jan or [download the latest](https://jan.ai/).
|
Update your Jan or [download the latest](https://jan.ai/).
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.5.17).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.17).
|
||||||
|
|||||||
@ -18,4 +18,4 @@ import ChangelogHeader from "@/components/Changelog/ChangelogHeader"
|
|||||||
|
|
||||||
Update your Jan or [download the latest](https://jan.ai/).
|
Update your Jan or [download the latest](https://jan.ai/).
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.6.1).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.6.1).
|
||||||
@ -18,4 +18,4 @@ import ChangelogHeader from "@/components/Changelog/ChangelogHeader"
|
|||||||
|
|
||||||
Update your Jan or [download the latest](https://jan.ai/).
|
Update your Jan or [download the latest](https://jan.ai/).
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.6.3).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.6.3).
|
||||||
@ -23,4 +23,4 @@ new MCP examples.
|
|||||||
|
|
||||||
Update your Jan or [download the latest](https://jan.ai/).
|
Update your Jan or [download the latest](https://jan.ai/).
|
||||||
|
|
||||||
For more details, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.6.5).
|
For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.6.5).
|
||||||
@ -116,4 +116,4 @@ integrations. Stay tuned!
|
|||||||
|
|
||||||
Update your Jan or [download the latest](https://jan.ai/).
|
Update your Jan or [download the latest](https://jan.ai/).
|
||||||
|
|
||||||
For the complete list of changes, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.6.6).
|
For the complete list of changes, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.6.6).
|
||||||
|
|||||||
@ -89,4 +89,4 @@ We're continuing to optimize performance for large models, expand MCP integratio
|
|||||||
|
|
||||||
Update your Jan or [download the latest](https://jan.ai/).
|
Update your Jan or [download the latest](https://jan.ai/).
|
||||||
|
|
||||||
For the complete list of changes, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.6.7).
|
For the complete list of changes, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.6.7).
|
||||||
|
|||||||
@ -74,4 +74,4 @@ v0.6.8 focuses on stability and real workflows: major llama.cpp hardening, two n
|
|||||||
|
|
||||||
Update your Jan or [download the latest](https://jan.ai/).
|
Update your Jan or [download the latest](https://jan.ai/).
|
||||||
|
|
||||||
For the complete list of changes, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.6.8).
|
For the complete list of changes, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.6.8).
|
||||||
|
|||||||
@ -1,28 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Jan v0.7.0: Jan Projects"
|
|
||||||
version: 0.7.0
|
|
||||||
description: "Jan v0.7.0 introduces Projects, model renaming, llama.cpp auto-tuning, model stats, and Azure support."
|
|
||||||
date: 2025-10-02
|
|
||||||
ogImage: "/assets/images/changelog/jan-release-v0.7.0.jpeg"
|
|
||||||
---
|
|
||||||
|
|
||||||
import ChangelogHeader from "@/components/Changelog/ChangelogHeader"
|
|
||||||
import { Callout } from 'nextra/components'
|
|
||||||
|
|
||||||
<ChangelogHeader title="Jan v0.7.0" date="2025-10-01" ogImage="/assets/images/changelog/jan-release-v0.7.0.jpeg" />
|
|
||||||
|
|
||||||
## Jan v0.7.0: Jan Projects
|
|
||||||
|
|
||||||
Jan v0.7.0 is live! This release focuses on helping you organize your workspace and better understand how models run.
|
|
||||||
|
|
||||||
### What’s new
|
|
||||||
- **Projects**: Group related chats under one project for a cleaner workflow.
|
|
||||||
- **Rename models**: Give your models custom names for easier identification.
|
|
||||||
- **Model context stats**: See context usage when a model runs.
|
|
||||||
- **Auto-loaded cloud models**: Cloud model names now appear automatically.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Update your Jan or [download the latest version](https://jan.ai/).
|
|
||||||
|
|
||||||
For the complete list of changes, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.7.0).
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Jan v0.7.1: Fixes Windows Version Revert & OpenRouter Models"
|
|
||||||
version: 0.7.1
|
|
||||||
description: "Jan v0.7.1 focuses on bug fixes, including a windows version revert and improvements to OpenRouter models."
|
|
||||||
date: 2025-10-03
|
|
||||||
---
|
|
||||||
|
|
||||||
import ChangelogHeader from "@/components/Changelog/ChangelogHeader"
|
|
||||||
import { Callout } from 'nextra/components'
|
|
||||||
|
|
||||||
<ChangelogHeader title="Jan v0.7.1" date="2025-10-03" />
|
|
||||||
|
|
||||||
### Bug Fixes: Windows Version Revert & OpenRouter Models
|
|
||||||
|
|
||||||
#### Two quick fixes:
|
|
||||||
- Jan no longer reverts to an older version on load
|
|
||||||
- OpenRouter can now add models again
|
|
||||||
- Add headers for anthropic request to fetch models
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Update your Jan or [download the latest version](https://jan.ai/).
|
|
||||||
|
|
||||||
For the complete list of changes, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.7.1).
|
|
||||||
|
|
||||||
|
|
||||||
@ -1,25 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Jan v0.7.2: Security Update"
|
|
||||||
version: 0.7.2
|
|
||||||
description: "Jan v0.7.2 updates the happy-dom dependency to v20.0.0 to address a recently disclosed sandbox vulnerability."
|
|
||||||
date: 2025-10-16
|
|
||||||
---
|
|
||||||
|
|
||||||
import ChangelogHeader from "@/components/Changelog/ChangelogHeader"
|
|
||||||
import { Callout } from 'nextra/components'
|
|
||||||
|
|
||||||
<ChangelogHeader title="Jan v0.7.2" date="2025-10-16" />
|
|
||||||
|
|
||||||
## Jan v0.7.2: Security Update (happy-dom v20)
|
|
||||||
|
|
||||||
This release focuses on **security and stability improvements**.
|
|
||||||
It updates the `happy-dom` dependency to the latest version to address a recently disclosed vulnerability.
|
|
||||||
|
|
||||||
### Security Fix
|
|
||||||
- Updated `happy-dom` to **^20.0.0**, preventing untrusted JavaScript executed within HAPPY DOM from accessing process-level functions and executing arbitrary code outside the intended sandbox.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Update your Jan or [download the latest version](https://jan.ai/).
|
|
||||||
|
|
||||||
For the complete list of changes, see the [GitHub release notes](https://github.com/janhq/jan/releases/tag/v0.7.2).
|
|
||||||
@ -9,7 +9,7 @@
|
|||||||
},
|
},
|
||||||
"desktop": {
|
"desktop": {
|
||||||
"type": "page",
|
"type": "page",
|
||||||
"title": "Jan Desktop"
|
"title": "Jan Desktop & Mobile"
|
||||||
},
|
},
|
||||||
"server": {
|
"server": {
|
||||||
"type": "page",
|
"type": "page",
|
||||||
|
|||||||
@ -42,5 +42,6 @@
|
|||||||
},
|
},
|
||||||
"settings": "Settings",
|
"settings": "Settings",
|
||||||
"data-folder": "Jan Data Folder",
|
"data-folder": "Jan Data Folder",
|
||||||
"troubleshooting": "Troubleshooting"
|
"troubleshooting": "Troubleshooting",
|
||||||
|
"privacy": "Privacy"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,52 +22,228 @@ keywords:
|
|||||||
import { Callout } from 'nextra/components'
|
import { Callout } from 'nextra/components'
|
||||||
import FAQBox from '@/components/FaqBox'
|
import FAQBox from '@/components/FaqBox'
|
||||||
|
|
||||||
# Overview
|
# Jan
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Jan's Goal
|
||||||
|
|
||||||
|
> We're working towards open superintelligence to make a viable open-source alternative to platforms like ChatGPT
|
||||||
|
and Claude that anyone can own and run.
|
||||||
|
|
||||||
|
## What is Jan Today
|
||||||
|
|
||||||
|
Jan is an open-source AI platform that runs on your hardware. We believe AI should be in the hands of many, not
|
||||||
|
controlled by a few tech giants.
|
||||||
|
|
||||||
|
Today, Jan is:
|
||||||
|
- **A desktop app** that runs AI models locally or connects to cloud providers
|
||||||
|
- **A model hub** making the latest open-source models accessible
|
||||||
|
- **A connector system** that lets AI interact with real-world tools via MCP
|
||||||
|
|
||||||
|
Tomorrow, Jan aims to be a complete ecosystem where open models rival or exceed closed alternatives.
|
||||||
|
|
||||||
<Callout type="info">
|
<Callout type="info">
|
||||||
We're building [Open Superintelligence](https://jan.ai/handbook/open-superintelligence) together.
|
We're building this with the open-source AI community, using the best available tools, and sharing everything
|
||||||
|
we learn along the way.
|
||||||
</Callout>
|
</Callout>
|
||||||
|
|
||||||
Jan is an open-source replacement for ChatGPT:
|
## The Jan Ecosystem
|
||||||
- AI Models: Use AI models with agentic capabilities
|
|
||||||
- [Open-source Models](/docs/desktop/manage-models): Run open-source locally
|
|
||||||
- [Cloud Models](/docs/desktop/remote-models/anthropic): Connect to remote models with API keys
|
|
||||||
- [Assistants](/docs/desktop/assistants): Create custom AI assistants
|
|
||||||
- [MCP Servers](/docs/desktop/mcp): Integrate MCP Servers to give agentic capabilities to AI models
|
|
||||||
- Jan Hub: Browse, install, and [manage models](/docs/desktop/manage-models)
|
|
||||||
- Local API Server: Expose an [OpenAI-compatible API](/docs/desktop/api-server) from your own machine or server
|
|
||||||
|
|
||||||
## Product Suite
|
### Jan Apps
|
||||||
|
**Available Now:**
|
||||||
|
- **Desktop**: Full-featured AI workstation for Windows, Mac, and Linux
|
||||||
|
|
||||||
Jan is a full [product suite](https://en.wikipedia.org/wiki/Software_suite) that offers an alternative to Big AI:
|
**Coming Late 2025:**
|
||||||
- [Jan Desktop](/docs/desktop/quickstart): macOS, Windows, and Linux apps with offline mode
|
- **Mobile**: Jan on your phone
|
||||||
- [Jan Web](https://chat.menlo.ai): Jan on browser, a direct alternative to chatgpt.com
|
- **Web**: Browser-based access at jan.ai
|
||||||
- Jan Mobile: iOS and Android apps (Coming Soon)
|
- **Server**: Self-hosted for teams
|
||||||
- [Jan Server](/docs/server): deploy locally, in your cloud, or on-prem
|
- **Extensions**: Browser extension for Chrome-based browsers
|
||||||
- [Jan Models](/docs/models): Open-source models optimized for deep research, tool use, and reasoning
|
|
||||||
|
|
||||||
### Extending Jan (Coming Soon)
|
### Jan Model Hub
|
||||||
Jan helps you customize and align Open Superintelligence:
|
Making open-source AI accessible to everyone:
|
||||||
- Jan Connectors: Extend Jan with integrations
|
- **Easy Downloads**: One-click model installation
|
||||||
- Jan Studio: Fine-tune, align, and guardrail
|
- **Jan Models**: Our own models optimized for local use
|
||||||
- Evals: Benchmark models across industries, regions, and alignment dimensions
|
- **Jan-v1**: 4B reasoning model specialized in web search
|
||||||
|
- **Research Models**
|
||||||
|
- **Jan-Nano (32k/128k)**: 4B model for web search with MCP tools
|
||||||
|
- **Lucy**: 1.7B mobile-optimized for web search
|
||||||
|
- **Community Models**: Any GGUF from Hugging Face works in Jan
|
||||||
|
- **Cloud Models**: Connect your API keys for OpenAI, Anthropic, Gemini, and more
|
||||||
|
|
||||||
## Principles
|
|
||||||
|
|
||||||
- [Open source](https://www.redhat.com/en/blog/open-source-culture-9-core-principles-and-values): [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0) licensed, built in public.
|
### Jan Connectors Hub
|
||||||
- No [vendor lock-in](https://en.wikipedia.org/wiki/Vendor_lock-in): Switch freely between local and frontier models.
|
Connect AI to the tools you use daily via [Model Context Protocol](./mcp):
|
||||||
- [Right to Repair](https://en.wikipedia.org/wiki/Right_to_repair): Inspect, audit, and modify your AI stack.
|
|
||||||
|
|
||||||
Jan grows through contribution. It is shaped by many and belongs to everyone who uses it.
|
**Creative & Design:**
|
||||||
|
- **Canva**: Generate and edit designs
|
||||||
|
|
||||||
|
**Data & Analysis:**
|
||||||
|
- **Jupyter**: Run Python notebooks
|
||||||
|
- **E2B**: Execute code in sandboxes
|
||||||
|
|
||||||
|
**Web & Search:**
|
||||||
|
- **Browserbase & Browser Use**: Browser automation
|
||||||
|
- **Exa, Serper, Perplexity**: Advanced web search
|
||||||
|
- **Octagon**: Deep research capabilities
|
||||||
|
|
||||||
|
**Productivity:**
|
||||||
|
- **Linear**: Project management
|
||||||
|
- **Todoist**: Task management
|
||||||
|
|
||||||
|
## Core Features
|
||||||
|
|
||||||
|
- **Run Models Locally**: Download any GGUF model from Hugging Face, use OpenAI's gpt-oss models,
|
||||||
|
or connect to cloud providers
|
||||||
|
- **OpenAI-Compatible API**: Local server at `localhost:1337` works with tools like
|
||||||
|
[Continue](./server-examples/continue-dev) and [Cline](https://cline.bot/)
|
||||||
|
- **Extend with MCP Tools**: Browser automation, web search, data analysis, and design tools, all
|
||||||
|
through natural language
|
||||||
|
- **Your Choice of Infrastructure**: Run on your laptop, self-host on your servers (soon), or use
|
||||||
|
cloud when you need it
|
||||||
|
|
||||||
|
## Philosophy
|
||||||
|
|
||||||
|
Jan is built to be user-owned:
|
||||||
|
- **Open Source**: Apache 2.0 license
|
||||||
|
- **Local First**: Your data stays on your device. Internet is optional
|
||||||
|
- **Privacy Focused**: We don't collect or sell user data. See our [Privacy Policy](./privacy)
|
||||||
|
- **No Lock-in**: Export your data anytime. Use any model. Switch between local and cloud
|
||||||
|
|
||||||
|
<Callout>
|
||||||
|
The best AI is the one you control. Not the one that others control for you.
|
||||||
|
</Callout>
|
||||||
|
|
||||||
|
## The Path Forward
|
||||||
|
|
||||||
|
### What Works Today
|
||||||
|
- Run powerful models locally on consumer hardware
|
||||||
|
- Connect to any cloud provider with your API keys
|
||||||
|
- Use MCP tools for real-world tasks
|
||||||
|
- Access transparent model evaluations
|
||||||
|
|
||||||
|
### What We're Building
|
||||||
|
- More specialized models that excel at specific tasks
|
||||||
|
- Expanded app ecosystem (mobile, web, extensions)
|
||||||
|
- Richer connector ecosystem
|
||||||
|
- An evaluation framework to build better models
|
||||||
|
|
||||||
|
### The Long-Term Vision
|
||||||
|
We're working towards open superintelligence where:
|
||||||
|
- Open models match or exceed closed alternatives
|
||||||
|
- Anyone can run powerful AI on their own hardware
|
||||||
|
- The community drives innovation, not corporations
|
||||||
|
- AI capabilities are owned by users, not rented
|
||||||
|
|
||||||
|
<Callout type="warning">
|
||||||
|
This is an ambitious goal without a guaranteed path. We're betting on the open-source community, improved
|
||||||
|
hardware, and better techniques, but we're honest that this is a journey, not a destination we've reached.
|
||||||
|
</Callout>
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
1. [Download Jan](./quickstart) for your operating system
|
||||||
|
2. Choose a model - download locally or add cloud API keys
|
||||||
|
3. Start chatting or connect tools via MCP
|
||||||
|
4. Build with our [local API](./api-server)
|
||||||
|
|
||||||
## Acknowledgements
|
## Acknowledgements
|
||||||
|
|
||||||
> Good artists copy, great artists steal.
|
Jan is built on the shoulders of giants:
|
||||||
|
- [Llama.cpp](https://github.com/ggerganov/llama.cpp) for inference
|
||||||
|
- [Model Context Protocol](https://modelcontextprotocol.io) for tool integration
|
||||||
|
- The open-source community that makes this possible
|
||||||
|
|
||||||
Jan exists because we've borrowed, learned, and built on the work of others.
|
## FAQs
|
||||||
|
|
||||||
- [llama.cpp](https://github.com/ggerganov/llama.cpp) and [GGML](https://github.com/ggerganov/ggml) for efficient inference
|
<FAQBox title="What is Jan?">
|
||||||
- [r/LocalLLaMA](https://www.reddit.com/r/LocalLLaMA/) for ideas, feedback, and debate
|
Jan is an open-source AI platform working towards a viable alternative to Big Tech AI. Today it's a desktop app that runs models locally or connects to cloud providers. Tomorrow it aims to be a complete ecosystem rivaling platforms like ChatGPT and Claude.
|
||||||
- [Model Context Protocol](https://modelcontextprotocol.io) for MCP integrations
|
</FAQBox>
|
||||||
- [PostHog](https://posthog.com/docs) for docs inspiration
|
|
||||||
- The open-source community for contributions, bug reports, and improvements
|
<FAQBox title="How is this different from other AI platforms?">
|
||||||
|
Other platforms are models behind APIs you rent. Jan is a complete AI ecosystem you own. Run any model, use real tools through MCP, keep your data private, and never pay subscriptions for local use.
|
||||||
|
</FAQBox>
|
||||||
|
|
||||||
|
<FAQBox title="What models can I use?">
|
||||||
|
**Jan Models:**
|
||||||
|
- Jan-Nano (32k/128k) - Research and analysis with MCP integration
|
||||||
|
- Lucy - Mobile-optimized search (1.7B)
|
||||||
|
- Jan-v1 - Reasoning and tool use (4B)
|
||||||
|
|
||||||
|
**Open Source:**
|
||||||
|
- OpenAI's gpt-oss models (120b and 20b)
|
||||||
|
- Any GGUF model from Hugging Face
|
||||||
|
|
||||||
|
**Cloud (with your API keys):**
|
||||||
|
- OpenAI, Anthropic, Mistral, Groq, and more
|
||||||
|
</FAQBox>
|
||||||
|
|
||||||
|
<FAQBox title="What are MCP tools?">
|
||||||
|
MCP (Model Context Protocol) lets AI interact with real applications. Instead of just generating text, your AI can create designs in Canva, analyze data in Jupyter, browse the web, and execute code - all through conversation.
|
||||||
|
</FAQBox>
|
||||||
|
|
||||||
|
<FAQBox title="Is Jan compatible with my system?">
|
||||||
|
**Supported OS**:
|
||||||
|
- [Windows 10+](/docs/desktop/install/windows#compatibility)
|
||||||
|
- [macOS 12+](/docs/desktop/install/mac#compatibility)
|
||||||
|
- [Linux (Ubuntu 20.04+)](/docs/desktop/install/linux)
|
||||||
|
|
||||||
|
**Hardware**:
|
||||||
|
- Minimum: 8GB RAM, 10GB storage
|
||||||
|
- Recommended: 16GB RAM, GPU (NVIDIA/AMD/Intel/Apple), 50GB storage
|
||||||
|
</FAQBox>
|
||||||
|
|
||||||
|
<FAQBox title="How realistic is 'open superintelligence'?">
|
||||||
|
Honestly? It's ambitious and uncertain. We believe the combination of rapidly improving open models, better consumer hardware, community innovation, and specialized models working together can eventually rival closed platforms. But this is a multi-year journey with no guarantees. What we can guarantee is that we'll keep building in the open, with the community, towards this goal.
|
||||||
|
</FAQBox>
|
||||||
|
|
||||||
|
<FAQBox title="What can Jan actually do today?">
|
||||||
|
Right now, Jan can:
|
||||||
|
- Run models like Llama, Mistral, and our own Jan models locally
|
||||||
|
- Connect to cloud providers if you want more power
|
||||||
|
- Use MCP tools to create designs, analyze data, browse the web, and more
|
||||||
|
- Work completely offline once models are downloaded
|
||||||
|
- Provide an OpenAI-compatible API for developers
|
||||||
|
</FAQBox>
|
||||||
|
|
||||||
|
<FAQBox title="Is Jan really free?">
|
||||||
|
**Local use**: Always free, no catches
|
||||||
|
**Cloud models**: You pay providers directly (we add no markup)
|
||||||
|
**Jan cloud**: Optional paid services coming 2025
|
||||||
|
|
||||||
|
The core platform will always be free and open source.
|
||||||
|
</FAQBox>
|
||||||
|
|
||||||
|
<FAQBox title="How does Jan protect privacy?">
|
||||||
|
- Runs 100% offline once models are downloaded
|
||||||
|
- All data stored locally in [Jan Data Folder](/docs/desktop/data-folder)
|
||||||
|
- No telemetry without explicit consent
|
||||||
|
- Open source code you can audit
|
||||||
|
|
||||||
|
<Callout type="warning">
|
||||||
|
When using cloud providers through Jan, their privacy policies apply.
|
||||||
|
</Callout>
|
||||||
|
</FAQBox>
|
||||||
|
|
||||||
|
<FAQBox title="Can I self-host Jan?">
|
||||||
|
Yes. Download directly or build from [source](https://github.com/menloresearch/jan). Jan Server for production deployments coming late 2025.
|
||||||
|
</FAQBox>
|
||||||
|
|
||||||
|
<FAQBox title="When will mobile/web versions launch?">
|
||||||
|
- **Jan Web**: Beta late 2025
|
||||||
|
- **Jan Mobile**: Late 2025
|
||||||
|
- **Jan Server**: Late 2025
|
||||||
|
|
||||||
|
All versions will sync seamlessly.
|
||||||
|
</FAQBox>
|
||||||
|
|
||||||
|
<FAQBox title="How can I contribute?">
|
||||||
|
- Code: [GitHub](https://github.com/menloresearch/jan)
|
||||||
|
- Community: [Discord](https://discord.gg/FTk2MvZwJH)
|
||||||
|
- Testing: Help evaluate models and report bugs
|
||||||
|
- Documentation: Improve guides and tutorials
|
||||||
|
</FAQBox>
|
||||||
|
|
||||||
|
<FAQBox title="Are you hiring?">
|
||||||
|
Yes! We love hiring from our community. Check [Careers](https://menlo.bamboohr.com/careers).
|
||||||
|
</FAQBox>
|
||||||
|
|||||||
@ -1,12 +1,11 @@
|
|||||||
---
|
---
|
||||||
title: Linux
|
title: Linux
|
||||||
description: Download Jan on Linux to run AI models locally. Jan is a free, open-source ChatGPT alternative to run offline.
|
description: Get started quickly with Jan, an AI chat application that runs 100% offline on your desktop & mobile (*coming soon*).
|
||||||
keywords:
|
keywords:
|
||||||
[
|
[
|
||||||
Jan,
|
Jan,
|
||||||
Customizable Intelligence, LLM,
|
Customizable Intelligence, LLM,
|
||||||
local AI,
|
local AI,
|
||||||
Jan on Linux,
|
|
||||||
privacy focus,
|
privacy focus,
|
||||||
free and open source,
|
free and open source,
|
||||||
private and offline,
|
private and offline,
|
||||||
@ -19,17 +18,15 @@ keywords:
|
|||||||
installation,
|
installation,
|
||||||
"desktop"
|
"desktop"
|
||||||
]
|
]
|
||||||
twitter:
|
|
||||||
card: summary_large_image
|
|
||||||
site: "@jandotai"
|
|
||||||
title: "Jan on Linux"
|
|
||||||
description: "Download Jan on Linux to run AI models locally. Jan is a free, open-source ChatGPT alternative to run offline."
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
import FAQBox from '@/components/FaqBox'
|
import FAQBox from '@/components/FaqBox'
|
||||||
import { Tabs, Callout, Steps } from 'nextra/components'
|
import { Tabs, Callout, Steps } from 'nextra/components'
|
||||||
import { Settings } from 'lucide-react'
|
import { Settings } from 'lucide-react'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Linux Installation
|
# Linux Installation
|
||||||
Instructions for installing Jan on Linux.
|
Instructions for installing Jan on Linux.
|
||||||
|
|
||||||
@ -247,7 +244,7 @@ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
|
|||||||
### Step 2: Enable GPU Acceleration
|
### Step 2: Enable GPU Acceleration
|
||||||
|
|
||||||
1. Navigate to **Settings** (<Settings width={16} height={16} style={{display:"inline"}}/>) > **Local Engine** > **Llama.cpp**
|
1. Navigate to **Settings** (<Settings width={16} height={16} style={{display:"inline"}}/>) > **Local Engine** > **Llama.cpp**
|
||||||
2. Select appropriate backend in **llama-cpp Backend**. Details in our [llama.cpp guide](/docs/desktop/llama-cpp).
|
2. Select appropriate backend in **llama-cpp Backend**. Details in our [guide](/docs/desktop/local-engines/llama-cpp).
|
||||||
|
|
||||||
<Callout type="info">
|
<Callout type="info">
|
||||||
CUDA offers better performance than Vulkan.
|
CUDA offers better performance than Vulkan.
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
---
|
---
|
||||||
title: Mac
|
title: Mac
|
||||||
description: Download Jan on Mac to run AI models locally. Jan is a free, open-source ChatGPT alternative to run offline.
|
description: Get started quickly with Jan - a local AI that runs on your computer. Install Jan and pick your model to start chatting.
|
||||||
|
keywords:
|
||||||
[
|
[
|
||||||
Jan,
|
Jan,
|
||||||
Customizable Intelligence, LLM,
|
Customizable Intelligence, LLM,
|
||||||
local AI,
|
local AI,
|
||||||
Jan on Mac,
|
|
||||||
privacy focus,
|
privacy focus,
|
||||||
free and open source,
|
free and open source,
|
||||||
private and offline,
|
private and offline,
|
||||||
@ -18,11 +18,6 @@ description: Download Jan on Mac to run AI models locally. Jan is a free, open-s
|
|||||||
installation,
|
installation,
|
||||||
"desktop"
|
"desktop"
|
||||||
]
|
]
|
||||||
twitter:
|
|
||||||
card: summary_large_image
|
|
||||||
site: "@jandotai"
|
|
||||||
title: "Jan on Mac"
|
|
||||||
description: "Download Jan on Mac to run AI models locally. Jan is a free, open-source ChatGPT alternative to run offline."
|
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Tabs } from 'nextra/components'
|
import { Tabs } from 'nextra/components'
|
||||||
|
|||||||
@ -1,11 +1,10 @@
|
|||||||
---
|
---
|
||||||
title: Windows
|
title: Windows
|
||||||
description: Download Jan on Windows to run AI models locally. Jan is a free, open-source ChatGPT alternative to run offline.
|
description: Run AI models locally on your Windows machine with Jan. Quick setup guide for local inference and chat.
|
||||||
keywords:
|
keywords:
|
||||||
[
|
[
|
||||||
Jan,
|
Jan,
|
||||||
Customizable Intelligence, LLM,
|
Customizable Intelligence, LLM,
|
||||||
Jan on Windows,
|
|
||||||
local AI,
|
local AI,
|
||||||
privacy focus,
|
privacy focus,
|
||||||
free and open source,
|
free and open source,
|
||||||
@ -19,11 +18,6 @@ keywords:
|
|||||||
installation,
|
installation,
|
||||||
"desktop"
|
"desktop"
|
||||||
]
|
]
|
||||||
twitter:
|
|
||||||
card: summary_large_image
|
|
||||||
site: "@jandotai"
|
|
||||||
title: "Jan on Windows"
|
|
||||||
description: "Download Jan on Windows to run AI models locally. Jan is a free, open-source ChatGPT alternative to run offline."
|
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Tabs, Callout, Steps } from 'nextra/components'
|
import { Tabs, Callout, Steps } from 'nextra/components'
|
||||||
|
|||||||