@google/gemini-cli 0.5.0-nightly.20250908.4693137b → 0.5.0-nightly.20250909.2b05cf3b
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/google-gemini-cli-0.3.4.tgz +0 -0
- package/dist/package.json +2 -2
- package/dist/src/config/settings.js +2 -2
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +20 -4
- package/dist/src/config/settingsSchema.js +13 -1
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/config/settingsSchema.test.js +62 -55
- package/dist/src/config/settingsSchema.test.js.map +1 -1
- package/dist/src/gemini.js +4 -37
- package/dist/src/gemini.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/ui/AppContainer.js +40 -136
- package/dist/src/ui/AppContainer.js.map +1 -1
- package/dist/src/ui/AppContainer.test.js +199 -16
- package/dist/src/ui/AppContainer.test.js.map +1 -1
- package/dist/src/ui/components/AppHeader.js +5 -2
- package/dist/src/ui/components/AppHeader.js.map +1 -1
- package/dist/src/ui/components/Composer.js +2 -1
- package/dist/src/ui/components/Composer.js.map +1 -1
- package/dist/src/ui/components/ConfigInitDisplay.d.ts +6 -0
- package/dist/src/ui/components/ConfigInitDisplay.js +37 -0
- package/dist/src/ui/components/ConfigInitDisplay.js.map +1 -0
- package/dist/src/ui/components/DialogManager.js +2 -3
- package/dist/src/ui/components/DialogManager.js.map +1 -1
- package/dist/src/ui/components/GeminiRespondingSpinner.d.ts +5 -0
- package/dist/src/ui/components/GeminiRespondingSpinner.js +5 -1
- package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -1
- package/dist/src/ui/components/ProQuotaDialog.d.ts +2 -2
- package/dist/src/ui/components/ProQuotaDialog.js +2 -2
- package/dist/src/ui/components/ProQuotaDialog.js.map +1 -1
- package/dist/src/ui/components/ProQuotaDialog.test.js +3 -3
- package/dist/src/ui/components/ProQuotaDialog.test.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.js +20 -5
- package/dist/src/ui/components/SettingsDialog.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.test.js +144 -79
- package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
- package/dist/src/ui/components/ThemeDialog.js +10 -27
- package/dist/src/ui/components/ThemeDialog.js.map +1 -1
- package/dist/src/ui/components/ThemeDialog.test.d.ts +6 -0
- package/dist/src/ui/components/ThemeDialog.test.js +65 -0
- package/dist/src/ui/components/ThemeDialog.test.js.map +1 -0
- package/dist/src/ui/components/shared/ScopeSelector.d.ts +19 -0
- package/dist/src/ui/components/shared/ScopeSelector.js +11 -0
- package/dist/src/ui/components/shared/ScopeSelector.js.map +1 -0
- package/dist/src/ui/contexts/UIStateContext.d.ts +8 -2
- package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
- package/dist/src/ui/hooks/useFolderTrust.d.ts +1 -2
- package/dist/src/ui/hooks/useFolderTrust.js +21 -8
- package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
- package/dist/src/ui/hooks/useMessageQueue.d.ts +2 -1
- package/dist/src/ui/hooks/useMessageQueue.js +5 -3
- package/dist/src/ui/hooks/useMessageQueue.js.map +1 -1
- package/dist/src/ui/hooks/useMessageQueue.test.js +9 -0
- package/dist/src/ui/hooks/useMessageQueue.test.js.map +1 -1
- package/dist/src/ui/hooks/useQuotaAndFallback.d.ts +21 -0
- package/dist/src/ui/hooks/useQuotaAndFallback.js +122 -0
- package/dist/src/ui/hooks/useQuotaAndFallback.js.map +1 -0
- package/dist/src/ui/hooks/useQuotaAndFallback.test.d.ts +6 -0
- package/dist/src/ui/hooks/useQuotaAndFallback.test.js +269 -0
- package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +1 -0
- package/dist/src/utils/settingsUtils.d.ts +16 -6
- package/dist/src/utils/settingsUtils.js +35 -25
- package/dist/src/utils/settingsUtils.js.map +1 -1
- package/dist/src/utils/settingsUtils.test.js +418 -156
- package/dist/src/utils/settingsUtils.test.js.map +1 -1
- package/dist/src/zed-integration/schema.d.ts +4 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -19,6 +19,7 @@ describe('useMessageQueue', () => {
|
|
|
19
19
|
});
|
|
20
20
|
it('should initialize with empty queue', () => {
|
|
21
21
|
const { result } = renderHook(() => useMessageQueue({
|
|
22
|
+
isConfigInitialized: true,
|
|
22
23
|
streamingState: StreamingState.Idle,
|
|
23
24
|
submitQuery: mockSubmitQuery,
|
|
24
25
|
}));
|
|
@@ -27,6 +28,7 @@ describe('useMessageQueue', () => {
|
|
|
27
28
|
});
|
|
28
29
|
it('should add messages to queue', () => {
|
|
29
30
|
const { result } = renderHook(() => useMessageQueue({
|
|
31
|
+
isConfigInitialized: true,
|
|
30
32
|
streamingState: StreamingState.Responding,
|
|
31
33
|
submitQuery: mockSubmitQuery,
|
|
32
34
|
}));
|
|
@@ -41,6 +43,7 @@ describe('useMessageQueue', () => {
|
|
|
41
43
|
});
|
|
42
44
|
it('should filter out empty messages', () => {
|
|
43
45
|
const { result } = renderHook(() => useMessageQueue({
|
|
46
|
+
isConfigInitialized: true,
|
|
44
47
|
streamingState: StreamingState.Responding,
|
|
45
48
|
submitQuery: mockSubmitQuery,
|
|
46
49
|
}));
|
|
@@ -57,6 +60,7 @@ describe('useMessageQueue', () => {
|
|
|
57
60
|
});
|
|
58
61
|
it('should clear queue', () => {
|
|
59
62
|
const { result } = renderHook(() => useMessageQueue({
|
|
63
|
+
isConfigInitialized: true,
|
|
60
64
|
streamingState: StreamingState.Responding,
|
|
61
65
|
submitQuery: mockSubmitQuery,
|
|
62
66
|
}));
|
|
@@ -71,6 +75,7 @@ describe('useMessageQueue', () => {
|
|
|
71
75
|
});
|
|
72
76
|
it('should return queued messages as text with double newlines', () => {
|
|
73
77
|
const { result } = renderHook(() => useMessageQueue({
|
|
78
|
+
isConfigInitialized: true,
|
|
74
79
|
streamingState: StreamingState.Responding,
|
|
75
80
|
submitQuery: mockSubmitQuery,
|
|
76
81
|
}));
|
|
@@ -83,6 +88,7 @@ describe('useMessageQueue', () => {
|
|
|
83
88
|
});
|
|
84
89
|
it('should auto-submit queued messages when transitioning to Idle', () => {
|
|
85
90
|
const { result, rerender } = renderHook(({ streamingState }) => useMessageQueue({
|
|
91
|
+
isConfigInitialized: true,
|
|
86
92
|
streamingState,
|
|
87
93
|
submitQuery: mockSubmitQuery,
|
|
88
94
|
}), {
|
|
@@ -101,6 +107,7 @@ describe('useMessageQueue', () => {
|
|
|
101
107
|
});
|
|
102
108
|
it('should not auto-submit when queue is empty', () => {
|
|
103
109
|
const { rerender } = renderHook(({ streamingState }) => useMessageQueue({
|
|
110
|
+
isConfigInitialized: true,
|
|
104
111
|
streamingState,
|
|
105
112
|
submitQuery: mockSubmitQuery,
|
|
106
113
|
}), {
|
|
@@ -112,6 +119,7 @@ describe('useMessageQueue', () => {
|
|
|
112
119
|
});
|
|
113
120
|
it('should not auto-submit when not transitioning to Idle', () => {
|
|
114
121
|
const { result, rerender } = renderHook(({ streamingState }) => useMessageQueue({
|
|
122
|
+
isConfigInitialized: true,
|
|
115
123
|
streamingState,
|
|
116
124
|
submitQuery: mockSubmitQuery,
|
|
117
125
|
}), {
|
|
@@ -128,6 +136,7 @@ describe('useMessageQueue', () => {
|
|
|
128
136
|
});
|
|
129
137
|
it('should handle multiple state transitions correctly', () => {
|
|
130
138
|
const { result, rerender } = renderHook(({ streamingState }) => useMessageQueue({
|
|
139
|
+
isConfigInitialized: true,
|
|
131
140
|
streamingState,
|
|
132
141
|
submitQuery: mockSubmitQuery,
|
|
133
142
|
}), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMessageQueue.test.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useMessageQueue.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useMessageQueue.test.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useMessageQueue.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { type Config, UserTierId } from '@google/gemini-cli-core';
|
|
7
|
+
import { type UseHistoryManagerReturn } from './useHistoryManager.js';
|
|
8
|
+
import { AuthState } from '../types.js';
|
|
9
|
+
import { type ProQuotaDialogRequest } from '../contexts/UIStateContext.js';
|
|
10
|
+
interface UseQuotaAndFallbackArgs {
|
|
11
|
+
config: Config;
|
|
12
|
+
historyManager: UseHistoryManagerReturn;
|
|
13
|
+
userTier: UserTierId | undefined;
|
|
14
|
+
setAuthState: (state: AuthState) => void;
|
|
15
|
+
setModelSwitchedFromQuotaError: (value: boolean) => void;
|
|
16
|
+
}
|
|
17
|
+
export declare function useQuotaAndFallback({ config, historyManager, userTier, setAuthState, setModelSwitchedFromQuotaError, }: UseQuotaAndFallbackArgs): {
|
|
18
|
+
proQuotaRequest: ProQuotaDialogRequest | null;
|
|
19
|
+
handleProQuotaChoice: (choice: "auth" | "continue") => void;
|
|
20
|
+
};
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { AuthType, isGenericQuotaExceededError, isProQuotaExceededError, UserTierId, } from '@google/gemini-cli-core';
|
|
7
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
8
|
+
import {} from './useHistoryManager.js';
|
|
9
|
+
import { AuthState, MessageType } from '../types.js';
|
|
10
|
+
import {} from '../contexts/UIStateContext.js';
|
|
11
|
+
export function useQuotaAndFallback({ config, historyManager, userTier, setAuthState, setModelSwitchedFromQuotaError, }) {
|
|
12
|
+
const [proQuotaRequest, setProQuotaRequest] = useState(null);
|
|
13
|
+
const isDialogPending = useRef(false);
|
|
14
|
+
// Set up Flash fallback handler
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const fallbackHandler = async (failedModel, fallbackModel, error) => {
|
|
17
|
+
if (config.isInFallbackMode()) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
// Fallbacks are currently only handled for OAuth users.
|
|
21
|
+
const contentGeneratorConfig = config.getContentGeneratorConfig();
|
|
22
|
+
if (!contentGeneratorConfig ||
|
|
23
|
+
contentGeneratorConfig.authType !== AuthType.LOGIN_WITH_GOOGLE) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
// Use actual user tier if available; otherwise, default to FREE tier behavior (safe default)
|
|
27
|
+
const isPaidTier = userTier === UserTierId.LEGACY || userTier === UserTierId.STANDARD;
|
|
28
|
+
let message;
|
|
29
|
+
if (error && isProQuotaExceededError(error)) {
|
|
30
|
+
// Pro Quota specific messages (Interactive)
|
|
31
|
+
if (isPaidTier) {
|
|
32
|
+
message = `⚡ You have reached your daily ${failedModel} quota limit.
|
|
33
|
+
⚡ You can choose to authenticate with a paid API key or continue with the fallback model.
|
|
34
|
+
⚡ To continue accessing the ${failedModel} model today, consider using /auth to switch to using a paid API key from AI Studio at https://aistudio.google.com/apikey`;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
message = `⚡ You have reached your daily ${failedModel} quota limit.
|
|
38
|
+
⚡ You can choose to authenticate with a paid API key or continue with the fallback model.
|
|
39
|
+
⚡ To increase your limits, upgrade to a Gemini Code Assist Standard or Enterprise plan with higher limits at https://goo.gle/set-up-gemini-code-assist
|
|
40
|
+
⚡ Or you can utilize a Gemini API Key. See: https://goo.gle/gemini-cli-docs-auth#gemini-api-key
|
|
41
|
+
⚡ You can switch authentication methods by typing /auth`;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else if (error && isGenericQuotaExceededError(error)) {
|
|
45
|
+
// Generic Quota (Automatic fallback)
|
|
46
|
+
const actionMessage = `⚡ You have reached your daily quota limit.\n⚡ Automatically switching from ${failedModel} to ${fallbackModel} for the remainder of this session.`;
|
|
47
|
+
if (isPaidTier) {
|
|
48
|
+
message = `${actionMessage}
|
|
49
|
+
⚡ To continue accessing the ${failedModel} model today, consider using /auth to switch to using a paid API key from AI Studio at https://aistudio.google.com/apikey`;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
message = `${actionMessage}
|
|
53
|
+
⚡ To increase your limits, upgrade to a Gemini Code Assist Standard or Enterprise plan with higher limits at https://goo.gle/set-up-gemini-code-assist
|
|
54
|
+
⚡ Or you can utilize a Gemini API Key. See: https://goo.gle/gemini-cli-docs-auth#gemini-api-key
|
|
55
|
+
⚡ You can switch authentication methods by typing /auth`;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
// Consecutive 429s or other errors (Automatic fallback)
|
|
60
|
+
const actionMessage = `⚡ Automatically switching from ${failedModel} to ${fallbackModel} for faster responses for the remainder of this session.`;
|
|
61
|
+
if (isPaidTier) {
|
|
62
|
+
message = `${actionMessage}
|
|
63
|
+
⚡ Possible reasons for this are that you have received multiple consecutive capacity errors or you have reached your daily ${failedModel} quota limit
|
|
64
|
+
⚡ To continue accessing the ${failedModel} model today, consider using /auth to switch to using a paid API key from AI Studio at https://aistudio.google.com/apikey`;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
message = `${actionMessage}
|
|
68
|
+
⚡ Possible reasons for this are that you have received multiple consecutive capacity errors or you have reached your daily ${failedModel} quota limit
|
|
69
|
+
⚡ To increase your limits, upgrade to a Gemini Code Assist Standard or Enterprise plan with higher limits at https://goo.gle/set-up-gemini-code-assist
|
|
70
|
+
⚡ Or you can utilize a Gemini API Key. See: https://goo.gle/gemini-cli-docs-auth#gemini-api-key
|
|
71
|
+
⚡ You can switch authentication methods by typing /auth`;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Add message to UI history
|
|
75
|
+
historyManager.addItem({
|
|
76
|
+
type: MessageType.INFO,
|
|
77
|
+
text: message,
|
|
78
|
+
}, Date.now());
|
|
79
|
+
setModelSwitchedFromQuotaError(true);
|
|
80
|
+
config.setQuotaErrorOccurred(true);
|
|
81
|
+
// Interactive Fallback for Pro quota
|
|
82
|
+
if (error && isProQuotaExceededError(error)) {
|
|
83
|
+
if (isDialogPending.current) {
|
|
84
|
+
return 'stop'; // A dialog is already active, so just stop this request.
|
|
85
|
+
}
|
|
86
|
+
isDialogPending.current = true;
|
|
87
|
+
const intent = await new Promise((resolve) => {
|
|
88
|
+
setProQuotaRequest({
|
|
89
|
+
failedModel,
|
|
90
|
+
fallbackModel,
|
|
91
|
+
resolve,
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
return intent;
|
|
95
|
+
}
|
|
96
|
+
return 'stop';
|
|
97
|
+
};
|
|
98
|
+
config.setFallbackModelHandler(fallbackHandler);
|
|
99
|
+
}, [config, historyManager, userTier, setModelSwitchedFromQuotaError]);
|
|
100
|
+
const handleProQuotaChoice = useCallback((choice) => {
|
|
101
|
+
if (!proQuotaRequest)
|
|
102
|
+
return;
|
|
103
|
+
const intent = choice === 'auth' ? 'auth' : 'retry';
|
|
104
|
+
proQuotaRequest.resolve(intent);
|
|
105
|
+
setProQuotaRequest(null);
|
|
106
|
+
isDialogPending.current = false; // Reset the flag here
|
|
107
|
+
if (choice === 'auth') {
|
|
108
|
+
setAuthState(AuthState.Updating);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
historyManager.addItem({
|
|
112
|
+
type: MessageType.INFO,
|
|
113
|
+
text: 'Switched to fallback model. Tip: Press Ctrl+P (or Up Arrow) to recall your previous prompt and submit it again if you wish.',
|
|
114
|
+
}, Date.now());
|
|
115
|
+
}
|
|
116
|
+
}, [proQuotaRequest, setAuthState, historyManager]);
|
|
117
|
+
return {
|
|
118
|
+
proQuotaRequest,
|
|
119
|
+
handleProQuotaChoice,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=useQuotaAndFallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQuotaAndFallback.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useQuotaAndFallback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { vi, describe, it, expect, beforeEach, afterEach, } from 'vitest';
|
|
7
|
+
import { act, renderHook } from '@testing-library/react';
|
|
8
|
+
import { UserTierId, AuthType, isGenericQuotaExceededError, isProQuotaExceededError, makeFakeConfig, } from '@google/gemini-cli-core';
|
|
9
|
+
import { useQuotaAndFallback } from './useQuotaAndFallback.js';
|
|
10
|
+
import { AuthState, MessageType } from '../types.js';
|
|
11
|
+
// Mock the error checking functions from the core package to control test scenarios
|
|
12
|
+
vi.mock('@google/gemini-cli-core', async (importOriginal) => {
|
|
13
|
+
const original = await importOriginal();
|
|
14
|
+
return {
|
|
15
|
+
...original,
|
|
16
|
+
isGenericQuotaExceededError: vi.fn(),
|
|
17
|
+
isProQuotaExceededError: vi.fn(),
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
describe('useQuotaAndFallback', () => {
|
|
21
|
+
let mockConfig;
|
|
22
|
+
let mockHistoryManager;
|
|
23
|
+
let mockSetAuthState;
|
|
24
|
+
let mockSetModelSwitchedFromQuotaError;
|
|
25
|
+
let setFallbackHandlerSpy;
|
|
26
|
+
const mockedIsGenericQuotaExceededError = isGenericQuotaExceededError;
|
|
27
|
+
const mockedIsProQuotaExceededError = isProQuotaExceededError;
|
|
28
|
+
beforeEach(() => {
|
|
29
|
+
mockConfig = makeFakeConfig();
|
|
30
|
+
// Spy on the method that requires the private field and mock its return.
|
|
31
|
+
// This is cleaner than modifying the config class for tests.
|
|
32
|
+
vi.spyOn(mockConfig, 'getContentGeneratorConfig').mockReturnValue({
|
|
33
|
+
model: 'gemini-pro',
|
|
34
|
+
authType: AuthType.LOGIN_WITH_GOOGLE,
|
|
35
|
+
});
|
|
36
|
+
mockHistoryManager = {
|
|
37
|
+
addItem: vi.fn(),
|
|
38
|
+
history: [],
|
|
39
|
+
updateItem: vi.fn(),
|
|
40
|
+
clearItems: vi.fn(),
|
|
41
|
+
loadHistory: vi.fn(),
|
|
42
|
+
};
|
|
43
|
+
mockSetAuthState = vi.fn();
|
|
44
|
+
mockSetModelSwitchedFromQuotaError = vi.fn();
|
|
45
|
+
setFallbackHandlerSpy = vi.spyOn(mockConfig, 'setFallbackModelHandler');
|
|
46
|
+
vi.spyOn(mockConfig, 'setQuotaErrorOccurred');
|
|
47
|
+
mockedIsGenericQuotaExceededError.mockReturnValue(false);
|
|
48
|
+
mockedIsProQuotaExceededError.mockReturnValue(false);
|
|
49
|
+
});
|
|
50
|
+
afterEach(() => {
|
|
51
|
+
vi.clearAllMocks();
|
|
52
|
+
});
|
|
53
|
+
it('should register a fallback handler on initialization', () => {
|
|
54
|
+
renderHook(() => useQuotaAndFallback({
|
|
55
|
+
config: mockConfig,
|
|
56
|
+
historyManager: mockHistoryManager,
|
|
57
|
+
userTier: UserTierId.FREE,
|
|
58
|
+
setAuthState: mockSetAuthState,
|
|
59
|
+
setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
|
|
60
|
+
}));
|
|
61
|
+
expect(setFallbackHandlerSpy).toHaveBeenCalledTimes(1);
|
|
62
|
+
expect(setFallbackHandlerSpy.mock.calls[0][0]).toBeInstanceOf(Function);
|
|
63
|
+
});
|
|
64
|
+
describe('Fallback Handler Logic', () => {
|
|
65
|
+
// Helper function to render the hook and extract the registered handler
|
|
66
|
+
const getRegisteredHandler = (userTier = UserTierId.FREE) => {
|
|
67
|
+
renderHook((props) => useQuotaAndFallback({
|
|
68
|
+
config: mockConfig,
|
|
69
|
+
historyManager: mockHistoryManager,
|
|
70
|
+
userTier: props.userTier,
|
|
71
|
+
setAuthState: mockSetAuthState,
|
|
72
|
+
setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
|
|
73
|
+
}), { initialProps: { userTier } });
|
|
74
|
+
return setFallbackHandlerSpy.mock.calls[0][0];
|
|
75
|
+
};
|
|
76
|
+
it('should return null and take no action if already in fallback mode', async () => {
|
|
77
|
+
vi.spyOn(mockConfig, 'isInFallbackMode').mockReturnValue(true);
|
|
78
|
+
const handler = getRegisteredHandler();
|
|
79
|
+
const result = await handler('gemini-pro', 'gemini-flash', new Error());
|
|
80
|
+
expect(result).toBeNull();
|
|
81
|
+
expect(mockHistoryManager.addItem).not.toHaveBeenCalled();
|
|
82
|
+
});
|
|
83
|
+
it('should return null and take no action if authType is not LOGIN_WITH_GOOGLE', async () => {
|
|
84
|
+
// Override the default mock from beforeEach for this specific test
|
|
85
|
+
vi.spyOn(mockConfig, 'getContentGeneratorConfig').mockReturnValue({
|
|
86
|
+
model: 'gemini-pro',
|
|
87
|
+
authType: AuthType.USE_GEMINI,
|
|
88
|
+
});
|
|
89
|
+
const handler = getRegisteredHandler();
|
|
90
|
+
const result = await handler('gemini-pro', 'gemini-flash', new Error());
|
|
91
|
+
expect(result).toBeNull();
|
|
92
|
+
expect(mockHistoryManager.addItem).not.toHaveBeenCalled();
|
|
93
|
+
});
|
|
94
|
+
describe('Automatic Fallback Scenarios', () => {
|
|
95
|
+
const testCases = [
|
|
96
|
+
{
|
|
97
|
+
errorType: 'generic',
|
|
98
|
+
tier: UserTierId.FREE,
|
|
99
|
+
expectedMessageSnippets: [
|
|
100
|
+
'Automatically switching from model-A to model-B',
|
|
101
|
+
'upgrade to a Gemini Code Assist Standard or Enterprise plan',
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
errorType: 'generic',
|
|
106
|
+
tier: UserTierId.STANDARD, // Paid tier
|
|
107
|
+
expectedMessageSnippets: [
|
|
108
|
+
'Automatically switching from model-A to model-B',
|
|
109
|
+
'switch to using a paid API key from AI Studio',
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
errorType: 'other',
|
|
114
|
+
tier: UserTierId.FREE,
|
|
115
|
+
expectedMessageSnippets: [
|
|
116
|
+
'Automatically switching from model-A to model-B for faster responses',
|
|
117
|
+
'upgrade to a Gemini Code Assist Standard or Enterprise plan',
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
errorType: 'other',
|
|
122
|
+
tier: UserTierId.LEGACY, // Paid tier
|
|
123
|
+
expectedMessageSnippets: [
|
|
124
|
+
'Automatically switching from model-A to model-B for faster responses',
|
|
125
|
+
'switch to using a paid API key from AI Studio',
|
|
126
|
+
],
|
|
127
|
+
},
|
|
128
|
+
];
|
|
129
|
+
for (const { errorType, tier, expectedMessageSnippets } of testCases) {
|
|
130
|
+
it(`should handle ${errorType} error for ${tier} tier correctly`, async () => {
|
|
131
|
+
mockedIsGenericQuotaExceededError.mockReturnValue(errorType === 'generic');
|
|
132
|
+
const handler = getRegisteredHandler(tier);
|
|
133
|
+
const result = await handler('model-A', 'model-B', new Error('quota exceeded'));
|
|
134
|
+
// Automatic fallbacks should return 'stop'
|
|
135
|
+
expect(result).toBe('stop');
|
|
136
|
+
expect(mockHistoryManager.addItem).toHaveBeenCalledWith(expect.objectContaining({ type: MessageType.INFO }), expect.any(Number));
|
|
137
|
+
const message = mockHistoryManager.addItem.mock.calls[0][0]
|
|
138
|
+
.text;
|
|
139
|
+
for (const snippet of expectedMessageSnippets) {
|
|
140
|
+
expect(message).toContain(snippet);
|
|
141
|
+
}
|
|
142
|
+
expect(mockSetModelSwitchedFromQuotaError).toHaveBeenCalledWith(true);
|
|
143
|
+
expect(mockConfig.setQuotaErrorOccurred).toHaveBeenCalledWith(true);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
describe('Interactive Fallback (Pro Quota Error)', () => {
|
|
148
|
+
beforeEach(() => {
|
|
149
|
+
mockedIsProQuotaExceededError.mockReturnValue(true);
|
|
150
|
+
});
|
|
151
|
+
it('should set an interactive request and wait for user choice', async () => {
|
|
152
|
+
const { result } = renderHook(() => useQuotaAndFallback({
|
|
153
|
+
config: mockConfig,
|
|
154
|
+
historyManager: mockHistoryManager,
|
|
155
|
+
userTier: UserTierId.FREE,
|
|
156
|
+
setAuthState: mockSetAuthState,
|
|
157
|
+
setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
|
|
158
|
+
}));
|
|
159
|
+
const handler = setFallbackHandlerSpy.mock
|
|
160
|
+
.calls[0][0];
|
|
161
|
+
// Call the handler but do not await it, to check the intermediate state
|
|
162
|
+
const promise = handler('gemini-pro', 'gemini-flash', new Error('pro quota'));
|
|
163
|
+
await act(async () => { });
|
|
164
|
+
// The hook should now have a pending request for the UI to handle
|
|
165
|
+
expect(result.current.proQuotaRequest).not.toBeNull();
|
|
166
|
+
expect(result.current.proQuotaRequest?.failedModel).toBe('gemini-pro');
|
|
167
|
+
// Simulate the user choosing to continue with the fallback model
|
|
168
|
+
act(() => {
|
|
169
|
+
result.current.handleProQuotaChoice('continue');
|
|
170
|
+
});
|
|
171
|
+
// The original promise from the handler should now resolve
|
|
172
|
+
const intent = await promise;
|
|
173
|
+
expect(intent).toBe('retry');
|
|
174
|
+
// The pending request should be cleared from the state
|
|
175
|
+
expect(result.current.proQuotaRequest).toBeNull();
|
|
176
|
+
});
|
|
177
|
+
it('should handle race conditions by stopping subsequent requests', async () => {
|
|
178
|
+
const { result } = renderHook(() => useQuotaAndFallback({
|
|
179
|
+
config: mockConfig,
|
|
180
|
+
historyManager: mockHistoryManager,
|
|
181
|
+
userTier: UserTierId.FREE,
|
|
182
|
+
setAuthState: mockSetAuthState,
|
|
183
|
+
setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
|
|
184
|
+
}));
|
|
185
|
+
const handler = setFallbackHandlerSpy.mock
|
|
186
|
+
.calls[0][0];
|
|
187
|
+
const promise1 = handler('gemini-pro', 'gemini-flash', new Error('pro quota 1'));
|
|
188
|
+
await act(async () => { });
|
|
189
|
+
const firstRequest = result.current.proQuotaRequest;
|
|
190
|
+
expect(firstRequest).not.toBeNull();
|
|
191
|
+
const result2 = await handler('gemini-pro', 'gemini-flash', new Error('pro quota 2'));
|
|
192
|
+
// The lock should have stopped the second request
|
|
193
|
+
expect(result2).toBe('stop');
|
|
194
|
+
expect(result.current.proQuotaRequest).toBe(firstRequest);
|
|
195
|
+
act(() => {
|
|
196
|
+
result.current.handleProQuotaChoice('continue');
|
|
197
|
+
});
|
|
198
|
+
const intent1 = await promise1;
|
|
199
|
+
expect(intent1).toBe('retry');
|
|
200
|
+
expect(result.current.proQuotaRequest).toBeNull();
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
describe('handleProQuotaChoice', () => {
|
|
205
|
+
beforeEach(() => {
|
|
206
|
+
mockedIsProQuotaExceededError.mockReturnValue(true);
|
|
207
|
+
});
|
|
208
|
+
it('should do nothing if there is no pending pro quota request', () => {
|
|
209
|
+
const { result } = renderHook(() => useQuotaAndFallback({
|
|
210
|
+
config: mockConfig,
|
|
211
|
+
historyManager: mockHistoryManager,
|
|
212
|
+
userTier: UserTierId.FREE,
|
|
213
|
+
setAuthState: mockSetAuthState,
|
|
214
|
+
setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
|
|
215
|
+
}));
|
|
216
|
+
act(() => {
|
|
217
|
+
result.current.handleProQuotaChoice('auth');
|
|
218
|
+
});
|
|
219
|
+
expect(mockSetAuthState).not.toHaveBeenCalled();
|
|
220
|
+
expect(mockHistoryManager.addItem).not.toHaveBeenCalled();
|
|
221
|
+
});
|
|
222
|
+
it('should resolve intent to "auth" and trigger auth state update', async () => {
|
|
223
|
+
const { result } = renderHook(() => useQuotaAndFallback({
|
|
224
|
+
config: mockConfig,
|
|
225
|
+
historyManager: mockHistoryManager,
|
|
226
|
+
userTier: UserTierId.FREE,
|
|
227
|
+
setAuthState: mockSetAuthState,
|
|
228
|
+
setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
|
|
229
|
+
}));
|
|
230
|
+
const handler = setFallbackHandlerSpy.mock
|
|
231
|
+
.calls[0][0];
|
|
232
|
+
const promise = handler('gemini-pro', 'gemini-flash', new Error('pro quota'));
|
|
233
|
+
await act(async () => { }); // Allow state to update
|
|
234
|
+
act(() => {
|
|
235
|
+
result.current.handleProQuotaChoice('auth');
|
|
236
|
+
});
|
|
237
|
+
const intent = await promise;
|
|
238
|
+
expect(intent).toBe('auth');
|
|
239
|
+
expect(mockSetAuthState).toHaveBeenCalledWith(AuthState.Updating);
|
|
240
|
+
expect(result.current.proQuotaRequest).toBeNull();
|
|
241
|
+
});
|
|
242
|
+
it('should resolve intent to "retry" and add info message on continue', async () => {
|
|
243
|
+
const { result } = renderHook(() => useQuotaAndFallback({
|
|
244
|
+
config: mockConfig,
|
|
245
|
+
historyManager: mockHistoryManager,
|
|
246
|
+
userTier: UserTierId.FREE,
|
|
247
|
+
setAuthState: mockSetAuthState,
|
|
248
|
+
setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
|
|
249
|
+
}));
|
|
250
|
+
const handler = setFallbackHandlerSpy.mock
|
|
251
|
+
.calls[0][0];
|
|
252
|
+
// The first `addItem` call is for the initial quota error message
|
|
253
|
+
const promise = handler('gemini-pro', 'gemini-flash', new Error('pro quota'));
|
|
254
|
+
await act(async () => { }); // Allow state to update
|
|
255
|
+
act(() => {
|
|
256
|
+
result.current.handleProQuotaChoice('continue');
|
|
257
|
+
});
|
|
258
|
+
const intent = await promise;
|
|
259
|
+
expect(intent).toBe('retry');
|
|
260
|
+
expect(result.current.proQuotaRequest).toBeNull();
|
|
261
|
+
// Check for the second "Switched to fallback model" message
|
|
262
|
+
expect(mockHistoryManager.addItem).toHaveBeenCalledTimes(2);
|
|
263
|
+
const lastCall = mockHistoryManager.addItem.mock.calls[1][0];
|
|
264
|
+
expect(lastCall.type).toBe(MessageType.INFO);
|
|
265
|
+
expect(lastCall.text).toContain('Switched to fallback model.');
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
//# sourceMappingURL=useQuotaAndFallback.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQuotaAndFallback.test.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useQuotaAndFallback.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,13 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import type { Settings, SettingScope, LoadedSettings } from '../config/settings.js';
|
|
7
|
-
import type { SettingDefinition } from '../config/settingsSchema.js';
|
|
7
|
+
import type { SettingDefinition, SettingsType, SettingsValue } from '../config/settingsSchema.js';
|
|
8
|
+
type FlattenedSchema = Record<string, SettingDefinition & {
|
|
9
|
+
key: string;
|
|
10
|
+
}>;
|
|
11
|
+
/** Returns a flattened schema, the first call is memoized for future requests. */
|
|
12
|
+
export declare function getFlattenedSchema(): FlattenedSchema;
|
|
13
|
+
declare function clearFlattenedSchema(): void;
|
|
8
14
|
/**
|
|
9
15
|
* Get all settings grouped by category
|
|
10
16
|
*/
|
|
@@ -24,7 +30,7 @@ export declare function requiresRestart(key: string): boolean;
|
|
|
24
30
|
/**
|
|
25
31
|
* Get the default value for a setting
|
|
26
32
|
*/
|
|
27
|
-
export declare function getDefaultValue(key: string):
|
|
33
|
+
export declare function getDefaultValue(key: string): SettingsValue;
|
|
28
34
|
/**
|
|
29
35
|
* Get all setting keys that require restart
|
|
30
36
|
*/
|
|
@@ -37,7 +43,7 @@ export declare function getNestedValue(obj: Record<string, unknown>, path: strin
|
|
|
37
43
|
* Get the effective value for a setting, considering inheritance from higher scopes
|
|
38
44
|
* Always returns a value (never undefined) - falls back to default if not set anywhere
|
|
39
45
|
*/
|
|
40
|
-
export declare function getEffectiveValue(key: string, settings: Settings, mergedSettings: Settings):
|
|
46
|
+
export declare function getEffectiveValue(key: string, settings: Settings, mergedSettings: Settings): SettingsValue;
|
|
41
47
|
/**
|
|
42
48
|
* Get all setting keys from the schema
|
|
43
49
|
*/
|
|
@@ -45,7 +51,7 @@ export declare function getAllSettingKeys(): string[];
|
|
|
45
51
|
/**
|
|
46
52
|
* Get settings by type
|
|
47
53
|
*/
|
|
48
|
-
export declare function getSettingsByType(type:
|
|
54
|
+
export declare function getSettingsByType(type: SettingsType): Array<SettingDefinition & {
|
|
49
55
|
key: string;
|
|
50
56
|
}>;
|
|
51
57
|
/**
|
|
@@ -75,7 +81,7 @@ export declare function getDialogSettingsByCategory(): Record<string, Array<Sett
|
|
|
75
81
|
/**
|
|
76
82
|
* Get settings by type that should be shown in the dialog
|
|
77
83
|
*/
|
|
78
|
-
export declare function getDialogSettingsByType(type:
|
|
84
|
+
export declare function getDialogSettingsByType(type: SettingsType): Array<SettingDefinition & {
|
|
79
85
|
key: string;
|
|
80
86
|
}>;
|
|
81
87
|
/**
|
|
@@ -102,7 +108,7 @@ export declare function setPendingSettingValue(key: string, value: boolean, pend
|
|
|
102
108
|
/**
|
|
103
109
|
* Generic setter: Set a setting value (boolean, number, string, etc.) in the pending settings
|
|
104
110
|
*/
|
|
105
|
-
export declare function setPendingSettingValueAny(key: string, value:
|
|
111
|
+
export declare function setPendingSettingValueAny(key: string, value: SettingsValue, pendingSettings: Settings): Settings;
|
|
106
112
|
/**
|
|
107
113
|
* Check if any modified settings require a restart
|
|
108
114
|
*/
|
|
@@ -132,3 +138,7 @@ export declare function isValueInherited(key: string, settings: Settings, _merge
|
|
|
132
138
|
* Always returns a boolean value (never undefined)
|
|
133
139
|
*/
|
|
134
140
|
export declare function getEffectiveDisplayValue(key: string, settings: Settings, mergedSettings: Settings): boolean;
|
|
141
|
+
export declare const TEST_ONLY: {
|
|
142
|
+
clearFlattenedSchema: typeof clearFlattenedSchema;
|
|
143
|
+
};
|
|
144
|
+
export {};
|