fix(model-resolver): respect UI model selection in agent initialization (#1158)

- Add uiSelectedModel parameter to resolveModelWithFallback()
- Update model resolution priority: UI Selection → Config Override → Fallback → System Default
- Pass config.model as uiSelectedModel in createBuiltinAgents()
- Fix ProviderModelNotFoundError when model is unset in config but selected in UI
This commit is contained in:
SUHO LEE
2026-01-29 09:30:35 +09:00
committed by GitHub
parent 425dafe458
commit 750fde9d77
4 changed files with 103 additions and 14 deletions
+13 -5
View File
@@ -21,6 +21,7 @@ export type ModelResolutionResult = {
}
export type ExtendedModelResolutionInput = {
uiSelectedModel?: string
userModel?: string
fallbackChain?: FallbackEntry[]
availableModels: Set<string>
@@ -43,16 +44,23 @@ export function resolveModel(input: ModelResolutionInput): string | undefined {
export function resolveModelWithFallback(
input: ExtendedModelResolutionInput,
): ModelResolutionResult | undefined {
const { userModel, fallbackChain, availableModels, systemDefaultModel } = input
const { uiSelectedModel, userModel, fallbackChain, availableModels, systemDefaultModel } = input
// Step 1: Override
// Step 1: UI Selection (highest priority - respects user's model choice in OpenCode UI)
const normalizedUiModel = normalizeModel(uiSelectedModel)
if (normalizedUiModel) {
log("Model resolved via UI selection", { model: normalizedUiModel })
return { model: normalizedUiModel, source: "override" }
}
// Step 2: Config Override (from oh-my-opencode.json)
const normalizedUserModel = normalizeModel(userModel)
if (normalizedUserModel) {
log("Model resolved via override", { model: normalizedUserModel })
log("Model resolved via config override", { model: normalizedUserModel })
return { model: normalizedUserModel, source: "override" }
}
// Step 2: Provider fallback chain (with availability check)
// Step 3: Provider fallback chain (with availability check)
if (fallbackChain && fallbackChain.length > 0) {
if (availableModels.size === 0) {
const connectedProviders = readConnectedProvidersCache()
@@ -91,7 +99,7 @@ export function resolveModelWithFallback(
log("No available model found in fallback chain, falling through to system default")
}
// Step 3: System default (if provided)
// Step 4: System default (if provided)
if (systemDefaultModel === undefined) {
log("No model resolved - systemDefaultModel not configured")
return undefined