feat(core): support custom reasoning models by default (#19227)

This commit is contained in:
N. Taylor Mullen
2026-02-16 12:47:58 -08:00
committed by GitHub
parent 80f0cbd798
commit 39d36108d7
7 changed files with 86 additions and 47 deletions
+46
View File
@@ -10,6 +10,8 @@ import {
resolveClassifierModel,
isGemini3Model,
isGemini2Model,
isCustomModel,
supportsModernFeatures,
isAutoModel,
getDisplayString,
DEFAULT_GEMINI_MODEL,
@@ -25,6 +27,50 @@ import {
DEFAULT_GEMINI_MODEL_AUTO,
} from './models.js';
describe('isCustomModel', () => {
it('should return true for models not starting with gemini-', () => {
expect(isCustomModel('testing')).toBe(true);
expect(isCustomModel('gpt-4')).toBe(true);
expect(isCustomModel('claude-3')).toBe(true);
});
it('should return false for Gemini models', () => {
expect(isCustomModel('gemini-1.5-pro')).toBe(false);
expect(isCustomModel('gemini-2.0-flash')).toBe(false);
expect(isCustomModel('gemini-3-pro-preview')).toBe(false);
});
it('should return false for aliases that resolve to Gemini models', () => {
expect(isCustomModel(GEMINI_MODEL_ALIAS_AUTO)).toBe(false);
expect(isCustomModel(GEMINI_MODEL_ALIAS_PRO)).toBe(false);
});
});
describe('supportsModernFeatures', () => {
it('should return true for Gemini 3 models', () => {
expect(supportsModernFeatures('gemini-3-pro-preview')).toBe(true);
expect(supportsModernFeatures('gemini-3-flash-preview')).toBe(true);
});
it('should return true for custom models', () => {
expect(supportsModernFeatures('testing')).toBe(true);
expect(supportsModernFeatures('some-custom-model')).toBe(true);
});
it('should return false for older Gemini models', () => {
expect(supportsModernFeatures('gemini-2.5-pro')).toBe(false);
expect(supportsModernFeatures('gemini-2.5-flash')).toBe(false);
expect(supportsModernFeatures('gemini-2.0-flash')).toBe(false);
expect(supportsModernFeatures('gemini-1.5-pro')).toBe(false);
expect(supportsModernFeatures('gemini-1.0-pro')).toBe(false);
});
it('should return true for modern aliases', () => {
expect(supportsModernFeatures(GEMINI_MODEL_ALIAS_PRO)).toBe(true);
expect(supportsModernFeatures(GEMINI_MODEL_ALIAS_AUTO)).toBe(true);
});
});
describe('isGemini3Model', () => {
it('should return true for gemini-3 models', () => {
expect(isGemini3Model('gemini-3-pro-preview')).toBe(true);
+23
View File
@@ -141,6 +141,29 @@ export function isGemini2Model(model: string): boolean {
return /^gemini-2(\.|$)/.test(model);
}
/**
* Checks if the model is a "custom" model (not Gemini branded).
*
* @param model The model name to check.
* @returns True if the model is not a Gemini branded model.
*/
export function isCustomModel(model: string): boolean {
const resolved = resolveModel(model);
return !resolved.startsWith('gemini-');
}
/**
* Checks if the model should be treated as a modern model.
* This includes Gemini 3 models and any custom models.
*
* @param model The model name to check.
* @returns True if the model supports modern features like thoughts.
*/
export function supportsModernFeatures(model: string): boolean {
if (isGemini3Model(model)) return true;
return isCustomModel(model);
}
/**
* Checks if the model is an auto model.
*