@google/gemini-cli-core 0.21.0-nightly.20251217.db643e916 → 0.21.0-nightly.20251219.70696e364
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-core-0.21.0-nightly.20251218.739c02bd6.tgz +0 -0
- 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.d.ts +2 -2
- package/dist/src/agents/codebase-investigator.js +6 -5
- 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/delegate-to-agent-tool.js +8 -4
- package/dist/src/agents/delegate-to-agent-tool.js.map +1 -1
- package/dist/src/agents/delegate-to-agent-tool.test.js +5 -4
- package/dist/src/agents/delegate-to-agent-tool.test.js.map +1 -1
- package/dist/src/agents/{executor.d.ts → local-executor.d.ts} +5 -11
- package/dist/src/agents/{executor.js → local-executor.js} +75 -51
- package/dist/src/agents/local-executor.js.map +1 -0
- package/dist/src/agents/{executor.test.js → local-executor.test.js} +61 -45
- package/dist/src/agents/local-executor.test.js.map +1 -0
- package/dist/src/agents/{invocation.d.ts → local-invocation.d.ts} +5 -6
- package/dist/src/agents/{invocation.js → local-invocation.js} +8 -9
- package/dist/src/agents/local-invocation.js.map +1 -0
- package/dist/src/agents/{invocation.test.js → local-invocation.test.js} +18 -17
- package/dist/src/agents/local-invocation.test.js.map +1 -0
- package/dist/src/agents/registry.d.ts +1 -0
- package/dist/src/agents/registry.js +77 -28
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/agents/registry.test.js +130 -5
- package/dist/src/agents/registry.test.js.map +1 -1
- package/dist/src/agents/remote-invocation.d.ts +21 -0
- package/dist/src/agents/remote-invocation.js +31 -0
- package/dist/src/agents/remote-invocation.js.map +1 -0
- package/dist/src/agents/remote-invocation.test.d.ts +6 -0
- package/dist/src/agents/remote-invocation.test.js +35 -0
- package/dist/src/agents/remote-invocation.test.js.map +1 -0
- package/dist/src/agents/subagent-tool-wrapper.js +7 -3
- package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
- package/dist/src/agents/subagent-tool-wrapper.test.js +10 -9
- package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
- package/dist/src/agents/toml-loader.d.ts +65 -0
- package/dist/src/agents/toml-loader.js +176 -0
- package/dist/src/agents/toml-loader.js.map +1 -0
- package/dist/src/agents/toml-loader.test.d.ts +6 -0
- package/dist/src/agents/toml-loader.test.js +190 -0
- package/dist/src/agents/toml-loader.test.js.map +1 -0
- package/dist/src/agents/types.d.ts +12 -4
- package/dist/src/availability/modelAvailabilityService.d.ts +2 -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 +9 -5
- package/dist/src/availability/policyHelpers.js +43 -37
- package/dist/src/availability/policyHelpers.js.map +1 -1
- package/dist/src/availability/policyHelpers.test.js +58 -20
- package/dist/src/availability/policyHelpers.test.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +1 -1
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +6 -8
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.js +3 -9
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +18 -3
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/telemetry.d.ts +6 -1
- package/dist/src/code_assist/telemetry.js +92 -3
- package/dist/src/code_assist/telemetry.js.map +1 -1
- package/dist/src/code_assist/telemetry.test.js +206 -18
- package/dist/src/code_assist/telemetry.test.js.map +1 -1
- package/dist/src/config/config.d.ts +9 -13
- package/dist/src/config/config.js +68 -38
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +134 -22
- 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/flashFallback.test.js +0 -37
- package/dist/src/config/flashFallback.test.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/config/storage.d.ts +2 -0
- package/dist/src/config/storage.js +6 -0
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/config/storage.test.js +8 -0
- package/dist/src/config/storage.test.js.map +1 -1
- package/dist/src/core/baseLlmClient.d.ts +3 -1
- package/dist/src/core/baseLlmClient.js +51 -43
- package/dist/src/core/baseLlmClient.js.map +1 -1
- package/dist/src/core/baseLlmClient.test.js +12 -19
- package/dist/src/core/baseLlmClient.test.js.map +1 -1
- package/dist/src/core/client.js +18 -33
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +14 -65
- 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/contentGenerator.test.js +0 -6
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/geminiChat.js +29 -88
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +35 -257
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/geminiChat_network_retry.test.js +6 -6
- 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 -7
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/turn.d.ts +1 -0
- package/dist/src/core/turn.js +3 -2
- package/dist/src/core/turn.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 +80 -285
- 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/hooks/hookPlanner.js +3 -1
- package/dist/src/hooks/hookPlanner.js.map +1 -1
- package/dist/src/hooks/hookPlanner.test.js +61 -0
- package/dist/src/hooks/hookPlanner.test.js.map +1 -1
- package/dist/src/hooks/hookRegistry.d.ts +1 -1
- package/dist/src/hooks/hookRegistry.js +2 -2
- package/dist/src/hooks/hookRegistry.js.map +1 -1
- package/dist/src/hooks/hookRegistry.test.js +73 -0
- package/dist/src/hooks/hookRegistry.test.js.map +1 -1
- package/dist/src/hooks/hookRunner.js +2 -2
- package/dist/src/hooks/hookRunner.js.map +1 -1
- package/dist/src/hooks/hookRunner.test.js +23 -0
- package/dist/src/hooks/hookRunner.test.js.map +1 -1
- package/dist/src/hooks/types.d.ts +2 -0
- package/dist/src/hooks/types.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- 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 +20 -12
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.test.js +63 -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/loopDetectionService.js +2 -1
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +14 -8
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/modelConfig.integration.test.js +1 -1
- package/dist/src/services/modelConfig.integration.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +18 -2
- package/dist/src/services/shellExecutionService.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/telemetry/sdk.js +2 -2
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/tools/ripGrep.js +2 -2
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/tool-names.d.ts +13 -0
- package/dist/src/tools/tool-names.js +54 -0
- package/dist/src/tools/tool-names.js.map +1 -1
- package/dist/src/tools/tool-names.test.d.ts +6 -0
- package/dist/src/tools/tool-names.test.js +43 -0
- package/dist/src/tools/tool-names.test.js.map +1 -0
- package/dist/src/tools/tool-registry.d.ts +0 -1
- package/dist/src/tools/tool-registry.js +1 -1
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +2 -1
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/utils/checkpointUtils.js +1 -1
- package/dist/src/utils/checkpointUtils.js.map +1 -1
- package/dist/src/utils/checkpointUtils.test.js +1 -1
- package/dist/src/utils/checkpointUtils.test.js.map +1 -1
- package/dist/src/utils/editCorrector.js +1 -1
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +2 -2
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/environmentContext.d.ts +1 -0
- package/dist/src/utils/environmentContext.js +1 -0
- package/dist/src/utils/environmentContext.js.map +1 -1
- package/dist/src/utils/events.d.ts +0 -16
- package/dist/src/utils/events.js +0 -9
- package/dist/src/utils/events.js.map +1 -1
- package/dist/src/utils/flashFallback.test.js +1 -1
- package/dist/src/utils/flashFallback.test.js.map +1 -1
- package/dist/src/utils/googleQuotaErrors.js +20 -0
- package/dist/src/utils/googleQuotaErrors.js.map +1 -1
- package/dist/src/utils/googleQuotaErrors.test.js +53 -2
- package/dist/src/utils/googleQuotaErrors.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 -6
- package/dist/google-gemini-cli-core-0.21.0-nightly.20251216.bb0c0d8ee.tgz +0 -0
- package/dist/src/agents/executor.js.map +0 -1
- package/dist/src/agents/executor.test.js.map +0 -1
- package/dist/src/agents/invocation.js.map +0 -1
- package/dist/src/agents/invocation.test.js.map +0 -1
- /package/dist/src/agents/{executor.test.d.ts → local-executor.test.d.ts} +0 -0
- /package/dist/src/agents/{invocation.test.d.ts → local-invocation.test.d.ts} +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { describe, it, expect } from 'vitest';
|
|
7
|
-
import { getEffectiveModel, DEFAULT_GEMINI_MODEL, PREVIEW_GEMINI_MODEL, DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_FLASH_LITE_MODEL, GEMINI_MODEL_ALIAS_PRO, GEMINI_MODEL_ALIAS_FLASH, GEMINI_MODEL_ALIAS_FLASH_LITE,
|
|
7
|
+
import { getEffectiveModel, resolveClassifierModel, isGemini2Model, DEFAULT_GEMINI_MODEL, PREVIEW_GEMINI_MODEL, DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_FLASH_LITE_MODEL, supportsMultimodalFunctionResponse, GEMINI_MODEL_ALIAS_PRO, GEMINI_MODEL_ALIAS_FLASH, GEMINI_MODEL_ALIAS_FLASH_LITE, PREVIEW_GEMINI_FLASH_MODEL, PREVIEW_GEMINI_MODEL_AUTO, DEFAULT_GEMINI_MODEL_AUTO, } from './models.js';
|
|
8
8
|
describe('supportsMultimodalFunctionResponse', () => {
|
|
9
9
|
it('should return true for gemini-3 model', () => {
|
|
10
10
|
expect(supportsMultimodalFunctionResponse('gemini-3-pro')).toBe(true);
|
|
@@ -19,111 +19,92 @@ describe('supportsMultimodalFunctionResponse', () => {
|
|
|
19
19
|
});
|
|
20
20
|
});
|
|
21
21
|
describe('getEffectiveModel', () => {
|
|
22
|
-
describe('
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
expect(model).toBe(DEFAULT_GEMINI_MODEL);
|
|
22
|
+
describe('delegation to resolveModel', () => {
|
|
23
|
+
it('should return the Preview Pro model when auto-gemini-3 is requested', () => {
|
|
24
|
+
const model = getEffectiveModel(PREVIEW_GEMINI_MODEL_AUTO, false);
|
|
25
|
+
expect(model).toBe(PREVIEW_GEMINI_MODEL);
|
|
27
26
|
});
|
|
28
|
-
it('should return the
|
|
29
|
-
const model = getEffectiveModel(
|
|
30
|
-
expect(model).toBe(
|
|
27
|
+
it('should return the Default Pro model when auto-gemini-2.5 is requested', () => {
|
|
28
|
+
const model = getEffectiveModel(DEFAULT_GEMINI_MODEL_AUTO, false);
|
|
29
|
+
expect(model).toBe(DEFAULT_GEMINI_MODEL);
|
|
31
30
|
});
|
|
32
|
-
it('should return the
|
|
33
|
-
|
|
34
|
-
expect(
|
|
31
|
+
it('should return the requested model as-is for explicit specific models', () => {
|
|
32
|
+
expect(getEffectiveModel(DEFAULT_GEMINI_MODEL, false)).toBe(DEFAULT_GEMINI_MODEL);
|
|
33
|
+
expect(getEffectiveModel(DEFAULT_GEMINI_FLASH_MODEL, false)).toBe(DEFAULT_GEMINI_FLASH_MODEL);
|
|
34
|
+
expect(getEffectiveModel(DEFAULT_GEMINI_FLASH_LITE_MODEL, false)).toBe(DEFAULT_GEMINI_FLASH_LITE_MODEL);
|
|
35
35
|
});
|
|
36
36
|
it('should return a custom model name when requested', () => {
|
|
37
37
|
const customModel = 'custom-model-v1';
|
|
38
|
-
const model = getEffectiveModel(
|
|
38
|
+
const model = getEffectiveModel(customModel, false);
|
|
39
39
|
expect(model).toBe(customModel);
|
|
40
40
|
});
|
|
41
41
|
describe('with preview features', () => {
|
|
42
42
|
it('should return the preview model when pro alias is requested', () => {
|
|
43
|
-
const model = getEffectiveModel(
|
|
43
|
+
const model = getEffectiveModel(GEMINI_MODEL_ALIAS_PRO, true);
|
|
44
44
|
expect(model).toBe(PREVIEW_GEMINI_MODEL);
|
|
45
45
|
});
|
|
46
46
|
it('should return the default pro model when pro alias is requested and preview is off', () => {
|
|
47
|
-
const model = getEffectiveModel(
|
|
47
|
+
const model = getEffectiveModel(GEMINI_MODEL_ALIAS_PRO, false);
|
|
48
48
|
expect(model).toBe(DEFAULT_GEMINI_MODEL);
|
|
49
49
|
});
|
|
50
50
|
it('should return the flash model when flash is requested and preview is on', () => {
|
|
51
|
-
const model = getEffectiveModel(
|
|
52
|
-
expect(model).toBe(
|
|
51
|
+
const model = getEffectiveModel(GEMINI_MODEL_ALIAS_FLASH, true);
|
|
52
|
+
expect(model).toBe(PREVIEW_GEMINI_FLASH_MODEL);
|
|
53
53
|
});
|
|
54
54
|
it('should return the flash model when lite is requested and preview is on', () => {
|
|
55
|
-
const model = getEffectiveModel(
|
|
55
|
+
const model = getEffectiveModel(GEMINI_MODEL_ALIAS_FLASH_LITE, true);
|
|
56
56
|
expect(model).toBe(DEFAULT_GEMINI_FLASH_LITE_MODEL);
|
|
57
57
|
});
|
|
58
58
|
it('should return the flash model when the flash model name is explicitly requested and preview is on', () => {
|
|
59
|
-
const model = getEffectiveModel(
|
|
59
|
+
const model = getEffectiveModel(DEFAULT_GEMINI_FLASH_MODEL, true);
|
|
60
60
|
expect(model).toBe(DEFAULT_GEMINI_FLASH_MODEL);
|
|
61
61
|
});
|
|
62
62
|
it('should return the lite model when the lite model name is requested and preview is on', () => {
|
|
63
|
-
const model = getEffectiveModel(
|
|
63
|
+
const model = getEffectiveModel(DEFAULT_GEMINI_FLASH_LITE_MODEL, true);
|
|
64
64
|
expect(model).toBe(DEFAULT_GEMINI_FLASH_LITE_MODEL);
|
|
65
65
|
});
|
|
66
66
|
it('should return the default gemini model when the model is explicitly set and preview is on', () => {
|
|
67
|
-
const model = getEffectiveModel(
|
|
67
|
+
const model = getEffectiveModel(DEFAULT_GEMINI_MODEL, true);
|
|
68
68
|
expect(model).toBe(DEFAULT_GEMINI_MODEL);
|
|
69
69
|
});
|
|
70
70
|
});
|
|
71
71
|
});
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
});
|
|
109
|
-
it('should downgrade the default Gemini model to the Flash model', () => {
|
|
110
|
-
const model = getEffectiveModel(isInFallbackMode, DEFAULT_GEMINI_MODEL, true);
|
|
111
|
-
expect(model).toBe(DEFAULT_GEMINI_FLASH_MODEL);
|
|
112
|
-
});
|
|
113
|
-
it('should return the default Flash model when requested', () => {
|
|
114
|
-
const model = getEffectiveModel(isInFallbackMode, DEFAULT_GEMINI_FLASH_MODEL, true);
|
|
115
|
-
expect(model).toBe(DEFAULT_GEMINI_FLASH_MODEL);
|
|
116
|
-
});
|
|
117
|
-
it('should return the default Lite model when requested', () => {
|
|
118
|
-
const model = getEffectiveModel(isInFallbackMode, DEFAULT_GEMINI_FLASH_LITE_MODEL, true);
|
|
119
|
-
expect(model).toBe(DEFAULT_GEMINI_FLASH_LITE_MODEL);
|
|
120
|
-
});
|
|
121
|
-
it('should downgrade any other custom model to the Flash model', () => {
|
|
122
|
-
const customModel = 'custom-model-v1-unlisted';
|
|
123
|
-
const model = getEffectiveModel(isInFallbackMode, customModel, true);
|
|
124
|
-
expect(model).toBe(DEFAULT_GEMINI_FLASH_MODEL);
|
|
125
|
-
});
|
|
126
|
-
});
|
|
72
|
+
});
|
|
73
|
+
describe('isGemini2Model', () => {
|
|
74
|
+
it('should return true for gemini-2.5-pro', () => {
|
|
75
|
+
expect(isGemini2Model('gemini-2.5-pro')).toBe(true);
|
|
76
|
+
});
|
|
77
|
+
it('should return true for gemini-2.5-flash', () => {
|
|
78
|
+
expect(isGemini2Model('gemini-2.5-flash')).toBe(true);
|
|
79
|
+
});
|
|
80
|
+
it('should return true for gemini-2.0-flash', () => {
|
|
81
|
+
expect(isGemini2Model('gemini-2.0-flash')).toBe(true);
|
|
82
|
+
});
|
|
83
|
+
it('should return false for gemini-1.5-pro', () => {
|
|
84
|
+
expect(isGemini2Model('gemini-1.5-pro')).toBe(false);
|
|
85
|
+
});
|
|
86
|
+
it('should return false for gemini-3-pro', () => {
|
|
87
|
+
expect(isGemini2Model('gemini-3-pro')).toBe(false);
|
|
88
|
+
});
|
|
89
|
+
it('should return false for arbitrary strings', () => {
|
|
90
|
+
expect(isGemini2Model('gpt-4')).toBe(false);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
describe('resolveClassifierModel', () => {
|
|
94
|
+
it('should return flash model when alias is flash', () => {
|
|
95
|
+
expect(resolveClassifierModel(DEFAULT_GEMINI_MODEL_AUTO, GEMINI_MODEL_ALIAS_FLASH)).toBe(DEFAULT_GEMINI_FLASH_MODEL);
|
|
96
|
+
expect(resolveClassifierModel(PREVIEW_GEMINI_MODEL_AUTO, GEMINI_MODEL_ALIAS_FLASH)).toBe(PREVIEW_GEMINI_FLASH_MODEL);
|
|
97
|
+
});
|
|
98
|
+
it('should return pro model when alias is pro', () => {
|
|
99
|
+
expect(resolveClassifierModel(DEFAULT_GEMINI_MODEL_AUTO, GEMINI_MODEL_ALIAS_PRO)).toBe(DEFAULT_GEMINI_MODEL);
|
|
100
|
+
expect(resolveClassifierModel(PREVIEW_GEMINI_MODEL_AUTO, GEMINI_MODEL_ALIAS_PRO)).toBe(PREVIEW_GEMINI_MODEL);
|
|
101
|
+
});
|
|
102
|
+
it('should handle preview features being enabled', () => {
|
|
103
|
+
// If preview is enabled, resolving 'flash' without context (fallback) might switch to preview flash,
|
|
104
|
+
// but here we test explicit auto models which should stick to their families if possible?
|
|
105
|
+
// Actually our logic forces DEFAULT_GEMINI_FLASH_MODEL for DEFAULT_GEMINI_MODEL_AUTO even if preview is on,
|
|
106
|
+
// because the USER requested 2.5 explicitly via "auto-gemini-2.5".
|
|
107
|
+
expect(resolveClassifierModel(DEFAULT_GEMINI_MODEL_AUTO, GEMINI_MODEL_ALIAS_FLASH, true)).toBe(DEFAULT_GEMINI_FLASH_MODEL);
|
|
127
108
|
});
|
|
128
109
|
});
|
|
129
110
|
//# sourceMappingURL=models.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.test.js","sourceRoot":"","sources":["../../../src/config/models.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,+BAA+B,EAC/B,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,EAC7B,
|
|
1
|
+
{"version":3,"file":"models.test.js","sourceRoot":"","sources":["../../../src/config/models.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ export declare class Storage {
|
|
|
16
16
|
static getUserCommandsDir(): string;
|
|
17
17
|
static getGlobalMemoryFilePath(): string;
|
|
18
18
|
static getUserPoliciesDir(): string;
|
|
19
|
+
static getUserAgentsDir(): string;
|
|
19
20
|
static getSystemSettingsPath(): string;
|
|
20
21
|
static getSystemPoliciesDir(): string;
|
|
21
22
|
static getGlobalTempDir(): string;
|
|
@@ -29,6 +30,7 @@ export declare class Storage {
|
|
|
29
30
|
getHistoryDir(): string;
|
|
30
31
|
getWorkspaceSettingsPath(): string;
|
|
31
32
|
getProjectCommandsDir(): string;
|
|
33
|
+
getProjectAgentsDir(): string;
|
|
32
34
|
getProjectTempCheckpointsDir(): string;
|
|
33
35
|
getExtensionsDir(): string;
|
|
34
36
|
getExtensionsConfigPath(): string;
|
|
@@ -45,6 +45,9 @@ export class Storage {
|
|
|
45
45
|
static getUserPoliciesDir() {
|
|
46
46
|
return path.join(Storage.getGlobalGeminiDir(), 'policies');
|
|
47
47
|
}
|
|
48
|
+
static getUserAgentsDir() {
|
|
49
|
+
return path.join(Storage.getGlobalGeminiDir(), 'agents');
|
|
50
|
+
}
|
|
48
51
|
static getSystemSettingsPath() {
|
|
49
52
|
if (process.env['GEMINI_CLI_SYSTEM_SETTINGS_PATH']) {
|
|
50
53
|
return process.env['GEMINI_CLI_SYSTEM_SETTINGS_PATH'];
|
|
@@ -99,6 +102,9 @@ export class Storage {
|
|
|
99
102
|
getProjectCommandsDir() {
|
|
100
103
|
return path.join(this.getGeminiDir(), 'commands');
|
|
101
104
|
}
|
|
105
|
+
getProjectAgentsDir() {
|
|
106
|
+
return path.join(this.getGeminiDir(), 'agents');
|
|
107
|
+
}
|
|
102
108
|
getProjectTempCheckpointsDir() {
|
|
103
109
|
return path.join(this.getProjectTempDir(), 'checkpoints');
|
|
104
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/config/storage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/config/storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,CAAC,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAC/D,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAC7C,MAAM,YAAY,GAAG,KAAK,CAAC;AAC3B,MAAM,YAAY,GAAG,KAAK,CAAC;AAE3B,MAAM,OAAO,OAAO;IACD,SAAS,CAAS;IAEnC,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,kBAAkB;QACvB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,qBAAqB;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,uBAAuB,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,qBAAqB;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,eAAe,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,qBAAqB;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,iBAAiB,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,qBAAqB;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,wBAAwB,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,CAAC,kBAAkB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,uBAAuB;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,CAAC,kBAAkB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,gBAAgB;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,qBAAqB;QAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,EAAE,CAAC;YACnD,OAAO,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,sDAAsD,CAAC;QAChE,CAAC;aAAM,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;YACrC,OAAO,4CAA4C,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,OAAO,+BAA+B,CAAC;QACzC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,oBAAoB;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,CAAC,gBAAgB;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,YAAY,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,eAAe;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,YAAY,CAAC,CAAC;IAC7D,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,iBAAiB;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,0BAA0B;QACxB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,CAAC,iBAAiB;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEO,eAAe,CAAC,QAAgB;QACtC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;IAED,aAAa;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,SAAS,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,wBAAwB;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,eAAe,CAAC,CAAC;IACzD,CAAC;IAED,qBAAqB;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,4BAA4B;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,YAAY,CAAC,CAAC;IACtD,CAAC;IAED,uBAAuB;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,uBAAuB,CAAC,CAAC;IACrE,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC;CACF"}
|
|
@@ -36,6 +36,14 @@ describe('Storage – additional helpers', () => {
|
|
|
36
36
|
const expected = path.join(projectRoot, GEMINI_DIR, 'commands');
|
|
37
37
|
expect(storage.getProjectCommandsDir()).toBe(expected);
|
|
38
38
|
});
|
|
39
|
+
it('getUserAgentsDir returns ~/.gemini/agents', () => {
|
|
40
|
+
const expected = path.join(os.homedir(), GEMINI_DIR, 'agents');
|
|
41
|
+
expect(Storage.getUserAgentsDir()).toBe(expected);
|
|
42
|
+
});
|
|
43
|
+
it('getProjectAgentsDir returns project/.gemini/agents', () => {
|
|
44
|
+
const expected = path.join(projectRoot, GEMINI_DIR, 'agents');
|
|
45
|
+
expect(storage.getProjectAgentsDir()).toBe(expected);
|
|
46
|
+
});
|
|
39
47
|
it('getMcpOAuthTokensPath returns ~/.gemini/mcp-oauth-tokens.json', () => {
|
|
40
48
|
const expected = path.join(os.homedir(), GEMINI_DIR, 'mcp-oauth-tokens.json');
|
|
41
49
|
expect(Storage.getMcpOAuthTokensPath()).toBe(expected);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.test.js","sourceRoot":"","sources":["../../../src/config/storage.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;IACrC,MAAM,MAAM,GAAG,MAAM,cAAc,EAAuB,CAAC;IAC3D,OAAO;QACL,GAAG,MAAM;QACT,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;KACnB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;QACtE,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,MAAM,WAAW,GAAG,cAAc,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IAEzC,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;QACrE,MAAM,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,EAAE,CAAC,OAAO,EAAE,EACZ,UAAU,EACV,uBAAuB,CACxB,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"storage.test.js","sourceRoot":"","sources":["../../../src/config/storage.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { Content, Part, GenerateContentResponse } from '@google/genai';
|
|
7
7
|
import type { Config } from '../config/config.js';
|
|
8
8
|
import type { ContentGenerator } from './contentGenerator.js';
|
|
9
|
+
import type { AuthType } from './contentGenerator.js';
|
|
9
10
|
import type { ModelConfigKey } from '../services/modelConfigService.js';
|
|
10
11
|
/**
|
|
11
12
|
* Options for the generateJson utility function.
|
|
@@ -63,7 +64,8 @@ export interface GenerateContentOptions {
|
|
|
63
64
|
export declare class BaseLlmClient {
|
|
64
65
|
private readonly contentGenerator;
|
|
65
66
|
private readonly config;
|
|
66
|
-
|
|
67
|
+
private readonly authType?;
|
|
68
|
+
constructor(contentGenerator: ContentGenerator, config: Config, authType?: AuthType | undefined);
|
|
67
69
|
generateJson(options: GenerateJsonOptions): Promise<Record<string, unknown>>;
|
|
68
70
|
generateEmbedding(texts: string[]): Promise<number[][]>;
|
|
69
71
|
private cleanJsonResponse;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { handleFallback } from '../fallback/handler.js';
|
|
6
7
|
import { getResponseText } from '../utils/partUtils.js';
|
|
7
8
|
import { reportError } from '../utils/errorReporting.js';
|
|
8
9
|
import { getErrorMessage } from '../utils/errors.js';
|
|
@@ -17,13 +18,15 @@ const DEFAULT_MAX_ATTEMPTS = 5;
|
|
|
17
18
|
export class BaseLlmClient {
|
|
18
19
|
contentGenerator;
|
|
19
20
|
config;
|
|
20
|
-
|
|
21
|
+
authType;
|
|
22
|
+
constructor(contentGenerator, config, authType) {
|
|
21
23
|
this.contentGenerator = contentGenerator;
|
|
22
24
|
this.config = config;
|
|
25
|
+
this.authType = authType;
|
|
23
26
|
}
|
|
24
27
|
async generateJson(options) {
|
|
25
28
|
const { schema, modelConfigKey, contents, systemInstruction, abortSignal, promptId, maxAttempts, } = options;
|
|
26
|
-
const { model
|
|
29
|
+
const { model } = this.config.modelConfigService.getResolvedConfig(modelConfigKey);
|
|
27
30
|
const shouldRetryOnContent = (response) => {
|
|
28
31
|
const text = getResponseText(response)?.trim();
|
|
29
32
|
if (!text) {
|
|
@@ -39,16 +42,17 @@ export class BaseLlmClient {
|
|
|
39
42
|
}
|
|
40
43
|
};
|
|
41
44
|
const result = await this._generateWithRetry({
|
|
42
|
-
|
|
45
|
+
modelConfigKey,
|
|
43
46
|
contents,
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
abortSignal,
|
|
48
|
+
promptId,
|
|
49
|
+
maxAttempts,
|
|
50
|
+
systemInstruction,
|
|
51
|
+
additionalProperties: {
|
|
47
52
|
responseJsonSchema: schema,
|
|
48
53
|
responseMimeType: 'application/json',
|
|
49
|
-
abortSignal,
|
|
50
54
|
},
|
|
51
|
-
},
|
|
55
|
+
}, shouldRetryOnContent, 'generateJson');
|
|
52
56
|
// If we are here, the content is valid (not empty and parsable).
|
|
53
57
|
return JSON.parse(this.cleanJsonResponse(getResponseText(result).trim(), model));
|
|
54
58
|
}
|
|
@@ -87,57 +91,61 @@ export class BaseLlmClient {
|
|
|
87
91
|
}
|
|
88
92
|
async generateContent(options) {
|
|
89
93
|
const { modelConfigKey, contents, systemInstruction, abortSignal, promptId, maxAttempts, } = options;
|
|
90
|
-
const { model, generateContentConfig } = this.config.modelConfigService.getResolvedConfig(modelConfigKey);
|
|
91
94
|
const shouldRetryOnContent = (response) => {
|
|
92
95
|
const text = getResponseText(response)?.trim();
|
|
93
96
|
return !text; // Retry on empty response
|
|
94
97
|
};
|
|
95
98
|
return this._generateWithRetry({
|
|
96
|
-
|
|
99
|
+
modelConfigKey,
|
|
97
100
|
contents,
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}, promptId, maxAttempts, shouldRetryOnContent, 'generateContent');
|
|
101
|
+
systemInstruction,
|
|
102
|
+
abortSignal,
|
|
103
|
+
promptId,
|
|
104
|
+
maxAttempts,
|
|
105
|
+
}, shouldRetryOnContent, 'generateContent');
|
|
104
106
|
}
|
|
105
|
-
async _generateWithRetry(
|
|
106
|
-
const abortSignal =
|
|
107
|
+
async _generateWithRetry(options, shouldRetryOnContent, errorContext) {
|
|
108
|
+
const { modelConfigKey, contents, systemInstruction, abortSignal, promptId, maxAttempts, additionalProperties, } = options;
|
|
109
|
+
const { model, config: generateContentConfig, maxAttempts: availabilityMaxAttempts, } = applyModelSelection(this.config, modelConfigKey);
|
|
110
|
+
let currentModel = model;
|
|
111
|
+
let currentGenerateContentConfig = generateContentConfig;
|
|
107
112
|
// Define callback to fetch context dynamically since active model may get updated during retry loop
|
|
108
|
-
const getAvailabilityContext = createAvailabilityContextProvider(this.config, () =>
|
|
109
|
-
const { model, config: newConfig, maxAttempts: availabilityMaxAttempts, } = applyModelSelection(this.config, requestParams.model, requestParams.config);
|
|
110
|
-
requestParams.model = model;
|
|
111
|
-
if (newConfig) {
|
|
112
|
-
requestParams.config = newConfig;
|
|
113
|
-
}
|
|
114
|
-
if (abortSignal) {
|
|
115
|
-
requestParams.config = { ...requestParams.config, abortSignal };
|
|
116
|
-
}
|
|
113
|
+
const getAvailabilityContext = createAvailabilityContextProvider(this.config, () => currentModel);
|
|
117
114
|
try {
|
|
118
115
|
const apiCall = () => {
|
|
119
|
-
//
|
|
116
|
+
// Ensure we use the current active model
|
|
120
117
|
// in case a fallback occurred in a previous attempt.
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
...requestParams.config,
|
|
131
|
-
...generateContentConfig,
|
|
132
|
-
};
|
|
133
|
-
}
|
|
118
|
+
const activeModel = this.config.getActiveModel();
|
|
119
|
+
if (activeModel !== currentModel) {
|
|
120
|
+
currentModel = activeModel;
|
|
121
|
+
// Re-resolve config if model changed during retry
|
|
122
|
+
const { generateContentConfig } = this.config.modelConfigService.getResolvedConfig({
|
|
123
|
+
...modelConfigKey,
|
|
124
|
+
model: activeModel,
|
|
125
|
+
});
|
|
126
|
+
currentGenerateContentConfig = generateContentConfig;
|
|
134
127
|
}
|
|
128
|
+
const finalConfig = {
|
|
129
|
+
...currentGenerateContentConfig,
|
|
130
|
+
...(systemInstruction && { systemInstruction }),
|
|
131
|
+
...additionalProperties,
|
|
132
|
+
abortSignal,
|
|
133
|
+
};
|
|
134
|
+
const requestParams = {
|
|
135
|
+
model: currentModel,
|
|
136
|
+
config: finalConfig,
|
|
137
|
+
contents,
|
|
138
|
+
};
|
|
135
139
|
return this.contentGenerator.generateContent(requestParams, promptId);
|
|
136
140
|
};
|
|
137
141
|
return await retryWithBackoff(apiCall, {
|
|
138
142
|
shouldRetryOnContent,
|
|
139
143
|
maxAttempts: availabilityMaxAttempts ?? maxAttempts ?? DEFAULT_MAX_ATTEMPTS,
|
|
140
144
|
getAvailabilityContext,
|
|
145
|
+
onPersistent429: this.config.isInteractive()
|
|
146
|
+
? (authType, error) => handleFallback(this.config, currentModel, authType, error)
|
|
147
|
+
: undefined,
|
|
148
|
+
authType: this.authType ?? this.config.getContentGeneratorConfig()?.authType,
|
|
141
149
|
});
|
|
142
150
|
}
|
|
143
151
|
catch (error) {
|
|
@@ -147,10 +155,10 @@ export class BaseLlmClient {
|
|
|
147
155
|
// Check if the error is from exhausting retries, and report accordingly.
|
|
148
156
|
if (error instanceof Error &&
|
|
149
157
|
error.message.includes('Retry attempts exhausted')) {
|
|
150
|
-
await reportError(error, `API returned invalid content after all retries.`,
|
|
158
|
+
await reportError(error, `API returned invalid content after all retries.`, contents, `${errorContext}-invalid-content`);
|
|
151
159
|
}
|
|
152
160
|
else {
|
|
153
|
-
await reportError(error, `Error generating content via API.`,
|
|
161
|
+
await reportError(error, `Error generating content via API.`, contents, `${errorContext}-api`);
|
|
154
162
|
}
|
|
155
163
|
throw new Error(`Failed to generate content: ${getErrorMessage(error)}`);
|
|
156
164
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseLlmClient.js","sourceRoot":"","sources":["../../../src/core/baseLlmClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"baseLlmClient.js","sourceRoot":"","sources":["../../../src/core/baseLlmClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -78,12 +78,12 @@ describe('BaseLlmClient', () => {
|
|
|
78
78
|
.fn()
|
|
79
79
|
.mockImplementation(({ model }) => makeResolvedModelConfig(model)),
|
|
80
80
|
},
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
getModelAvailabilityService: vi
|
|
82
|
+
.fn()
|
|
83
|
+
.mockReturnValue(createAvailabilityServiceMock()),
|
|
83
84
|
setActiveModel: vi.fn(),
|
|
84
85
|
getPreviewFeatures: vi.fn().mockReturnValue(false),
|
|
85
86
|
getUserTier: vi.fn().mockReturnValue(undefined),
|
|
86
|
-
isInFallbackMode: vi.fn().mockReturnValue(false),
|
|
87
87
|
getModel: vi.fn().mockReturnValue('test-model'),
|
|
88
88
|
getActiveModel: vi.fn().mockReturnValue('test-model'),
|
|
89
89
|
};
|
|
@@ -410,9 +410,6 @@ describe('BaseLlmClient', () => {
|
|
|
410
410
|
let contentOptions;
|
|
411
411
|
let jsonOptions;
|
|
412
412
|
beforeEach(() => {
|
|
413
|
-
mockConfig.isModelAvailabilityServiceEnabled = vi
|
|
414
|
-
.fn()
|
|
415
|
-
.mockReturnValue(true);
|
|
416
413
|
mockAvailabilityService = createAvailabilityServiceMock({
|
|
417
414
|
selectedModel: 'test-model',
|
|
418
415
|
skipped: [],
|
|
@@ -435,16 +432,6 @@ describe('BaseLlmClient', () => {
|
|
|
435
432
|
promptId: 'json-prompt-id',
|
|
436
433
|
};
|
|
437
434
|
});
|
|
438
|
-
it('should preserve legacy behavior when availability is disabled', async () => {
|
|
439
|
-
mockConfig.isModelAvailabilityServiceEnabled = vi
|
|
440
|
-
.fn()
|
|
441
|
-
.mockReturnValue(false);
|
|
442
|
-
mockGenerateContent.mockResolvedValue(createMockResponse('Some text response'));
|
|
443
|
-
await client.generateContent(contentOptions);
|
|
444
|
-
expect(mockAvailabilityService.selectFirstAvailable).not.toHaveBeenCalled();
|
|
445
|
-
expect(mockConfig.setActiveModel).not.toHaveBeenCalled();
|
|
446
|
-
expect(mockAvailabilityService.markHealthy).not.toHaveBeenCalled();
|
|
447
|
-
});
|
|
448
435
|
it('should mark model as healthy on success', async () => {
|
|
449
436
|
const successfulModel = 'gemini-pro';
|
|
450
437
|
vi.mocked(mockAvailabilityService.selectFirstAvailable).mockReturnValue({
|
|
@@ -535,9 +522,15 @@ describe('BaseLlmClient', () => {
|
|
|
535
522
|
const fallbackModel = 'gemini-flash';
|
|
536
523
|
// Provide distinct configs per model
|
|
537
524
|
const getResolvedConfigMock = vi.mocked(mockConfig.modelConfigService.getResolvedConfig);
|
|
538
|
-
getResolvedConfigMock
|
|
539
|
-
.
|
|
540
|
-
|
|
525
|
+
getResolvedConfigMock.mockImplementation((key) => {
|
|
526
|
+
if (key.model === firstModel) {
|
|
527
|
+
return makeResolvedModelConfig(firstModel, { temperature: 0.1 });
|
|
528
|
+
}
|
|
529
|
+
if (key.model === fallbackModel) {
|
|
530
|
+
return makeResolvedModelConfig(fallbackModel, { temperature: 0.9 });
|
|
531
|
+
}
|
|
532
|
+
return makeResolvedModelConfig(key.model);
|
|
533
|
+
});
|
|
541
534
|
// Availability selects the first model initially
|
|
542
535
|
vi.mocked(mockAvailabilityService.selectFirstAvailable).mockReturnValue({
|
|
543
536
|
selectedModel: firstModel,
|