From c043e9767f4094c2069352d4202bf4ec61baccfe Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Thu, 15 Jan 2026 16:58:41 +0000 Subject: [PATCH] fix: default model fallback when provider/model missing (#954) (thanks @roshanasingh4) --- CHANGELOG.md | 2 +- src/agents/model-fallback.ts | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e975296d6..0452e772b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## 2026.1.15 (unreleased) -- TBD +- Fix: guard model fallback against undefined provider/model values. (#954) — thanks @roshanasingh4. ## 2026.1.14-1 diff --git a/src/agents/model-fallback.ts b/src/agents/model-fallback.ts index f407a4cbf..469f45a2c 100644 --- a/src/agents/model-fallback.ts +++ b/src/agents/model-fallback.ts @@ -119,8 +119,6 @@ function resolveFallbackCandidates(params: { /** Optional explicit fallbacks list; when provided (even empty), replaces agents.defaults.model.fallbacks. */ fallbacksOverride?: string[]; }): ModelCandidate[] { - const provider = String(params.provider ?? "").trim() || DEFAULT_PROVIDER; - const model = String(params.model ?? "").trim() || DEFAULT_MODEL; const primary = params.cfg ? resolveConfiguredModelRef({ cfg: params.cfg, @@ -128,11 +126,15 @@ function resolveFallbackCandidates(params: { defaultModel: DEFAULT_MODEL, }) : null; + const defaultProvider = primary?.provider ?? DEFAULT_PROVIDER; + const defaultModel = primary?.model ?? DEFAULT_MODEL; + const provider = String(params.provider ?? "").trim() || defaultProvider; + const model = String(params.model ?? "").trim() || defaultModel; const aliasIndex = buildModelAliasIndex({ cfg: params.cfg ?? {}, - defaultProvider: DEFAULT_PROVIDER, + defaultProvider, }); - const allowlist = buildAllowedModelKeys(params.cfg, DEFAULT_PROVIDER); + const allowlist = buildAllowedModelKeys(params.cfg, defaultProvider); const seen = new Set(); const candidates: ModelCandidate[] = []; @@ -160,7 +162,7 @@ function resolveFallbackCandidates(params: { for (const raw of modelFallbacks) { const resolved = resolveModelRefFromString({ raw: String(raw ?? ""), - defaultProvider: DEFAULT_PROVIDER, + defaultProvider, aliasIndex, }); if (!resolved) continue;