From 8a72268b509bb2fb5715d26bb0c79260e8d09935 Mon Sep 17 00:00:00 2001 From: Hariom Jangra Date: Sun, 6 Sep 2026 03:08:26 +0530 Subject: [PATCH] fix(config): prevent rewriting explicitly pinned flash models Do not match broad endsWith('flash') in isFlashModel() and remove the auto-upgrade rule for gemini-2.5-flash in defaultModelConfigs, ensuring explicitly pinned models are not rewritten to gemini-3.5-flash. Fixes #29213 --- .../core/src/config/defaultModelConfigs.ts | 6 ----- packages/core/src/config/models.test.ts | 22 +++++++++++++++---- packages/core/src/config/models.ts | 3 +-- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/packages/core/src/config/defaultModelConfigs.ts b/packages/core/src/config/defaultModelConfigs.ts index 056b91b351d..0fba322e8b8 100644 --- a/packages/core/src/config/defaultModelConfigs.ts +++ b/packages/core/src/config/defaultModelConfigs.ts @@ -492,12 +492,6 @@ export const DEFAULT_MODEL_CONFIGS: ModelConfigServiceConfig = { }, ], }, - 'gemini-2.5-flash': { - default: 'gemini-2.5-flash', - contexts: [ - { condition: { useGemini3_5Flash: true }, target: 'gemini-3.5-flash' }, - ], - }, 'gemini-3-pro-preview': { default: 'gemini-3-pro-preview', contexts: [ diff --git a/packages/core/src/config/models.test.ts b/packages/core/src/config/models.test.ts index 63185f77614..1bf9d2a2c86 100644 --- a/packages/core/src/config/models.test.ts +++ b/packages/core/src/config/models.test.ts @@ -4,7 +4,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { describe, it, expect } from 'vitest'; +import { describe, it, expect, afterEach } from 'vitest'; import { resolveModel, resolveClassifierModel, @@ -19,6 +19,7 @@ import { DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_3_5_FLASH_MODEL, DEFAULT_GEMINI_FLASH_LITE_MODEL, + setFlashModels, supportsMultimodalFunctionResponse, GEMINI_MODEL_ALIAS_PRO, GEMINI_MODEL_ALIAS_FLASH, @@ -787,7 +788,20 @@ describe('resolveModel Gemini 3.5 Flash GA', () => { ).toBe(PREVIEW_GEMINI_FLASH_MODEL); }); - it('should resolve all but preview flash models to gemini-3.5-flash when useGemini3_5Flash is true (dynamic)', () => { + describe('explicit gemini-2.5-flash', () => { + afterEach(() => { + setFlashModels('gemini-3-flash-preview', 'gemini-2.5-flash'); + }); + + it('should not rewrite explicitly requested gemini-2.5-flash to gemini-3.5-flash', () => { + setFlashModels('gemini-3.5-flash', 'gemini-3.5-flash'); + expect( + resolveModel('gemini-2.5-flash', false, false, true, undefined, true), + ).toBe('gemini-2.5-flash'); + }); + }); + + it('should resolve flash alias to gemini-3.5-flash but leave concrete models untouched (dynamic)', () => { const mockDynamicConfig = { getExperimentalDynamicModelConfiguration: () => true, modelConfigService, @@ -805,14 +819,14 @@ describe('resolveModel Gemini 3.5 Flash GA', () => { ).toBe('gemini-3.5-flash'); expect( resolveModel( - DEFAULT_GEMINI_FLASH_MODEL, + 'gemini-2.5-flash', false, false, true, mockDynamicConfig, true, ), - ).toBe('gemini-3.5-flash'); + ).toBe('gemini-2.5-flash'); expect( resolveModel( PREVIEW_GEMINI_FLASH_MODEL, diff --git a/packages/core/src/config/models.ts b/packages/core/src/config/models.ts index dd6506b837c..5f74a811d6b 100644 --- a/packages/core/src/config/models.ts +++ b/packages/core/src/config/models.ts @@ -265,8 +265,7 @@ function isFlashModel(model: string): boolean { model === PREVIEW_GEMINI_FLASH_MODEL || model === DEFAULT_GEMINI_3_5_FLASH_MODEL || model === SECONDARY_GEMINI_3_5_FLASH_MODEL || - model === 'flash' || - model.endsWith('flash') + model === 'flash' ); }