Skip to content

Commit f0a1722

Browse files
adamfweidmanjacob314
authored andcommitted
chore(core): remove redundant isModelAvailabilityServiceEnabled toggle and clean up dead code (#15207)
1 parent c5d2d75 commit f0a1722

File tree

17 files changed

+42
-195
lines changed

17 files changed

+42
-195
lines changed

docs/get-started/configuration.md

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -798,11 +798,6 @@ their corresponding top-level category object in your `settings.json` file.
798798
- **Default:** `false`
799799
- **Requires restart:** Yes
800800

801-
- **`experimental.isModelAvailabilityServiceEnabled`** (boolean):
802-
- **Description:** Enable model routing using new availability service.
803-
- **Default:** `false`
804-
- **Requires restart:** Yes
805-
806801
- **`experimental.jitContext`** (boolean):
807802
- **Description:** Enable Just-In-Time (JIT) context loading.
808803
- **Default:** `false`

packages/cli/src/config/config.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -643,8 +643,6 @@ export async function loadCliConfig(
643643
extensionLoader: extensionManager,
644644
enableExtensionReloading: settings.experimental?.extensionReloading,
645645
enableAgents: settings.experimental?.enableAgents,
646-
enableModelAvailabilityService:
647-
settings.experimental?.isModelAvailabilityServiceEnabled,
648646
experimentalJitContext: settings.experimental?.jitContext,
649647
noBrowser: !!process.env['NO_BROWSER'],
650648
summarizeToolOutput: settings.model?.summarizeToolOutput,

packages/cli/src/config/settingsSchema.test.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -354,21 +354,6 @@ describe('SettingsSchema', () => {
354354
expect(setting.showInDialog).toBe(false);
355355
expect(setting.description).toBe('Enable local and remote subagents.');
356356
});
357-
358-
it('should have isModelAvailabilityServiceEnabled setting in schema', () => {
359-
const setting =
360-
getSettingsSchema().experimental.properties
361-
.isModelAvailabilityServiceEnabled;
362-
expect(setting).toBeDefined();
363-
expect(setting.type).toBe('boolean');
364-
expect(setting.category).toBe('Experimental');
365-
expect(setting.default).toBe(false);
366-
expect(setting.requiresRestart).toBe(true);
367-
expect(setting.showInDialog).toBe(false);
368-
expect(setting.description).toBe(
369-
'Enable model routing using new availability service.',
370-
);
371-
});
372357
});
373358

