diff --git a/README.md b/README.md index 371ac34ae..12f99de8e 100644 --- a/README.md +++ b/README.md @@ -128,7 +128,7 @@ preview `ollama launch webbrain --model ` handoff. Details: **Cloud APIs** — OpenAI, Anthropic Claude, Google Gemini, Azure OpenAI, AWS Bedrock, Mistral, DeepSeek, xAI Grok, MiniMax, Kimi, Qwen, z.ai GLM, Groq, Together, Cloudflare, Nvidia NIM, Hugging Face, Fireworks, OpenRouter, and more. -The Providers page ships **119 built-in provider cards on Chromium** (118 on Firefox), +The Providers page ships **120 built-in provider cards on Chromium** (119 on Firefox), including an endpoint-free local WebGPU option with the tested LFM2.5 2.6B preset and an experimental custom Hugging Face ONNX repository option — see the [full catalog](docs/providers-and-models.md#extended-provider-catalog). diff --git a/docs/providers-and-models.md b/docs/providers-and-models.md index 2899123aa..72c84f2cd 100644 --- a/docs/providers-and-models.md +++ b/docs/providers-and-models.md @@ -510,11 +510,11 @@ times the standard rate. ### Extended provider catalog -WebBrain also ships 85 disabled-by-default provider cards. Most are sourced +WebBrain also ships 86 disabled-by-default provider cards. Most are sourced from the OpenCode provider catalog snapshot at commit `62e4641235d7847dadc60da37cca8a023dd54fc1`; provider-specific additions use their official API documentation. Together with the original cards, the -Providers page lists **119 built-in providers on Chromium** and **118 on Firefox**; the +Providers page lists **120 built-in providers on Chromium** and **119 on Firefox**; the difference is the Chromium-only in-browser WebGPU runtime. | IDs | @@ -523,6 +523,7 @@ difference is the Chromium-only in-browser WebGPU runtime. | `freebuff2api`, `google-vertex`, `google-vertex-anthropic`, `helicone`, `iflowcn`, `inception`, `inference`, `io-net`, `jiekou`, `kilo`, `kimi-for-coding`, `kuae-cloud-coding-plan`, `llama`, `lucidquery`, `meganova`, `minimax-cn-coding-plan`, `minimax-coding-plan`, `moark`, `modelscope`, `morph` | | `nano-gpt`, `nearai`, `nebius`, `nova`, `novita-ai`, `ollama-cloud`, `opencode`, `opencode-go`, `opper`, `orcarouter`, `ovhcloud`, `perplexity`, `perplexity-agent`, `poe`, `pollinations`, `privatemode-ai`, `qihang-ai`, `qiniu-ai`, `requesty`, `runcrate`, `scaleway`, `siliconflow`, `siliconflow-cn`, `stackit` | | `stepfun`, `submodel`, `synthetic`, `tencent-coding-plan`, `upstage`, `v0`, `venice`, `vercel`, `vivgrid`, `vultr`, `wandb`, `xiaomi`, `zai-coding-plan`, `zenmux`, `zhipuai`, `zhipuai-coding-plan` | +| `cloudgpu` | Most use the OpenAI-compatible Chat Completions contract and bearer API keys. The exceptions are: @@ -646,6 +647,18 @@ through the existing OpenAI-compatible path. The card starts with vision off because the default model is text-only; enable it for a vision model such as `moonshotai/Kimi-K3`. +#### CloudGPU + +[CloudGPU](https://cloudgpu.app) serves DeepSeek, Kimi, GLM, MiniMax, Qwen and +more through an OpenAI-compatible API at `https://cloudgpu.app/v1`. The live +model list is at `https://cloudgpu.app/v1/models`. + +In WebBrain, open **Providers -> LLM -> CloudGPU**. Paste an API key into the +card, keep the default `deepseek-v4-flash` model (131072 tokens), then click +**Test Connection**. Interactive Ask streaming and tool calls work through the +existing OpenAI-compatible path. The card starts with vision off because the +default model is text-only. + ### Ask response streaming Providers with `supportsAskStreaming` stream visible text during interactive diff --git a/src/chrome/icons/providers/SOURCES.md b/src/chrome/icons/providers/SOURCES.md index 977bc90de..4a63620a7 100644 --- a/src/chrome/icons/providers/SOURCES.md +++ b/src/chrome/icons/providers/SOURCES.md @@ -21,6 +21,7 @@ Most brand marks come from [Lobe Icons](https://github.com/lobehub/lobe-icons) | nearai | WebBrain-authored simple N mark (not an official NEAR brand asset) | | cheaperinference | Cheaper Inference logo mark (cheaperinference.com) | | opper | Opper official logo mark (opper.ai) | +| cloudgpu | CloudGPU logo mark (cloudgpu.app) | | runcrate | Runcrate logo mark (runcrate.ai) | Brand trademarks remain property of their owners; used only for provider identification in the settings UI. diff --git a/src/chrome/icons/providers/cloudgpu.svg b/src/chrome/icons/providers/cloudgpu.svg new file mode 100644 index 000000000..1fcb7efc7 --- /dev/null +++ b/src/chrome/icons/providers/cloudgpu.svg @@ -0,0 +1 @@ +CloudGPU diff --git a/src/chrome/src/providers/provider-catalog.js b/src/chrome/src/providers/provider-catalog.js index 440c1145b..e34b5ad2c 100644 --- a/src/chrome/src/providers/provider-catalog.js +++ b/src/chrome/src/providers/provider-catalog.js @@ -76,6 +76,7 @@ const PROVIDERS = [ provider('cheaperinference', 'Cheaper Inference', 'https://api.cheaperinference.com/v1', 'gpt-5.4-mini', 400000, { apiKeyUrl: 'https://cheaperinference.com', supportsVision: true, suggestions: ['gpt-5.4-mini', 'claude-sonnet-5', 'gemini-3.5-flash', 'deepseek-v4-flash'] }), provider('chutes', 'Chutes', 'https://llm.chutes.ai/v1', 'moonshotai/Kimi-K2.6-TEE', 262144, { apiKeyUrl: 'https://chutes.ai/', supportsVision: true, inputCostPerMillionUsd: 0.66, cacheReadCostPerMillionUsd: 0.33, outputCostPerMillionUsd: 3.5 }), provider('clarifai', 'Clarifai', 'https://api.clarifai.com/v2/ext/openai/v1', 'moonshotai/chat-completion/models/Kimi-K2_6', 262144, { apiKeyUrl: 'https://clarifai.com/settings/security', supportsVision: true, inputCostPerMillionUsd: 0.95, outputCostPerMillionUsd: 4, apiKeyPlaceholder: 'Personal access token' }), + provider('cloudgpu', 'CloudGPU', 'https://cloudgpu.app/v1', 'deepseek-v4-flash', 131072, { apiKeyUrl: 'https://cloudgpu.app', suggestions: ['deepseek-v4-flash', 'deepseek-v4-pro', 'glm-5.3', 'kimi-k3', 'qwen3.5-397b'] }), provider('cloudferro-sherlock', 'CloudFerro Sherlock', 'https://api-sherlock.cloudferro.com/openai/v1', 'meta-llama/Llama-3.3-70B-Instruct', 70000, { apiKeyUrl: 'https://docs.sherlock.cloudferro.com/', inputCostPerMillionUsd: 2.92, outputCostPerMillionUsd: 2.92 }), provider('cohere', 'Cohere', 'https://api.cohere.ai/compatibility/v1', 'command-a-plus-05-2026', 128000, { category: 'cloud', apiKeyUrl: 'https://dashboard.cohere.com/api-keys', inputCostPerMillionUsd: 2.5, outputCostPerMillionUsd: 10, suggestions: ['command-a-plus-05-2026', 'command-a-03-2025'] }), provider('cortecs', 'Cortecs', 'https://api.cortecs.ai/v1', 'deepseek-r1-0528', 164000, { apiKeyUrl: 'https://api.cortecs.ai/v1/models', inputCostPerMillionUsd: 0.585, outputCostPerMillionUsd: 2.307 }), diff --git a/src/firefox/icons/providers/SOURCES.md b/src/firefox/icons/providers/SOURCES.md index b0fcccdf4..7d9cdb776 100644 --- a/src/firefox/icons/providers/SOURCES.md +++ b/src/firefox/icons/providers/SOURCES.md @@ -21,6 +21,7 @@ Most brand marks come from [Lobe Icons](https://github.com/lobehub/lobe-icons) | nearai | WebBrain-authored simple N mark (not an official NEAR brand asset) | | cheaperinference | Cheaper Inference logo mark (cheaperinference.com) | | opper | Opper official logo mark (opper.ai) | +| cloudgpu | CloudGPU logo mark (cloudgpu.app) | | runcrate | Runcrate logo mark (runcrate.ai) | Brand trademarks remain property of their owners; used only for provider identification in the settings UI. diff --git a/src/firefox/icons/providers/cloudgpu.svg b/src/firefox/icons/providers/cloudgpu.svg new file mode 100644 index 000000000..1fcb7efc7 --- /dev/null +++ b/src/firefox/icons/providers/cloudgpu.svg @@ -0,0 +1 @@ +CloudGPU diff --git a/src/firefox/src/providers/provider-catalog.js b/src/firefox/src/providers/provider-catalog.js index 440c1145b..e34b5ad2c 100644 --- a/src/firefox/src/providers/provider-catalog.js +++ b/src/firefox/src/providers/provider-catalog.js @@ -76,6 +76,7 @@ const PROVIDERS = [ provider('cheaperinference', 'Cheaper Inference', 'https://api.cheaperinference.com/v1', 'gpt-5.4-mini', 400000, { apiKeyUrl: 'https://cheaperinference.com', supportsVision: true, suggestions: ['gpt-5.4-mini', 'claude-sonnet-5', 'gemini-3.5-flash', 'deepseek-v4-flash'] }), provider('chutes', 'Chutes', 'https://llm.chutes.ai/v1', 'moonshotai/Kimi-K2.6-TEE', 262144, { apiKeyUrl: 'https://chutes.ai/', supportsVision: true, inputCostPerMillionUsd: 0.66, cacheReadCostPerMillionUsd: 0.33, outputCostPerMillionUsd: 3.5 }), provider('clarifai', 'Clarifai', 'https://api.clarifai.com/v2/ext/openai/v1', 'moonshotai/chat-completion/models/Kimi-K2_6', 262144, { apiKeyUrl: 'https://clarifai.com/settings/security', supportsVision: true, inputCostPerMillionUsd: 0.95, outputCostPerMillionUsd: 4, apiKeyPlaceholder: 'Personal access token' }), + provider('cloudgpu', 'CloudGPU', 'https://cloudgpu.app/v1', 'deepseek-v4-flash', 131072, { apiKeyUrl: 'https://cloudgpu.app', suggestions: ['deepseek-v4-flash', 'deepseek-v4-pro', 'glm-5.3', 'kimi-k3', 'qwen3.5-397b'] }), provider('cloudferro-sherlock', 'CloudFerro Sherlock', 'https://api-sherlock.cloudferro.com/openai/v1', 'meta-llama/Llama-3.3-70B-Instruct', 70000, { apiKeyUrl: 'https://docs.sherlock.cloudferro.com/', inputCostPerMillionUsd: 2.92, outputCostPerMillionUsd: 2.92 }), provider('cohere', 'Cohere', 'https://api.cohere.ai/compatibility/v1', 'command-a-plus-05-2026', 128000, { category: 'cloud', apiKeyUrl: 'https://dashboard.cohere.com/api-keys', inputCostPerMillionUsd: 2.5, outputCostPerMillionUsd: 10, suggestions: ['command-a-plus-05-2026', 'command-a-03-2025'] }), provider('cortecs', 'Cortecs', 'https://api.cortecs.ai/v1', 'deepseek-r1-0528', 164000, { apiKeyUrl: 'https://api.cortecs.ai/v1/models', inputCostPerMillionUsd: 0.585, outputCostPerMillionUsd: 2.307 }), diff --git a/test/provider-catalog-integrations.mjs b/test/provider-catalog-integrations.mjs index 022ca8b16..b94972701 100644 --- a/test/provider-catalog-integrations.mjs +++ b/test/provider-catalog-integrations.mjs @@ -25,6 +25,17 @@ for (const browser of ['chrome', 'firefox']) { const { providerIconUrl } = await import(pathToFileURL(path.join(prefix, 'ui', 'provider-icons.js')).href); assert.ok(providerIconUrl('api-route').endsWith('/api-route.png')); + const cloudgpu = ADDITIONAL_PROVIDER_DEFAULTS.cloudgpu; + assert.equal(cloudgpu.type, 'openai', `${browser}: CloudGPU must use the OpenAI-compatible adapter`); + assert.equal(cloudgpu.baseUrl, 'https://cloudgpu.app/v1', `${browser}: CloudGPU endpoint changed`); + assert.equal(cloudgpu.model, 'deepseek-v4-flash'); + assert.equal(cloudgpu.contextWindow, 131072); + assert.equal(cloudgpu.enabled, false); + assert.equal(cloudgpu.apiKey, ''); + assert.equal(cloudgpu.supportsTools, true); + assert.equal(cloudgpu.supportsAskStreaming, true); + assert.ok(providerIconUrl('cloudgpu').endsWith('/cloudgpu.svg')); + const runcrate = ADDITIONAL_PROVIDER_DEFAULTS.runcrate; assert.equal(runcrate.type, 'openai', `${browser}: Runcrate must use the OpenAI-compatible adapter`); assert.equal(runcrate.baseUrl, 'https://api.runcrate.ai/v1', `${browser}: Runcrate endpoint changed`); diff --git a/test/run.js b/test/run.js index aaef265d3..bad488631 100644 --- a/test/run.js +++ b/test/run.js @@ -76986,6 +76986,7 @@ test('extended provider catalog is complete, mirrored, safe, and excluded-provid const expectedIds = ` api-route 302ai abacus aihubmix alibaba-coding-plan alibaba-coding-plan-cn atlascloud azure-cognitive-services bailing baseten berget cerebras cheaperinference chutes clarifai + cloudgpu cloudferro-sherlock cohere cortecs deepinfra digitalocean dinference drun evroc fastrouter freebuff2api friendli google-vertex google-vertex-anthropic helicone iflowcn inception inference io-net jiekou kilo kimi-for-coding @@ -76999,7 +77000,7 @@ test('extended provider catalog is complete, mirrored, safe, and excluded-provid `.trim().split(/\s+/); const excluded = ['github-models', 'github-copilot', 'gitlab', 'sap-ai-core']; - assert.equal(expectedIds.length, 85); + assert.equal(expectedIds.length, 86); assert.deepEqual(ProviderCatalogCh.ADDITIONAL_PROVIDER_IDS, expectedIds); assert.deepEqual(ProviderCatalogFx.ADDITIONAL_PROVIDER_IDS, expectedIds); assert.deepEqual( @@ -77014,8 +77015,8 @@ test('extended provider catalog is complete, mirrored, safe, and excluded-provid ]) { const defaults = new PM()._defaultConfigs(); // Includes the sidepanel-only WebBrain Compass XL runtime profile, which is - // deliberately omitted from the 119/118 Settings provider cards. - const expectedDefaultCount = label === 'chrome' ? 120 : 119; + // deliberately omitted from the 120/119 Settings provider cards. + const expectedDefaultCount = label === 'chrome' ? 121 : 120; assert.equal( Object.keys(defaults).length, expectedDefaultCount, @@ -77215,6 +77216,30 @@ test('extended provider catalog is complete, mirrored, safe, and excluded-provid ProviderCatalogCh.ADDITIONAL_PROVIDER_UI['api-route'].suggestions, ['gpt-6.1-sol'], ); + assert.deepEqual( + { + baseUrl: ProviderCatalogCh.ADDITIONAL_PROVIDER_DEFAULTS.cloudgpu.baseUrl, + model: ProviderCatalogCh.ADDITIONAL_PROVIDER_DEFAULTS.cloudgpu.model, + contextWindow: ProviderCatalogCh.ADDITIONAL_PROVIDER_DEFAULTS.cloudgpu.contextWindow, + supportsVision: ProviderCatalogCh.ADDITIONAL_PROVIDER_DEFAULTS.cloudgpu.supportsVision, + supportsTools: ProviderCatalogCh.ADDITIONAL_PROVIDER_DEFAULTS.cloudgpu.supportsTools, + supportsAskStreaming: ProviderCatalogCh.ADDITIONAL_PROVIDER_DEFAULTS.cloudgpu.supportsAskStreaming, + apiKeyUrl: ProviderCatalogCh.ADDITIONAL_PROVIDER_DEFAULTS.cloudgpu.apiKeyUrl, + }, + { + baseUrl: 'https://cloudgpu.app/v1', + model: 'deepseek-v4-flash', + contextWindow: 131072, + supportsVision: false, + supportsTools: true, + supportsAskStreaming: true, + apiKeyUrl: 'https://cloudgpu.app', + }, + ); + assert.deepEqual( + ProviderCatalogCh.ADDITIONAL_PROVIDER_UI.cloudgpu.suggestions, + ['deepseek-v4-flash', 'deepseek-v4-pro', 'glm-5.3', 'kimi-k3', 'qwen3.5-397b'], + ); assert.deepEqual( { baseUrl: ProviderCatalogCh.ADDITIONAL_PROVIDER_DEFAULTS.runcrate.baseUrl,