bug(core): fix issue with overrides to bases. (#15255)

This commit is contained in:
joshualitt
2026-01-08 06:59:58 -08:00
committed by GitHub
parent 030847a80a
commit eb75f59a96
3 changed files with 234 additions and 108 deletions

View File

@@ -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);
});
});
});