From c5e89f1eea2a7cdd9ba17b2dbb013b0b0dc570a8 Mon Sep 17 00:00:00 2001 From: acamq <179265037+acamq@users.noreply.github.com> Date: Sun, 10 May 2026 10:11:55 -0600 Subject: [PATCH] fix(model-settings): support family reasoning aliases --- src/shared/model-capability-heuristics.ts | 1 + src/shared/model-settings-compatibility.ts | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/shared/model-capability-heuristics.ts b/src/shared/model-capability-heuristics.ts index 882fe81ec..fd0b9e7a8 100644 --- a/src/shared/model-capability-heuristics.ts +++ b/src/shared/model-capability-heuristics.ts @@ -6,6 +6,7 @@ export type HeuristicModelFamilyDefinition = { pattern?: RegExp variants?: string[] reasoningEfforts?: string[] + reasoningEffortAliases?: Record supportsThinking?: boolean } diff --git a/src/shared/model-settings-compatibility.ts b/src/shared/model-settings-compatibility.ts index c2354038e..76f20bf09 100644 --- a/src/shared/model-settings-compatibility.ts +++ b/src/shared/model-settings-compatibility.ts @@ -86,6 +86,7 @@ function resolveField( ladder: string[], familyKnown: boolean, metadataOverride?: string[], + familyAliases?: Record, ): FieldResolution { if (metadataOverride) { if (metadataOverride.includes(normalized)) return { value: normalized } @@ -97,6 +98,10 @@ 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", @@ -132,7 +137,14 @@ export function resolveCompatibleModelSettings( let reasoningEffort = input.desired.reasoningEffort if (reasoningEffort !== undefined) { const normalized = reasoningEffort.toLowerCase() - const resolved = resolveField(normalized, family?.reasoningEfforts, REASONING_LADDER, familyKnown, metadataReasoningEfforts) + const resolved = resolveField( + normalized, + family?.reasoningEfforts, + REASONING_LADDER, + familyKnown, + metadataReasoningEfforts, + family?.reasoningEffortAliases, + ) if (resolved.value !== normalized && resolved.reason) { changes.push({ field: "reasoningEffort", from: reasoningEffort, to: resolved.value, reason: resolved.reason }) }