diff --git a/packages/core/src/config/models.test.ts b/packages/core/src/config/models.test.ts index 4eed733d59..141fe7b85b 100644 --- a/packages/core/src/config/models.test.ts +++ b/packages/core/src/config/models.test.ts @@ -439,6 +439,15 @@ describe('resolveModel', () => { expect(model).toBe(customModel); }); + it('should fallback for known legacy models like gemini-pro-latest', () => { + expect(resolveModel('gemini-pro-latest')).toBe(DEFAULT_GEMINI_MODEL); + }); + + it('should NOT fallback for unknown gemini models that might be future versions', () => { + const futureModel = 'gemini-4-pro'; + expect(resolveModel(futureModel)).toBe(futureModel); + }); + it('should handle non-string inputs gracefully', () => { // @ts-expect-error - testing invalid runtime input expect(resolveModel(['a', 'b'])).toBe('b'); diff --git a/packages/core/src/config/models.ts b/packages/core/src/config/models.ts index 7360878ccd..102dde62a3 100644 --- a/packages/core/src/config/models.ts +++ b/packages/core/src/config/models.ts @@ -201,6 +201,12 @@ export function resolveModel( } } + // Fallback for known legacy Gemini model aliases that are no longer supported + // by the API but may still be present in user settings. + if (resolved === 'gemini-pro-latest') { + return DEFAULT_GEMINI_MODEL; + } + if (!hasAccessToPreview && isPreviewModel(resolved)) { // Downgrade to stable models if user lacks preview access. switch (resolved) {