mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-05-01 07:24:38 -07:00
feat(core): support custom reasoning models by default (#19227)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user