diff --git a/autoqa/checklist.md b/autoqa/checklist.md
index ebe0d1163e..2edf108f8f 100644
--- a/autoqa/checklist.md
+++ b/autoqa/checklist.md
@@ -102,9 +102,10 @@ In Remote Model Providers:
- [ ] Groq
- [ ] Gemini
- [ ] Hugging Face
+ - [ ] CometAPI
- [ ] Models should appear as available on the selectable dropdown in chat input once some value is input in the API key field. (it could be the wrong API key)
- [ ] Once a valid API key is used, user can select a model from that provider and chat without any error.
-- [ ] Delete a model and ensure that it doesn't show up in the `Modesl` list view or in the selectable dropdown in chat input.
+- [ ] Delete a model and ensure that it doesn't show up in the `Models` list view or in the selectable dropdown in chat input.
- [ ] Ensure that a deleted model also not selectable or appear in old threads that used it.
- [ ] Adding of new model manually works and user can chat with the newly added model without error (you can add back the model you just delete for testing)
- [ ] [0.6.9] Make sure that Ollama set-up as a custom provider work with Jan
diff --git a/docs/src/pages/docs/desktop/_assets/cometapi.png b/docs/src/pages/docs/desktop/_assets/cometapi.png
new file mode 100644
index 0000000000..705860869c
Binary files /dev/null and b/docs/src/pages/docs/desktop/_assets/cometapi.png differ
diff --git a/docs/src/pages/docs/desktop/remote-models/_meta.json b/docs/src/pages/docs/desktop/remote-models/_meta.json
index 60268b73c9..1919ae4cd8 100644
--- a/docs/src/pages/docs/desktop/remote-models/_meta.json
+++ b/docs/src/pages/docs/desktop/remote-models/_meta.json
@@ -22,5 +22,8 @@
},
"huggingface": {
"title": "Hugging Face"
+ },
+ "cometapi": {
+ "title": "CometAPI"
}
}
diff --git a/docs/src/pages/docs/desktop/remote-models/cometapi.mdx b/docs/src/pages/docs/desktop/remote-models/cometapi.mdx
new file mode 100644
index 0000000000..fa09c02281
--- /dev/null
+++ b/docs/src/pages/docs/desktop/remote-models/cometapi.mdx
@@ -0,0 +1,107 @@
+---
+title: CometAPI
+description: Learn how to integrate CometAPI with Jan for enhanced functionality.
+keywords:
+ [
+ CometAPI,
+ Jan,
+ Jan AI,
+ ChatGPT alternative,
+ conversational AI,
+ large language model,
+ integration,
+ CometAPI integration,
+ API integration,
+ 500+ AI models,
+ unified API
+ ]
+---
+
+import { Callout, Steps } from 'nextra/components'
+import { Settings, Plus } from 'lucide-react'
+
+# CometAPI
+
+Jan supports [CometAPI](https://www.cometapi.com/?utm_source=jan&utm_campaign=integration&utm_medium=integration&utm_content=integration) integration, providing access to 500+ AI models
+through a unified API. CometAPI aggregates models from various providers including GPT, Claude,
+Gemini, Grok, DeepSeek, and Qwen series, offering competitive pricing and comprehensive model access.
+
+## Integrate CometAPI with Jan
+
+
+
+### Step 1: Get Your API Key
+1. Visit [CometAPI Console](https://api.cometapi.com/console/token) and sign in
+2. Create a new API key and/or copy your existing one
+
+
+Ensure your API key has sufficient credits. CometAPI credits work across all 500+ available models.
+
+
+### Step 2: Configure Jan
+
+1. Navigate to **Settings** ()
+2. Under **Model Providers**, select **CometAPI**
+3. Insert your **API Key**
+
+
+
+
+
+### Step 3: Start Using CometAPI Models
+
+1. Jump into any existing **Chat** or create a new one
+2. Select any CometAPI model from the **model selector**
+3. Start chatting with access to 500+ models
+
+
+## Available CometAPI Models
+
+Jan automatically fetches CometAPI's available models. The platform provides access to:
+
+### Popular Model Series:
+- **GPT Series**: `gpt-5-chat-latest`, `chatgpt-4o-latest`, `gpt-5-mini`, `gpt-5-nano`, `gpt-5`, `gpt-4.1`, `gpt-4o-mini`
+- **Claude Series**: `claude-opus-4-1-20250805`, `claude-sonnet-4-20250514`, `claude-3-7-sonnet-latest`, `claude-3-5-haiku-latest`
+- **Gemini Series**: `gemini-2.5-pro`, `gemini-2.5-flash`, `gemini-2.5-flash-lite`, `gemini-2.0-flash`
+- **Grok Series**: `grok-4-0709`, `grok-3`, `grok-3-mini`, `grok-2-image-1212`
+- **DeepSeek Series**: `deepseek-v3.1`, `deepseek-v3`, `deepseek-r1-0528`, `deepseek-chat`, `deepseek-reasoner`
+- **Qwen Series**: `qwen3-30b-a3b`, `qwen3-coder-plus-2025-07-22`
+
+### Custom Model Configuration:
+For models not automatically listed in Jan, you can manually add them by following the instructions in [Add Cloud Models](/docs/manage-models):
+- See the complete list of available models at [CometAPI Pricing](https://api.cometapi.com/pricing)
+- Use the exact model `id` from the [CometAPI Models API](https://api.cometapi.com/v1/models)
+- The `id` property must match the model name exactly (e.g., `gpt-5-mini`, `claude-sonnet-4-20250514`)
+
+
+CometAPI automatically filters out non-chat models (image generation, audio, video, and utility models) to show only conversational AI models in Jan.
+
+
+## Troubleshooting
+
+Common issues and solutions:
+
+**1. API Key Issues**
+- Verify your API key is correct and not expired
+- Check if you have sufficient credits in your CometAPI account
+- Ensure you have access to the model you're trying to use
+- Test your API key with the [CometAPI Models endpoint](https://api.cometapi.com/v1/models)
+
+**2. Connection Problems**
+- Check your internet connection
+- Verify CometAPI service availability
+- Look for error messages in [Jan's logs](/docs/troubleshooting#how-to-get-error-logs)
+- Ensure the base URL `https://api.cometapi.com/v1/` is accessible
+
+**3. Model Unavailable**
+- Confirm the model is currently available on CometAPI
+- Check if you're using the correct model ID format
+- Verify your account has access to the specific model
+- Some models may require higher tier access
+
+**4. Rate Limiting**
+- CometAPI implements rate limiting per model and tier
+- Consider upgrading your plan for higher rate limits
+- Distribute requests across multiple models if needed
+
+Need more help? Join the [CometAPI Discord community](https://discord.gg/cometapi) or check the [CometAPI documentation](https://api.cometapi.com/doc). You can also visit their [GitHub organization](https://github.com/cometapi-dev) for additional resources.
\ No newline at end of file
diff --git a/tests/checklist.md b/tests/checklist.md
index 8e9e65d4b3..d42d7ce87f 100644
--- a/tests/checklist.md
+++ b/tests/checklist.md
@@ -117,6 +117,7 @@ In Remote Model Providers:
- [ ] Groq
- [ ] Gemini
- [ ] Hugging Face
+ - [ ] CometAPI
- [ ] Models should appear as available on the selectable dropdown in chat input once some value is input in the API key field. (it could be the wrong API key)
- [ ] Once a valid API key is used, user can select a model from that provider and chat without any error.
- [ ] Delete a model and ensure that it doesn't show up in the `Models` list view or in the selectable dropdown in chat input.
diff --git a/web-app/public/images/model-provider/cometapi.svg b/web-app/public/images/model-provider/cometapi.svg
new file mode 100644
index 0000000000..07b60509af
--- /dev/null
+++ b/web-app/public/images/model-provider/cometapi.svg
@@ -0,0 +1,8 @@
+
+
+
diff --git a/web-app/src/consts/providers.ts b/web-app/src/consts/providers.ts
index d3d8068881..ec29da4b7b 100644
--- a/web-app/src/consts/providers.ts
+++ b/web-app/src/consts/providers.ts
@@ -385,4 +385,227 @@ export const predefinedProviders = [
},
],
},
+ {
+ active: true,
+ api_key: '',
+ base_url: 'https://api.cometapi.com/v1',
+ explore_models_url: 'https://api.cometapi.com/pricing',
+ provider: 'cometapi',
+ settings: [
+ {
+ key: 'api-key',
+ title: 'API Key',
+ description:
+ "The CometAPI uses API keys for authentication. Visit your [API Keys](https://api.cometapi.com/console/token) 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 endpoint to use. See the [CometAPI API documentation](https://api.cometapi.com/doc) for more information.',
+ controller_type: 'input',
+ controller_props: {
+ placeholder: 'https://api.cometapi.com/v1',
+ value: 'https://api.cometapi.com/v1',
+ },
+ },
+ ],
+ models: [
+ // GPT series
+ {
+ id: 'gpt-5-chat-latest',
+ name: 'GPT-5 Chat Latest',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'gpt-5-mini',
+ name: 'GPT-5 Mini',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'gpt-5-nano',
+ name: 'GPT-5 Nano',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'gpt-5',
+ name: 'GPT-5',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'gpt-4.1',
+ name: 'GPT-4.1',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'gpt-4o-mini',
+ name: 'GPT-4o Mini',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'o4-mini-2025-04-16',
+ name: 'o4-mini (2025-04-16)',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'o3-pro-2025-06-10',
+ name: 'o3-pro (2025-06-10)',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ // Claude series
+ {
+ id: 'claude-opus-4-1-20250805',
+ name: 'Claude Opus 4.1 (2025-08-05)',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'claude-opus-4-1-20250805-thinking',
+ name: 'Claude Opus 4.1 Thinking (2025-08-05)',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'claude-sonnet-4-20250514',
+ name: 'Claude Sonnet 4 (2025-05-14)',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'claude-sonnet-4-20250514-thinking',
+ name: 'Claude Sonnet 4 Thinking (2025-05-14)',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'claude-3-7-sonnet-latest',
+ name: 'Claude 3.7 Sonnet Latest',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'claude-3-5-haiku-latest',
+ name: 'Claude 3.5 Haiku Latest',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ // Gemini series
+ {
+ id: 'gemini-2.5-pro',
+ name: 'Gemini 2.5 Pro',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'gemini-2.5-flash',
+ name: 'Gemini 2.5 Flash',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'gemini-2.5-flash-lite',
+ name: 'Gemini 2.5 Flash Lite',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'gemini-2.0-flash',
+ name: 'Gemini 2.0 Flash',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ // Grok series
+ {
+ id: 'grok-4',
+ name: 'Grok 4',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'grok-4-fast-non-reasoning',
+ name: 'Grok 4 Fast Non-Reasoning',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'grok-4-fast-reasoning',
+ name: 'Grok 4 Fast Reasoning',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ // DeepSeek series
+ {
+ id: 'deepseek-v3.1',
+ name: 'DeepSeek V3.1',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'deepseek-chat',
+ name: 'DeepSeek Chat',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'deepseek-reasoner',
+ name: 'DeepSeek Reasoner',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ // Qwen series
+ {
+ id: 'qwen3-30b-a3b',
+ name: 'Qwen3 30B A3B',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ {
+ id: 'qwen3-coder-plus-2025-07-22',
+ name: 'Qwen3 Coder Plus (2025-07-22)',
+ version: '1.0',
+ description: '',
+ capabilities: ['completion'],
+ },
+ ],
+ },
]
diff --git a/web-app/src/lib/utils.ts b/web-app/src/lib/utils.ts
index 6a4fc92acf..7237dbff00 100644
--- a/web-app/src/lib/utils.ts
+++ b/web-app/src/lib/utils.ts
@@ -54,6 +54,8 @@ export function getProviderLogo(provider: string) {
return '/images/model-provider/openai.svg'
case 'azure':
return '/images/model-provider/azure.svg'
+ case 'cometapi':
+ return '/images/model-provider/cometapi.svg'
default:
return undefined
}
@@ -73,6 +75,8 @@ export const getProviderTitle = (provider: string) => {
return 'Gemini'
case 'huggingface':
return 'Hugging Face'
+ case 'cometapi':
+ return 'CometAPI'
default:
return provider.charAt(0).toUpperCase() + provider.slice(1)
}