diff --git a/packages/core/src/common/model-capabilities.ts b/packages/core/src/common/model-capabilities.ts index 59dbc52..c14dc5d 100644 --- a/packages/core/src/common/model-capabilities.ts +++ b/packages/core/src/common/model-capabilities.ts @@ -3,6 +3,7 @@ export const DEEPSEEK_V4_MODELS = new Set([ "deepseek-v4-pro", "deepseek-v4-flash-vision-exp", "deepseek-flash", + "deepseek-ai/deepseek-v4-pro", ]); export type MultimodalMode = "default" | "on" | "off"; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index e045608..a076d9a 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -28,6 +28,8 @@ export { DEFAULT_FILE_QUOTA_CLEANUP_BATCH, DEFAULT_MAX_REQUEST_FILES_BYTES, MAX_FILES_API_TIMEOUT_MS, + ATLASCLOUD_DEFAULT_MODEL, + ATLASCLOUD_BASE_URL, PERMISSION_SCOPES, } from "./settings"; export { diff --git a/packages/core/src/settings.ts b/packages/core/src/settings.ts index 8dbbf89..8e4ab25 100644 --- a/packages/core/src/settings.ts +++ b/packages/core/src/settings.ts @@ -738,6 +738,10 @@ export function resolveSettingsSources( ...projectEnv, ...systemEnv, }; + const explicitApiKey = trimString(env.API_KEY); + const atlasCloudApiKey = trimString(processEnv.ATLASCLOUD_API_KEY); + const useAtlasCloudDefaults = !explicitApiKey && Boolean(atlasCloudApiKey); + // Select before normalizing so invalid configured values cannot silently fall back. const plusKey = systemEnv.PLUS_API_KEY !== undefined @@ -766,9 +770,9 @@ export function resolveSettingsSources( ["user.model", trimString(userSettings?.model) || undefined], ["user.env.MODEL", trimString(userEnv.MODEL) || undefined], ], - defaults.model + (useAtlasCloudDefaults ? ATLASCLOUD_DEFAULT_MODEL : "") || defaults.model ); - const baseURL = trimString(env.BASE_URL) || defaults.baseURL; + const baseURL = trimString(env.BASE_URL) || (useAtlasCloudDefaults ? ATLASCLOUD_BASE_URL : "") || defaults.baseURL; const contextWindow = choose( "contextWindow", @@ -1034,7 +1038,7 @@ export function resolveSettingsSources( return { env, experimental: { reasoningSummary, reasoningSummaryModel }, - apiKey: trimString(env.API_KEY) || undefined, + apiKey: explicitApiKey || atlasCloudApiKey || undefined, baseURL, model, contextWindow, @@ -1124,6 +1128,8 @@ export function applyModelConfigSelection( export const DEFAULT_MODEL = "deepseek-flash"; export const DEFAULT_BASE_URL = "https://api.deepseek.com"; +export const ATLASCLOUD_DEFAULT_MODEL = "deepseek-ai/deepseek-v4-pro"; +export const ATLASCLOUD_BASE_URL = "https://api.atlascloud.ai/v1"; // --------------------------------------------------------------------------- // Settings file I/O diff --git a/packages/core/src/tests/settings-and-notify.test.ts b/packages/core/src/tests/settings-and-notify.test.ts index a5ca060..cb39c63 100644 --- a/packages/core/src/tests/settings-and-notify.test.ts +++ b/packages/core/src/tests/settings-and-notify.test.ts @@ -233,6 +233,47 @@ test("resolveSettings gives top-level model priority over env MODEL", () => { assert.equal(resolved.model, "deepseek-v4-flash"); }); +test("resolveSettings uses Atlas Cloud defaults with ATLASCLOUD_API_KEY", () => { + const resolved = resolveSettings( + {}, + { + model: "default-model", + baseURL: "https://default.example.com", + }, + { + ATLASCLOUD_API_KEY: "atlas-test-key", + } + ); + + assert.equal(resolved.apiKey, "atlas-test-key"); + assert.equal(resolved.baseURL, "https://api.atlascloud.ai/v1"); + assert.equal(resolved.model, "deepseek-ai/deepseek-v4-pro"); + assert.equal(resolved.thinkingEnabled, true); +}); + +test("resolveSettings gives explicit API settings priority over Atlas Cloud defaults", () => { + const resolved = resolveSettings( + { + env: { + API_KEY: "explicit-key", + BASE_URL: "https://explicit.example.com/v1", + MODEL: "explicit-model", + }, + }, + { + model: "default-model", + baseURL: "https://default.example.com", + }, + { + ATLASCLOUD_API_KEY: "atlas-test-key", + } + ); + + assert.equal(resolved.apiKey, "explicit-key"); + assert.equal(resolved.baseURL, "https://explicit.example.com/v1"); + assert.equal(resolved.model, "explicit-model"); +}); + test("resolveSettings derives model-specific context window defaults", () => { const regular = resolveSettings( {},