mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-05-01 23:44:15 -07:00
fix(core): prevent utility calls from changing session active model (#20035)
This commit is contained in:
@@ -47,7 +47,10 @@ describe('Fallback Integration', () => {
|
||||
const requestedModel = PREVIEW_GEMINI_MODEL;
|
||||
|
||||
// 3. Apply model selection
|
||||
const result = applyModelSelection(config, { model: requestedModel });
|
||||
const result = applyModelSelection(config, {
|
||||
model: requestedModel,
|
||||
isChatModel: true,
|
||||
});
|
||||
|
||||
// 4. Expect fallback to Flash
|
||||
expect(result.model).toBe(PREVIEW_GEMINI_FLASH_MODEL);
|
||||
|
||||
@@ -222,7 +222,10 @@ describe('policyHelpers', () => {
|
||||
selectedModel: 'gemini-pro',
|
||||
});
|
||||
|
||||
const result = applyModelSelection(config, { model: 'gemini-pro' });
|
||||
const result = applyModelSelection(config, {
|
||||
model: 'gemini-pro',
|
||||
isChatModel: true,
|
||||
});
|
||||
expect(result.model).toBe('gemini-pro');
|
||||
expect(result.maxAttempts).toBeUndefined();
|
||||
expect(config.setActiveModel).toHaveBeenCalledWith('gemini-pro');
|
||||
@@ -243,7 +246,10 @@ describe('policyHelpers', () => {
|
||||
selectedModel: 'gemini-flash',
|
||||
});
|
||||
|
||||
const result = applyModelSelection(config, { model: 'gemini-pro' });
|
||||
const result = applyModelSelection(config, {
|
||||
model: 'gemini-pro',
|
||||
isChatModel: true,
|
||||
});
|
||||
|
||||
expect(result.model).toBe('gemini-flash');
|
||||
expect(result.config).toEqual({
|
||||
@@ -253,14 +259,33 @@ describe('policyHelpers', () => {
|
||||
|
||||
expect(mockModelConfigService.getResolvedConfig).toHaveBeenCalledWith({
|
||||
model: 'gemini-pro',
|
||||
isChatModel: true,
|
||||
});
|
||||
expect(mockModelConfigService.getResolvedConfig).toHaveBeenCalledWith({
|
||||
model: 'gemini-flash',
|
||||
isChatModel: true,
|
||||
});
|
||||
expect(config.setActiveModel).toHaveBeenCalledWith('gemini-flash');
|
||||
});
|
||||
|
||||
it('consumes sticky attempt if indicated', () => {
|
||||
it('does not call setActiveModel if isChatModel is false', () => {
|
||||
const config = createExtendedMockConfig();
|
||||
mockModelConfigService.getResolvedConfig.mockReturnValue({
|
||||
model: 'gemini-pro',
|
||||
generateContentConfig: {},
|
||||
});
|
||||
mockAvailabilityService.selectFirstAvailable.mockReturnValue({
|
||||
selectedModel: 'gemini-pro',
|
||||
});
|
||||
|
||||
applyModelSelection(config, {
|
||||
model: 'gemini-pro',
|
||||
isChatModel: false,
|
||||
});
|
||||
expect(config.setActiveModel).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('consumes sticky attempt if indicated and isChatModel is true', () => {
|
||||
const config = createExtendedMockConfig();
|
||||
mockModelConfigService.getResolvedConfig.mockReturnValue({
|
||||
model: 'gemini-pro',
|
||||
@@ -271,10 +296,36 @@ describe('policyHelpers', () => {
|
||||
attempts: 1,
|
||||
});
|
||||
|
||||
const result = applyModelSelection(config, { model: 'gemini-pro' });
|
||||
const result = applyModelSelection(config, {
|
||||
model: 'gemini-pro',
|
||||
isChatModel: true,
|
||||
});
|
||||
expect(mockAvailabilityService.consumeStickyAttempt).toHaveBeenCalledWith(
|
||||
'gemini-pro',
|
||||
);
|
||||
expect(config.setActiveModel).toHaveBeenCalledWith('gemini-pro');
|
||||
expect(result.maxAttempts).toBe(1);
|
||||
});
|
||||
|
||||
it('consumes sticky attempt if indicated but does not call setActiveModel if isChatModel is false', () => {
|
||||
const config = createExtendedMockConfig();
|
||||
mockModelConfigService.getResolvedConfig.mockReturnValue({
|
||||
model: 'gemini-pro',
|
||||
generateContentConfig: {},
|
||||
});
|
||||
mockAvailabilityService.selectFirstAvailable.mockReturnValue({
|
||||
selectedModel: 'gemini-pro',
|
||||
attempts: 1,
|
||||
});
|
||||
|
||||
const result = applyModelSelection(config, {
|
||||
model: 'gemini-pro',
|
||||
isChatModel: false,
|
||||
});
|
||||
expect(mockAvailabilityService.consumeStickyAttempt).toHaveBeenCalledWith(
|
||||
'gemini-pro',
|
||||
);
|
||||
expect(config.setActiveModel).not.toHaveBeenCalled();
|
||||
expect(result.maxAttempts).toBe(1);
|
||||
});
|
||||
|
||||
@@ -291,7 +342,7 @@ describe('policyHelpers', () => {
|
||||
|
||||
const result = applyModelSelection(
|
||||
config,
|
||||
{ model: 'gemini-pro' },
|
||||
{ model: 'gemini-pro', isChatModel: true },
|
||||
{
|
||||
consumeAttempt: false,
|
||||
},
|
||||
@@ -299,6 +350,7 @@ describe('policyHelpers', () => {
|
||||
expect(
|
||||
mockAvailabilityService.consumeStickyAttempt,
|
||||
).not.toHaveBeenCalled();
|
||||
expect(config.setActiveModel).toHaveBeenCalledWith('gemini-pro');
|
||||
expect(result.maxAttempts).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -214,7 +214,9 @@ export function applyModelSelection(
|
||||
generateContentConfig = fallbackResolved.generateContentConfig;
|
||||
}
|
||||
|
||||
config.setActiveModel(finalModel);
|
||||
if (modelConfigKey.isChatModel) {
|
||||
config.setActiveModel(finalModel);
|
||||
}
|
||||
|
||||
if (selection.attempts && options.consumeAttempt !== false) {
|
||||
config.getModelAvailabilityService().consumeStickyAttempt(finalModel);
|
||||
|
||||
Reference in New Issue
Block a user