@google/gemini-cli-core 0.22.0-preview.0 → 0.22.0-preview.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/src/agents/codebase-investigator.js +2 -2
- package/dist/src/agents/codebase-investigator.js.map +1 -1
- package/dist/src/agents/codebase-investigator.test.js +2 -2
- package/dist/src/agents/codebase-investigator.test.js.map +1 -1
- package/dist/src/agents/registry.js +17 -10
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/agents/registry.test.js +33 -4
- package/dist/src/agents/registry.test.js.map +1 -1
- package/dist/src/availability/policyCatalog.d.ts +1 -0
- package/dist/src/availability/policyCatalog.js +6 -8
- package/dist/src/availability/policyCatalog.js.map +1 -1
- package/dist/src/availability/policyCatalog.test.js +2 -2
- package/dist/src/availability/policyCatalog.test.js.map +1 -1
- package/dist/src/availability/policyHelpers.d.ts +5 -2
- package/dist/src/availability/policyHelpers.js +30 -17
- package/dist/src/availability/policyHelpers.js.map +1 -1
- package/dist/src/availability/policyHelpers.test.js +30 -2
- package/dist/src/availability/policyHelpers.test.js.map +1 -1
- package/dist/src/config/config.d.ts +5 -0
- package/dist/src/config/config.js +52 -5
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +115 -4
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/defaultModelConfigs.js +11 -0
- package/dist/src/config/defaultModelConfigs.js.map +1 -1
- package/dist/src/config/models.d.ts +23 -10
- package/dist/src/config/models.js +65 -23
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/models.test.js +57 -76
- package/dist/src/config/models.test.js.map +1 -1
- package/dist/src/core/baseLlmClient.d.ts +3 -1
- package/dist/src/core/baseLlmClient.js +8 -1
- package/dist/src/core/baseLlmClient.js.map +1 -1
- package/dist/src/core/client.js +4 -3
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +3 -1
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +1 -1
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/geminiChat.js +13 -22
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +40 -186
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/geminiChat_network_retry.test.js +2 -0
- package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
- package/dist/src/core/prompts.js +6 -7
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +10 -5
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/fallback/handler.js +54 -121
- package/dist/src/fallback/handler.js.map +1 -1
- package/dist/src/fallback/handler.test.js +82 -266
- package/dist/src/fallback/handler.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/routing/modelRouterService.js +0 -15
- package/dist/src/routing/modelRouterService.js.map +1 -1
- package/dist/src/routing/modelRouterService.test.js +0 -62
- package/dist/src/routing/modelRouterService.test.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.js +10 -21
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.test.js +2 -1
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.js +23 -12
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.test.js +69 -39
- package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.js +4 -3
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
- package/dist/src/services/chatCompressionService.js +3 -1
- package/dist/src/services/chatCompressionService.js.map +1 -1
- package/dist/src/services/test-data/resolved-aliases-retry.golden.json +16 -0
- package/dist/src/services/test-data/resolved-aliases.golden.json +16 -0
- package/dist/src/utils/flashFallback.test.js +1 -1
- package/dist/src/utils/flashFallback.test.js.map +1 -1
- package/dist/src/utils/retry.js +2 -16
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +7 -22
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -7,9 +7,7 @@ import { describe, it, expect, vi, beforeEach, afterEach, } from 'vitest';
|
|
|
7
7
|
import { handleFallback } from './handler.js';
|
|
8
8
|
import { createAvailabilityServiceMock } from '../availability/testUtils.js';
|
|
9
9
|
import { AuthType } from '../core/contentGenerator.js';
|
|
10
|
-
import { DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_MODEL, PREVIEW_GEMINI_MODEL, } from '../config/models.js';
|
|
11
|
-
import { logFlashFallback } from '../telemetry/index.js';
|
|
12
|
-
import { ModelNotFoundError } from '../utils/httpErrors.js';
|
|
10
|
+
import { DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_MODEL, DEFAULT_GEMINI_MODEL_AUTO, PREVIEW_GEMINI_FLASH_MODEL, PREVIEW_GEMINI_MODEL, PREVIEW_GEMINI_MODEL_AUTO, } from '../config/models.js';
|
|
13
11
|
import { openBrowserSecurely } from '../utils/secure-browser-launcher.js';
|
|
14
12
|
import { coreEvents } from '../utils/events.js';
|
|
15
13
|
import { debugLogger } from '../utils/debugLogger.js';
|
|
@@ -40,7 +38,7 @@ const AUTH_API_KEY = AuthType.USE_GEMINI;
|
|
|
40
38
|
const createMockConfig = (overrides = {}) => ({
|
|
41
39
|
isInFallbackMode: vi.fn(() => false),
|
|
42
40
|
setFallbackMode: vi.fn(),
|
|
43
|
-
isModelAvailabilityServiceEnabled: vi.fn(() =>
|
|
41
|
+
isModelAvailabilityServiceEnabled: vi.fn(() => true),
|
|
44
42
|
isPreviewModelFallbackMode: vi.fn(() => false),
|
|
45
43
|
setPreviewModelFallbackMode: vi.fn(),
|
|
46
44
|
isPreviewModelBypassMode: vi.fn(() => false),
|
|
@@ -52,6 +50,7 @@ const createMockConfig = (overrides = {}) => ({
|
|
|
52
50
|
selectedModel: FALLBACK_MODEL,
|
|
53
51
|
skipped: [],
|
|
54
52
|
})),
|
|
53
|
+
getActiveModel: vi.fn(() => MOCK_PRO_MODEL),
|
|
55
54
|
getModel: vi.fn(() => MOCK_PRO_MODEL),
|
|
56
55
|
getPreviewFeatures: vi.fn(() => false),
|
|
57
56
|
getUserTier: vi.fn(() => undefined),
|
|
@@ -82,232 +81,6 @@ describe('handleFallback', () => {
|
|
|
82
81
|
consoleErrorSpy.mockRestore();
|
|
83
82
|
fallbackEventSpy.mockRestore();
|
|
84
83
|
});
|
|
85
|
-
it('should return null immediately if authType is not OAuth', async () => {
|
|
86
|
-
const result = await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_API_KEY);
|
|
87
|
-
expect(result).toBeNull();
|
|
88
|
-
expect(mockHandler).not.toHaveBeenCalled();
|
|
89
|
-
expect(mockConfig.setFallbackMode).not.toHaveBeenCalled();
|
|
90
|
-
});
|
|
91
|
-
it('should still consult the handler if the failed model is the fallback model', async () => {
|
|
92
|
-
mockHandler.mockResolvedValue('stop');
|
|
93
|
-
const result = await handleFallback(mockConfig, FALLBACK_MODEL, // Failed model is Flash
|
|
94
|
-
AUTH_OAUTH);
|
|
95
|
-
expect(result).toBe(false);
|
|
96
|
-
expect(mockHandler).toHaveBeenCalled();
|
|
97
|
-
});
|
|
98
|
-
it('should return null if no fallbackHandler is injected in config', async () => {
|
|
99
|
-
const configWithoutHandler = createMockConfig({
|
|
100
|
-
fallbackModelHandler: undefined,
|
|
101
|
-
});
|
|
102
|
-
const result = await handleFallback(configWithoutHandler, MOCK_PRO_MODEL, AUTH_OAUTH);
|
|
103
|
-
expect(result).toBeNull();
|
|
104
|
-
});
|
|
105
|
-
describe('when handler returns "retry_always"', () => {
|
|
106
|
-
it('should activate fallback mode, log telemetry, and return true', async () => {
|
|
107
|
-
mockHandler.mockResolvedValue('retry_always');
|
|
108
|
-
const result = await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
|
|
109
|
-
expect(result).toBe(true);
|
|
110
|
-
expect(mockConfig.setFallbackMode).toHaveBeenCalledWith(true);
|
|
111
|
-
expect(logFlashFallback).toHaveBeenCalled();
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
describe('when handler returns "stop"', () => {
|
|
115
|
-
it('should activate fallback mode, log telemetry, and return false', async () => {
|
|
116
|
-
mockHandler.mockResolvedValue('stop');
|
|
117
|
-
const result = await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
|
|
118
|
-
expect(result).toBe(false);
|
|
119
|
-
expect(mockConfig.setFallbackMode).toHaveBeenCalledWith(true);
|
|
120
|
-
expect(logFlashFallback).toHaveBeenCalled();
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
it('should return false without toggling fallback when handler returns "retry_later"', async () => {
|
|
124
|
-
mockHandler.mockResolvedValue('retry_later');
|
|
125
|
-
const result = await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
|
|
126
|
-
expect(result).toBe(false);
|
|
127
|
-
expect(mockConfig.setFallbackMode).not.toHaveBeenCalled();
|
|
128
|
-
expect(logFlashFallback).not.toHaveBeenCalled();
|
|
129
|
-
expect(fallbackEventSpy).not.toHaveBeenCalled();
|
|
130
|
-
});
|
|
131
|
-
it('should launch upgrade flow and avoid fallback mode when handler returns "upgrade"', async () => {
|
|
132
|
-
mockHandler.mockResolvedValue('upgrade');
|
|
133
|
-
vi.mocked(openBrowserSecurely).mockResolvedValue(undefined);
|
|
134
|
-
const result = await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
|
|
135
|
-
expect(result).toBe(false);
|
|
136
|
-
expect(openBrowserSecurely).toHaveBeenCalledWith('https://goo.gle/set-up-gemini-code-assist');
|
|
137
|
-
expect(mockConfig.setFallbackMode).not.toHaveBeenCalled();
|
|
138
|
-
expect(logFlashFallback).not.toHaveBeenCalled();
|
|
139
|
-
expect(fallbackEventSpy).not.toHaveBeenCalled();
|
|
140
|
-
});
|
|
141
|
-
it('should log a warning and continue when upgrade flow fails to open a browser', async () => {
|
|
142
|
-
mockHandler.mockResolvedValue('upgrade');
|
|
143
|
-
const debugWarnSpy = vi.spyOn(debugLogger, 'warn');
|
|
144
|
-
const consoleWarnSpy = vi
|
|
145
|
-
.spyOn(console, 'warn')
|
|
146
|
-
.mockImplementation(() => { });
|
|
147
|
-
vi.mocked(openBrowserSecurely).mockRejectedValue(new Error('blocked'));
|
|
148
|
-
const result = await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
|
|
149
|
-
expect(result).toBe(false);
|
|
150
|
-
expect(debugWarnSpy).toHaveBeenCalledWith('Failed to open browser automatically:', 'blocked');
|
|
151
|
-
expect(mockConfig.setFallbackMode).not.toHaveBeenCalled();
|
|
152
|
-
expect(fallbackEventSpy).not.toHaveBeenCalled();
|
|
153
|
-
debugWarnSpy.mockRestore();
|
|
154
|
-
consoleWarnSpy.mockRestore();
|
|
155
|
-
});
|
|
156
|
-
describe('when handler returns an unexpected value', () => {
|
|
157
|
-
it('should log an error and return null', async () => {
|
|
158
|
-
mockHandler.mockResolvedValue(null);
|
|
159
|
-
const result = await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
|
|
160
|
-
expect(result).toBeNull();
|
|
161
|
-
expect(consoleErrorSpy).toHaveBeenCalledWith('Fallback UI handler failed:', new Error('Unexpected fallback intent received from fallbackModelHandler: "null"'));
|
|
162
|
-
expect(mockConfig.setFallbackMode).not.toHaveBeenCalled();
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
it('should pass the correct context (failedModel, fallbackModel, error) to the handler', async () => {
|
|
166
|
-
const mockError = new Error('Quota Exceeded');
|
|
167
|
-
mockHandler.mockResolvedValue('retry_always');
|
|
168
|
-
await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH, mockError);
|
|
169
|
-
expect(mockHandler).toHaveBeenCalledWith(MOCK_PRO_MODEL, FALLBACK_MODEL, mockError);
|
|
170
|
-
});
|
|
171
|
-
it('should not call setFallbackMode or log telemetry if already in fallback mode', async () => {
|
|
172
|
-
// Setup config where fallback mode is already active
|
|
173
|
-
const activeFallbackConfig = createMockConfig({
|
|
174
|
-
fallbackModelHandler: mockHandler,
|
|
175
|
-
isInFallbackMode: vi.fn(() => true), // Already active
|
|
176
|
-
setFallbackMode: vi.fn(),
|
|
177
|
-
});
|
|
178
|
-
mockHandler.mockResolvedValue('retry_always');
|
|
179
|
-
const result = await handleFallback(activeFallbackConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
|
|
180
|
-
// Should still return true to allow the retry (which will use the active fallback mode)
|
|
181
|
-
expect(result).toBe(true);
|
|
182
|
-
// Should still consult the handler
|
|
183
|
-
expect(mockHandler).toHaveBeenCalled();
|
|
184
|
-
// But should not mutate state or log telemetry again
|
|
185
|
-
expect(activeFallbackConfig.setFallbackMode).not.toHaveBeenCalled();
|
|
186
|
-
expect(logFlashFallback).not.toHaveBeenCalled();
|
|
187
|
-
});
|
|
188
|
-
it('should catch errors from the handler, log an error, and return null', async () => {
|
|
189
|
-
const handlerError = new Error('UI interaction failed');
|
|
190
|
-
mockHandler.mockRejectedValue(handlerError);
|
|
191
|
-
const result = await handleFallback(mockConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
|
|
192
|
-
expect(result).toBeNull();
|
|
193
|
-
expect(consoleErrorSpy).toHaveBeenCalledWith('Fallback UI handler failed:', handlerError);
|
|
194
|
-
expect(mockConfig.setFallbackMode).not.toHaveBeenCalled();
|
|
195
|
-
});
|
|
196
|
-
describe('Preview Model Fallback Logic', () => {
|
|
197
|
-
const previewModel = PREVIEW_GEMINI_MODEL;
|
|
198
|
-
it('should only set Preview Model bypass mode on retryable quota failure', async () => {
|
|
199
|
-
const mockGoogleApiError = {
|
|
200
|
-
code: 429,
|
|
201
|
-
message: 'mock error',
|
|
202
|
-
details: [],
|
|
203
|
-
};
|
|
204
|
-
const retryableQuotaError = new RetryableQuotaError('Capacity error', mockGoogleApiError, 5);
|
|
205
|
-
await handleFallback(mockConfig, previewModel, AUTH_OAUTH, retryableQuotaError);
|
|
206
|
-
expect(mockConfig.setPreviewModelBypassMode).toHaveBeenCalledWith(true);
|
|
207
|
-
});
|
|
208
|
-
it('should not set Preview Model bypass mode on non-retryable quota failure', async () => {
|
|
209
|
-
const mockGoogleApiError = {
|
|
210
|
-
code: 429,
|
|
211
|
-
message: 'mock error',
|
|
212
|
-
details: [],
|
|
213
|
-
};
|
|
214
|
-
const terminalQuotaError = new TerminalQuotaError('quota error', mockGoogleApiError, 5);
|
|
215
|
-
await handleFallback(mockConfig, previewModel, AUTH_OAUTH, terminalQuotaError);
|
|
216
|
-
expect(mockConfig.setPreviewModelBypassMode).not.toHaveBeenCalled();
|
|
217
|
-
});
|
|
218
|
-
it('should silently retry if Preview Model fallback mode is already active and error is retryable error', async () => {
|
|
219
|
-
vi.spyOn(mockConfig, 'isPreviewModelFallbackMode').mockReturnValue(true);
|
|
220
|
-
const mockGoogleApiError = {
|
|
221
|
-
code: 429,
|
|
222
|
-
message: 'mock error',
|
|
223
|
-
details: [],
|
|
224
|
-
};
|
|
225
|
-
const retryableQuotaError = new RetryableQuotaError('Capacity error', mockGoogleApiError, 5);
|
|
226
|
-
const result = await handleFallback(mockConfig, previewModel, AUTH_OAUTH, retryableQuotaError);
|
|
227
|
-
expect(result).toBe(true);
|
|
228
|
-
expect(mockHandler).not.toHaveBeenCalled();
|
|
229
|
-
});
|
|
230
|
-
it('should activate Preview Model fallback mode when handler returns "retry_always" and is RetryableQuotaError', async () => {
|
|
231
|
-
mockHandler.mockResolvedValue('retry_always');
|
|
232
|
-
const mockGoogleApiError = {
|
|
233
|
-
code: 429,
|
|
234
|
-
message: 'mock error',
|
|
235
|
-
details: [],
|
|
236
|
-
};
|
|
237
|
-
const retryableQuotaError = new RetryableQuotaError('Capacity error', mockGoogleApiError, 5);
|
|
238
|
-
const result = await handleFallback(mockConfig, previewModel, AUTH_OAUTH, retryableQuotaError);
|
|
239
|
-
expect(result).toBe(true);
|
|
240
|
-
expect(mockConfig.setPreviewModelBypassMode).toHaveBeenCalledWith(true);
|
|
241
|
-
expect(mockConfig.setPreviewModelFallbackMode).toHaveBeenCalledWith(true);
|
|
242
|
-
});
|
|
243
|
-
it('should activate regular fallback when handler returns "retry_always" and is TerminalQuotaError', async () => {
|
|
244
|
-
mockHandler.mockResolvedValue('retry_always');
|
|
245
|
-
const mockGoogleApiError = {
|
|
246
|
-
code: 503,
|
|
247
|
-
message: 'mock error',
|
|
248
|
-
details: [],
|
|
249
|
-
};
|
|
250
|
-
const terminalError = new TerminalQuotaError('Quota error', mockGoogleApiError, 5);
|
|
251
|
-
const result = await handleFallback(mockConfig, previewModel, AUTH_OAUTH, terminalError);
|
|
252
|
-
expect(result).toBe(true);
|
|
253
|
-
expect(mockConfig.setPreviewModelFallbackMode).not.toBeCalled();
|
|
254
|
-
expect(mockConfig.setFallbackMode).toHaveBeenCalledWith(true);
|
|
255
|
-
});
|
|
256
|
-
it('should NOT set fallback mode if user chooses "retry_once"', async () => {
|
|
257
|
-
const mockGoogleApiError = {
|
|
258
|
-
code: 429,
|
|
259
|
-
message: 'mock error',
|
|
260
|
-
details: [],
|
|
261
|
-
};
|
|
262
|
-
const terminalQuotaError = new TerminalQuotaError('quota error', mockGoogleApiError, 5);
|
|
263
|
-
mockHandler.mockResolvedValue('retry_once');
|
|
264
|
-
const result = await handleFallback(mockConfig, PREVIEW_GEMINI_MODEL, AuthType.LOGIN_WITH_GOOGLE, terminalQuotaError);
|
|
265
|
-
expect(result).toBe(true);
|
|
266
|
-
expect(mockConfig.setPreviewModelBypassMode).not.toHaveBeenCalled();
|
|
267
|
-
expect(mockConfig.setPreviewModelFallbackMode).not.toHaveBeenCalled();
|
|
268
|
-
expect(mockConfig.setFallbackMode).not.toHaveBeenCalled();
|
|
269
|
-
});
|
|
270
|
-
it('should pass DEFAULT_GEMINI_MODEL as fallback when Preview Model fails with Retryable Error', async () => {
|
|
271
|
-
const mockFallbackHandler = vi.fn().mockResolvedValue('stop');
|
|
272
|
-
vi.mocked(mockConfig.fallbackModelHandler).mockImplementation(mockFallbackHandler);
|
|
273
|
-
const mockGoogleApiError = {
|
|
274
|
-
code: 429,
|
|
275
|
-
message: 'mock error',
|
|
276
|
-
details: [],
|
|
277
|
-
};
|
|
278
|
-
const retryableQuotaError = new RetryableQuotaError('Capacity error', mockGoogleApiError, 5);
|
|
279
|
-
await handleFallback(mockConfig, PREVIEW_GEMINI_MODEL, AuthType.LOGIN_WITH_GOOGLE, retryableQuotaError);
|
|
280
|
-
expect(mockConfig.fallbackModelHandler).toHaveBeenCalledWith(PREVIEW_GEMINI_MODEL, DEFAULT_GEMINI_MODEL, retryableQuotaError);
|
|
281
|
-
});
|
|
282
|
-
it('should pass DEFAULT_GEMINI_MODEL as fallback when Preview Model fails with other error', async () => {
|
|
283
|
-
await handleFallback(mockConfig, PREVIEW_GEMINI_MODEL, AuthType.LOGIN_WITH_GOOGLE);
|
|
284
|
-
expect(mockConfig.fallbackModelHandler).toHaveBeenCalledWith(PREVIEW_GEMINI_MODEL, DEFAULT_GEMINI_MODEL, undefined);
|
|
285
|
-
});
|
|
286
|
-
it('should pass DEFAULT_GEMINI_FLASH_MODEL as fallback when Preview Model fails with other error', async () => {
|
|
287
|
-
const mockGoogleApiError = {
|
|
288
|
-
code: 429,
|
|
289
|
-
message: 'mock error',
|
|
290
|
-
details: [],
|
|
291
|
-
};
|
|
292
|
-
const terminalQuotaError = new TerminalQuotaError('quota error', mockGoogleApiError, 5);
|
|
293
|
-
await handleFallback(mockConfig, PREVIEW_GEMINI_MODEL, AuthType.LOGIN_WITH_GOOGLE, terminalQuotaError);
|
|
294
|
-
expect(mockConfig.fallbackModelHandler).toHaveBeenCalledWith(PREVIEW_GEMINI_MODEL, DEFAULT_GEMINI_FLASH_MODEL, terminalQuotaError);
|
|
295
|
-
});
|
|
296
|
-
});
|
|
297
|
-
it('should return null if ModelNotFoundError occurs for a non-preview model', async () => {
|
|
298
|
-
const modelNotFoundError = new ModelNotFoundError('Not found');
|
|
299
|
-
const result = await handleFallback(mockConfig, DEFAULT_GEMINI_MODEL, // Not preview model
|
|
300
|
-
AUTH_OAUTH, modelNotFoundError);
|
|
301
|
-
expect(result).toBeNull();
|
|
302
|
-
expect(mockHandler).not.toHaveBeenCalled();
|
|
303
|
-
});
|
|
304
|
-
it('should consult handler if ModelNotFoundError occurs for preview model', async () => {
|
|
305
|
-
const modelNotFoundError = new ModelNotFoundError('Not found');
|
|
306
|
-
mockHandler.mockResolvedValue('retry_always');
|
|
307
|
-
const result = await handleFallback(mockConfig, PREVIEW_GEMINI_MODEL, AUTH_OAUTH, modelNotFoundError);
|
|
308
|
-
expect(result).toBe(true);
|
|
309
|
-
expect(mockHandler).toHaveBeenCalled();
|
|
310
|
-
});
|
|
311
84
|
describe('policy-driven flow', () => {
|
|
312
85
|
let policyConfig;
|
|
313
86
|
let availability;
|
|
@@ -320,20 +93,27 @@ describe('handleFallback', () => {
|
|
|
320
93
|
});
|
|
321
94
|
policyHandler = vi.fn().mockResolvedValue('retry_once');
|
|
322
95
|
policyConfig = createMockConfig();
|
|
323
|
-
|
|
324
|
-
vi.
|
|
325
|
-
vi.
|
|
96
|
+
// Ensure we test the availability path
|
|
97
|
+
vi.mocked(policyConfig.isModelAvailabilityServiceEnabled).mockReturnValue(true);
|
|
98
|
+
vi.mocked(policyConfig.getModelAvailabilityService).mockReturnValue(availability);
|
|
99
|
+
vi.mocked(policyConfig.getFallbackModelHandler).mockReturnValue(policyHandler);
|
|
100
|
+
});
|
|
101
|
+
it('should return null immediately if authType is not OAuth', async () => {
|
|
102
|
+
const result = await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_API_KEY);
|
|
103
|
+
expect(result).toBeNull();
|
|
104
|
+
expect(policyHandler).not.toHaveBeenCalled();
|
|
326
105
|
});
|
|
327
106
|
it('uses availability selection with correct candidates when enabled', async () => {
|
|
328
|
-
|
|
329
|
-
vi.
|
|
107
|
+
// Direct mock manipulation since it's already a vi.fn()
|
|
108
|
+
vi.mocked(policyConfig.getPreviewFeatures).mockReturnValue(true);
|
|
109
|
+
vi.mocked(policyConfig.getModel).mockReturnValue(DEFAULT_GEMINI_MODEL_AUTO);
|
|
330
110
|
await handleFallback(policyConfig, DEFAULT_GEMINI_MODEL, AUTH_OAUTH);
|
|
331
111
|
expect(availability.selectFirstAvailable).toHaveBeenCalledWith([
|
|
332
112
|
DEFAULT_GEMINI_FLASH_MODEL,
|
|
333
|
-
PREVIEW_GEMINI_MODEL,
|
|
334
113
|
]);
|
|
335
114
|
});
|
|
336
115
|
it('falls back to last resort when availability returns null', async () => {
|
|
116
|
+
vi.mocked(policyConfig.getModel).mockReturnValue(DEFAULT_GEMINI_MODEL_AUTO);
|
|
337
117
|
availability.selectFirstAvailable = vi
|
|
338
118
|
.fn()
|
|
339
119
|
.mockReturnValue({ selectedModel: null, skipped: [] });
|
|
@@ -376,70 +156,106 @@ describe('handleFallback', () => {
|
|
|
376
156
|
chainSpy.mockRestore();
|
|
377
157
|
}
|
|
378
158
|
});
|
|
379
|
-
it('
|
|
159
|
+
it('does not wrap around to upgrade candidates if the current model was selected at the end (e.g. by router)', async () => {
|
|
380
160
|
// Last-resort failure (Flash) in [Preview, Pro, Flash] checks Preview then Pro (all upstream).
|
|
381
|
-
vi.
|
|
161
|
+
vi.mocked(policyConfig.getPreviewFeatures).mockReturnValue(true);
|
|
162
|
+
vi.mocked(policyConfig.getModel).mockReturnValue(DEFAULT_GEMINI_MODEL_AUTO);
|
|
382
163
|
availability.selectFirstAvailable = vi.fn().mockReturnValue({
|
|
383
164
|
selectedModel: MOCK_PRO_MODEL,
|
|
384
165
|
skipped: [],
|
|
385
166
|
});
|
|
386
167
|
policyHandler.mockResolvedValue('retry_once');
|
|
387
168
|
await handleFallback(policyConfig, DEFAULT_GEMINI_FLASH_MODEL, AUTH_OAUTH);
|
|
388
|
-
expect(availability.selectFirstAvailable).
|
|
389
|
-
|
|
390
|
-
MOCK_PRO_MODEL,
|
|
391
|
-
]);
|
|
392
|
-
expect(policyHandler).toHaveBeenCalledWith(DEFAULT_GEMINI_FLASH_MODEL, MOCK_PRO_MODEL, undefined);
|
|
393
|
-
});
|
|
394
|
-
it('logs and returns null when handler resolves to null', async () => {
|
|
395
|
-
policyHandler.mockResolvedValue(null);
|
|
396
|
-
const debugLoggerErrorSpy = vi.spyOn(debugLogger, 'error');
|
|
397
|
-
const result = await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
|
|
398
|
-
expect(result).toBeNull();
|
|
399
|
-
expect(debugLoggerErrorSpy).toHaveBeenCalledWith('Fallback handler failed:', new Error('Unexpected fallback intent received from fallbackModelHandler: "null"'));
|
|
400
|
-
debugLoggerErrorSpy.mockRestore();
|
|
169
|
+
expect(availability.selectFirstAvailable).not.toHaveBeenCalled();
|
|
170
|
+
expect(policyHandler).toHaveBeenCalledWith(DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_FLASH_MODEL, undefined);
|
|
401
171
|
});
|
|
402
172
|
it('successfully follows expected availability response for Preview Chain', async () => {
|
|
403
|
-
availability.selectFirstAvailable = vi
|
|
404
|
-
|
|
405
|
-
|
|
173
|
+
availability.selectFirstAvailable = vi.fn().mockReturnValue({
|
|
174
|
+
selectedModel: PREVIEW_GEMINI_FLASH_MODEL,
|
|
175
|
+
skipped: [],
|
|
176
|
+
});
|
|
406
177
|
policyHandler.mockResolvedValue('retry_once');
|
|
407
|
-
vi.
|
|
408
|
-
vi.
|
|
178
|
+
vi.mocked(policyConfig.getPreviewFeatures).mockReturnValue(true);
|
|
179
|
+
vi.mocked(policyConfig.getActiveModel).mockReturnValue(PREVIEW_GEMINI_MODEL);
|
|
180
|
+
vi.mocked(policyConfig.getModel).mockReturnValue(PREVIEW_GEMINI_MODEL_AUTO);
|
|
409
181
|
const result = await handleFallback(policyConfig, PREVIEW_GEMINI_MODEL, AUTH_OAUTH);
|
|
410
182
|
expect(result).toBe(true);
|
|
411
183
|
expect(availability.selectFirstAvailable).toHaveBeenCalledWith([
|
|
412
|
-
|
|
413
|
-
DEFAULT_GEMINI_FLASH_MODEL,
|
|
184
|
+
PREVIEW_GEMINI_FLASH_MODEL,
|
|
414
185
|
]);
|
|
415
|
-
expect(policyHandler).toHaveBeenCalledWith(PREVIEW_GEMINI_MODEL, DEFAULT_GEMINI_MODEL, undefined);
|
|
416
186
|
});
|
|
417
|
-
it('
|
|
187
|
+
it('should launch upgrade flow and avoid fallback mode when handler returns "upgrade"', async () => {
|
|
188
|
+
policyHandler.mockResolvedValue('upgrade');
|
|
189
|
+
vi.mocked(openBrowserSecurely).mockResolvedValue(undefined);
|
|
190
|
+
const result = await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
|
|
191
|
+
expect(result).toBe(false);
|
|
192
|
+
expect(openBrowserSecurely).toHaveBeenCalledWith('https://goo.gle/set-up-gemini-code-assist');
|
|
193
|
+
expect(policyConfig.setActiveModel).not.toHaveBeenCalled();
|
|
194
|
+
});
|
|
195
|
+
it('should catch errors from the handler, log an error, and return null', async () => {
|
|
196
|
+
const handlerError = new Error('UI interaction failed');
|
|
197
|
+
policyHandler.mockRejectedValue(handlerError);
|
|
198
|
+
const result = await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
|
|
199
|
+
expect(result).toBeNull();
|
|
200
|
+
expect(debugLogger.error).toHaveBeenCalledWith('Fallback handler failed:', handlerError);
|
|
201
|
+
});
|
|
202
|
+
it('should pass TerminalQuotaError (429) correctly to the handler', async () => {
|
|
203
|
+
const mockGoogleApiError = {
|
|
204
|
+
code: 429,
|
|
205
|
+
message: 'mock error',
|
|
206
|
+
details: [],
|
|
207
|
+
};
|
|
208
|
+
const terminalError = new TerminalQuotaError('Quota error', mockGoogleApiError, 5);
|
|
209
|
+
policyHandler.mockResolvedValue('retry_always');
|
|
210
|
+
vi.mocked(policyConfig.getModel).mockReturnValue(DEFAULT_GEMINI_MODEL_AUTO);
|
|
211
|
+
await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH, terminalError);
|
|
212
|
+
expect(policyHandler).toHaveBeenCalledWith(MOCK_PRO_MODEL, DEFAULT_GEMINI_FLASH_MODEL, terminalError);
|
|
213
|
+
});
|
|
214
|
+
it('should pass RetryableQuotaError correctly to the handler', async () => {
|
|
215
|
+
const mockGoogleApiError = {
|
|
216
|
+
code: 503,
|
|
217
|
+
message: 'mock error',
|
|
218
|
+
details: [],
|
|
219
|
+
};
|
|
220
|
+
const retryableError = new RetryableQuotaError('Service unavailable', mockGoogleApiError, 1000);
|
|
221
|
+
policyHandler.mockResolvedValue('retry_once');
|
|
222
|
+
vi.mocked(policyConfig.getModel).mockReturnValue(DEFAULT_GEMINI_MODEL_AUTO);
|
|
223
|
+
await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH, retryableError);
|
|
224
|
+
expect(policyHandler).toHaveBeenCalledWith(MOCK_PRO_MODEL, DEFAULT_GEMINI_FLASH_MODEL, retryableError);
|
|
225
|
+
});
|
|
226
|
+
it('Call the handler with fallback model same as the failed model when the failed model is the last-resort policy', async () => {
|
|
418
227
|
// Ensure short-circuit when wrapping to an unavailable upstream model.
|
|
419
228
|
availability.selectFirstAvailable = vi
|
|
420
229
|
.fn()
|
|
421
230
|
.mockReturnValue({ selectedModel: null, skipped: [] });
|
|
231
|
+
vi.mocked(policyConfig.getModel).mockReturnValue(DEFAULT_GEMINI_MODEL_AUTO);
|
|
422
232
|
const result = await handleFallback(policyConfig, DEFAULT_GEMINI_FLASH_MODEL, AUTH_OAUTH);
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
expect(
|
|
426
|
-
expect(policyConfig.getFallbackModelHandler).not.toHaveBeenCalled();
|
|
233
|
+
policyHandler.mockResolvedValue('retry_once');
|
|
234
|
+
expect(result).not.toBeNull();
|
|
235
|
+
expect(policyHandler).toHaveBeenCalledWith(DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_FLASH_MODEL, undefined);
|
|
427
236
|
});
|
|
428
237
|
it('calls setActiveModel and logs telemetry when handler returns "retry_always"', async () => {
|
|
429
238
|
policyHandler.mockResolvedValue('retry_always');
|
|
239
|
+
vi.mocked(policyConfig.getModel).mockReturnValue(DEFAULT_GEMINI_MODEL_AUTO);
|
|
430
240
|
const result = await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
|
|
431
241
|
expect(result).toBe(true);
|
|
432
242
|
expect(policyConfig.setActiveModel).toHaveBeenCalledWith(FALLBACK_MODEL);
|
|
433
243
|
expect(policyConfig.setFallbackMode).not.toHaveBeenCalled();
|
|
434
244
|
// TODO: add logging expect statement
|
|
435
245
|
});
|
|
436
|
-
it('
|
|
246
|
+
it('does NOT call setActiveModel when handler returns "stop"', async () => {
|
|
437
247
|
policyHandler.mockResolvedValue('stop');
|
|
438
248
|
const result = await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
|
|
439
249
|
expect(result).toBe(false);
|
|
440
|
-
expect(policyConfig.setActiveModel).
|
|
250
|
+
expect(policyConfig.setActiveModel).not.toHaveBeenCalled();
|
|
441
251
|
// TODO: add logging expect statement
|
|
442
252
|
});
|
|
253
|
+
it('does NOT call setActiveModel when handler returns "retry_once"', async () => {
|
|
254
|
+
policyHandler.mockResolvedValue('retry_once');
|
|
255
|
+
const result = await handleFallback(policyConfig, MOCK_PRO_MODEL, AUTH_OAUTH);
|
|
256
|
+
expect(result).toBe(true);
|
|
257
|
+
expect(policyConfig.setActiveModel).not.toHaveBeenCalled();
|
|
258
|
+
});
|
|
443
259
|
});
|
|
444
260
|
});
|
|
445
261
|
//# sourceMappingURL=handler.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.test.js","sourceRoot":"","sources":["../../../src/fallback/handler.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"handler.test.js","sourceRoot":"","sources":["../../../src/fallback/handler.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
export declare const GIT_COMMIT_INFO = "
|
|
7
|
-
export declare const CLI_VERSION = "0.22.0-preview.
|
|
6
|
+
export declare const GIT_COMMIT_INFO = "76414c1cc";
|
|
7
|
+
export declare const CLI_VERSION = "0.22.0-preview.1";
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
// This file is auto-generated by the build script (scripts/generate-git-commit-info.js)
|
|
7
7
|
// Do not edit this file manually.
|
|
8
|
-
export const GIT_COMMIT_INFO = '
|
|
9
|
-
export const CLI_VERSION = '0.22.0-preview.
|
|
8
|
+
export const GIT_COMMIT_INFO = '76414c1cc';
|
|
9
|
+
export const CLI_VERSION = '0.22.0-preview.1';
|
|
10
10
|
//# sourceMappingURL=git-commit.js.map
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { PREVIEW_GEMINI_MODEL, DEFAULT_GEMINI_MODEL, } from '../config/models.js';
|
|
7
6
|
import { DefaultStrategy } from './strategies/defaultStrategy.js';
|
|
8
7
|
import { ClassifierStrategy } from './strategies/classifierStrategy.js';
|
|
9
8
|
import { CompositeStrategy } from './strategies/compositeStrategy.js';
|
|
@@ -42,20 +41,6 @@ export class ModelRouterService {
|
|
|
42
41
|
let decision;
|
|
43
42
|
try {
|
|
44
43
|
decision = await this.strategy.route(context, this.config, this.config.getBaseLlmClient());
|
|
45
|
-
// Unified Preview Model Logic:
|
|
46
|
-
// If the decision is to use 'gemini-2.5-pro' and preview features are enabled,
|
|
47
|
-
// we attempt to upgrade to 'gemini-3.0-pro' (Preview Model).
|
|
48
|
-
if (decision.model === DEFAULT_GEMINI_MODEL &&
|
|
49
|
-
this.config.getPreviewFeatures() &&
|
|
50
|
-
!decision.metadata.source.includes('override')) {
|
|
51
|
-
// We ALWAYS attempt to upgrade to Preview Model here.
|
|
52
|
-
// If we are in fallback mode, the 'previewModelBypassMode' flag (handled in handler.ts/geminiChat.ts)
|
|
53
|
-
// will ensure we downgrade to 2.5 Pro for the actual API call if needed.
|
|
54
|
-
// This allows us to "probe" Preview Model periodically (i.e., every new request tries Preview Model first).
|
|
55
|
-
decision.model = PREVIEW_GEMINI_MODEL;
|
|
56
|
-
decision.metadata.source += ' (Preview Model)';
|
|
57
|
-
decision.metadata.reasoning += ' (Upgraded to Preview Model)';
|
|
58
|
-
}
|
|
59
44
|
const event = new ModelRoutingEvent(decision.model, decision.metadata.source, decision.metadata.latencyMs, decision.metadata.reasoning, false, // failed
|
|
60
45
|
undefined);
|
|
61
46
|
logModelRouting(this.config, event);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelRouterService.js","sourceRoot":"","sources":["../../../src/routing/modelRouterService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"modelRouterService.js","sourceRoot":"","sources":["../../../src/routing/modelRouterService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACrB,MAAM,CAAS;IACf,QAAQ,CAAmB;IAEnC,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACnD,CAAC;IAEO,yBAAyB;QAC/B,qEAAqE;QACrE,2DAA2D;QAC3D,OAAO,IAAI,iBAAiB,CAC1B;YACE,IAAI,gBAAgB,EAAE;YACtB,IAAI,gBAAgB,EAAE;YACtB,IAAI,kBAAkB,EAAE;YACxB,IAAI,eAAe,EAAE;SACtB,EACD,cAAc,CACf,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,OAAuB;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,QAAyB,CAAC;QAE9B,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAClC,OAAO,EACP,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAC/B,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,iBAAiB,CACjC,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,QAAQ,CAAC,MAAM,EACxB,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAC3B,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAC3B,KAAK,EAAE,SAAS;YAChB,SAAS,CACV,CAAC;YACF,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAEpC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,IAAI,CAAC;YACpB,MAAM,aAAa,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACjE,kDAAkD;YAClD,uEAAuE;YACvE,sDAAsD;YACtD,QAAQ,GAAG;gBACT,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC7B,QAAQ,EAAE;oBACR,MAAM,EAAE,kBAAkB;oBAC1B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBACjC,SAAS,EAAE,uCAAuC;oBAClD,KAAK,EAAE,aAAa;iBACrB;aACF,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,iBAAiB,CACjC,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,QAAQ,CAAC,MAAM,EACxB,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAC3B,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAC3B,MAAM,EACN,aAAa,CACd,CAAC;YAEF,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAEpC,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;CACF"}
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
7
7
|
import { ModelRouterService } from './modelRouterService.js';
|
|
8
8
|
import { Config } from '../config/config.js';
|
|
9
|
-
import { PREVIEW_GEMINI_MODEL, DEFAULT_GEMINI_MODEL, } from '../config/models.js';
|
|
10
9
|
import { DefaultStrategy } from './strategies/defaultStrategy.js';
|
|
11
10
|
import { CompositeStrategy } from './strategies/compositeStrategy.js';
|
|
12
11
|
import { FallbackStrategy } from './strategies/fallbackStrategy.js';
|
|
@@ -94,67 +93,6 @@ describe('ModelRouterService', () => {
|
|
|
94
93
|
expect(ModelRoutingEvent).toHaveBeenCalledWith('default-model', 'router-exception', expect.any(Number), 'An exception occurred during routing.', true, 'Strategy failed');
|
|
95
94
|
expect(logModelRouting).toHaveBeenCalledWith(mockConfig, expect.any(ModelRoutingEvent));
|
|
96
95
|
});
|
|
97
|
-
it('should upgrade to Preview Model when preview features are enabled and model is 2.5 Pro', async () => {
|
|
98
|
-
vi.spyOn(mockCompositeStrategy, 'route').mockResolvedValue({
|
|
99
|
-
model: DEFAULT_GEMINI_MODEL,
|
|
100
|
-
metadata: { source: 'test', latencyMs: 0, reasoning: 'test' },
|
|
101
|
-
});
|
|
102
|
-
vi.spyOn(mockConfig, 'getPreviewFeatures').mockReturnValue(true);
|
|
103
|
-
vi.spyOn(mockConfig, 'isPreviewModelFallbackMode').mockReturnValue(false);
|
|
104
|
-
const decision = await service.route(mockContext);
|
|
105
|
-
expect(decision.model).toBe(PREVIEW_GEMINI_MODEL);
|
|
106
|
-
});
|
|
107
|
-
it('should NOT upgrade to Preview Model when preview features are disabled', async () => {
|
|
108
|
-
vi.spyOn(mockCompositeStrategy, 'route').mockResolvedValue({
|
|
109
|
-
model: DEFAULT_GEMINI_MODEL,
|
|
110
|
-
metadata: { source: 'test', latencyMs: 0, reasoning: 'test' },
|
|
111
|
-
});
|
|
112
|
-
vi.spyOn(mockConfig, 'getPreviewFeatures').mockReturnValue(false);
|
|
113
|
-
const decision = await service.route(mockContext);
|
|
114
|
-
expect(decision.model).toBe(DEFAULT_GEMINI_MODEL);
|
|
115
|
-
});
|
|
116
|
-
it('should upgrade to Preview Model when preview features are enabled and model is explicitly set to Pro', async () => {
|
|
117
|
-
// Simulate OverrideStrategy returning Preview Model (as resolveModel would do for "pro")
|
|
118
|
-
vi.spyOn(mockCompositeStrategy, 'route').mockResolvedValue({
|
|
119
|
-
model: PREVIEW_GEMINI_MODEL,
|
|
120
|
-
metadata: {
|
|
121
|
-
source: 'override',
|
|
122
|
-
latencyMs: 0,
|
|
123
|
-
reasoning: 'User selected',
|
|
124
|
-
},
|
|
125
|
-
});
|
|
126
|
-
vi.spyOn(mockConfig, 'getPreviewFeatures').mockReturnValue(true);
|
|
127
|
-
vi.spyOn(mockConfig, 'isPreviewModelFallbackMode').mockReturnValue(false);
|
|
128
|
-
const decision = await service.route(mockContext);
|
|
129
|
-
expect(decision.model).toBe(PREVIEW_GEMINI_MODEL);
|
|
130
|
-
});
|
|
131
|
-
it('should NOT upgrade to Preview Model when preview features are enabled and model is explicitly set to a specific string', async () => {
|
|
132
|
-
// Simulate OverrideStrategy returning a specific model (e.g. "gemini-2.5-pro")
|
|
133
|
-
// This happens when user explicitly sets model to "gemini-2.5-pro" instead of "pro"
|
|
134
|
-
vi.spyOn(mockCompositeStrategy, 'route').mockResolvedValue({
|
|
135
|
-
model: DEFAULT_GEMINI_MODEL,
|
|
136
|
-
metadata: {
|
|
137
|
-
source: 'override',
|
|
138
|
-
latencyMs: 0,
|
|
139
|
-
reasoning: 'User selected',
|
|
140
|
-
},
|
|
141
|
-
});
|
|
142
|
-
vi.spyOn(mockConfig, 'getPreviewFeatures').mockReturnValue(true);
|
|
143
|
-
vi.spyOn(mockConfig, 'isPreviewModelFallbackMode').mockReturnValue(false);
|
|
144
|
-
const decision = await service.route(mockContext);
|
|
145
|
-
// Should NOT upgrade to Preview Model because source is 'override' and model is specific
|
|
146
|
-
expect(decision.model).toBe(DEFAULT_GEMINI_MODEL);
|
|
147
|
-
});
|
|
148
|
-
it('should upgrade to Preview Model even if fallback mode is active (probing behavior)', async () => {
|
|
149
|
-
vi.spyOn(mockCompositeStrategy, 'route').mockResolvedValue({
|
|
150
|
-
model: DEFAULT_GEMINI_MODEL,
|
|
151
|
-
metadata: { source: 'default', latencyMs: 0, reasoning: 'Default' },
|
|
152
|
-
});
|
|
153
|
-
vi.spyOn(mockConfig, 'getPreviewFeatures').mockReturnValue(true);
|
|
154
|
-
vi.spyOn(mockConfig, 'isPreviewModelFallbackMode').mockReturnValue(true);
|
|
155
|
-
const decision = await service.route(mockContext);
|
|
156
|
-
expect(decision.model).toBe(PREVIEW_GEMINI_MODEL);
|
|
157
|
-
});
|
|
158
96
|
});
|
|
159
97
|
});
|
|
160
98
|
//# sourceMappingURL=modelRouterService.test.js.map
|