Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,20 @@ model:
apiKey: sk-your-api-key
```

Atlas Cloud is available in the Web UI provider catalog. It can also be configured with the default endpoint and environment variable:

```yaml
schemaVersion: 1
agent:
model: atlas_cloud/qwen/qwen3.8-max
model:
providers:
atlas_cloud:
apiKey: ${ATLASCLOUD_API_KEY}
models:
qwen/qwen3.8-max: {}
```

Native Gemini can be configured with `protocol: google`:

```yaml
Expand Down
14 changes: 14 additions & 0 deletions README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,20 @@ model:
apiKey: sk-your-api-key
```

Atlas Cloud 已内置于 Web UI 的 Provider 目录,也可以使用默认端点和环境变量手动配置:

```yaml
schemaVersion: 1
agent:
model: atlas_cloud/qwen/qwen3.8-max
model:
providers:
atlas_cloud:
apiKey: ${ATLASCLOUD_API_KEY}
models:
qwen/qwen3.8-max: {}
```

原生 Gemini 可以使用 `protocol: google`:

```yaml
Expand Down
33 changes: 32 additions & 1 deletion src/model/catalog/providers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export const PROVIDER_CATALOG: ProviderCatalog = {
multimodal: {
input: ["text", "image", "pdf"],
maxImagesPerRequest: 20,
supportedImageMimeTypes: ["image/jpeg", "image/png", "image/gif", "image/webp"],
supportedImageMimeTypes: ["image/jpeg", "image/png", "image/webp"],
imageDetail: "auto",
},
aliases: ["claude-sonnet-4.5", "claude-3-5-sonnet-20250929"],
Expand Down Expand Up @@ -382,6 +382,37 @@ export const PROVIDER_CATALOG: ProviderCatalog = {
},
},

// ── Atlas Cloud ───────────────────────────────────────────────────────

atlas_cloud: {
displayName: "Atlas Cloud",
protocol: "openai",
defaultUrl: "https://api.atlascloud.ai/v1",
apiKeyEnvVar: "ATLASCLOUD_API_KEY",
models: {
"qwen/qwen3.8-max": {
displayName: "Qwen3.8 Max",
capabilities: {
supportsToolUse: true,
supportsStreaming: true,
supportsParallelToolCalls: false,
supportsThinking: true,
supportsJsonSchema: true,
supportsSystemPrompt: true,
supportsPromptCache: false,
maxContextTokens: 1_000_000,
maxOutputTokens: 131_072,
},
multimodal: {
input: ["text", "image"],
supportedImageMimeTypes: ["image/jpeg", "image/png", "image/gif", "image/webp"],
imageDetail: "auto",
},
aliases: [],
},
},
},

// ── Alibaba Cloud Model Studio / DashScope ────────────────────────────

dashscope: {
Expand Down
20 changes: 20 additions & 0 deletions tests/model/config/parseModelConfig.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,26 @@ test("catalog provider resolves api key from default env var when apiKey is blan
assert.equal(config.providers.google.apiKey, "gemini-env");
});

test("Atlas Cloud catalog applies its endpoint, credentials, and model metadata", () => {
const config = parseModelConfig({
providers: {
atlas_cloud: {
models: { "qwen/qwen3.8-max": {} },
},
},
}, { env: { ATLASCLOUD_API_KEY: " atlas-env " } });

const provider = config.providers.atlas_cloud;
const model = provider.models["qwen/qwen3.8-max"];

assert.equal(provider.protocol, "openai");
assert.equal(provider.url, "https://api.atlascloud.ai/v1");
assert.equal(provider.apiKey, "atlas-env");
assert.equal(model.capabilities.maxContextTokens, 1_000_000);
assert.equal(model.capabilities.maxOutputTokens, 131_072);
assert.deepEqual(model.multimodal.input, ["text", "image"]);
});

test("unknown custom models default to text-only input", () => {
const config = parseModelConfig({
providers: {
Expand Down
11 changes: 11 additions & 0 deletions ui/src/shared/catalogProviders.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,17 @@ describe('catalogProviders maxOutputTokens', () => {
expect(zhipu?.models.find((model) => model.id === 'glm-4-flash-250414')?.maxContextTokens).toBe(128_000);
});

it('exposes Atlas Cloud as an OpenAI-compatible provider', () => {
const atlasCloud = findCatalogProviderById('atlas_cloud');
const qwen = atlasCloud?.models.find((model) => model.id === 'qwen/qwen3.8-max');

expect(atlasCloud?.protocol).toBe('openai');
expect(atlasCloud?.defaultUrl).toBe('https://api.atlascloud.ai/v1');
expect(qwen?.supportsImage).toBe(true);
expect(qwen?.maxContextTokens).toBe(1_000_000);
expect(qwen?.maxOutputTokens).toBe(131_072);
});

it('exposes the current Kimi model catalog', () => {
const moonshot = findCatalogProviderById('moonshot');

Expand Down
9 changes: 9 additions & 0 deletions ui/src/shared/catalogProviders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,15 @@ export const CATALOG_PROVIDERS: CatalogProvider[] = [
{ id: 'o3-mini', displayName: 'o3 Mini', maxContextTokens: 200000, maxOutputTokens: 100000 },
],
},
{
id: 'atlas_cloud',
displayName: 'Atlas Cloud',
protocol: 'openai',
defaultUrl: 'https://api.atlascloud.ai/v1',
models: [
{ id: 'qwen/qwen3.8-max', displayName: 'Qwen3.8 Max', supportsImage: true, maxContextTokens: 1_000_000, maxOutputTokens: 131_072 },
],
},
{
id: 'dashscope',
displayName: '阿里云百炼 (DashScope)',
Expand Down