From 7b1525075a977fde377c239d6ddd2481007bd0cd Mon Sep 17 00:00:00 2001 From: can1357 Date: Tue, 30 Jun 2026 20:21:42 +0200 Subject: [PATCH] feat(catalog): updated model catalog configurations and pricing - Added configurations for `anthropic/claude-sonnet-5` under openrouter, vercel-ai-gateway, and zenmux providers. - Reduced model pricing and cost structure rates for `anthropic/claude-sonnet-5`. - Removed `trustExplicitThinkingOnly` compatibility flag from several Claude and Gemini model entries. - Removed legacy `disableStrictTools` property from model definitions and updated tests. - Fixed model builder variant collapse logic to properly map `compatConfig` to `compat`. - Sanitized environment variables in git-clone test helpers to avoid host-leakage in test runs. --- packages/catalog/src/models.json | 198 ++++++++++++------ packages/catalog/src/variant-collapse.ts | 2 +- .../coding-agent/test/model-registry.test.ts | 2 +- .../coding-agent/test/utils/git-clone.test.ts | 10 +- 4 files changed, 143 insertions(+), 69 deletions(-) diff --git a/packages/catalog/src/models.json b/packages/catalog/src/models.json index 80f7a134c..814e2e2a9 100644 --- a/packages/catalog/src/models.json +++ b/packages/catalog/src/models.json @@ -15648,10 +15648,7 @@ "xhigh": "claude-opus-4-7-max" } }, - "requestModelId": "claude-opus-4-7-low", - "compat": { - "trustExplicitThinkingOnly": true - } + "requestModelId": "claude-opus-4-7-low" }, "claude-opus-4-7-fast": { "id": "claude-opus-4-7-fast", @@ -15691,10 +15688,7 @@ "xhigh": "claude-opus-4-7-max-fast" } }, - "requestModelId": "claude-opus-4-7-low-fast", - "compat": { - "trustExplicitThinkingOnly": true - } + "requestModelId": "claude-opus-4-7-low-fast" }, "claude-opus-4-8": { "id": "claude-opus-4-8", @@ -15734,10 +15728,7 @@ "xhigh": "claude-opus-4-8-max" } }, - "requestModelId": "claude-opus-4-8-low", - "compat": { - "trustExplicitThinkingOnly": true - } + "requestModelId": "claude-opus-4-8-low" }, "claude-opus-4-8-fast": { "id": "claude-opus-4-8-fast", @@ -15777,10 +15768,7 @@ "xhigh": "claude-opus-4-8-max-fast" } }, - "requestModelId": "claude-opus-4-8-low-fast", - "compat": { - "trustExplicitThinkingOnly": true - } + "requestModelId": "claude-opus-4-8-low-fast" }, "claude-sonnet-4-6": { "id": "claude-sonnet-4-6", @@ -16019,10 +16007,7 @@ "high": "gemini-3-1-pro-high" } }, - "requestModelId": "gemini-3-1-pro-low", - "compat": { - "trustExplicitThinkingOnly": true - } + "requestModelId": "gemini-3-1-pro-low" }, "gemini-3-5-flash": { "id": "gemini-3-5-flash", @@ -16060,10 +16045,7 @@ "high": "gemini-3-5-flash-high" } }, - "requestModelId": "gemini-3-5-flash-minimal", - "compat": { - "trustExplicitThinkingOnly": true - } + "requestModelId": "gemini-3-5-flash-minimal" }, "gemini-3-flash": { "id": "gemini-3-flash", @@ -16101,10 +16083,7 @@ "high": "MODEL_GOOGLE_GEMINI_3_0_FLASH_HIGH" } }, - "requestModelId": "MODEL_GOOGLE_GEMINI_3_0_FLASH_MINIMAL", - "compat": { - "trustExplicitThinkingOnly": true - } + "requestModelId": "MODEL_GOOGLE_GEMINI_3_0_FLASH_MINIMAL" }, "glm-5-1": { "id": "glm-5-1", @@ -16284,10 +16263,7 @@ "xhigh": "MODEL_GPT_5_2_XHIGH" } }, - "requestModelId": "MODEL_GPT_5_2_NONE", - "compat": { - "trustExplicitThinkingOnly": true - } + "requestModelId": "MODEL_GPT_5_2_NONE" }, "gpt-5-3-codex": { "id": "gpt-5-3-codex", @@ -16327,10 +16303,7 @@ "xhigh": "gpt-5-3-codex-xhigh" } }, - "requestModelId": "gpt-5-3-codex-low", - "compat": { - "trustExplicitThinkingOnly": true - } + "requestModelId": "gpt-5-3-codex-low" }, "gpt-5-3-codex-fast": { "id": "gpt-5-3-codex-fast", @@ -16370,10 +16343,7 @@ "xhigh": "gpt-5-3-codex-xhigh-priority" } }, - "requestModelId": "gpt-5-3-codex-low-priority", - "compat": { - "trustExplicitThinkingOnly": true - } + "requestModelId": "gpt-5-3-codex-low-priority" }, "gpt-5-4": { "id": "gpt-5-4", @@ -16413,10 +16383,7 @@ "xhigh": "gpt-5-4-xhigh" } }, - "requestModelId": "gpt-5-4-none", - "compat": { - "trustExplicitThinkingOnly": true - } + "requestModelId": "gpt-5-4-none" }, "gpt-5-4-fast": { "id": "gpt-5-4-fast", @@ -16456,10 +16423,7 @@ "xhigh": "gpt-5-4-xhigh-priority" } }, - "requestModelId": "gpt-5-4-none-priority", - "compat": { - "trustExplicitThinkingOnly": true - } + "requestModelId": "gpt-5-4-none-priority" }, "gpt-5-4-mini": { "id": "gpt-5-4-mini", @@ -16499,10 +16463,7 @@ "xhigh": "gpt-5-4-mini-xhigh" } }, - "requestModelId": "gpt-5-4-mini-low", - "compat": { - "trustExplicitThinkingOnly": true - } + "requestModelId": "gpt-5-4-mini-low" }, "gpt-5-5": { "id": "gpt-5-5", @@ -16542,10 +16503,7 @@ "xhigh": "gpt-5-5-xhigh" } }, - "requestModelId": "gpt-5-5-none", - "compat": { - "trustExplicitThinkingOnly": true - } + "requestModelId": "gpt-5-5-none" }, "gpt-5-5-fast": { "id": "gpt-5-5-fast", @@ -16585,10 +16543,7 @@ "xhigh": "gpt-5-5-xhigh-priority" } }, - "requestModelId": "gpt-5-5-none-priority", - "compat": { - "trustExplicitThinkingOnly": true - } + "requestModelId": "gpt-5-5-none-priority" }, "kimi-k2-6": { "id": "kimi-k2-6", @@ -62399,10 +62354,10 @@ "image" ], "cost": { - "input": 3, - "output": 15, - "cacheRead": 0.3, - "cacheWrite": 3.75 + "input": 2, + "output": 10, + "cacheRead": 0.19999999999999998, + "cacheWrite": 2.5 }, "contextWindow": 1000000, "maxTokens": 128000, @@ -63321,6 +63276,43 @@ ] } }, + "anthropic/claude-sonnet-5": { + "id": "anthropic/claude-sonnet-5", + "name": "Claude Sonnet 5", + "api": "openrouter", + "provider": "openrouter", + "baseUrl": "https://openrouter.ai/api/v1", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 2, + "output": 10, + "cacheRead": 0.19999999999999998, + "cacheWrite": 2.5 + }, + "contextWindow": 1000000, + "maxTokens": 128000, + "thinking": { + "mode": "effort", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ], + "effortMap": { + "minimal": "low", + "low": "medium", + "medium": "high", + "high": "xhigh", + "xhigh": "max" + } + } + }, "arcee-ai/trinity-large-preview": { "id": "arcee-ai/trinity-large-preview", "name": "Trinity Large Preview", @@ -76018,7 +76010,6 @@ }, "compat": { "officialEndpoint": false, - "disableStrictTools": false, "disableAdaptiveThinking": false, "supportsEagerToolInputStreaming": true, "supportsLongCacheRetention": false, @@ -76909,6 +76900,44 @@ } } }, + "anthropic/claude-sonnet-5": { + "id": "anthropic/claude-sonnet-5", + "name": "Claude Sonnet 5", + "api": "anthropic-messages", + "provider": "vercel-ai-gateway", + "baseUrl": "https://ai-gateway.vercel.sh", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 2, + "output": 10, + "cacheRead": 0.19999999999999998, + "cacheWrite": 2.5 + }, + "contextWindow": 1000000, + "maxTokens": 128000, + "thinking": { + "mode": "anthropic-adaptive", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ], + "effortMap": { + "minimal": "low", + "low": "medium", + "medium": "high", + "high": "xhigh", + "xhigh": "max" + }, + "supportsDisplay": true + } + }, "arcee-ai/trinity-large-preview": { "id": "arcee-ai/trinity-large-preview", "name": "Trinity Large Preview", @@ -78749,7 +78778,6 @@ }, "compat": { "officialEndpoint": false, - "disableStrictTools": false, "disableAdaptiveThinking": false, "supportsEagerToolInputStreaming": true, "supportsLongCacheRetention": false, @@ -83885,6 +83913,44 @@ } } }, + "anthropic/claude-sonnet-5": { + "id": "anthropic/claude-sonnet-5", + "name": "Claude Sonnet 5", + "api": "anthropic-messages", + "provider": "zenmux", + "baseUrl": "https://zenmux.ai/api/anthropic", + "reasoning": true, + "input": [ + "text", + "image" + ], + "cost": { + "input": 2, + "output": 10, + "cacheRead": 0.2, + "cacheWrite": 4 + }, + "contextWindow": 1000000, + "maxTokens": 128000, + "thinking": { + "mode": "anthropic-adaptive", + "efforts": [ + "minimal", + "low", + "medium", + "high", + "xhigh" + ], + "effortMap": { + "minimal": "low", + "low": "medium", + "medium": "high", + "high": "xhigh", + "xhigh": "max" + }, + "supportsDisplay": true + } + }, "baidu/ernie-5.0-thinking-preview": { "id": "baidu/ernie-5.0-thinking-preview", "name": "ERNIE 5.0", diff --git a/packages/catalog/src/variant-collapse.ts b/packages/catalog/src/variant-collapse.ts index 4b7080788..d533e2b90 100644 --- a/packages/catalog/src/variant-collapse.ts +++ b/packages/catalog/src/variant-collapse.ts @@ -954,7 +954,7 @@ export function collapseBuiltModelVariants(models: readonly Mo const inputRefs = new Set>(models); return collapsed.map(model => // Resolved compat re-fed as override config resolves to itself. - inputRefs.has(model) ? model : buildModel(model as unknown as ModelSpec), + inputRefs.has(model) ? model : buildModel({ ...model, compat: model.compatConfig } as unknown as ModelSpec), ); } diff --git a/packages/coding-agent/test/model-registry.test.ts b/packages/coding-agent/test/model-registry.test.ts index 0c0490af3..ac8f63854 100644 --- a/packages/coding-agent/test/model-registry.test.ts +++ b/packages/coding-agent/test/model-registry.test.ts @@ -1797,7 +1797,7 @@ describe("ModelRegistry", () => { for (const model of models) { expect( (model.compatConfig as { disableStrictTools?: boolean } | undefined)?.disableStrictTools, - ).toBeFalsy(); + ).toBeUndefined(); } }); diff --git a/packages/coding-agent/test/utils/git-clone.test.ts b/packages/coding-agent/test/utils/git-clone.test.ts index 7af615041..996575649 100644 --- a/packages/coding-agent/test/utils/git-clone.test.ts +++ b/packages/coding-agent/test/utils/git-clone.test.ts @@ -16,13 +16,21 @@ const GIT_ENV = { GIT_AUTHOR_EMAIL: "t@example.com", GIT_COMMITTER_NAME: "t", GIT_COMMITTER_EMAIL: "t@example.com", + GIT_CONFIG_GLOBAL: "/dev/null", + GIT_CONFIG_SYSTEM: "/dev/null", } as const; function gitRun(cwd: string, args: string[]): string { + const env = { ...process.env, ...GIT_ENV }; + delete env.GIT_DIR; + delete env.GIT_WORK_TREE; + delete env.GIT_INDEX_FILE; + delete env.GIT_OBJECT_DIRECTORY; + delete env.GIT_ALTERNATE_OBJECT_DIRECTORIES; const result = Bun.spawnSync({ cmd: ["git", ...args], cwd, - env: { ...process.env, ...GIT_ENV }, + env, stdout: "pipe", stderr: "pipe", });