feat(model-settings-compat): add variant/reasoningEffort compatibility resolver

- Registry-based model family detection (provider-agnostic)
- Variant and reasoningEffort ladder downgrade logic
- Three-tier resolution: metadata override → family heuristic → unknown drop
- Comprehensive test suite covering all model families
This commit is contained in:
Ravi Tharuma
2026-03-18 20:37:42 +01:00
parent fb085538eb
commit d4f962b55d
13 changed files with 971 additions and 127 deletions
@@ -0,0 +1,31 @@
import { clearSessionPromptParams, setSessionPromptParams } from "./session-prompt-params-state"
type PromptParamModel = {
temperature?: number
top_p?: number
reasoningEffort?: string
maxTokens?: number
thinking?: { type: "enabled" | "disabled"; budgetTokens?: number }
}
export function applySessionPromptParams(
sessionID: string,
model: PromptParamModel | undefined,
): void {
if (!model) {
clearSessionPromptParams(sessionID)
return
}
const promptOptions: Record<string, unknown> = {
...(model.reasoningEffort ? { reasoningEffort: model.reasoningEffort } : {}),
...(model.thinking ? { thinking: model.thinking } : {}),
...(model.maxTokens !== undefined ? { maxTokens: model.maxTokens } : {}),
}
setSessionPromptParams(sessionID, {
...(model.temperature !== undefined ? { temperature: model.temperature } : {}),
...(model.top_p !== undefined ? { topP: model.top_p } : {}),
...(Object.keys(promptOptions).length > 0 ? { options: promptOptions } : {}),
})
}