From a2f4f7ff8514b734eeb2f715a4cac436dfa745fa Mon Sep 17 00:00:00 2001 From: galz10 Date: Wed, 13 May 2026 10:24:16 -0700 Subject: [PATCH] fix(core): ensure stable fallback for restricted preview models Corrects model selection failures for GCP/Google Auth users by: 1. Verifying preview access via quota instead of assuming true for GCP. 2. Preserving original model intent in policyHelpers to ensure correct downgrade to the Gemini 2.5 stable chain. --- packages/core/src/availability/policyHelpers.ts | 11 +++++++---- packages/core/src/config/config.ts | 5 +---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/core/src/availability/policyHelpers.ts b/packages/core/src/availability/policyHelpers.ts index 28447bd836..411985ea03 100644 --- a/packages/core/src/availability/policyHelpers.ts +++ b/packages/core/src/availability/policyHelpers.ts @@ -57,6 +57,9 @@ export function resolvePolicyChain( const useCustomToolModel = config.getUseCustomToolModelSync?.() ?? false; const hasAccessToPreview = config.getHasAccessToPreviewModel?.() ?? true; + // Capture the original family intent before any normalization or early downgrade. + const isOriginallyGemini3 = isGemini3Model(modelFromConfig, config); + const resolvedModel = normalizeModelId( resolveModel( modelFromConfig, @@ -78,7 +81,7 @@ export function resolvePolicyChain( wrapsAround || isAutoPreferred || isAutoConfigured || - isGemini3Model(resolvedModel, config); + isOriginallyGemini3; // --- DYNAMIC PATH --- if (config.getExperimentalDynamicModelConfiguration?.() === true) { @@ -91,7 +94,7 @@ export function resolvePolicyChain( if (resolvedModel === DEFAULT_GEMINI_FLASH_LITE_MODEL) { chain = config.modelConfigService.resolveChain('lite', context); } else if ( - isGemini3Model(normalizeModelId(resolvedModel), config) || + isOriginallyGemini3 || isAutoPreferred || isAutoConfigured ) { @@ -132,14 +135,14 @@ export function resolvePolicyChain( if (resolvedModel === DEFAULT_GEMINI_FLASH_LITE_MODEL) { chain = getFlashLitePolicyChain(); } else if ( - isGemini3Model(resolvedModel, config) || + isOriginallyGemini3 || isAutoPreferred || isAutoConfigured ) { const isAutoSelection = isAutoPreferred || isAutoConfigured; if (hasAccessToPreview) { const previewEnabled = - isGemini3Model(resolvedModel, config) || + isOriginallyGemini3 || normalizedPreferredModel === PREVIEW_GEMINI_MODEL_AUTO || configuredModel === PREVIEW_GEMINI_MODEL_AUTO; chain = getModelPolicyChain({ diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index b81737b0ea..6454636246 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -1630,10 +1630,7 @@ export class Config implements McpContext, AgentLoopContext { this.baseLlmClient = new BaseLlmClient(this.contentGenerator, this); const authType = this.contentGeneratorConfig.authType; - if ( - authType === AuthType.USE_GEMINI || - authType === AuthType.USE_VERTEX_AI - ) { + if (authType === AuthType.USE_GEMINI) { this.setHasAccessToPreviewModel(true); }