From 5259bdfd20d69d0176f3744c743b2f455152f7f8 Mon Sep 17 00:00:00 2001 From: acamq <179265037+acamq@users.noreply.github.com> Date: Sun, 10 May 2026 10:19:34 -0600 Subject: [PATCH] fix(model-settings): apply reasoning aliases with capabilities --- .../model-settings-compatibility.test.ts | 23 +++++++++++++++++++ src/shared/model-settings-compatibility.ts | 9 ++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/shared/model-settings-compatibility.test.ts b/src/shared/model-settings-compatibility.test.ts index 134bb9e71..9d92b2c7d 100644 --- a/src/shared/model-settings-compatibility.test.ts +++ b/src/shared/model-settings-compatibility.test.ts @@ -359,6 +359,29 @@ describe("resolveCompatibleModelSettings", () => { } }) + test("DeepSeek maps generic reasoningEffort levels when capabilities come from heuristics", () => { + const capabilities = getModelCapabilities({ + providerID: "openai-compatible", + modelID: "deepseek-v4-pro", + }) + const result = resolveCompatibleModelSettings({ + providerID: "openai-compatible", + modelID: "deepseek-v4-pro", + desired: { reasoningEffort: "xhigh" }, + capabilities, + }) + + expect(result.reasoningEffort).toBe("max") + expect(result.changes).toEqual([ + { + field: "reasoningEffort", + from: "xhigh", + to: "max", + reason: "unsupported-by-model-family", + }, + ]) + }) + test("GPT-5 downgrades unsupported max variant to xhigh", () => { const result = resolveCompatibleModelSettings({ providerID: "openai", diff --git a/src/shared/model-settings-compatibility.ts b/src/shared/model-settings-compatibility.ts index 76f20bf09..414638fef 100644 --- a/src/shared/model-settings-compatibility.ts +++ b/src/shared/model-settings-compatibility.ts @@ -88,6 +88,11 @@ function resolveField( metadataOverride?: string[], familyAliases?: Record, ): FieldResolution { + const aliased = familyAliases?.[normalized] + if (aliased && (metadataOverride?.includes(aliased) || familyCaps?.includes(aliased))) { + return { value: aliased, reason: "unsupported-by-model-family" } + } + if (metadataOverride) { if (metadataOverride.includes(normalized)) return { value: normalized } return { @@ -98,10 +103,6 @@ function resolveField( if (familyCaps) { if (familyCaps.includes(normalized)) return { value: normalized } - const aliased = familyAliases?.[normalized] - if (aliased && familyCaps.includes(aliased)) { - return { value: aliased, reason: "unsupported-by-model-family" } - } return { value: downgradeWithinLadder(normalized, familyCaps, ladder), reason: "unsupported-by-model-family",