401 lines
11 KiB
JavaScript
401 lines
11 KiB
JavaScript
// @ts-check
|
|
// Note: type annotations allow type checking and IDEs autocompletion
|
|
require("dotenv").config();
|
|
|
|
const darkCodeTheme = require("prism-react-renderer/themes/dracula");
|
|
const path = require('path');
|
|
|
|
/** @type {import('@docusaurus/types').Config} */
|
|
const config = {
|
|
title: "Jan",
|
|
tagline: "Run your own AI",
|
|
favicon: "img/favicon.ico",
|
|
|
|
// Set the production url of your site here
|
|
url: "https://jan.ai",
|
|
// Set the /<baseUrl>/ pathname under which your site is served
|
|
// For GitHub pages deployment, it is often '/<projectName>/'
|
|
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.
|
|
|
|
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"],
|
|
},
|
|
|
|
markdown: {
|
|
mermaid: true,
|
|
},
|
|
|
|
noIndex: false,
|
|
|
|
// Plugins we added
|
|
plugins: [
|
|
"docusaurus-plugin-sass",
|
|
async function myPlugin(context, options) {
|
|
return {
|
|
name: "docusaurus-tailwindcss",
|
|
configurePostCss(postcssOptions) {
|
|
// Appends TailwindCSS and AutoPrefixer.
|
|
postcssOptions.plugins.push(require("tailwindcss"));
|
|
postcssOptions.plugins.push(require("autoprefixer"));
|
|
return postcssOptions;
|
|
},
|
|
};
|
|
},
|
|
[
|
|
"posthog-docusaurus",
|
|
{
|
|
apiKey: process.env.POSTHOG_PROJECT_API_KEY || "XXX",
|
|
appUrl: process.env.POSTHOG_APP_URL || "XXX", // optional
|
|
enableInDevelopment: false, // optional
|
|
},
|
|
],
|
|
[
|
|
"@docusaurus/plugin-client-redirects",
|
|
{
|
|
redirects: [
|
|
{
|
|
from: "/troubleshooting/failed-to-fetch",
|
|
to: "/guides/error-codes/something-amiss/",
|
|
},
|
|
{
|
|
from: "/guides/troubleshooting/gpu-not-used/",
|
|
to: "/guides/common-error/not-using-gpu/",
|
|
},
|
|
{
|
|
from: "/guides/troubleshooting/",
|
|
to: "/guides/error-codes/",
|
|
},
|
|
{
|
|
from: "/troubleshooting/stuck-on-broken-build/",
|
|
to: "/guides/common-error/broken-build/",
|
|
},
|
|
{
|
|
from: "/guides/troubleshooting/",
|
|
to: "/guides/error-codes/",
|
|
},
|
|
{
|
|
from: "/troubleshooting/somethings-amiss/",
|
|
to: "/guides/error-codes/something-amiss/",
|
|
},
|
|
{
|
|
from: "/troubleshooting/how-to-get-error-logs/",
|
|
to: "/guides/error-codes/how-to-get-error-logs/",
|
|
},
|
|
{
|
|
from: "/troubleshooting/permission-denied/",
|
|
to: "/guides/error-codes/permission-denied/",
|
|
},
|
|
{
|
|
from: "/troubleshooting/unexpected-token/",
|
|
to: "/guides/error-codes/unexpected-token/",
|
|
},
|
|
{
|
|
from: "/troubleshooting/undefined-issue/",
|
|
to: "/guides/error-codes/undefined-issue/",
|
|
}, {
|
|
from: "/install/",
|
|
to: "/guides/install/",
|
|
},
|
|
],
|
|
},
|
|
],
|
|
|
|
//To input custom Plugin
|
|
path.resolve(__dirname, 'plugins', 'changelog-plugin'),
|
|
[
|
|
'@scalar/docusaurus',
|
|
{
|
|
label: '',
|
|
route: '/api-reference',
|
|
configuration: {
|
|
spec: {
|
|
url: 'https://raw.githubusercontent.com/janhq/jan/dev/docs/openapi/jan.json',
|
|
},
|
|
},
|
|
},
|
|
],
|
|
],
|
|
|
|
// The classic preset will relay each option entry to the respective sub plugin/theme.
|
|
presets: [
|
|
[
|
|
"@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/dev/docs",
|
|
showLastUpdateAuthor: true,
|
|
showLastUpdateTime: true,
|
|
},
|
|
// Will be passed to @docusaurus/plugin-content-sitemap (false to disable)
|
|
sitemap: {
|
|
changefreq: "daily",
|
|
priority: 1.0,
|
|
ignorePatterns: ["/tags/**"],
|
|
filename: "sitemap.xml",
|
|
},
|
|
// Will be passed to @docusaurus/plugin-content-blog (false to disable)
|
|
blog: {
|
|
blogSidebarTitle: "All Posts",
|
|
blogSidebarCount: "ALL",
|
|
},
|
|
// Will be passed to @docusaurus/theme-classic.
|
|
theme: {
|
|
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",
|
|
},
|
|
// Will be passed to @docusaurus/plugin-content-pages (false to disable)
|
|
// pages: {},
|
|
},
|
|
],
|
|
// Redoc preset
|
|
[
|
|
"redocusaurus",
|
|
{
|
|
specs: [
|
|
{
|
|
spec: "openapi/jan.yaml", // can be local file, url, or parsed json object
|
|
route: "/api-reference-1.0/", // path where to render docs
|
|
},
|
|
],
|
|
theme: {
|
|
primaryColor: "#1a73e8",
|
|
primaryColorDark: "#1a73e8",
|
|
options: {
|
|
requiredPropsFirst: true,
|
|
noAutoAuth: true,
|
|
hideDownloadButton: true,
|
|
},
|
|
},
|
|
},
|
|
],
|
|
],
|
|
|
|
// Docs: https://docusaurus.io/docs/api/themes/configuration
|
|
themeConfig: {
|
|
image: "img/og-image.png",
|
|
// Only for react live
|
|
liveCodeBlock: {
|
|
playgroundPosition: "bottom",
|
|
},
|
|
docs: {
|
|
sidebar: {
|
|
hideable: true,
|
|
autoCollapseCategories: false,
|
|
},
|
|
},
|
|
// Algolia Search Configuration
|
|
algolia: {
|
|
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",
|
|
content:
|
|
"Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable.",
|
|
},
|
|
{
|
|
name: "keywords",
|
|
content:
|
|
"Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ",
|
|
},
|
|
{ name: "robots", content: "index, follow" },
|
|
{
|
|
property: "og:title",
|
|
content: "Jan | Open-source ChatGPT Alternative",
|
|
},
|
|
{
|
|
property: "og:description",
|
|
content:
|
|
"Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable.",
|
|
},
|
|
{
|
|
property: "og:image",
|
|
content: "https://jan.ai/img/og-image.png",
|
|
},
|
|
{ property: "og:type", content: "website" },
|
|
{ property: "twitter:card", content: "summary_large_image" },
|
|
{ property: "twitter:site", content: "@janframework" },
|
|
{
|
|
property: "twitter:title",
|
|
content: "Jan | Open-source ChatGPT Alternative",
|
|
},
|
|
{
|
|
property: "twitter:description",
|
|
content:
|
|
"Jan runs 100% offline on your computer, utilizes open-source AI models, prioritizes privacy, and is highly customizable.",
|
|
},
|
|
{
|
|
property: "twitter:image",
|
|
content: "https://jan.ai/img/og-image.png",
|
|
},
|
|
],
|
|
headTags: [
|
|
// Declare a <link> preconnect tag
|
|
{
|
|
tagName: "link",
|
|
attributes: {
|
|
rel: "preconnect",
|
|
href: "https://jan.ai/",
|
|
},
|
|
},
|
|
// Declare some json-ld structured data
|
|
{
|
|
tagName: "script",
|
|
attributes: {
|
|
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/",
|
|
}),
|
|
},
|
|
],
|
|
navbar: {
|
|
title: "Jan",
|
|
logo: {
|
|
alt: "Jan Logo",
|
|
src: "img/logo.svg",
|
|
},
|
|
items: [
|
|
// Navbar Left
|
|
// {
|
|
// type: "docSidebar",
|
|
// sidebarId: "aboutSidebar",
|
|
// position: "left",
|
|
// label: "About",
|
|
// },
|
|
{
|
|
type: "dropdown",
|
|
label: "About",
|
|
position: "left",
|
|
items: [
|
|
{
|
|
type: "doc",
|
|
label: "What is Jan?",
|
|
docId: "about/about",
|
|
},
|
|
{
|
|
type: "doc",
|
|
label: "Who we are",
|
|
docId: "team/team",
|
|
},
|
|
{
|
|
type: "doc",
|
|
label: "Wall of love",
|
|
docId: "wall-of-love",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
type: "docSidebar",
|
|
sidebarId: "productSidebar",
|
|
positionL: "left",
|
|
label: "Product",
|
|
},
|
|
{
|
|
type: "docSidebar",
|
|
sidebarId: "ecosystemSidebar",
|
|
position: "left",
|
|
label: "Ecosystem",
|
|
},
|
|
// {
|
|
// type: "docSidebar",
|
|
// sidebarId: "pricingSidebar",
|
|
// positionL: "left",
|
|
// label: "Pricing",
|
|
// },
|
|
// Navbar right
|
|
{
|
|
type: "dropdown",
|
|
label: "Docs",
|
|
to: "docs",
|
|
position: "right",
|
|
items: [
|
|
{
|
|
type: "docSidebar",
|
|
sidebarId: "guidesSidebar",
|
|
label: "Guides",
|
|
},
|
|
{
|
|
type: "docSidebar",
|
|
sidebarId: "developerSidebar",
|
|
label: "Developer",
|
|
},
|
|
{
|
|
to: "/api-reference",
|
|
label: "API Reference",
|
|
},
|
|
{
|
|
type: "docSidebar",
|
|
sidebarId: "releasesSidebar",
|
|
label: "Changelog",
|
|
},
|
|
// {
|
|
// type: "docSidebar",
|
|
// sidebarId: "docsSidebar",
|
|
// label: "Framework",
|
|
// },
|
|
],
|
|
},
|
|
{
|
|
to: "blog",
|
|
label: "Blog",
|
|
position: "right",
|
|
},
|
|
],
|
|
},
|
|
prism: {
|
|
theme: darkCodeTheme,
|
|
darkTheme: darkCodeTheme,
|
|
additionalLanguages: [
|
|
"python",
|
|
"powershell",
|
|
"bash",
|
|
"json",
|
|
"javascript",
|
|
"jsx",
|
|
],
|
|
},
|
|
colorMode: {
|
|
defaultMode: "light",
|
|
disableSwitch: false,
|
|
respectPrefersColorScheme: false,
|
|
},
|
|
},
|
|
|
|
themes: ["@docusaurus/theme-live-codeblock", "@docusaurus/theme-mermaid"],
|
|
};
|
|
|
|
module.exports = config;
|