mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-28 15:01:14 -07:00
bug(core): fix issue with overrides to bases. (#15255)
This commit is contained in:
@@ -5,7 +5,10 @@
|
||||
*/
|
||||
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import type { ModelConfigServiceConfig } from './modelConfigService.js';
|
||||
import type {
|
||||
ModelConfigAlias,
|
||||
ModelConfigServiceConfig,
|
||||
} from './modelConfigService.js';
|
||||
import { ModelConfigService } from './modelConfigService.js';
|
||||
|
||||
describe('ModelConfigService', () => {
|
||||
@@ -470,6 +473,21 @@ describe('ModelConfigService', () => {
|
||||
'Alias "non-existent" not found.',
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw an error if the alias chain is too deep', () => {
|
||||
const aliases: Record<string, ModelConfigAlias> = {};
|
||||
for (let i = 0; i < 101; i++) {
|
||||
aliases[`alias-${i}`] = {
|
||||
extends: i === 100 ? undefined : `alias-${i + 1}`,
|
||||
modelConfig: i === 100 ? { model: 'gemini-pro' } : {},
|
||||
};
|
||||
}
|
||||
const config: ModelConfigServiceConfig = { aliases };
|
||||
const service = new ModelConfigService(config);
|
||||
expect(() => service.getResolvedConfig({ model: 'alias-0' })).toThrow(
|
||||
'Alias inheritance chain exceeded maximum depth of 100.',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('deep merging', () => {
|
||||
@@ -889,5 +907,50 @@ describe('ModelConfigService', () => {
|
||||
});
|
||||
expect(retry.generateContentConfig.temperature).toBe(1.0);
|
||||
});
|
||||
|
||||
it('should apply overrides to parents in the alias hierarchy', () => {
|
||||
const config: ModelConfigServiceConfig = {
|
||||
aliases: {
|
||||
'base-alias': {
|
||||
modelConfig: {
|
||||
model: 'gemini-test',
|
||||
generateContentConfig: {
|
||||
temperature: 0.5,
|
||||
},
|
||||
},
|
||||
},
|
||||
'child-alias': {
|
||||
extends: 'base-alias',
|
||||
modelConfig: {
|
||||
generateContentConfig: {
|
||||
topP: 0.9,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
match: { model: 'base-alias', isRetry: true },
|
||||
modelConfig: {
|
||||
generateContentConfig: {
|
||||
temperature: 1.0,
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
const service = new ModelConfigService(config);
|
||||
|
||||
// Normal request
|
||||
const normal = service.getResolvedConfig({ model: 'child-alias' });
|
||||
expect(normal.generateContentConfig.temperature).toBe(0.5);
|
||||
|
||||
// Retry request - should match override on parent
|
||||
const retry = service.getResolvedConfig({
|
||||
model: 'child-alias',
|
||||
isRetry: true,
|
||||
});
|
||||
expect(retry.generateContentConfig.temperature).toBe(1.0);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user