From 8042da21157f786fbb874023e312b4a59a5944fb Mon Sep 17 00:00:00 2001 From: samdickson22 Date: Wed, 29 Oct 2025 17:39:02 -0700 Subject: [PATCH 1/4] feat: add Cerebras provider integration Add Cerebras as a new AI provider with: - OpenAI-compatible API endpoint (https://api.cerebras.ai/v1) - 8 models including Llama 4 Scout, Llama 3.3 70B, GPT OSS 120B, and Qwen variants - Tool calling support for gpt-oss-120b and llama-3.3-70b - Ultra-fast inference speeds (2000-3000 tokens/s) - Complete documentation with setup guide and troubleshooting --- .../docs/desktop/remote-models/_meta.json | 3 + .../docs/desktop/remote-models/cerebras.mdx | 133 ++++++++++++++++++ .../public/images/model-provider/cerebras.png | Bin 0 -> 53938 bytes web-app/src/consts/providers.ts | 91 ++++++++++++ web-app/src/lib/utils.ts | 2 + 5 files changed, 229 insertions(+) create mode 100644 docs/src/pages/docs/desktop/remote-models/cerebras.mdx create mode 100644 web-app/public/images/model-provider/cerebras.png diff --git a/docs/src/pages/docs/desktop/remote-models/_meta.json b/docs/src/pages/docs/desktop/remote-models/_meta.json index 60268b73c9..ce7a19e0c8 100644 --- a/docs/src/pages/docs/desktop/remote-models/_meta.json +++ b/docs/src/pages/docs/desktop/remote-models/_meta.json @@ -2,6 +2,9 @@ "anthropic": { "title": "Anthropic" }, + "cerebras": { + "title": "Cerebras" + }, "cohere": { "title": "Cohere" }, diff --git a/docs/src/pages/docs/desktop/remote-models/cerebras.mdx b/docs/src/pages/docs/desktop/remote-models/cerebras.mdx new file mode 100644 index 0000000000..1ef1aeaa49 --- /dev/null +++ b/docs/src/pages/docs/desktop/remote-models/cerebras.mdx @@ -0,0 +1,133 @@ +--- +title: Cerebras +description: Learn how to integrate Cerebras with Jan for ultra-fast AI inference. +keywords: + [ + Jan, + Customizable Intelligence, LLM, + local AI, + privacy focus, + free and open source, + private and offline, + conversational AI, + no-subscription fee, + large language models, + Cerebras, + ultra-fast inference, + OpenAI compatible, + ] +--- + +import { Callout, Steps } from 'nextra/components' +import { Settings, Plus } from 'lucide-react' + +# Cerebras + +## Overview + +Jan supports Cerebras Inference, enabling you to leverage ultra-fast AI inference with speeds up to 3,000 tokens per second. Cerebras offers OpenAI-compatible endpoints, making integration seamless. + +## Supported Models + +### Production Models +- **Llama 4 Scout** (`llama-4-scout-17b-16e-instruct`) - 109B parameters, ~2600 tokens/s +- **Llama 3.1 8B** (`llama3.1-8b`) - 8B parameters, ~2200 tokens/s +- **Llama 3.3 70B** (`llama-3.3-70b`) - 70B parameters, ~2100 tokens/s, supports tool calling +- **OpenAI GPT OSS** (`gpt-oss-120b`) - 120B parameters, ~3000 tokens/s, supports tool calling +- **Qwen 3 32B** (`qwen-3-32b`) - 32B parameters, ~2600 tokens/s + +### Preview Models (Evaluation Only) +- **Qwen 3 235B Instruct** - 235B parameters, ~1400 tokens/s +- **Qwen 3 235B Thinking** - 235B parameters, ~1700 tokens/s +- **Qwen 3 Coder 480B** - 480B parameters, ~2000 tokens/s + + + Preview models are for evaluation only and may be discontinued with short notice. + + The following models are scheduled for deprecation: + - Llama 4 Scout - November 3, 2025 + - Qwen 3 Coder 480B - November 5, 2025 + - Qwen 3 235B Thinking - November 14, 2025 + + +## How to Integrate Cerebras with Jan + + + +### Step 1: Configure Cerebras + +1. Obtain a Cerebras API key from [Cerebras Cloud](https://cloud.cerebras.ai/api-keys) +2. In Jan, navigate to **Settings** () → **Providers** +3. Find **Cerebras** in the provider list and toggle it **On** +4. Click the settings icon next to Cerebras + +### Step 2: Enter API Credentials + +1. In the **API Key** field, paste your Cerebras API key +2. The **Base URL** should be pre-filled with `https://api.cerebras.ai/v1` +3. Click **Save** or the changes will auto-save + +### Step 3: Select Models + +1. Click **Fetch Models** to retrieve available Cerebras models +2. Navigate to **Settings** → **Models** or start a new conversation +3. Select a Cerebras model from the model dropdown +4. Start chatting with ultra-fast inference! + + + +## Features + +### Tool Calling +Cerebras supports tool calling (function calling) for: +- `gpt-oss-120b` +- `llama-3.3-70b` + +### Streaming +All Cerebras models support streaming responses for real-time output. + + + Streaming is not supported for reasoning models when using JSON mode or tool calling together. + + +### Developer-Level Instructions (gpt-oss-120b) +The `gpt-oss-120b` model treats system messages as developer-level instructions, giving them stronger influence than standard OpenAI behavior. + +## Limitations + +The following OpenAI parameters are **not supported** by Cerebras and will return a 400 error: +- `frequency_penalty` +- `logit_bias` +- `presence_penalty` +- `parallel_tool_calls` +- `service_tier` + +## Troubleshooting + +### Authentication Failed +- Verify your API key is correct +- Ensure you have credits in your Cerebras account +- Check that the API key hasn't expired + +### Models Not Loading +- Click the **Fetch Models** button in provider settings +- Check your internet connection +- Verify the base URL is `https://api.cerebras.ai/v1` + +### Slow Performance +- Cerebras offers extremely fast inference (~2000-3000 tokens/s) +- If experiencing slowness, check your network connection +- Verify you're using production models, not preview models + +## Additional Resources + +- [Cerebras Inference Documentation](https://inference-docs.cerebras.ai/) +- [Cerebras API Reference](https://inference-docs.cerebras.ai/api-reference/chat-completions) +- [Supported Models](https://inference-docs.cerebras.ai/supported-models) +- [Cerebras Pricing](https://www.cerebras.ai/pricing) + +## Support + +For Cerebras-specific issues, contact [Cerebras Support](https://www.cerebras.ai/support). + +For Jan integration issues, visit [Jan GitHub](https://github.com/janhq/jan/issues). diff --git a/web-app/public/images/model-provider/cerebras.png b/web-app/public/images/model-provider/cerebras.png new file mode 100644 index 0000000000000000000000000000000000000000..2cba48e532c77256fb2853e64acfb1f8eb755467 GIT binary patch literal 53938 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:+HpGL<~Vs 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 UM1vj^#*rW+1GCc=C!KHo52g;)5C8xG literal 0 HcmV?d00001 diff --git a/web-app/src/consts/providers.ts b/web-app/src/consts/providers.ts index d3d8068881..180317cc26 100644 --- a/web-app/src/consts/providers.ts +++ b/web-app/src/consts/providers.ts @@ -290,6 +290,97 @@ export const predefinedProviders = [ ], models: [], }, + { + active: true, + api_key: '', + base_url: 'https://api.cerebras.ai/v1', + explore_models_url: 'https://inference-docs.cerebras.ai/supported-models', + provider: 'cerebras', + settings: [ + { + key: 'api-key', + title: 'API Key', + description: + "The Cerebras API uses API keys for authentication. Visit your [API Keys](https://cloud.cerebras.ai/api-keys) page to retrieve the API key you'll use in your requests.", + controller_type: 'input', + controller_props: { + placeholder: 'Insert API Key', + value: '', + type: 'password', + input_actions: ['unobscure', 'copy'], + }, + }, + { + key: 'base-url', + title: 'Base URL', + description: + 'The base OpenAI-compatible endpoint to use. See the [Cerebras API documentation](https://inference-docs.cerebras.ai/api-reference/chat-completions) for more information.', + controller_type: 'input', + controller_props: { + placeholder: 'https://api.cerebras.ai/v1', + value: 'https://api.cerebras.ai/v1', + }, + }, + ], + models: [ + { + id: 'llama-4-scout-17b-16e-instruct', + name: 'Llama 4 Scout (109B params)', + version: '1.0', + description: 'Fast inference with ~2600 tokens/s. Scheduled for deprecation Nov 3, 2025.', + capabilities: ['completion'], + }, + { + id: 'llama3.1-8b', + name: 'Llama 3.1 8B', + version: '1.0', + description: 'Compact model with ~2200 tokens/s.', + capabilities: ['completion'], + }, + { + id: 'llama-3.3-70b', + name: 'Llama 3.3 70B', + version: '1.0', + description: 'Powerful model with ~2100 tokens/s.', + capabilities: ['completion', 'tools'], + }, + { + id: 'gpt-oss-120b', + name: 'OpenAI GPT OSS (120B params)', + version: '1.0', + description: 'Ultra-fast with ~3000 tokens/s. Supports developer-level system instructions.', + capabilities: ['completion', 'tools'], + }, + { + id: 'qwen-3-32b', + name: 'Qwen 3 32B', + version: '1.0', + description: 'Fast Qwen model with ~2600 tokens/s.', + capabilities: ['completion'], + }, + { + id: 'qwen-3-235b-a22b-instruct-2507', + name: 'Qwen 3 235B Instruct (Preview)', + version: '1.0', + description: 'Preview model - evaluation only. ~1400 tokens/s. Deprecates Nov 14, 2025.', + capabilities: ['completion'], + }, + { + id: 'qwen-3-235b-a22b-thinking-2507', + name: 'Qwen 3 235B Thinking (Preview)', + version: '1.0', + description: 'Preview reasoning model - evaluation only. ~1700 tokens/s. Deprecates Nov 14, 2025.', + capabilities: ['completion'], + }, + { + id: 'qwen-3-coder-480b', + name: 'Qwen 3 Coder 480B (Preview)', + version: '1.0', + description: 'Preview coding model - evaluation only. ~2000 tokens/s. Deprecates Nov 5, 2025.', + capabilities: ['completion'], + }, + ], + }, { active: true, api_key: '', diff --git a/web-app/src/lib/utils.ts b/web-app/src/lib/utils.ts index 6a4fc92acf..09c9858a6d 100644 --- a/web-app/src/lib/utils.ts +++ b/web-app/src/lib/utils.ts @@ -46,6 +46,8 @@ export function getProviderLogo(provider: string) { return '/images/model-provider/open-router.svg' case 'groq': return '/images/model-provider/groq.svg' + case 'cerebras': + return '/images/model-provider/cerebras.png' case 'cohere': return '/images/model-provider/cohere.svg' case 'gemini': From 99ebced1a9f029f6a2dba112d76941dc5a6cb44b Mon Sep 17 00:00:00 2001 From: samdickson22 Date: Thu, 30 Oct 2025 13:08:50 -0700 Subject: [PATCH 2/4] fix: add tool calling support to all Cerebras models All 8 Cerebras models support tool calling according to their official documentation. Updated capabilities to include 'tools' for: - llama-4-scout-17b-16e-instruct - llama3.1-8b - qwen-3-32b - qwen-3-235b-a22b-instruct-2507 - qwen-3-235b-a22b-thinking-2507 - qwen-3-coder-480b Also corrected Llama 4 Scout parameter count from 109B to 17B. --- web-app/src/consts/providers.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/web-app/src/consts/providers.ts b/web-app/src/consts/providers.ts index 180317cc26..20ccdcc5b7 100644 --- a/web-app/src/consts/providers.ts +++ b/web-app/src/consts/providers.ts @@ -325,17 +325,17 @@ export const predefinedProviders = [ models: [ { id: 'llama-4-scout-17b-16e-instruct', - name: 'Llama 4 Scout (109B params)', + name: 'Llama 4 Scout (17B params)', version: '1.0', description: 'Fast inference with ~2600 tokens/s. Scheduled for deprecation Nov 3, 2025.', - capabilities: ['completion'], + capabilities: ['completion', 'tools'], }, { id: 'llama3.1-8b', name: 'Llama 3.1 8B', version: '1.0', description: 'Compact model with ~2200 tokens/s.', - capabilities: ['completion'], + capabilities: ['completion', 'tools'], }, { id: 'llama-3.3-70b', @@ -356,28 +356,28 @@ export const predefinedProviders = [ name: 'Qwen 3 32B', version: '1.0', description: 'Fast Qwen model with ~2600 tokens/s.', - capabilities: ['completion'], + capabilities: ['completion', 'tools'], }, { id: 'qwen-3-235b-a22b-instruct-2507', name: 'Qwen 3 235B Instruct (Preview)', version: '1.0', description: 'Preview model - evaluation only. ~1400 tokens/s. Deprecates Nov 14, 2025.', - capabilities: ['completion'], + capabilities: ['completion', 'tools'], }, { id: 'qwen-3-235b-a22b-thinking-2507', name: 'Qwen 3 235B Thinking (Preview)', version: '1.0', description: 'Preview reasoning model - evaluation only. ~1700 tokens/s. Deprecates Nov 14, 2025.', - capabilities: ['completion'], + capabilities: ['completion', 'tools'], }, { id: 'qwen-3-coder-480b', name: 'Qwen 3 Coder 480B (Preview)', version: '1.0', description: 'Preview coding model - evaluation only. ~2000 tokens/s. Deprecates Nov 5, 2025.', - capabilities: ['completion'], + capabilities: ['completion', 'tools'], }, ], }, From 78c754768e1d3a385240e80e7f77bac78788ca60 Mon Sep 17 00:00:00 2001 From: samdickson22 Date: Thu, 30 Oct 2025 13:19:06 -0700 Subject: [PATCH 3/4] docs: update Cerebras documentation to reflect tool calling support on all models - Corrected Llama 4 Scout parameter count from 109B to 17B - Added tool calling support notation for all 8 models - Updated Features section to list all models with tool calling capability --- .../docs/desktop/remote-models/cerebras.mdx | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/docs/src/pages/docs/desktop/remote-models/cerebras.mdx b/docs/src/pages/docs/desktop/remote-models/cerebras.mdx index 1ef1aeaa49..4ad7199417 100644 --- a/docs/src/pages/docs/desktop/remote-models/cerebras.mdx +++ b/docs/src/pages/docs/desktop/remote-models/cerebras.mdx @@ -30,16 +30,16 @@ Jan supports Cerebras Inference, enabling you to leverage ultra-fast AI inferenc ## Supported Models ### Production Models -- **Llama 4 Scout** (`llama-4-scout-17b-16e-instruct`) - 109B parameters, ~2600 tokens/s -- **Llama 3.1 8B** (`llama3.1-8b`) - 8B parameters, ~2200 tokens/s +- **Llama 4 Scout** (`llama-4-scout-17b-16e-instruct`) - 17B parameters, ~2600 tokens/s, supports tool calling +- **Llama 3.1 8B** (`llama3.1-8b`) - 8B parameters, ~2200 tokens/s, supports tool calling - **Llama 3.3 70B** (`llama-3.3-70b`) - 70B parameters, ~2100 tokens/s, supports tool calling - **OpenAI GPT OSS** (`gpt-oss-120b`) - 120B parameters, ~3000 tokens/s, supports tool calling -- **Qwen 3 32B** (`qwen-3-32b`) - 32B parameters, ~2600 tokens/s +- **Qwen 3 32B** (`qwen-3-32b`) - 32B parameters, ~2600 tokens/s, supports tool calling ### Preview Models (Evaluation Only) -- **Qwen 3 235B Instruct** - 235B parameters, ~1400 tokens/s -- **Qwen 3 235B Thinking** - 235B parameters, ~1700 tokens/s -- **Qwen 3 Coder 480B** - 480B parameters, ~2000 tokens/s +- **Qwen 3 235B Instruct** - 235B parameters, ~1400 tokens/s, supports tool calling +- **Qwen 3 235B Thinking** - 235B parameters, ~1700 tokens/s, supports tool calling +- **Qwen 3 Coder 480B** - 480B parameters, ~2000 tokens/s, supports tool calling Preview models are for evaluation only and may be discontinued with short notice. @@ -79,9 +79,15 @@ Jan supports Cerebras Inference, enabling you to leverage ultra-fast AI inferenc ## Features ### Tool Calling -Cerebras supports tool calling (function calling) for: -- `gpt-oss-120b` +All Cerebras models support tool calling (function calling): +- `llama-4-scout-17b-16e-instruct` +- `llama3.1-8b` - `llama-3.3-70b` +- `gpt-oss-120b` +- `qwen-3-32b` +- `qwen-3-235b-a22b-instruct-2507` +- `qwen-3-235b-a22b-thinking-2507` +- `qwen-3-coder-480b` ### Streaming All Cerebras models support streaming responses for real-time output. From 6b621bd172187d736eef0764596e08cd205ec4a9 Mon Sep 17 00:00:00 2001 From: samdickson22 Date: Fri, 31 Oct 2025 14:46:15 -0700 Subject: [PATCH 4/4] fix: limit Cerebras tool calling to compatible models Disable tool calling for 5 Cerebras models that reject JSON schema validation fields (minimum, maximum, default). Only gpt-oss-120b, llama-3.3-70b, and qwen-3-coder-480b support tools with Jan's RAG tool schemas. Root cause: Models have inconsistent JSON schema validation strictness. Most models reject requests containing unsupported fields like minimum/maximum in tool parameter schemas, while 3 models are more lenient. Error returned by strict models: "Unsupported JSON schema fields: {'maximum', 'minimum'}" Models with tools disabled: - llama-4-scout-17b-16e-instruct - llama3.1-8b - qwen-3-32b - qwen-3-235b-a22b-instruct-2507 - qwen-3-235b-a22b-thinking-2507 --- .../docs/desktop/remote-models/cerebras.mdx | 19 +++++++------------ web-app/src/consts/providers.ts | 10 +++++----- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/docs/src/pages/docs/desktop/remote-models/cerebras.mdx b/docs/src/pages/docs/desktop/remote-models/cerebras.mdx index 4ad7199417..ca43e6cf30 100644 --- a/docs/src/pages/docs/desktop/remote-models/cerebras.mdx +++ b/docs/src/pages/docs/desktop/remote-models/cerebras.mdx @@ -30,15 +30,15 @@ Jan supports Cerebras Inference, enabling you to leverage ultra-fast AI inferenc ## Supported Models ### Production Models -- **Llama 4 Scout** (`llama-4-scout-17b-16e-instruct`) - 17B parameters, ~2600 tokens/s, supports tool calling -- **Llama 3.1 8B** (`llama3.1-8b`) - 8B parameters, ~2200 tokens/s, supports tool calling +- **Llama 4 Scout** (`llama-4-scout-17b-16e-instruct`) - 17B parameters, ~2600 tokens/s +- **Llama 3.1 8B** (`llama3.1-8b`) - 8B parameters, ~2200 tokens/s - **Llama 3.3 70B** (`llama-3.3-70b`) - 70B parameters, ~2100 tokens/s, supports tool calling - **OpenAI GPT OSS** (`gpt-oss-120b`) - 120B parameters, ~3000 tokens/s, supports tool calling -- **Qwen 3 32B** (`qwen-3-32b`) - 32B parameters, ~2600 tokens/s, supports tool calling +- **Qwen 3 32B** (`qwen-3-32b`) - 32B parameters, ~2600 tokens/s ### Preview Models (Evaluation Only) -- **Qwen 3 235B Instruct** - 235B parameters, ~1400 tokens/s, supports tool calling -- **Qwen 3 235B Thinking** - 235B parameters, ~1700 tokens/s, supports tool calling +- **Qwen 3 235B Instruct** - 235B parameters, ~1400 tokens/s +- **Qwen 3 235B Thinking** - 235B parameters, ~1700 tokens/s - **Qwen 3 Coder 480B** - 480B parameters, ~2000 tokens/s, supports tool calling @@ -79,14 +79,9 @@ Jan supports Cerebras Inference, enabling you to leverage ultra-fast AI inferenc ## Features ### Tool Calling -All Cerebras models support tool calling (function calling): -- `llama-4-scout-17b-16e-instruct` -- `llama3.1-8b` -- `llama-3.3-70b` +The following Cerebras models support tool calling (function calling): - `gpt-oss-120b` -- `qwen-3-32b` -- `qwen-3-235b-a22b-instruct-2507` -- `qwen-3-235b-a22b-thinking-2507` +- `llama-3.3-70b` - `qwen-3-coder-480b` ### Streaming diff --git a/web-app/src/consts/providers.ts b/web-app/src/consts/providers.ts index 20ccdcc5b7..e8b72303da 100644 --- a/web-app/src/consts/providers.ts +++ b/web-app/src/consts/providers.ts @@ -328,14 +328,14 @@ export const predefinedProviders = [ name: 'Llama 4 Scout (17B params)', version: '1.0', description: 'Fast inference with ~2600 tokens/s. Scheduled for deprecation Nov 3, 2025.', - capabilities: ['completion', 'tools'], + capabilities: ['completion'], }, { id: 'llama3.1-8b', name: 'Llama 3.1 8B', version: '1.0', description: 'Compact model with ~2200 tokens/s.', - capabilities: ['completion', 'tools'], + capabilities: ['completion'], }, { id: 'llama-3.3-70b', @@ -356,21 +356,21 @@ export const predefinedProviders = [ name: 'Qwen 3 32B', version: '1.0', description: 'Fast Qwen model with ~2600 tokens/s.', - capabilities: ['completion', 'tools'], + capabilities: ['completion'], }, { id: 'qwen-3-235b-a22b-instruct-2507', name: 'Qwen 3 235B Instruct (Preview)', version: '1.0', description: 'Preview model - evaluation only. ~1400 tokens/s. Deprecates Nov 14, 2025.', - capabilities: ['completion', 'tools'], + capabilities: ['completion'], }, { id: 'qwen-3-235b-a22b-thinking-2507', name: 'Qwen 3 235B Thinking (Preview)', version: '1.0', description: 'Preview reasoning model - evaluation only. ~1700 tokens/s. Deprecates Nov 14, 2025.', - capabilities: ['completion', 'tools'], + capabilities: ['completion'], }, { id: 'qwen-3-coder-480b',