diff --git a/docs/.astro/collections/docs.schema.json b/docs/.astro/collections/docs.schema.json new file mode 100644 index 000000000..623835a8d --- /dev/null +++ b/docs/.astro/collections/docs.schema.json @@ -0,0 +1,643 @@ +{ + "$ref": "#/definitions/docs", + "definitions": { + "docs": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "editUrl": { + "anyOf": [ + { + "type": "string", + "format": "uri" + }, + { + "type": "boolean" + } + ], + "default": true + }, + "head": { + "type": "array", + "items": { + "type": "object", + "properties": { + "tag": { + "type": "string", + "enum": [ + "title", + "base", + "link", + "style", + "meta", + "script", + "noscript", + "template" + ] + }, + "attrs": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "not": {} + } + ] + } + }, + "content": { + "type": "string" + } + }, + "required": [ + "tag" + ], + "additionalProperties": false + }, + "default": [] + }, + "tableOfContents": { + "anyOf": [ + { + "type": "object", + "properties": { + "minHeadingLevel": { + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 2 + }, + "maxHeadingLevel": { + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 3 + } + }, + "additionalProperties": false + }, + { + "type": "boolean" + } + ], + "default": { + "minHeadingLevel": 2, + "maxHeadingLevel": 3 + } + }, + "template": { + "type": "string", + "enum": [ + "doc", + "splash" + ], + "default": "doc" + }, + "hero": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "tagline": { + "type": "string" + }, + "image": { + "anyOf": [ + { + "type": "object", + "properties": { + "alt": { + "type": "string", + "default": "" + }, + "file": { + "type": "string" + } + }, + "required": [ + "file" + ], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "alt": { + "type": "string", + "default": "" + }, + "dark": { + "type": "string" + }, + "light": { + "type": "string" + } + }, + "required": [ + "dark", + "light" + ], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "html": { + "type": "string" + } + }, + "required": [ + "html" + ], + "additionalProperties": false + } + ] + }, + "actions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "text": { + "type": "string" + }, + "link": { + "type": "string" + }, + "variant": { + "type": "string", + "enum": [ + "primary", + "secondary", + "minimal" + ], + "default": "primary" + }, + "icon": { + "anyOf": [ + { + "type": "string", + "enum": [ + "up-caret", + "down-caret", + "right-caret", + "left-caret", + "up-arrow", + "down-arrow", + "right-arrow", + "left-arrow", + "bars", + "translate", + "pencil", + "pen", + "document", + "add-document", + "setting", + "external", + "download", + "cloud-download", + "moon", + "sun", + "laptop", + "open-book", + "information", + "magnifier", + "forward-slash", + "close", + "error", + "warning", + "approve-check-circle", + "approve-check", + "rocket", + "star", + "puzzle", + "list-format", + "random", + "comment", + "comment-alt", + "heart", + "github", + "gitlab", + "bitbucket", + "codePen", + "farcaster", + "discord", + "gitter", + "twitter", + "x.com", + "mastodon", + "codeberg", + "youtube", + "threads", + "linkedin", + "twitch", + "azureDevOps", + "microsoftTeams", + "instagram", + "stackOverflow", + "telegram", + "rss", + "facebook", + "email", + "phone", + "reddit", + "patreon", + "signal", + "slack", + "matrix", + "hackerOne", + "openCollective", + "blueSky", + "discourse", + "zulip", + "pinterest", + "tiktok", + "astro", + "alpine", + "pnpm", + "biome", + "bun", + "mdx", + "apple", + "linux", + "homebrew", + "nix", + "starlight", + "pkl", + "node", + "cloudflare", + "vercel", + "netlify", + "deno", + "jsr", + "nostr", + "backstage", + "confluence", + "jira", + "storybook", + "vscode", + "jetbrains", + "zed", + "vim", + "figma", + "sketch", + "npm", + "sourcehut", + "substack", + "seti:folder", + "seti:bsl", + "seti:mdo", + "seti:salesforce", + "seti:asm", + "seti:bicep", + "seti:bazel", + "seti:c", + "seti:c-sharp", + "seti:html", + "seti:cpp", + "seti:clojure", + "seti:coldfusion", + "seti:config", + "seti:crystal", + "seti:crystal_embedded", + "seti:json", + "seti:css", + "seti:csv", + "seti:xls", + "seti:cu", + "seti:cake", + "seti:cake_php", + "seti:d", + "seti:word", + "seti:elixir", + "seti:elixir_script", + "seti:hex", + "seti:elm", + "seti:favicon", + "seti:f-sharp", + "seti:git", + "seti:go", + "seti:godot", + "seti:gradle", + "seti:grails", + "seti:graphql", + "seti:hacklang", + "seti:haml", + "seti:mustache", + "seti:haskell", + "seti:haxe", + "seti:jade", + "seti:java", + "seti:javascript", + "seti:jinja", + "seti:julia", + "seti:karma", + "seti:kotlin", + "seti:dart", + "seti:liquid", + "seti:livescript", + "seti:lua", + "seti:markdown", + "seti:argdown", + "seti:info", + "seti:clock", + "seti:maven", + "seti:nim", + "seti:github", + "seti:notebook", + "seti:nunjucks", + "seti:npm", + "seti:ocaml", + "seti:odata", + "seti:perl", + "seti:php", + "seti:pipeline", + "seti:pddl", + "seti:plan", + "seti:happenings", + "seti:powershell", + "seti:prisma", + "seti:pug", + "seti:puppet", + "seti:purescript", + "seti:python", + "seti:react", + "seti:rescript", + "seti:R", + "seti:ruby", + "seti:rust", + "seti:sass", + "seti:spring", + "seti:slim", + "seti:smarty", + "seti:sbt", + "seti:scala", + "seti:ethereum", + "seti:stylus", + "seti:svelte", + "seti:swift", + "seti:db", + "seti:terraform", + "seti:tex", + "seti:default", + "seti:twig", + "seti:typescript", + "seti:tsconfig", + "seti:vala", + "seti:vite", + "seti:vue", + "seti:wasm", + "seti:wat", + "seti:xml", + "seti:yml", + "seti:prolog", + "seti:zig", + "seti:zip", + "seti:wgt", + "seti:illustrator", + "seti:photoshop", + "seti:pdf", + "seti:font", + "seti:image", + "seti:svg", + "seti:sublime", + "seti:code-search", + "seti:shell", + "seti:video", + "seti:audio", + "seti:windows", + "seti:jenkins", + "seti:babel", + "seti:bower", + "seti:docker", + "seti:code-climate", + "seti:eslint", + "seti:firebase", + "seti:firefox", + "seti:gitlab", + "seti:grunt", + "seti:gulp", + "seti:ionic", + "seti:platformio", + "seti:rollup", + "seti:stylelint", + "seti:yarn", + "seti:webpack", + "seti:lock", + "seti:license", + "seti:makefile", + "seti:heroku", + "seti:todo", + "seti:ignored" + ] + }, + { + "type": "string", + "pattern": "^\\; + } + interface Render { + '.md': Promise; + } + + export interface RenderedContent { + html: string; + metadata?: { + imagePaths: Array; + [key: string]: unknown; + }; + } +} + +declare module 'astro:content' { + type Flatten = T extends { [K: string]: infer U } ? U : never; + + export type CollectionKey = keyof AnyEntryMap; + export type CollectionEntry = Flatten; + + export type ContentCollectionKey = keyof ContentEntryMap; + export type DataCollectionKey = keyof DataEntryMap; + + type AllValuesOf = T extends any ? T[keyof T] : never; + type ValidContentEntrySlug = AllValuesOf< + ContentEntryMap[C] + >['slug']; + + export type ReferenceDataEntry< + C extends CollectionKey, + E extends keyof DataEntryMap[C] = string, + > = { + collection: C; + id: E; + }; + export type ReferenceContentEntry< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}) = string, + > = { + collection: C; + slug: E; + }; + + /** @deprecated Use `getEntry` instead. */ + export function getEntryBySlug< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}), + >( + collection: C, + // Note that this has to accept a regular string too, for SSR + entrySlug: E, + ): E extends ValidContentEntrySlug + ? Promise> + : Promise | undefined>; + + /** @deprecated Use `getEntry` instead. */ + export function getDataEntryById( + collection: C, + entryId: E, + ): Promise>; + + export function getCollection>( + collection: C, + filter?: (entry: CollectionEntry) => entry is E, + ): Promise; + export function getCollection( + collection: C, + filter?: (entry: CollectionEntry) => unknown, + ): Promise[]>; + + export function getEntry< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}), + >( + entry: ReferenceContentEntry, + ): E extends ValidContentEntrySlug + ? Promise> + : Promise | undefined>; + export function getEntry< + C extends keyof DataEntryMap, + E extends keyof DataEntryMap[C] | (string & {}), + >( + entry: ReferenceDataEntry, + ): E extends keyof DataEntryMap[C] + ? Promise + : Promise | undefined>; + export function getEntry< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}), + >( + collection: C, + slug: E, + ): E extends ValidContentEntrySlug + ? Promise> + : Promise | undefined>; + export function getEntry< + C extends keyof DataEntryMap, + E extends keyof DataEntryMap[C] | (string & {}), + >( + collection: C, + id: E, + ): E extends keyof DataEntryMap[C] + ? string extends keyof DataEntryMap[C] + ? Promise | undefined + : Promise + : Promise | undefined>; + + /** Resolve an array of entry references from the same collection */ + export function getEntries( + entries: ReferenceContentEntry>[], + ): Promise[]>; + export function getEntries( + entries: ReferenceDataEntry[], + ): Promise[]>; + + export function render( + entry: AnyEntryMap[C][string], + ): Promise; + + export function reference( + collection: C, + ): import('astro/zod').ZodEffects< + import('astro/zod').ZodString, + C extends keyof ContentEntryMap + ? ReferenceContentEntry> + : ReferenceDataEntry + >; + // Allow generic `string` to avoid excessive type errors in the config + // if `dev` is not running to update as you edit. + // Invalid collection names will be caught at build time. + export function reference( + collection: C, + ): import('astro/zod').ZodEffects; + + type ReturnTypeOrOriginal = T extends (...args: any[]) => infer R ? R : T; + type InferEntrySchema = import('astro/zod').infer< + ReturnTypeOrOriginal['schema']> + >; + + type ContentEntryMap = { + + }; + + type DataEntryMap = { + "docs": Record; + + }; + + type AnyEntryMap = ContentEntryMap & DataEntryMap; + + export type ContentConfig = typeof import("../src/content.config.mjs"); +} diff --git a/docs/.astro/data-store.json b/docs/.astro/data-store.json new file mode 100644 index 000000000..ad047fc08 --- /dev/null +++ b/docs/.astro/data-store.json @@ -0,0 +1 @@ +[["Map",1,2],"meta::meta",["Map",3,4,5,6],"astro-version","5.9.3","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"experimentalDefaultStyles\":true},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"responsiveImages\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"csp\":false},\"legacy\":{\"collections\":false}}"] \ No newline at end of file diff --git a/docs/.astro/settings.json b/docs/.astro/settings.json new file mode 100644 index 000000000..04c1fc39c --- /dev/null +++ b/docs/.astro/settings.json @@ -0,0 +1,5 @@ +{ + "_variables": { + "lastUpdateCheck": 1750832446593 + } +} \ No newline at end of file diff --git a/docs/.astro/types.d.ts b/docs/.astro/types.d.ts new file mode 100644 index 000000000..03d7cc43f --- /dev/null +++ b/docs/.astro/types.d.ts @@ -0,0 +1,2 @@ +/// +/// \ No newline at end of file diff --git a/docs/src/pages/_meta.json b/docs/src/pages/_meta.json index bd3d96dc8..ee7b176d5 100644 --- a/docs/src/pages/_meta.json +++ b/docs/src/pages/_meta.json @@ -11,6 +11,21 @@ "type": "page", "title": "Documentation" }, + "cortex": { + "type": "page", + "title": "Cortex", + "display": "hidden" + }, + "integrations": { + "type": "page", + "title": "Integrations", + "display": "hidden" + }, + "platforms": { + "type": "page", + "title": "Platforms", + "display": "hidden" + }, "changelog": { "type": "page", "title": "Changelog", diff --git a/docs/src/pages/docs/_assets/jan-nano-bench.png b/docs/src/pages/docs/_assets/jan-nano-bench.png new file mode 100644 index 000000000..ce923bc22 Binary files /dev/null and b/docs/src/pages/docs/_assets/jan-nano-bench.png differ diff --git a/docs/src/pages/docs/_assets/jan-nano-demo.mp4 b/docs/src/pages/docs/_assets/jan-nano-demo.mp4 new file mode 100644 index 000000000..efcadf999 Binary files /dev/null and b/docs/src/pages/docs/_assets/jan-nano-demo.mp4 differ diff --git a/docs/src/pages/docs/_meta.json b/docs/src/pages/docs/_meta.json index 18f6abef9..4bcf5110b 100644 --- a/docs/src/pages/docs/_meta.json +++ b/docs/src/pages/docs/_meta.json @@ -1,4 +1,8 @@ { + "-- Switcher": { + "type": "separator", + "title": "Switcher" + }, "index": "Overview", "how-to-separator": { "title": "HOW TO", @@ -6,8 +10,7 @@ }, "desktop": "Install 👋 Jan", "threads": "Start Chatting", - "manage-models": "Manage Models", - "menlo-models": "Menlo Models", + "jan-models": "Use Jan Models", "assistants": "Create Assistants", "tutorials-separators": { @@ -16,8 +19,7 @@ }, "quickstart": "Quickstart", "remote-models": "Connect to Remote Models", - "server-examples": "Provide AI to Tools", - "mcp": "Model Context Protocol", + "server-examples": "Integrations", "explanation-separator": { "title": "EXPLANATION", @@ -26,18 +28,25 @@ "llama-cpp": "Local AI Engine", "api-server": "Server Overview", "data-folder": "Jan Data Folder", - "privacy": "Privacy", "privacy-policy": { "type": "page", "display": "hidden", "title": "Privacy Policy" }, + "advanced-separator": { + "title": "ADVANCED", + "type": "separator" + }, + "manage-models": "Manage Models", + "mcp": "Model Context Protocol", + "reference-separator": { "title": "REFERENCE", "type": "separator" }, "settings": "Settings", "troubleshooting": "Troubleshooting", - "model-parameters": "Model Parameters" + "model-parameters": "Model Parameters", + "privacy": "Privacy" } diff --git a/docs/src/pages/docs/jan-models/jan-nano-128.mdx b/docs/src/pages/docs/jan-models/jan-nano-128.mdx new file mode 100644 index 000000000..c1a1e3d4a --- /dev/null +++ b/docs/src/pages/docs/jan-models/jan-nano-128.mdx @@ -0,0 +1,139 @@ +--- +title: Jan Nano 128k +description: Jan Models +keywords: + [ + Jan, + Jan Models, + Jan Model, + Jan Model List, + Menlo Models, + Menlo Model, + Jan-Nano-Gguf, + ReZero, + Model Context Protocol, + MCP, + ] +--- + +import { Callout } from 'nextra/components' + +# Jan-Nano-128k + +> Enabling deeper research through extended context understanding. + +Jan-Nano-128k represents a notable advancement in compact language models for different applications. Building upon the +success of Jan-Nano-32k, this enhanced version features a native 128k context window that enables deeper, more comprehensive +research capabilities without the performance degradation typically associated with context extension methods. + +You can have a look at all of our models, and download them from the HuggingFace [Menlo Models page](https://huggingface.co/Menlo). + +**Key Improvements:** + +- 🔍 Deeper Research: Extended context allows for processing entire research papers, lengthy documents, and complex multi-turn conversations +- ⚡ Native 128k Window: Built to handle long contexts efficiently, maintaining performance across the full context range +- 📈 Enhanced Performance: Unlike traditional context extension methods, Jan-Nano-128k's performance remains consistent with longer contexts + +This model maintains full compatibility with Model Context Protocol (MCP) servers while dramatically expanding the scope of research +tasks it can handle in a single session. + + +## Why Jan-Nano-128k? + +Most small models hit a wall at 8-32k tokens. Jan-Nano-128k goes beyond this limitation with a native 128k context window—that's roughly +300 pages of text or an entire novel's worth of information processed simultaneously. + +Unlike YaRN or PI methods that retrofit models beyond their limits and degrade performance, Jan-Nano-128k was architecturally rewired for +128k contexts from the ground up. The result: an inverse scaling behavior where performance actually improves with longer contexts, +maintaining consistent accuracy from 1k to 128k tokens as the model leverages more information for synthesis. + + + +**Position Interpolation (PI):** A method that extends a model's context by scaling down position indices to fit within the original context +window. For example, to extend a 4k model to 32k, PI compresses the 32k positions into the original 4k range by dividing each position by 8. + +**YaRN (Yet another RoPE extensioN method):** A more sophisticated context extension method that preserves frequently occurring tokens while +selectively scaling others. YaRN divides position embeddings into frequency groups and applies different scaling factors to each, resulting +in more efficient training and better performance than PI. + +The key difference is that PI applies uniform scaling across all dimensions, while YaRN uses targeted interpolation based on frequency analysis—preserving +high-frequency information that's crucial for distinguishing nearby tokens while interpolating lower frequencies more aggressively. + + +**Applications unlocked:** +- **Academic**: Extract key findings from 50+ papers simultaneously +- **Legal**: Pinpoint relevant clauses across thousand-page contracts +- **Code**: Trace specific functions through massive codebases +- **Business**: Distill insights from quarters of financial data +- **Content**: Maintain narrative coherence across book-length outputs + +**MCP Usage:** Jan-Nano-128k doesn't memorize, it orchestrates. With MCP integration, it becomes a research conductor that fetches dozens +of sources, holds everything in active memory, extracts precisely what's needed, and synthesizes findings across a marathon research session. It's +not about understanding every word; it's about finding the needle in a haystack of haystacks. + +## Evaluation + +Jan-Nano-128k has been rigorously evaluated on the SimpleQA benchmark using our MCP-based methodology, demonstrating superior performance compared to its predecessor: + +![Jan-Nano-128k Performance](../_assets/jan-nano-bench.png) + +**Key findings:** +- 15% improvement over Jan-Nano-32k on complex multi-document tasks +- Consistent performance across all context lengths (no cliff at 64k like other extended models) +- Superior citation accuracy when handling 10+ sources simultaneously + +## 🖥️ How to Run Locally + +### Demo + + + +### Quick Start Guide + +1. **Download Jan** +2. **Download Jan-Nano-128k** +3. **Enable MCP**, the serper or the exa MCPs work very well with Jan-Nano-128k +4. **Start researching** + +### Usage + +Deploy using VLLM: + +```bash +vllm serve Menlo/Jan-nano-128k \ + --host 0.0.0.0 \ + --port 1234 \ + --enable-auto-tool-choice \ + --tool-call-parser hermes \ + --rope-scaling '{"rope_type":"yarn","factor":3.2,"original_max_position_embeddings":40960}' --max-model-len 131072 +``` + +Or with `llama-server` from `llama.cpp`: + +```bash +llama-server ... --rope-scaling yarn --rope-scale 3.2 --yarn-orig-ctx 40960 +``` + +**Note:** The chat template is included in the tokenizer. For troubleshooting, download the [Non-think chat template](https://qwen.readthedocs.io/en/latest/_downloads/c101120b5bebcc2f12ec504fc93a965e/qwen3_nonthinking.jinja). + +### Recommended Sampling Parameters + +```yaml +Temperature: 0.7 +Top-p: 0.8 +Top-k: 20 +Min-p: 0.0 +``` + +### Hardware Requirements +- **Minimum**: 16GB RAM for Q4 quantization +- **Recommended**: 24GB RAM for Q8 quantization +- **Optimal**: 32GB+ RAM for full precision + +## 🤝 Community & Support +- **Discussions**: [HuggingFace Community](https://huggingface.co/Menlo/Jan-nano-128k/discussions) +- **Issues**: [GitHub Repository](https://github.com/menloresearch/deep-research/issues) +- **Discord**: Join our research community for tips and best practices diff --git a/docs/src/pages/docs/menlo-models/jan-nano.mdx b/docs/src/pages/docs/jan-models/jan-nano-32.mdx similarity index 80% rename from docs/src/pages/docs/menlo-models/jan-nano.mdx rename to docs/src/pages/docs/jan-models/jan-nano-32.mdx index 7919a4b86..81573de65 100644 --- a/docs/src/pages/docs/menlo-models/jan-nano.mdx +++ b/docs/src/pages/docs/jan-models/jan-nano-32.mdx @@ -1,5 +1,5 @@ --- -title: Jan Nano +title: Jan Nano 32k description: Jan-Nano-Gguf Model keywords: [ @@ -20,15 +20,26 @@ import { Callout } from 'nextra/components' # Jan Nano -Jan-Nano is a compact 4-billion parameter language model specifically designed and trained for deep -research tasks. This model has been optimized to work seamlessly with Model Context Protocol (MCP) servers, -enabling efficient integration with various research tools and data sources. +![Jan Nano](../_assets/jan-nano0.png) + +## Why Jan Nano? + +Most language models face a fundamental tradeoff where powerful capabilities require a lot of computational resources. Jan +Nano breaks this constraint through a focused design philosophy where instead of trying to know everything, it excels at +knowing how to find anything. + + +## What is Jan Nano? + +Jan Nano is a compact 4-billion parameter language model specifically designed and trained for deep research tasks. +This model has been optimized to work seamlessly with Model Context Protocol (MCP) servers, enabling efficient integration +with various research tools and data sources. The model and its different model variants are fully supported by Jan. - Jan-Nano can be used by Jan's stable version but its true capabilities shine in Jan's beta version, which - offers MCP support. You can download Jan's beta version from [here](https://jan.ai/docs/desktop/beta). + To use Jan-Nano, you will need to use a search engine via MCP. You can enable MCP in the **Settings** + tab under **Advanced Settings**. @@ -45,29 +56,29 @@ The model and its different model variants are fully supported by Jan. - RTX 30/40 series or newer -## Using Jan-Nano +## Using Jan-Nano-32k -### Step 1 -Download Jan Beta from [here](https://jan.ai/docs/desktop/beta). +**Step 1** +Download Jan from [here](https://jan.ai/docs/desktop/). -### Step 2 +**Step 2** Go to the Hub Tab, search for Jan-Nano-Gguf, and click on the download button to the best model size for your system. ![Jan Nano](../_assets/jan-nano1.png) -### Step 3 +**Step 3** Go to **Settings** > **Model Providers** > **Llama.cpp** click on the pencil icon and enable tool use for Jan-Nano-Gguf. -### Step 4 +**Step 4** To take advantage of Jan-Nano's full capabilities, you need to enable MCP support. We're going to use it with Serper's API. You can get a free API key from [here](https://serper.dev/). Sign up and they will immediately generate one for you. -### Step 5 +**Step 5** Add the serper MCP to Jan via the **Settings** > **MCP Servers** tab. ![Serper MCP](../_assets/serper-mcp.png) -### Step 6 +**Step 6** Open up a new chat and ask Jan-Nano to search the web for you. ![Jan Nano](../_assets/jan-nano-demo.gif) diff --git a/docs/src/pages/docs/mcp.mdx b/docs/src/pages/docs/mcp.mdx index 152aae448..b496a19ed 100644 --- a/docs/src/pages/docs/mcp.mdx +++ b/docs/src/pages/docs/mcp.mdx @@ -21,6 +21,49 @@ import { Callout, Steps } from 'nextra/components' # Using the Model Context Protocol (MCP) in Jan +```mermaid +graph TD + subgraph "What is MCP?" + You[You using Jan Desktop] + Claude[Jan AI Assistant] + + subgraph "Your Connected Tools" + Files[📁 Your Files
Documents, folders,
text files] + Database[📊 Your Data
Spreadsheets,
databases] + WebServices[🌐 Online Services
GitHub, Slack,
Google Drive] + Custom[🔧 Custom Tools
Special programs
you've added] + end + + subgraph "What Jan Can Do" + Read[Read & Understand
- View your files
- Check your data
- See updates] + Action[Take Actions
- Search for info
- Create content
- Run commands] + Templates[Use Templates
- Common tasks
- Saved prompts
- Workflows] + end + end + + You --> Claude + Claude -->|"Can I see this file?"| Files + Claude -->|"What's in my database?"| Database + Claude -->|"Check my GitHub"| WebServices + Claude -->|"Run this tool"| Custom + + Files --> Read + Database --> Read + WebServices --> Action + Custom --> Templates + + style You fill:transparent + style Claude fill:transparent + style Files fill:transparent + style Database fill:transparent + style WebServices fill:transparent + style Custom fill:transparent + style Read fill:transparent + style Action fill:transparent + style Templates fill:transparent +``` + + Jan now supports the **Model Context Protocol (MCP)**, an open standard designed to allow language models to interact with external tools and data sources. diff --git a/docs/src/pages/docs/menlo-models/_meta.json b/docs/src/pages/docs/menlo-models/_meta.json deleted file mode 100644 index ebbe2765c..000000000 --- a/docs/src/pages/docs/menlo-models/_meta.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "overview": { - "title": "Overview", - "href": "/docs/menlo-models/overview" - }, - "jan-nano": { - "title": "Jan Nano", - "href": "/docs/menlo-models/jan-nano" - } -} diff --git a/docs/src/pages/docs/menlo-models/overview.mdx b/docs/src/pages/docs/menlo-models/overview.mdx deleted file mode 100644 index b63209fef..000000000 --- a/docs/src/pages/docs/menlo-models/overview.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Overview -description: Jan Models -keywords: - [ - Jan, - Jan Models, - Jan Model, - Jan Model List, - Menlo Models, - Menlo Model, - Jan-Nano-Gguf, - ReZero, - Model Context Protocol, - MCP, - ] ---- - -# Menlo Models - -At Menlo, we have focused on creating a series of models that are optimized for all sorts of tasks, including -web search, deep research, robotic control, and using MCPs. Our latest model, Jan-Nano-Gguf, is available in Jan -right now providing excellent results on tasks that use MCPs. - -You can have a look at all of our models, and download them from the HuggingFace [Menlo Models page](https://huggingface.co/Menlo). - -## Jan-Nano-Gguf (Available in Jan right now 🚀) - -![Jan Nano](../_assets/jan-nano0.png) - -Jan-Nano-Gguf is a 4-billion parameter model that is optimized for deep research tasks. It has been trained on a -variety of datasets and is designed to be used with the Model Context Protocol (MCP) servers. - - -## ReZero - -ReZero (Retry-Zero) is a reinforcement learning framework that improves RAG systems by rewarding LLMs for retrying -failed queries. Traditional RAG approaches struggle when initial searches fail, but ReZero encourages persistence and -alternative strategies. This increases accuracy from 25% to 46.88% in complex information-seeking tasks. - diff --git a/docs/src/pages/docs/server-examples/interpreter.mdx b/docs/src/pages/docs/server-examples/interpreter.mdx deleted file mode 100644 index 92e3f41b8..000000000 --- a/docs/src/pages/docs/server-examples/interpreter.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Open Interpreter -description: A step-by-step guide on integrating Jan with Open Interpreter. -keywords: - [ - Jan, - Customizable Intelligence, LLM, - local AI, - privacy focus, - free and open source, - private and offline, - conversational AI, - no-subscription fee, - large language models, - Open Interpreter integration, - Open Interpreter, - ] ---- - -import { Callout, Steps } from 'nextra/components' - -# Open Interpreter - -## Integrate Open Interpreter with Jan - -[Open Interpreter](https://github.com/KillianLucas/open-interpreter/) lets LLMs run code (Python, Javascript, Shell, and more) locally. After installing, you can chat with Open Interpreter through a ChatGPT-like interface in your terminal by running `interpreter`. To integrate Open Interpreter with Jan, follow the steps below: - - - -### Step 1: Install Open Interpreter - -1. Install Open Interpreter by running: - -```bash -pip install open-interpreter -``` - -2. A Rust compiler is required to install Open Interpreter. If not already installed, run the following command or go to [this page](https://rustup.rs/) if you are running on Windows: - -```bash -sudo apt install rustc -``` - - - The Rust compiler is necessary for building some native extensions that Open Interpreter requires. - - -### Step 2: Configure Jan's Local API Server - -Before using Open Interpreter, configure the model in `Settings` > `My Model` for Jan and activate its local API server. - -#### Enabling Jan API Server - -1. Click the `<>` button to access the **Local API Server** section in Jan. - -2. Configure the server settings, including **IP Port**, **Cross-Origin-Resource-Sharing (CORS)**, and **Verbose Server Logs**. - -3. Click **Start Server**. - -### Step 3: Set the Open Interpreter Environment - -1. For integration, provide the API Base (`http://localhost:1337/v1`) and the model ID (e.g., `mistral-ins-7b-q4`) when running Open Interpreter. For example, see the code below: - -```zsh -interpreter --api_base http://localhost:1337/v1 --model mistral-ins-7b-q4 -``` - -> **Open Interpreter is now ready for use!** - - \ No newline at end of file diff --git a/docs/src/pages/platforms/_meta.json b/docs/src/pages/platforms/_meta.json new file mode 100644 index 000000000..bfee4c12e --- /dev/null +++ b/docs/src/pages/platforms/_meta.json @@ -0,0 +1,9 @@ +{ + "-- Switcher": { + "type": "separator", + "title": "Switcher" + }, + "index": { + "display": "hidden" + } +} diff --git a/docs/src/pages/platforms/index.mdx b/docs/src/pages/platforms/index.mdx new file mode 100644 index 000000000..a8b9053b4 --- /dev/null +++ b/docs/src/pages/platforms/index.mdx @@ -0,0 +1,87 @@ +--- +title: Coming Soon +description: Exciting new features and platforms are on the way. Stay tuned for Jan Web, Jan Mobile, and our API Platform. +keywords: + [ + Jan, + Customizable Intelligence, LLM, + local AI, + privacy focus, + free and open source, + private and offline, + conversational AI, + no-subscription fee, + large language models, + coming soon, + Jan Web, + Jan Mobile, + API Platform, + ] +--- + +import { Callout } from 'nextra/components' + +
+
+