374359
it('has JSON schema definitions for every referenced ref', () => {

packages/cli/src/config/settingsSchema.ts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,15 +1323,6 @@ const SETTINGS_SCHEMA = {
13231323
'Enables extension loading/unloading within the CLI session.',
13241324
showInDialog: false,
13251325
},
1326-
isModelAvailabilityServiceEnabled: {
1327-
type: 'boolean',
1328-
label: 'Enable Model Availability Service',
1329-
category: 'Experimental',
1330-
requiresRestart: true,
1331-
default: false,
1332-
description: 'Enable model routing using new availability service.',
1333-
showInDialog: false,
1334-
},
13351326
jitContext: {
13361327
type: 'boolean',
13371328
label: 'JIT Context Loading',

packages/core/src/availability/policyHelpers.test.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,6 @@ describe('policyHelpers', () => {
119119
overrides: Partial<Config> = {},
120120
): Config => {
121121
const defaults = {
122-
isModelAvailabilityServiceEnabled: () => true,
123122
getModelAvailabilityService: () => mockAvailabilityService,
124123
setActiveModel: vi.fn(),
125124
modelConfigService: mockModelConfigService,
@@ -131,15 +130,6 @@ describe('policyHelpers', () => {
131130
vi.clearAllMocks();
132131
});
133132

134-
it('returns requested model if availability service is disabled', () => {
135-
const config = createExtendedMockConfig({
136-
isModelAvailabilityServiceEnabled: () => false,
137-
});
138-
const result = applyModelSelection(config, 'gemini-pro');
139-
expect(result.model).toBe('gemini-pro');
140-
expect(config.setActiveModel).not.toHaveBeenCalled();
141-
});
142-
143133
it('returns requested model if it is available', () => {
144134
const config = createExtendedMockConfig();
145135
mockAvailabilityService.selectFirstAvailable.mockReturnValue({

packages/core/src/availability/policyHelpers.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,6 @@ export function createAvailabilityContextProvider(
117117
modelGetter: () => string,
118118
): () => RetryAvailabilityContext | undefined {
119119
return () => {
120-
if (!config.isModelAvailabilityServiceEnabled()) {
121-
return undefined;
122-
}
123120
const service = config.getModelAvailabilityService();
124121
const currentModel = modelGetter();
125122

@@ -138,11 +135,7 @@ export function createAvailabilityContextProvider(
138135
export function selectModelForAvailability(
139136
config: Config,
140137
requestedModel: string,
141-
): ModelSelectionResult | undefined {
142-
if (!config.isModelAvailabilityServiceEnabled()) {
143-
return undefined;
144-
}
145-
138+
): ModelSelectionResult {
146139
const chain = resolvePolicyChain(config, requestedModel);
147140
const selection = config
148141
.getModelAvailabilityService()

packages/core/src/config/config.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,6 @@ export interface ConfigParameters {
326326
} & { disabled?: string[] });
327327
previewFeatures?: boolean;
328328
enableAgents?: boolean;
329-
enableModelAvailabilityService?: boolean;
330329
experimentalJitContext?: boolean;
331330
}
332331

@@ -449,7 +448,6 @@ export class Config {
449448

450449
private previewModelFallbackMode = false;
451450
private previewModelBypassMode = false;
452-
private readonly enableModelAvailabilityService: boolean;
453451
private readonly enableAgents: boolean;
454452

455453
private readonly experimentalJitContext: boolean;
@@ -513,7 +511,6 @@ export class Config {
513511
this.bugCommand = params.bugCommand;
514512
this.model = params.model;
515513
this._activeModel = params.model;
516-
this.enableModelAvailabilityService = true;
517514
this.enableAgents = params.enableAgents ?? false;
518515
this.experimentalJitContext = params.experimentalJitContext ?? false;
519516
this.modelAvailabilityService = new ModelAvailabilityService();
@@ -1309,10 +1306,6 @@ export class Config {
13091306
return this.enableExtensionReloading;
13101307
}
13111308

1312-
isModelAvailabilityServiceEnabled(): boolean {
1313-
return this.enableModelAvailabilityService;
1314-
}
1315-
13161309
isAgentsEnabled(): boolean {
13171310
return this.enableAgents;
13181311
}

packages/core/src/core/baseLlmClient.test.ts

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,9 @@ describe('BaseLlmClient', () => {
111111
.fn()
112112
.mockImplementation(({ model }) => makeResolvedModelConfig(model)),
113113
} as unknown as ModelConfigService,
114-
isModelAvailabilityServiceEnabled: vi.fn().mockReturnValue(false),
115-
getModelAvailabilityService: vi.fn(),
114+
getModelAvailabilityService: vi
115+
.fn()
116+
.mockReturnValue(createAvailabilityServiceMock()),
116117
setActiveModel: vi.fn(),
117118
getPreviewFeatures: vi.fn().mockReturnValue(false),
118119
getUserTier: vi.fn().mockReturnValue(undefined),
@@ -614,10 +615,6 @@ describe('BaseLlmClient', () => {
614615
let jsonOptions: GenerateJsonOptions;
615616

616617
beforeEach(() => {
617-
mockConfig.isModelAvailabilityServiceEnabled = vi
618-
.fn()
619-
.mockReturnValue(true);
620-
621618
mockAvailabilityService = createAvailabilityServiceMock({
622619
selectedModel: 'test-model',
623620
skipped: [],
@@ -647,23 +644,6 @@ describe('BaseLlmClient', () => {
647644
};
648645
});
649646

650-
it('should preserve legacy behavior when availability is disabled', async () => {
651-
mockConfig.isModelAvailabilityServiceEnabled = vi
652-
.fn()
653-
.mockReturnValue(false);
654-
mockGenerateContent.mockResolvedValue(
655-
createMockResponse('Some text response'),
656-
);
657-
658-
await client.generateContent(contentOptions);
659-
660-
expect(
661-
mockAvailabilityService.selectFirstAvailable,
662-
).not.toHaveBeenCalled();
663-
expect(mockConfig.setActiveModel).not.toHaveBeenCalled();
664-
expect(mockAvailabilityService.markHealthy).not.toHaveBeenCalled();
665-
});
666-
667647
it('should mark model as healthy on success', async () => {
668648
const successfulModel = 'gemini-pro';
669649
vi.mocked(mockAvailabilityService.selectFirstAvailable).mockReturnValue({

packages/core/src/core/baseLlmClient.ts

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -264,22 +264,20 @@ export class BaseLlmClient {
264264

265265
try {
266266
const apiCall = () => {
267-
// If availability is enabled, ensure we use the current active model
267+
// Ensure we use the current active model
268268
// in case a fallback occurred in a previous attempt.
269-
if (this.config.isModelAvailabilityServiceEnabled()) {
270-
const activeModel = this.config.getActiveModel();
271-
if (activeModel !== requestParams.model) {
272-
requestParams.model = activeModel;
273-
// Re-resolve config if model changed during retry
274-
const { generateContentConfig } =
275-
this.config.modelConfigService.getResolvedConfig({
276-
model: activeModel,
277-
});
278-
requestParams.config = {
279-
...requestParams.config,
280-
...generateContentConfig,
281-
};
282-
}
269+
const activeModel = this.config.getActiveModel();
270+
if (activeModel !== requestParams.model) {
271+
requestParams.model = activeModel;
272+
// Re-resolve config if model changed during retry
273+
const { generateContentConfig } =
274+
this.config.modelConfigService.getResolvedConfig({
275+
model: activeModel,
276+
});
277+
requestParams.config = {
278+
...requestParams.config,
279+
...generateContentConfig,
280+
};
283281
}
284282
return this.contentGenerator.generateContent(requestParams, promptId);
285283
};

packages/core/src/core/client.test.ts

Lines changed: 8 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -265,11 +265,12 @@ describe('Gemini Client (client.ts)', () => {
265265
},
266266
isInteractive: vi.fn().mockReturnValue(false),
267267
getExperiments: () => {},
268-
isModelAvailabilityServiceEnabled: vi.fn().mockReturnValue(false),
269268
getActiveModel: vi.fn().mockReturnValue('test-model'),
270269
setActiveModel: vi.fn(),
271270
resetTurn: vi.fn(),
272-
getModelAvailabilityService: vi.fn(),
271+
getModelAvailabilityService: vi
272+
.fn()
273+
.mockReturnValue(createAvailabilityServiceMock()),
273274
} as unknown as Config;
274275
mockConfig.getHookSystem = vi
275276
.fn()
@@ -2006,9 +2007,6 @@ ${JSON.stringify(
20062007
vi.mocked(mockConfig.getModelAvailabilityService).mockReturnValue(
20072008
mockAvailabilityService,
20082009
);
2009-
vi.mocked(mockConfig.isModelAvailabilityServiceEnabled).mockReturnValue(
2010-
true,
2011-
);
20122010
vi.mocked(mockConfig.setActiveModel).mockClear();
20132011
mockRouterService.route.mockResolvedValue({
20142012
model: 'model-a',
@@ -2611,14 +2609,14 @@ ${JSON.stringify(
26112609
const abortSignal = new AbortController().signal;
26122610

26132611
await client.generateContent(
2614-
{ model: DEFAULT_GEMINI_FLASH_MODEL },
2612+
{ model: 'test-model' },
26152613
contents,
26162614
abortSignal,
26172615
);
26182616

26192617
expect(mockContentGenerator.generateContent).toHaveBeenCalledWith(
26202618
{
2621-
model: DEFAULT_GEMINI_FLASH_MODEL,
2619+
model: 'test-model',
26222620
config: {
26232621
abortSignal,
26242622
systemInstruction: getCoreSystemPrompt({} as unknown as Config, ''),
@@ -2632,50 +2630,18 @@ ${JSON.stringify(
26322630
});
26332631

26342632
it('should use current model from config for content generation', async () => {
2635-
const initialModel = client['config'].getModel();
2633+
const initialModel = 'test-model';
26362634
const contents = [{ role: 'user', parts: [{ text: 'test' }] }];
2637-
const currentModel = initialModel + '-changed';
2638-
2639-
vi.spyOn(client['config'], 'getModel').mockReturnValueOnce(currentModel);
26402635

26412636
await client.generateContent(
2642-
{ model: DEFAULT_GEMINI_FLASH_MODEL },
2637+
{ model: initialModel },
26432638
contents,
26442639
new AbortController().signal,
26452640
);
26462641

2647-
expect(mockContentGenerator.generateContent).not.toHaveBeenCalledWith({
2648-
model: initialModel,
2649-
config: expect.any(Object),
2650-
contents,
2651-
});
26522642
expect(mockContentGenerator.generateContent).toHaveBeenCalledWith(
2653-
{
2654-
model: DEFAULT_GEMINI_FLASH_MODEL,
2655-
config: expect.any(Object),
2656-
contents,
2657-
},
2658-
'test-session-id',
2659-
);
2660-
});
2661-
2662-
it('should use the Flash model when fallback mode is active', async () => {
2663-
const contents = [{ role: 'user', parts: [{ text: 'hello' }] }];
2664-
const abortSignal = new AbortController().signal;
2665-
const requestedModel = 'gemini-2.5-pro'; // A non-flash model
2666-
2667-
// Mock config to be in fallback mode
2668-
vi.spyOn(client['config'], 'isInFallbackMode').mockReturnValue(true);
2669-
2670-
await client.generateContent(
2671-
{ model: requestedModel },
2672-
contents,
2673-
abortSignal,
2674-
);
2675-
2676-
expect(mockGenerateContentFn).toHaveBeenCalledWith(
26772643
expect.objectContaining({
2678-
model: DEFAULT_GEMINI_FLASH_MODEL,
2644+
model: initialModel,
26792645
}),
26802646
'test-session-id',
26812647
);

0 commit comments

Comments
 (0)