feat: reconfigure blog sidebar
@ -1,24 +1,24 @@
|
||||
---
|
||||
title: "RAG is not enough: Lessons from Beating GPT-3.5 on Specialized Tasks with Mistral 7B"
|
||||
description: "Creating Open Source Alternatives to Outperform ChatGPT"
|
||||
slug: /surpassing-chatgpt-with-open-source-alternatives
|
||||
title: 'RAG is not enough: Lessons from Beating GPT-3.5 on Specialized Tasks with Mistral 7B'
|
||||
description: 'Creating Open Source Alternatives to Outperform ChatGPT'
|
||||
slug: /blog/surpassing-chatgpt-with-open-source-alternatives
|
||||
tags: [Open Source ChatGPT Alternatives, Outperform ChatGPT]
|
||||
authors:
|
||||
- name: Rex Ha
|
||||
title: LLM Researcher & Content Writer
|
||||
url: https://github.com/hahuyhoang411
|
||||
image_url: https://avatars.githubusercontent.com/u/64120343?v=4
|
||||
email: rex@jan.ai
|
||||
- name: Nicole Zhu
|
||||
title: Co-Founder
|
||||
url: https://github.com/0xsage
|
||||
image_url: https://avatars.githubusercontent.com/u/69952136?v=4
|
||||
email: nicole@jan.ai
|
||||
- name: Alan Dao
|
||||
title: AI Engineer
|
||||
url: https://github.com/tikikun
|
||||
image_url: https://avatars.githubusercontent.com/u/22268502?v=4
|
||||
email: alan@jan.ai
|
||||
- name: Rex Ha
|
||||
title: LLM Researcher & Content Writer
|
||||
url: https://github.com/hahuyhoang411
|
||||
image_url: https://avatars.githubusercontent.com/u/64120343?v=4
|
||||
email: rex@jan.ai
|
||||
- name: Nicole Zhu
|
||||
title: Co-Founder
|
||||
url: https://github.com/0xsage
|
||||
image_url: https://avatars.githubusercontent.com/u/69952136?v=4
|
||||
email: nicole@jan.ai
|
||||
- name: Alan Dao
|
||||
title: AI Engineer
|
||||
url: https://github.com/tikikun
|
||||
image_url: https://avatars.githubusercontent.com/u/22268502?v=4
|
||||
email: alan@jan.ai
|
||||
---
|
||||
|
||||
## Abstract
|
||||
@ -35,9 +35,9 @@ Problems still arise with catastrophic forgetting in general tasks, commonly obs
|
||||
|
||||