+ 🚀 Coming Soon +

+

+ We're working on the next stage of Jan - making our local assistant more powerful and available in more platforms. +

+
+ +
+
+
🌐
+

Jan Web

+

+ Access Jan directly from your browser with our powerful web interface +

+
+ +
+
📱
+

Jan Mobile

+

+ Take Jan on the go with our native mobile applications +

+
+ +
+
+

API Platform

+

+ Integrate Jan's capabilities into your applications with our API +

+
+
+ + + **Stay Updated**: Follow our [GitHub repository](https://github.com/menloresearch/jan) and join our [Discord community](https://discord.com/invite/FTk2MvZwJH) for the latest updates on these exciting releases! + + +
+

What to Expect

+
+
+ +
+ Seamless Experience: Unified interface across all platforms +
+
+
+ +
+ Privacy First: Same privacy-focused approach you trust +
+
+
+ +
+ Developer Friendly: Robust APIs and comprehensive documentation +
+
+
+
+
\ No newline at end of file diff --git a/docs/theme.config.tsx b/docs/theme.config.tsx index b09d9c492..59bc8c6c9 100644 --- a/docs/theme.config.tsx +++ b/docs/theme.config.tsx @@ -65,6 +65,54 @@ const config: DocsThemeConfig = { ), }, + sidebar: { + titleComponent: ({ type, title }) => { + // eslint-disable-next-line react-hooks/rules-of-hooks + const { asPath } = useRouter() + if (type === 'separator' && title === 'Switcher') { + return ( +
+ {[ + { title: 'Jan', path: '/docs', Icon: LibraryBig }, + { + title: 'Jan Web', + path: '/platforms', + Icon: BrainCircuit, + }, + { title: 'Jan Mobile', path: '/platforms', Icon: Blocks }, + { + title: 'API Platform', + path: '/platforms', + Icon: Computer, + }, + ].map((item) => + asPath.startsWith(item.path) ? ( +
+ + {item.title} +
+ ) : ( + + + {item.title} + + ) + )} +
+ ) + } + return title + }, + defaultMenuCollapseLevel: 1, + toggleButton: true, + }, toc: { backToTop: true, }, @@ -83,14 +131,14 @@ const config: DocsThemeConfig = { name="description" content={ frontMatter?.description || - `Run LLMs like Mistral or Llama2 locally and offline on your computer, or connect to remote AI APIs like OpenAI’s GPT-4 or Groq.` + `Run LLMs like Mistral or Llama2 locally and offline on your computer, or connect to remote AI APIs like OpenAI's GPT-4 or Groq.` } />