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** + +
+![CometAPI](../_assets/cometapi.png) +
+ +### 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) }