|
||||
|
||||
*Figure 1. Mistral 7B excels in benchmarks, ranking among the top foundational models.*
|
||||
_Figure 1. Mistral 7B excels in benchmarks, ranking among the top foundational models._
|
||||
|
||||
*Note: we are not sponsored by the Mistral team. Though many folks in their community do like to run Mistral locally using our desktop client - [Jan](https://jan.ai/).*
|
||||
_Note: we are not sponsored by the Mistral team. Though many folks in their community do like to run Mistral locally using our desktop client - [Jan](https://jan.ai/)._
|
||||
|
||||
## Cost-Effectively Improving the Base Model
|
||||
|
||||
@ -45,7 +45,7 @@ Mistral alone has known, poor math capabilities, which we needed for our highly
|
||||
|
||||

|
||||
|
||||
*Figure 2: The merged model, Stealth, doubles the mathematical capabilities of its foundational model while retaining the performance in other tasks.*
|
||||
_Figure 2: The merged model, Stealth, doubles the mathematical capabilities of its foundational model while retaining the performance in other tasks._
|
||||
|
||||
We found merging models is quick and cost-effective, enabling fast adjustments based on the result of each iteration.
|
||||
|
||||
@ -71,15 +71,15 @@ With the base model ready, we started on our specific use case.
|
||||
|
||||
Jan is an open-source & bootstrapped project - at one point during our unanticipated growth, we received 1 customer support ticket per minute, with no one to handle customer service.
|
||||
|
||||
So, we directed our efforts toward training a model to answer user questions based on existing technical documentation.
|
||||
So, we directed our efforts toward training a model to answer user questions based on existing technical documentation.
|
||||
|
||||
Specifically, we trained it on Nitro [docs](https://nitro.jan.ai/docs). For context, Nitro is the default inference engine for Jan. It’s a serious server implementation of LlamaCPP, written in C++, with multimodal, queues, and other production-level server capabilities.
|
||||
Specifically, we trained it on Nitro [docs](https://nitro.jan.ai/docs). For context, Nitro is the default inference engine for Jan. It’s a serious server implementation of LlamaCPP, written in C++, with multimodal, queues, and other production-level server capabilities.
|
||||
|
||||
It made an interesting corpus because it was rife with post-2023 technical jargon, edge cases, and poor informational layout.
|
||||
|
||||
## Generating a Training Dataset for GPT-4
|
||||
|
||||
The first step was to transform Nitro’s unstructured format into a synthetic Q&A dataset designed for [instruction tuning](https://arxiv.org/pdf/2109.01652.pdf).
|
||||
The first step was to transform Nitro’s unstructured format into a synthetic Q&A dataset designed for [instruction tuning](https://arxiv.org/pdf/2109.01652.pdf).
|
||||
|
||||
The text was split into chunks of 300-token segments with 30-token overlaps. This helped to avoid a [lost-in-the-middle](https://arxiv.org/abs/2307.03172) problem where LLM can’t use context efficiently to answer given questions.
|
||||
|
||||
@ -87,7 +87,7 @@ The chunks were then given to GPT-4 with 8k context length to generate 3800 Q&A
|
||||
|
||||
## Training
|
||||
|
||||
The training was done with supervised finetuning (SFT) from the [Hugging Face's alignment handbook](https://github.com/huggingface/alignment-handbook) based on the [Huggingface's Zephyr Beta](https://github.com/huggingface/alignment-handbook/tree/main/recipes/zephyr-7b-beta) guidelines.
|
||||
The training was done with supervised finetuning (SFT) from the [Hugging Face's alignment handbook](https://github.com/huggingface/alignment-handbook) based on the [Huggingface's Zephyr Beta](https://github.com/huggingface/alignment-handbook/tree/main/recipes/zephyr-7b-beta) guidelines.
|
||||
|
||||
We used consumer-grade, dual Nvidia RTX 4090s for the training. The end-to-end training took 18 minutes. We found optimal hyperparameters in LoRA for this specific task to be `r = 256` and `alpha = 512`.
|
||||
|
||||
@ -95,7 +95,7 @@ This final model is publicly available at https://huggingface.co/jan-hq/nitro-v1
|
||||
|
||||

|
||||
|
||||
*Figure 3. Using the new finetuned model in [Jan](https://jan.ai/)*
|
||||
_Figure 3. Using the new finetuned model in [Jan](https://jan.ai/)_
|
||||
|
||||
## Improving Results With Rag
|
||||
|
||||
@ -109,18 +109,18 @@ We curated a new set of [50 multiple-choice questions](https://github.com/janhq/
|
||||
|
||||

|
||||
|
||||
*Figure 4. Comparison between fine-tuned model and OpenAI's GPT.*
|
||||
_Figure 4. Comparison between fine-tuned model and OpenAI's GPT._
|
||||
|
||||
**Results**
|
||||
|
||||
| Approach | Performance |
|
||||
| ------------------------------------ | ----------- |
|
||||
| GPT-3.5 with RAG | 56.7% |
|
||||
| GPT-4 with RAG | 64.3% |
|
||||
| Merged 7B Model ([Stealth 7B](https://huggingface.co/jan-hq/stealth-v1.3)) with RAG | 47.7% |
|
||||
| Finetuned 7B Model (Nitro 7B) with RAG | 57.8% |
|
||||
| Approach | Performance |
|
||||
| ----------------------------------------------------------------------------------- | ----------- |
|
||||
| GPT-3.5 with RAG | 56.7% |
|
||||
| GPT-4 with RAG | 64.3% |
|
||||
| Merged 7B Model ([Stealth 7B](https://huggingface.co/jan-hq/stealth-v1.3)) with RAG | 47.7% |
|
||||
| Finetuned 7B Model (Nitro 7B) with RAG | 57.8% |
|
||||
|
||||
This indicates that with task-specific training, we can improve an open-source, Small Language Model to the level of GPT-3.5 on domain knowledge.
|
||||
This indicates that with task-specific training, we can improve an open-source, Small Language Model to the level of GPT-3.5 on domain knowledge.
|
||||
|
||||
Notably, the finetuned with RAG approach also demonstrated more consistency across benchmarking, as indicated by its lower standard deviation.
|
||||
|
||||
@ -134,18 +134,18 @@ A full research report with more statistics can be found at https://github.com/j
|
||||
|
||||
## References
|
||||
|
||||
[1] Jason Wei, Maarten Bosma, Vincent Y. Zhao, Kelvin Guu, Adams Wei Yu, Brian Lester, Nan Du, Andrew M. Dai, Quoc V. Le. Finetuned Language Models Are Zero-Shot Learners. *arXiv preprint arXiv:2109.01652*, 2021. URL: https://arxiv.org/abs/2109.01652
|
||||
[1] Jason Wei, Maarten Bosma, Vincent Y. Zhao, Kelvin Guu, Adams Wei Yu, Brian Lester, Nan Du, Andrew M. Dai, Quoc V. Le. Finetuned Language Models Are Zero-Shot Learners. _arXiv preprint arXiv:2109.01652_, 2021. URL: https://arxiv.org/abs/2109.01652
|
||||
|
||||
[2] Haipeng Luo, Qingfeng Sun, Can Xu, Pu Zhao, Jianguang Lou, Chongyang Tao, Xiubo Geng, Qingwei Lin, Shifeng Chen, Dongmei Zhang. WizardMath: Empowering Mathematical Reasoning for Large Language Models via Reinforced Evol-Instruct. *arXiv preprint arXiv:2308.09583*, 2023. URL: https://arxiv.org/abs/2308.09583
|
||||
[2] Haipeng Luo, Qingfeng Sun, Can Xu, Pu Zhao, Jianguang Lou, Chongyang Tao, Xiubo Geng, Qingwei Lin, Shifeng Chen, Dongmei Zhang. WizardMath: Empowering Mathematical Reasoning for Large Language Models via Reinforced Evol-Instruct. _arXiv preprint arXiv:2308.09583_, 2023. URL: https://arxiv.org/abs/2308.09583
|
||||
|
||||
[3] Luo, Y., Yang, Z., Meng, F., Li, Y., Zhou, J., & Zhang, Y. An Empirical Study of Catastrophic Forgetting in Large Language Models During Continual Fine-tuning. *arXiv preprint arXiv:2308.08747*,2023 URL: https://arxiv.org/abs/2308.08747
|
||||
[3] Luo, Y., Yang, Z., Meng, F., Li, Y., Zhou, J., & Zhang, Y. An Empirical Study of Catastrophic Forgetting in Large Language Models During Continual Fine-tuning. _arXiv preprint arXiv:2308.08747_,2023 URL: https://arxiv.org/abs/2308.08747
|
||||
|
||||
[4] Ziyang Luo, Can Xu, Pu Zhao, Qingfeng Sun, Xiubo Geng, Wenxiang Hu, Chongyang Tao, Jing Ma, Qingwei Lin, Daxin Jiang. WizardCoder: Empowering Code Large Language Models with Evol-Instruct., *arXiv preprint arXiv:2306.08568*, 2023. URL: https://arxiv.org/abs/2306.08568
|
||||
[4] Ziyang Luo, Can Xu, Pu Zhao, Qingfeng Sun, Xiubo Geng, Wenxiang Hu, Chongyang Tao, Jing Ma, Qingwei Lin, Daxin Jiang. WizardCoder: Empowering Code Large Language Models with Evol-Instruct., _arXiv preprint arXiv:2306.08568_, 2023. URL: https://arxiv.org/abs/2306.08568
|
||||
|
||||
[5] SciPhi-AI, Agent Search. GitHub. URL: https://github.com/SciPhi-AI/agent-search
|
||||
|
||||
[6] Nelson F. Liu, Kevin Lin, John Hewitt, Ashwin Paranjape, Michele Bevilacqua, Fabio Petroni, Percy Liang. "Lost in the Middle: How Language Models Use Long Contexts." *arXiv preprint arXiv:2307.03172*, 2023. URL: https://arxiv.org/abs/2307.03172
|
||||
[6] Nelson F. Liu, Kevin Lin, John Hewitt, Ashwin Paranjape, Michele Bevilacqua, Fabio Petroni, Percy Liang. "Lost in the Middle: How Language Models Use Long Contexts." _arXiv preprint arXiv:2307.03172_, 2023. URL: https://arxiv.org/abs/2307.03172
|
||||
|
||||
[7] Luo, H., Sun, Q., Xu, C., Zhao, P., Lou, J., Tao, C., Geng, X., Lin, Q., Chen, S., & Zhang, D. WizardMath: Empowering Mathematical Reasoning for Large Language Models via Reinforced Evol-Instruct. *arXiv preprint arXiv:2308.09583*, 2023. URL: https://arxiv.org/abs/2308.09583
|
||||
[7] Luo, H., Sun, Q., Xu, C., Zhao, P., Lou, J., Tao, C., Geng, X., Lin, Q., Chen, S., & Zhang, D. WizardMath: Empowering Mathematical Reasoning for Large Language Models via Reinforced Evol-Instruct. _arXiv preprint arXiv:2308.09583_, 2023. URL: https://arxiv.org/abs/2308.09583
|
||||
|
||||
[8] nlpxucan et al., WizardLM. GitHub. URL: https://github.com/nlpxucan/WizardLM
|
||||
[8] nlpxucan et al., WizardLM. GitHub. URL: https://github.com/nlpxucan/WizardLM
|
||||
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: "Post Mortem: Bitdefender False Positive Flag"
|
||||
description: "10th January 2024, Jan's 0.4.4 Release on Windows triggered Bitdefender to incorrectly flag it as infected with Gen:Variant.Tedy.258323, leading to automatic quarantine warnings on users' computers."
|
||||
slug: /postmortems/january-10-2024-bitdefender-false-positive-flag
|
||||
slug: /blog/postmortems/january-10-2024-bitdefender-false-positive-flag
|
||||
tags: [Postmortem]
|
||||
---
|
||||
|
||||
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 226 KiB After Width: | Height: | Size: 226 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
@ -1,36 +1,36 @@
|
||||
// @ts-check
|
||||
// Note: type annotations allow type checking and IDEs autocompletion
|
||||
|
||||
require("dotenv").config();
|
||||
require('dotenv').config()
|
||||
|
||||
const darkCodeTheme = require("prism-react-renderer/themes/dracula");
|
||||
const darkCodeTheme = require('prism-react-renderer/themes/dracula')
|
||||
|
||||
/** @type {import('@docusaurus/types').Config} */
|
||||
const config = {
|
||||
title: "Jan",
|
||||
tagline: "Run your own AI",
|
||||
favicon: "img/favicon.ico",
|
||||
title: 'Jan',
|
||||
tagline: 'Run your own AI',
|
||||
favicon: 'img/favicon.ico',
|
||||
|
||||
// Set the production url of your site here
|
||||
url: "https://jan.ai",
|
||||
url: 'https://jan.ai',
|
||||
// Set the /<baseUrl>/ pathname under which your site is served
|
||||
// For GitHub pages deployment, it is often '/<projectName>/'
|
||||
baseUrl: "/",
|
||||
baseUrl: '/',
|
||||
|
||||
// GitHub pages deployment config.
|
||||
// If you aren't using GitHub pages, you don't need these.
|
||||
organizationName: "janhq", // Usually your GitHub org/user name.
|
||||
projectName: "jan", // Usually your repo name.
|
||||
organizationName: 'janhq', // Usually your GitHub org/user name.
|
||||
projectName: 'jan', // Usually your repo name.
|
||||
|
||||
onBrokenLinks: "warn",
|
||||
onBrokenMarkdownLinks: "warn",
|
||||
onBrokenLinks: 'warn',
|
||||
onBrokenMarkdownLinks: 'warn',
|
||||
trailingSlash: true,
|
||||
// Even if you don't use internalization, you can use this field to set useful
|
||||
// metadata like html lang. For example, if your site is Chinese, you may want
|
||||
// to replace "en" with "zh-Hans".
|
||||
i18n: {
|
||||
defaultLocale: "en",
|
||||
locales: ["en"],
|
||||
defaultLocale: 'en',
|
||||
locales: ['en'],
|
||||
},
|
||||
|
||||
markdown: {
|
||||
@ -41,37 +41,37 @@ const config = {
|
||||
|
||||
// Plugins we added
|
||||
plugins: [
|
||||
"docusaurus-plugin-sass",
|
||||
'docusaurus-plugin-sass',
|
||||
async function myPlugin(context, options) {
|
||||
return {
|
||||
name: "docusaurus-tailwindcss",
|
||||
name: 'docusaurus-tailwindcss',
|
||||
configurePostCss(postcssOptions) {
|
||||
// Appends TailwindCSS and AutoPrefixer.
|
||||
postcssOptions.plugins.push(require("tailwindcss"));
|
||||
postcssOptions.plugins.push(require("autoprefixer"));
|
||||
return postcssOptions;
|
||||
postcssOptions.plugins.push(require('tailwindcss'))
|
||||
postcssOptions.plugins.push(require('autoprefixer'))
|
||||
return postcssOptions
|
||||
},
|
||||
};
|
||||
}
|
||||
},
|
||||
[
|
||||
"posthog-docusaurus",
|
||||
'posthog-docusaurus',
|
||||
{
|
||||
apiKey: process.env.POSTHOG_PROJECT_API_KEY || "XXX",
|
||||
appUrl: process.env.POSTHOG_APP_URL || "XXX", // optional
|
||||
apiKey: process.env.POSTHOG_PROJECT_API_KEY || 'XXX',
|
||||
appUrl: process.env.POSTHOG_APP_URL || 'XXX', // optional
|
||||
enableInDevelopment: false, // optional
|
||||
},
|
||||
],
|
||||
[
|
||||
"@docusaurus/plugin-client-redirects",
|
||||
'@docusaurus/plugin-client-redirects',
|
||||
{
|
||||
redirects: [
|
||||
{
|
||||
from: "/troubleshooting/failed-to-fetch",
|
||||
to: "/troubleshooting/somethings-amiss",
|
||||
from: '/troubleshooting/failed-to-fetch',
|
||||
to: '/troubleshooting/somethings-amiss',
|
||||
},
|
||||
{
|
||||
from: "/guides/troubleshooting/gpu-not-used/",
|
||||
to: "/troubleshooting/gpu-not-used",
|
||||
from: '/guides/troubleshooting/gpu-not-used/',
|
||||
to: '/troubleshooting/gpu-not-used',
|
||||
},
|
||||
],
|
||||
},
|
||||
@ -81,35 +81,35 @@ const config = {
|
||||
// The classic preset will relay each option entry to the respective sub plugin/theme.
|
||||
presets: [
|
||||
[
|
||||
"@docusaurus/preset-classic",
|
||||
'@docusaurus/preset-classic',
|
||||
{
|
||||
// Will be passed to @docusaurus/plugin-content-docs (false to disable)
|
||||
docs: {
|
||||
routeBasePath: "/",
|
||||
sidebarPath: require.resolve("./sidebars.js"),
|
||||
editUrl: "https://github.com/janhq/jan/tree/main/docs",
|
||||
routeBasePath: '/',
|
||||
sidebarPath: require.resolve('./sidebars.js'),
|
||||
editUrl: 'https://github.com/janhq/jan/tree/main/docs',
|
||||
showLastUpdateAuthor: true,
|
||||
showLastUpdateTime: true,
|
||||
},
|
||||
// Will be passed to @docusaurus/plugin-content-sitemap (false to disable)
|
||||
sitemap: {
|
||||
changefreq: "daily",
|
||||
changefreq: 'daily',
|
||||
priority: 1.0,
|
||||
ignorePatterns: ["/tags/**"],
|
||||
filename: "sitemap.xml",
|
||||
ignorePatterns: ['/tags/**'],
|
||||
filename: 'sitemap.xml',
|
||||
},
|
||||
// Will be passed to @docusaurus/plugin-content-blog (false to disable)
|
||||
blog: {
|
||||
blogSidebarTitle: "All Posts",
|
||||
blogSidebarCount: "ALL",
|
||||
},
|
||||
// blog: {
|
||||
// blogSidebarTitle: "All Posts",
|
||||
// blogSidebarCount: "ALL",
|
||||
// },
|
||||
// Will be passed to @docusaurus/theme-classic.
|
||||
theme: {
|
||||
customCss: require.resolve("./src/styles/main.scss"),
|
||||
customCss: require.resolve('./src/styles/main.scss'),
|
||||
},
|
||||
// GTM is always inactive in development and only active in production to avoid polluting the analytics statistics.
|
||||
googleTagManager: {
|
||||
containerId: process.env.GTM_ID || "XXX",
|
||||
containerId: process.env.GTM_ID || 'XXX',
|
||||
},
|
||||
// Will be passed to @docusaurus/plugin-content-pages (false to disable)
|
||||
// pages: {},
|
||||
@ -117,17 +117,17 @@ const config = {
|
||||
],
|
||||
// Redoc preset
|
||||
[
|
||||
"redocusaurus",
|
||||
'redocusaurus',
|
||||
{
|
||||
specs: [
|
||||
{
|
||||
spec: "openapi/jan.yaml", // can be local file, url, or parsed json object
|
||||
route: "/api-reference/", // path where to render docs
|
||||
spec: 'openapi/jan.yaml', // can be local file, url, or parsed json object
|
||||
route: '/api-reference/', // path where to render docs
|
||||
},
|
||||
],
|
||||
theme: {
|
||||
primaryColor: "#1a73e8",
|
||||
primaryColorDark: "#1a73e8",
|
||||
primaryColor: '#1a73e8',
|
||||
primaryColorDark: '#1a73e8',
|
||||
options: {
|
||||
requiredPropsFirst: true,
|
||||
noAutoAuth: true,
|
||||
@ -140,10 +140,10 @@ const config = {
|
||||
|
||||
// Docs: https://docusaurus.io/docs/api/themes/configuration
|
||||
themeConfig: {
|
||||
image: "img/og-image.png",
|
||||
image: 'img/og-image.png',
|
||||
// Only for react live
|
||||
liveCodeBlock: {
|
||||
playgroundPosition: "bottom",
|
||||
playgroundPosition: 'bottom',
|
||||
},
|
||||
docs: {
|
||||
sidebar: {
|
||||
@ -153,89 +153,89 @@ const config = {
|
||||
},
|
||||
// Algolia Search Configuration
|
||||
algolia: {
|
||||
appId: process.env.ALGOLIA_APP_ID || "XXX",
|
||||
apiKey: process.env.ALGOLIA_API_KEY || "XXX",
|
||||
indexName: "jan_docs",
|
||||
appId: process.env.ALGOLIA_APP_ID || 'XXX',
|
||||
apiKey: process.env.ALGOLIA_API_KEY || 'XXX',
|
||||
indexName: 'jan_docs',
|
||||
contextualSearch: true,
|
||||
insights: true,
|
||||
},
|
||||
// SEO Docusarus
|
||||
metadata: [
|
||||
{
|
||||
name: "description",
|
||||
name: 'description',
|
||||
content:
|
||||
"Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable.",
|
||||
'Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable.',
|
||||
},
|
||||
{
|
||||
name: "keywords",
|
||||
name: 'keywords',
|
||||
content:
|
||||
"Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ",
|
||||
'Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ',
|
||||
},
|
||||
{ name: "robots", content: "index, follow" },
|
||||
{ name: 'robots', content: 'index, follow' },
|
||||
{
|
||||
property: "og:title",
|
||||
content: "Jan | Open-source ChatGPT Alternative",
|
||||
property: 'og:title',
|
||||
content: 'Jan | Open-source ChatGPT Alternative',
|
||||
},
|
||||
{
|
||||
property: "og:description",
|
||||
property: 'og:description',
|
||||
content:
|
||||
"Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable.",
|
||||
'Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable.',
|
||||
},
|
||||
{
|
||||
property: "og:image",
|
||||
content: "https://jan.ai/img/og-image.png",
|
||||
property: 'og:image',
|
||||
content: 'https://jan.ai/img/og-image.png',
|
||||
},
|
||||
{ property: "og:type", content: "website" },
|
||||
{ property: "twitter:card", content: "summary_large_image" },
|
||||
{ property: "twitter:site", content: "@janframework" },
|
||||
{ property: 'og:type', content: 'website' },
|
||||
{ property: 'twitter:card', content: 'summary_large_image' },
|
||||
{ property: 'twitter:site', content: '@janframework' },
|
||||
{
|
||||
property: "twitter:title",
|
||||
content: "Jan | Open-source ChatGPT Alternative",
|
||||
property: 'twitter:title',
|
||||
content: 'Jan | Open-source ChatGPT Alternative',
|
||||
},
|
||||
{
|
||||
property: "twitter:description",
|
||||
property: 'twitter:description',
|
||||
content:
|
||||
"Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable.",
|
||||
'Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable.',
|
||||
},
|
||||
{
|
||||
property: "twitter:image",
|
||||
content: "https://jan.ai/img/og-image.png",
|
||||
property: 'twitter:image',
|
||||
content: 'https://jan.ai/img/og-image.png',
|
||||
},
|
||||
],
|
||||
headTags: [
|
||||
// Declare a <link> preconnect tag
|
||||
{
|
||||
tagName: "link",
|
||||
tagName: 'link',
|
||||
attributes: {
|
||||
rel: "preconnect",
|
||||
href: "https://jan.ai/",
|
||||
rel: 'preconnect',
|
||||
href: 'https://jan.ai/',
|
||||
},
|
||||
},
|
||||
// Declare some json-ld structured data
|
||||
{
|
||||
tagName: "script",
|
||||
tagName: 'script',
|
||||
attributes: {
|
||||
type: "application/ld+json",
|
||||
type: 'application/ld+json',
|
||||
},
|
||||
innerHTML: JSON.stringify({
|
||||
"@context": "https://schema.org/",
|
||||
"@type": "localAI",
|
||||
name: "Jan",
|
||||
description:
|
||||
"Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable.",
|
||||
keywords:
|
||||
"Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ",
|
||||
applicationCategory: "BusinessApplication",
|
||||
operatingSystem: "Multiple",
|
||||
url: "https://jan.ai/",
|
||||
'@context': 'https://schema.org/',
|
||||
'@type': 'localAI',
|
||||
'name': 'Jan',
|
||||
'description':
|
||||
'Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable.',
|
||||
'keywords':
|
||||
'Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ',
|
||||
'applicationCategory': 'BusinessApplication',
|
||||
'operatingSystem': 'Multiple',
|
||||
'url': 'https://jan.ai/',
|
||||
}),
|
||||
},
|
||||
],
|
||||
navbar: {
|
||||
title: "Jan",
|
||||
title: 'Jan',
|
||||
logo: {
|
||||
alt: "Jan Logo",
|
||||
src: "img/logo.svg",
|
||||
alt: 'Jan Logo',
|
||||
src: 'img/logo.svg',
|
||||
},
|
||||
items: [
|
||||
// Navbar Left
|
||||
@ -246,38 +246,38 @@ const config = {
|
||||
// label: "About",
|
||||
// },
|
||||
{
|
||||
type: "dropdown",
|
||||
label: "About",
|
||||
position: "left",
|
||||
type: 'dropdown',
|
||||
label: 'About',
|
||||
position: 'left',
|
||||
items: [
|
||||
{
|
||||
type: "doc",
|
||||
label: "What is Jan?",
|
||||
docId: "about/about",
|
||||
type: 'doc',
|
||||
label: 'What is Jan?',
|
||||
docId: 'about/about',
|
||||
},
|
||||
{
|
||||
type: "doc",
|
||||
label: "Who we are",
|
||||
docId: "team/team",
|
||||
type: 'doc',
|
||||
label: 'Who we are',
|
||||
docId: 'team/team',
|
||||
},
|
||||
{
|
||||
type: "doc",
|
||||
label: "Wall of love",
|
||||
docId: "wall-of-love",
|
||||
type: 'doc',
|
||||
label: 'Wall of love',
|
||||
docId: 'wall-of-love',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: "docSidebar",
|
||||
sidebarId: "productSidebar",
|
||||
position: "left",
|
||||
label: "Product",
|
||||
type: 'docSidebar',
|
||||
sidebarId: 'productSidebar',
|
||||
position: 'left',
|
||||
label: 'Product',
|
||||
},
|
||||
{
|
||||
type: "docSidebar",
|
||||
sidebarId: "ecosystemSidebar",
|
||||
position: "left",
|
||||
label: "Ecosystem",
|
||||
type: 'docSidebar',
|
||||
sidebarId: 'ecosystemSidebar',
|
||||
position: 'left',
|
||||
label: 'Ecosystem',
|
||||
},
|
||||
// {
|
||||
// type: "docSidebar",
|
||||
@ -287,35 +287,36 @@ const config = {
|
||||
// },
|
||||
// Navbar right
|
||||
{
|
||||
type: "dropdown",
|
||||
label: "Docs",
|
||||
position: "right",
|
||||
type: 'dropdown',
|
||||
label: 'Docs',
|
||||
position: 'right',
|
||||
items: [
|
||||
{
|
||||
type: "docSidebar",
|
||||
sidebarId: "guidesSidebar",
|
||||
label: "User Guide",
|
||||
type: 'docSidebar',
|
||||
sidebarId: 'guidesSidebar',
|
||||
label: 'User Guide',
|
||||
},
|
||||
{
|
||||
type: "docSidebar",
|
||||
sidebarId: "developerSidebar",
|
||||
label: "Developer",
|
||||
type: 'docSidebar',
|
||||
sidebarId: 'developerSidebar',
|
||||
label: 'Developer',
|
||||
},
|
||||
{
|
||||
to: "/api-reference",
|
||||
label: "API Reference",
|
||||
to: '/api-reference',
|
||||
label: 'API Reference',
|
||||
},
|
||||
{
|
||||
type: "docSidebar",
|
||||
sidebarId: "docsSidebar",
|
||||
label: "Framework",
|
||||
type: 'docSidebar',
|
||||
sidebarId: 'docsSidebar',
|
||||
label: 'Framework',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
to: "blog",
|
||||
label: "Blog",
|
||||
position: "right",
|
||||
type: 'docSidebar',
|
||||
sidebarId: 'blogSidebar',
|
||||
position: 'right',
|
||||
label: 'Blog',
|
||||
},
|
||||
],
|
||||
},
|
||||
@ -323,21 +324,21 @@ const config = {
|
||||
theme: darkCodeTheme,
|
||||
darkTheme: darkCodeTheme,
|
||||
additionalLanguages: [
|
||||
"python",
|
||||
"powershell",
|
||||
"bash",
|
||||
"json",
|
||||
"javascript",
|
||||
"jsx",
|
||||
'python',
|
||||
'powershell',
|
||||
'bash',
|
||||
'json',
|
||||
'javascript',
|
||||
'jsx',
|
||||
],
|
||||
},
|
||||
colorMode: {
|
||||
defaultMode: "light",
|
||||
defaultMode: 'light',
|
||||
disableSwitch: false,
|
||||
respectPrefersColorScheme: false,
|
||||
},
|
||||
},
|
||||
themes: ["@docusaurus/theme-live-codeblock", "@docusaurus/theme-mermaid"],
|
||||
};
|
||||
themes: ['@docusaurus/theme-live-codeblock', '@docusaurus/theme-mermaid'],
|
||||
}
|
||||
|
||||
module.exports = config;
|
||||
module.exports = config
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
"@docsearch/react": "3",
|
||||
"@docusaurus/core": "^3.0.0",
|
||||
"@docusaurus/plugin-client-redirects": "^3.0.0",
|
||||
"@docusaurus/plugin-content-blog": "^3.0.0",
|
||||
"@docusaurus/plugin-content-docs": "^3.0.0",
|
||||
"@docusaurus/preset-classic": "^3.0.0",
|
||||
"@docusaurus/theme-live-codeblock": "^3.0.0",
|
||||
|
||||
146
docs/sidebars.js
@ -15,70 +15,70 @@
|
||||
const sidebars = {
|
||||
aboutSidebar: [
|
||||
{
|
||||
type: "category",
|
||||
label: "What is Jan?",
|
||||
link: { type: "doc", id: "about/about" },
|
||||
type: 'category',
|
||||
label: 'What is Jan?',
|
||||
link: { type: 'doc', id: 'about/about' },
|
||||
items: [
|
||||
//"about/roadmap",
|
||||
"community/community",
|
||||
'community/community',
|
||||
],
|
||||
},
|
||||
{
|
||||
type: "category",
|
||||
label: "Who we are",
|
||||
link: { type: "doc", id: "team/team" },
|
||||
items: ["team/join-us", "team/contributor-program"],
|
||||
type: 'category',
|
||||
label: 'Who we are',
|
||||
link: { type: 'doc', id: 'team/team' },
|
||||
items: ['team/join-us', 'team/contributor-program'],
|
||||
},
|
||||
"wall-of-love",
|
||||
'wall-of-love',
|
||||
{
|
||||
type: "category",
|
||||
label: "How We Work",
|
||||
link: { type: "doc", id: "how-we-work" },
|
||||
type: 'category',
|
||||
label: 'How We Work',
|
||||
link: { type: 'doc', id: 'how-we-work' },
|
||||
items: [
|
||||
"how-we-work/strategy/strategy",
|
||||
"how-we-work/project-management/project-management",
|
||||
'how-we-work/strategy/strategy',
|
||||
'how-we-work/project-management/project-management',
|
||||
{
|
||||
type: "category",
|
||||
label: "Engineering",
|
||||
link: { type: "doc", id: "how-we-work/engineering/engineering" },
|
||||
type: 'category',
|
||||
label: 'Engineering',
|
||||
link: { type: 'doc', id: 'how-we-work/engineering/engineering' },
|
||||
items: [
|
||||
"how-we-work/engineering/ci-cd",
|
||||
"how-we-work/engineering/qa",
|
||||
'how-we-work/engineering/ci-cd',
|
||||
'how-we-work/engineering/qa',
|
||||
],
|
||||
},
|
||||
"how-we-work/product-design/product-design",
|
||||
"how-we-work/analytics/analytics",
|
||||
"how-we-work/website-docs/website-docs",
|
||||
'how-we-work/product-design/product-design',
|
||||
'how-we-work/analytics/analytics',
|
||||
'how-we-work/website-docs/website-docs',
|
||||
],
|
||||
},
|
||||
"acknowledgements",
|
||||
'acknowledgements',
|
||||
],
|
||||
productSidebar: [
|
||||
{
|
||||
type: "category",
|
||||
label: "Platforms",
|
||||
type: 'category',
|
||||
label: 'Platforms',
|
||||
collapsible: false,
|
||||
items: [
|
||||
"platforms/desktop",
|
||||
"server-suite/home-server",
|
||||
'platforms/desktop',
|
||||
'server-suite/home-server',
|
||||
// "server-suite/enterprise",
|
||||
// "platforms/mobile",
|
||||
// "platforms/hub",
|
||||
],
|
||||
},
|
||||
{
|
||||
type: "category",
|
||||
type: 'category',
|
||||
collapsible: true,
|
||||
collapsed: false,
|
||||
label: "Features",
|
||||
link: { type: "doc", id: "features/features" },
|
||||
label: 'Features',
|
||||
link: { type: 'doc', id: 'features/features' },
|
||||
items: [
|
||||
"features/local",
|
||||
"features/remote",
|
||||
"features/api-server",
|
||||
"features/extensions-framework",
|
||||
"features/agents-framework",
|
||||
"features/data-security",
|
||||
'features/local',
|
||||
'features/remote',
|
||||
'features/api-server',
|
||||
'features/extensions-framework',
|
||||
'features/agents-framework',
|
||||
'features/data-security',
|
||||
],
|
||||
},
|
||||
// NOTE: Jan Server Suite will be torn out into it's own section in the future
|
||||
@ -96,78 +96,84 @@ const sidebars = {
|
||||
],
|
||||
solutionSidebar: [
|
||||
{
|
||||
type: "category",
|
||||
label: "Use Cases",
|
||||
type: 'category',
|
||||
label: 'Use Cases',
|
||||
collapsed: true,
|
||||
collapsible: true,
|
||||
items: ["solutions/ai-pc", "solutions/chatgpt-alternative"],
|
||||
items: ['solutions/ai-pc', 'solutions/chatgpt-alternative'],
|
||||
},
|
||||
{
|
||||
type: "category",
|
||||
label: "Sectors",
|
||||
type: 'category',
|
||||
label: 'Sectors',
|
||||
collapsed: true,
|
||||
collapsible: true,
|
||||
items: [
|
||||
"solutions/finance",
|
||||
"solutions/healthcare",
|
||||
"solutions/legal",
|
||||
"solutions/government",
|
||||
'solutions/finance',
|
||||
'solutions/healthcare',
|
||||
'solutions/legal',
|
||||
'solutions/government',
|
||||
],
|
||||
},
|
||||
{
|
||||
type: "category",
|
||||
label: "Organization Type",
|
||||
type: 'category',
|
||||
label: 'Organization Type',
|
||||
collapsed: true,
|
||||
collapsible: true,
|
||||
items: [
|
||||
"solutions/developers",
|
||||
"solutions/consultants",
|
||||
"solutions/startups",
|
||||
"solutions/enterprises",
|
||||
'solutions/developers',
|
||||
'solutions/consultants',
|
||||
'solutions/startups',
|
||||
'solutions/enterprises',
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
pricingSidebar: ["pricing/pricing"],
|
||||
pricingSidebar: ['pricing/pricing'],
|
||||
ecosystemSidebar: [
|
||||
"ecosystem/ecosystem",
|
||||
'ecosystem/ecosystem',
|
||||
{
|
||||
type: "category",
|
||||
label: "Partners",
|
||||
link: { type: "doc", id: "partners/partners" },
|
||||
type: 'category',
|
||||
label: 'Partners',
|
||||
link: { type: 'doc', id: 'partners/partners' },
|
||||
collapsible: true,
|
||||
items: ["partners/become-a-partner"],
|
||||
items: ['partners/become-a-partner'],
|
||||
},
|
||||
{
|
||||
type: "category",
|
||||
label: "Integrations",
|
||||
link: { type: "doc", id: "integrations" },
|
||||
type: 'category',
|
||||
label: 'Integrations',
|
||||
link: { type: 'doc', id: 'integrations' },
|
||||
items: [
|
||||
{
|
||||
type: "autogenerated",
|
||||
dirName: "integrations",
|
||||
type: 'autogenerated',
|
||||
dirName: 'integrations',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
guidesSidebar: [
|
||||
{
|
||||
type: "autogenerated",
|
||||
dirName: "guides",
|
||||
type: 'autogenerated',
|
||||
dirName: 'guides',
|
||||
},
|
||||
],
|
||||
developerSidebar: [
|
||||
{
|
||||
type: "autogenerated",
|
||||
dirName: "developer",
|
||||
type: 'autogenerated',
|
||||
dirName: 'developer',
|
||||
},
|
||||
],
|
||||
docsSidebar: [
|
||||
{
|
||||
type: "autogenerated",
|
||||
dirName: "docs",
|
||||
type: 'autogenerated',
|
||||
dirName: 'docs',
|
||||
},
|
||||
],
|
||||
};
|
||||
blogSidebar: [
|
||||
{
|
||||
type: 'autogenerated',
|
||||
dirName: 'blog',
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
module.exports = sidebars;
|
||||
module.exports = sidebars
|
||||
|
||||