diff --git a/apps/desktop/src/renderer/settings/provider-display-copy.ts b/apps/desktop/src/renderer/settings/provider-display-copy.ts index 14de01deda..0cbff98c49 100644 --- a/apps/desktop/src/renderer/settings/provider-display-copy.ts +++ b/apps/desktop/src/renderer/settings/provider-display-copy.ts @@ -244,6 +244,10 @@ export const PROVIDER_DISPLAY_COPY = { 'zh-TW': { name: 'DeepInfra', description: '開源模型託管推理 · OpenAI 相容', badge: 'API' }, en: { name: 'DeepInfra', description: 'Hosted open-model inference · OpenAI-compatible', badge: 'API' }, }, + atlascloud: { + zh: { name: 'Atlas Cloud', description: '开源模型托管推理 · OpenAI 兼容', badge: 'API' }, + en: { name: 'Atlas Cloud', description: 'Hosted open-model inference · OpenAI-compatible', badge: 'API' }, + }, cohere: { 'zh-CN': { name: 'Cohere', description: 'Cohere 官方接入', badge: 'API' }, 'zh-TW': { name: 'Cohere', description: 'Cohere 官方 API 連線', badge: 'API' }, diff --git a/packages/core/src/__tests__/llm-connections.test.ts b/packages/core/src/__tests__/llm-connections.test.ts index 5399065a50..bc18382597 100644 --- a/packages/core/src/__tests__/llm-connections.test.ts +++ b/packages/core/src/__tests__/llm-connections.test.ts @@ -24,7 +24,12 @@ import { lookupModelMetadata, modelIdAliasesForProvider, } from '../model-metadata.js'; -import { PROVIDER_REGISTRY, providerFallbackModelIds } from '../provider-registry.js'; +import { + CATALOG_PROVIDER_TYPES, + PROVIDER_REGISTRY, + RECOMMENDED_PROVIDER_TYPES, + providerFallbackModelIds, +} from '../provider-registry.js'; import { authorizeConnectionModel, effectiveBaseUrl, @@ -70,6 +75,23 @@ test('slug validation returns stable issues and preserves format and length boun } }); +test('Atlas Cloud is wired as a ready OpenAI-compatible provider', () => { + assert.deepEqual(PROVIDER_REGISTRY.atlascloud, { + label: 'Atlas Cloud', + baseUrl: 'https://api.atlascloud.ai/v1', + authKind: 'api_key', + fallbackModels: ['qwen/qwen3.8-max'], + status: 'ready', + runtimeAdapter: { kind: 'openai-compatible', name: 'provider' }, + modelDiscovery: { kind: 'protocol', path: '/v1/models' }, + category: 'overseas', + catalogGroup: 'api', + signupUrl: 'https://atlascloud.ai', + catalogOrder: 29.5, + }); + assert.equal(CATALOG_PROVIDER_TYPES.includes('atlascloud'), true); +}); + test('connection base URLs allow HTTP(S) and reject unsafe or malformed inputs', () => { assert.equal(validateConnectionBaseUrl(undefined), null); assert.equal(validateConnectionBaseUrl('https://api.example.com/v1'), null); diff --git a/packages/core/src/model-metadata.ts b/packages/core/src/model-metadata.ts index b90bff617e..25920715f7 100644 --- a/packages/core/src/model-metadata.ts +++ b/packages/core/src/model-metadata.ts @@ -417,6 +417,20 @@ function buildStaticModelMetadata(active: ModelsDevMetadata): ModelsDevMetadata thinkingOptions: { efforts: ['none', 'low', 'medium', 'high'], toggle: true }, }, }, + atlascloud: { + // vision is pinned false rather than left undeclared: Atlas Cloud's + // OpenAI-compatible /v1/chat/completions rejects an image_url content + // part with HTTP 400 even for its vision-branded models (verified + // 2026-09-05 against qwen/qwen3.8-max and qwen/qwen3-vl-235b-a22b- + // thinking; a text-only parts array on the same models returns 200). + // Declaring vision here would make the runtime send attachments the + // endpoint cannot accept. + 'qwen/qwen3.8-max': { + displayName: 'Qwen3.8 Max', + lifecycle: 'active', + capabilities: { chat: true, reasoning: true, functionCalling: true, vision: false }, + }, + }, groq: { // Groq documents reasoning_effort only for the gpt-oss family // (low/medium/high) and qwen3.6-27b (none/default); see diff --git a/packages/core/src/provider-registry.ts b/packages/core/src/provider-registry.ts index 0b9ae9897a..5d4510dfe5 100644 --- a/packages/core/src/provider-registry.ts +++ b/packages/core/src/provider-registry.ts @@ -1352,6 +1352,19 @@ const providerRegistry = { signupUrl: 'https://deepinfra.com/dash/api_keys', catalogOrder: 29, }, + atlascloud: { + label: 'Atlas Cloud', + baseUrl: 'https://api.atlascloud.ai/v1', + authKind: 'api_key', + fallbackModels: ['qwen/qwen3.8-max'], + status: 'ready', + runtimeAdapter: { kind: 'openai-compatible', name: 'provider' }, + modelDiscovery: { kind: 'protocol', path: '/v1/models' }, + category: 'overseas', + catalogGroup: 'api', + signupUrl: 'https://atlascloud.ai', + catalogOrder: 29.5, + }, groq: { label: groq.name, baseUrl: 'https://api.groq.com/openai/v1',