@google/gemini-cli-core 0.21.2 → 0.22.0-preview.0
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/delegate-to-agent-tool.d.ts +19 -0
- package/dist/src/agents/delegate-to-agent-tool.js +111 -0
- package/dist/src/agents/delegate-to-agent-tool.js.map +1 -0
- package/dist/src/agents/delegate-to-agent-tool.test.d.ts +6 -0
- package/dist/src/agents/delegate-to-agent-tool.test.js +133 -0
- package/dist/src/agents/delegate-to-agent-tool.test.js.map +1 -0
- package/dist/src/agents/executor.js +1 -1
- package/dist/src/agents/executor.js.map +1 -1
- package/dist/src/agents/executor.test.js.map +1 -1
- package/dist/src/agents/registry.d.ts +15 -0
- package/dist/src/agents/registry.js +49 -17
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/agents/registry.test.js +22 -33
- package/dist/src/agents/registry.test.js.map +1 -1
- package/dist/src/availability/policyCatalog.d.ts +0 -1
- package/dist/src/availability/policyCatalog.js +8 -6
- 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 +2 -5
- package/dist/src/availability/policyHelpers.js +17 -30
- package/dist/src/availability/policyHelpers.js.map +1 -1
- package/dist/src/availability/policyHelpers.test.js +2 -30
- package/dist/src/availability/policyHelpers.test.js.map +1 -1
- package/dist/src/code_assist/experiments/client_metadata.js +2 -1
- package/dist/src/code_assist/experiments/client_metadata.js.map +1 -1
- package/dist/src/code_assist/experiments/client_metadata.test.js +7 -10
- package/dist/src/code_assist/experiments/client_metadata.test.js.map +1 -1
- package/dist/src/commands/init.d.ts +7 -0
- package/dist/src/commands/init.js +53 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/init.test.d.ts +6 -0
- package/dist/src/commands/init.test.js +25 -0
- package/dist/src/commands/init.test.js.map +1 -0
- package/dist/src/config/config.d.ts +0 -5
- package/dist/src/config/config.js +32 -76
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +36 -129
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/defaultModelConfigs.js +10 -11
- package/dist/src/config/defaultModelConfigs.js.map +1 -1
- package/dist/src/config/models.d.ts +17 -22
- package/dist/src/config/models.js +32 -64
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/models.test.js +89 -57
- package/dist/src/config/models.test.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.js.map +1 -1
- package/dist/src/confirmation-bus/types.d.ts +4 -0
- package/dist/src/core/baseLlmClient.d.ts +1 -3
- package/dist/src/core/baseLlmClient.js +1 -8
- package/dist/src/core/baseLlmClient.js.map +1 -1
- package/dist/src/core/baseLlmClient.test.js.map +1 -1
- package/dist/src/core/client.js +3 -4
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +1 -3
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +5 -3
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +29 -2
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +1 -1
- package/dist/src/core/coreToolScheduler.js +72 -34
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +134 -37
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.js +23 -16
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +186 -40
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/geminiChat_network_retry.test.js +0 -2
- package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +4 -5
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/prompts.js +15 -12
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +14 -13
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/turn.js +1 -1
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/fallback/handler.js +121 -54
- package/dist/src/fallback/handler.js.map +1 -1
- package/dist/src/fallback/handler.test.js +266 -82
- 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/generated/git-commit.js.map +1 -1
- package/dist/src/hooks/hookEventHandler.js +6 -1
- package/dist/src/hooks/hookEventHandler.js.map +1 -1
- package/dist/src/hooks/hookEventHandler.test.js +8 -1
- package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
- package/dist/src/hooks/hookRegistry.d.ts +0 -7
- package/dist/src/hooks/hookRegistry.js +0 -20
- package/dist/src/hooks/hookRegistry.js.map +1 -1
- package/dist/src/hooks/hookRegistry.test.js +1 -7
- package/dist/src/hooks/hookRegistry.test.js.map +1 -1
- package/dist/src/hooks/hookRunner.test.js +1 -1
- package/dist/src/hooks/hookRunner.test.js.map +1 -1
- package/dist/src/hooks/hookSystem.d.ts +0 -8
- package/dist/src/hooks/hookSystem.js +0 -18
- package/dist/src/hooks/hookSystem.js.map +1 -1
- package/dist/src/hooks/hookSystem.test.js +2 -21
- package/dist/src/hooks/hookSystem.test.js.map +1 -1
- package/dist/src/ide/detect-ide.test.js +32 -1
- package/dist/src/ide/detect-ide.test.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +1 -1
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/output/json-formatter.test.js +2 -0
- package/dist/src/output/json-formatter.test.js.map +1 -1
- package/dist/src/output/stream-json-formatter.js +6 -0
- package/dist/src/output/stream-json-formatter.js.map +1 -1
- package/dist/src/output/stream-json-formatter.test.js +98 -100
- package/dist/src/output/stream-json-formatter.test.js.map +1 -1
- package/dist/src/output/types.d.ts +2 -0
- package/dist/src/policy/config.js +71 -2
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/persistence.test.d.ts +6 -0
- package/dist/src/policy/persistence.test.js +149 -0
- package/dist/src/policy/persistence.test.js.map +1 -0
- package/dist/src/policy/policies/agent.toml +31 -0
- package/dist/src/policy/policy-engine.js +55 -1
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/shell-safety.test.d.ts +6 -0
- package/dist/src/policy/shell-safety.test.js +74 -0
- package/dist/src/policy/shell-safety.test.js.map +1 -0
- package/dist/src/policy/toml-loader.d.ts +8 -0
- package/dist/src/policy/toml-loader.js +3 -3
- package/dist/src/policy/toml-loader.js.map +1 -1
- package/dist/src/routing/modelRouterService.js +15 -0
- package/dist/src/routing/modelRouterService.js.map +1 -1
- package/dist/src/routing/modelRouterService.test.js +62 -0
- package/dist/src/routing/modelRouterService.test.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.js +21 -10
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.test.js +1 -2
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.js +12 -23
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.test.js +39 -69
- package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.js +3 -4
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
- package/dist/src/safety/checker-runner.js +17 -6
- package/dist/src/safety/checker-runner.js.map +1 -1
- package/dist/src/services/chatCompressionService.js +1 -3
- package/dist/src/services/chatCompressionService.js.map +1 -1
- package/dist/src/services/chatRecordingService.d.ts +5 -0
- package/dist/src/services/chatRecordingService.js +7 -0
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/fileSystemService.d.ts +0 -9
- package/dist/src/services/fileSystemService.js +0 -11
- package/dist/src/services/fileSystemService.js.map +1 -1
- package/dist/src/services/loopDetectionService.js +2 -2
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/modelConfig.golden.test.js +32 -0
- package/dist/src/services/modelConfig.golden.test.js.map +1 -1
- package/dist/src/services/modelConfigService.d.ts +3 -0
- package/dist/src/services/modelConfigService.js +3 -2
- package/dist/src/services/modelConfigService.js.map +1 -1
- package/dist/src/services/modelConfigService.test.js +110 -0
- package/dist/src/services/modelConfigService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +1 -2
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +6 -3
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/services/test-data/resolved-aliases-retry.golden.json +222 -0
- package/dist/src/services/test-data/resolved-aliases.golden.json +0 -16
- package/dist/src/telemetry/activity-detector.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +5 -5
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +18 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/config.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +5 -5
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/startupProfiler.test.js +1 -2
- package/dist/src/telemetry/startupProfiler.test.js.map +1 -1
- package/dist/src/telemetry/trace.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +10 -5
- package/dist/src/telemetry/types.js +16 -8
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +1 -0
- package/dist/src/telemetry/uiTelemetry.js +2 -0
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +4 -0
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/test-utils/mock-message-bus.js.map +1 -1
- package/dist/src/tools/edit.js +1 -0
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/mcp-tool.js +13 -0
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +25 -0
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.js +1 -0
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/modifiable-tool.js.map +1 -1
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +2 -1
- package/dist/src/tools/shell.js +9 -1
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +2 -1
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/smart-edit.js +1 -0
- package/dist/src/tools/smart-edit.js.map +1 -1
- package/dist/src/tools/smart-edit.test.js.map +1 -1
- package/dist/src/tools/tool-names.d.ts +1 -0
- package/dist/src/tools/tool-names.js +1 -0
- package/dist/src/tools/tool-names.js.map +1 -1
- package/dist/src/tools/tools.d.ts +19 -0
- package/dist/src/tools/tools.js +28 -9
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.js +1 -0
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/write-file.js +1 -0
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.d.ts +8 -0
- package/dist/src/utils/bfsFileSearch.js +63 -23
- package/dist/src/utils/bfsFileSearch.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.test.js +65 -1
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
- package/dist/src/utils/checkpointUtils.js.map +1 -1
- package/dist/src/utils/extensionLoader.d.ts +2 -2
- package/dist/src/utils/extensionLoader.js +5 -6
- package/dist/src/utils/extensionLoader.js.map +1 -1
- package/dist/src/utils/extensionLoader.test.js +11 -0
- package/dist/src/utils/extensionLoader.test.js.map +1 -1
- package/dist/src/utils/filesearch/crawlCache.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.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/pathCorrector.js +12 -2
- package/dist/src/utils/pathCorrector.js.map +1 -1
- package/dist/src/utils/pathCorrector.test.js +6 -2
- package/dist/src/utils/pathCorrector.test.js.map +1 -1
- package/dist/src/utils/retry.js +16 -2
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +22 -7
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/shell-permissions.d.ts +52 -0
- package/dist/src/utils/shell-permissions.js +188 -0
- package/dist/src/utils/shell-permissions.js.map +1 -0
- package/dist/src/utils/shell-permissions.test.d.ts +6 -0
- package/dist/src/utils/shell-permissions.test.js +342 -0
- package/dist/src/utils/shell-permissions.test.js.map +1 -0
- package/dist/src/utils/shell-utils.d.ts +10 -47
- package/dist/src/utils/shell-utils.js +1 -182
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +1 -288
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/tool-utils.js.map +1 -1
- package/dist/src/utils/version.d.ts +6 -0
- package/dist/src/utils/version.js +15 -0
- package/dist/src/utils/version.js.map +1 -0
- package/dist/src/utils/version.test.d.ts +6 -0
- package/dist/src/utils/version.test.js +39 -0
- package/dist/src/utils/version.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -1
- package/dist/google-gemini-cli-core-0.21.1.tgz +0 -0
|
@@ -4,14 +4,64 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { AuthType } from '../core/contentGenerator.js';
|
|
7
|
+
import { DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_MODEL, PREVIEW_GEMINI_MODEL, } from '../config/models.js';
|
|
8
|
+
import { logFlashFallback, FlashFallbackEvent } from '../telemetry/index.js';
|
|
7
9
|
import { openBrowserSecurely } from '../utils/secure-browser-launcher.js';
|
|
8
10
|
import { debugLogger } from '../utils/debugLogger.js';
|
|
9
11
|
import { getErrorMessage } from '../utils/errors.js';
|
|
12
|
+
import { ModelNotFoundError } from '../utils/httpErrors.js';
|
|
13
|
+
import { TerminalQuotaError } from '../utils/googleQuotaErrors.js';
|
|
14
|
+
import { coreEvents } from '../utils/events.js';
|
|
10
15
|
import { classifyFailureKind } from '../availability/errorClassification.js';
|
|
11
|
-
import { buildFallbackPolicyContext, resolvePolicyChain, resolvePolicyAction,
|
|
16
|
+
import { buildFallbackPolicyContext, resolvePolicyChain, resolvePolicyAction, } from '../availability/policyHelpers.js';
|
|
12
17
|
const UPGRADE_URL_PAGE = 'https://goo.gle/set-up-gemini-code-assist';
|
|
13
18
|
export async function handleFallback(config, failedModel, authType, error) {
|
|
14
|
-
|
|
19
|
+
if (config.isModelAvailabilityServiceEnabled()) {
|
|
20
|
+
return handlePolicyDrivenFallback(config, failedModel, authType, error);
|
|
21
|
+
}
|
|
22
|
+
return legacyHandleFallback(config, failedModel, authType, error);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Old fallback logic relying on hard coded strings
|
|
26
|
+
*/
|
|
27
|
+
async function legacyHandleFallback(config, failedModel, authType, error) {
|
|
28
|
+
if (authType !== AuthType.LOGIN_WITH_GOOGLE)
|
|
29
|
+
return null;
|
|
30
|
+
// Guardrail: If it's a ModelNotFoundError but NOT the preview model, do not handle it.
|
|
31
|
+
if (error instanceof ModelNotFoundError &&
|
|
32
|
+
failedModel !== PREVIEW_GEMINI_MODEL) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const shouldActivatePreviewFallback = failedModel === PREVIEW_GEMINI_MODEL &&
|
|
36
|
+
!(error instanceof TerminalQuotaError);
|
|
37
|
+
// Preview Model Specific Logic
|
|
38
|
+
if (shouldActivatePreviewFallback) {
|
|
39
|
+
// Always set bypass mode for the immediate retry, for non-TerminalQuotaErrors.
|
|
40
|
+
// This ensures the next attempt uses 2.5 Pro.
|
|
41
|
+
config.setPreviewModelBypassMode(true);
|
|
42
|
+
// If we are already in Preview Model fallback mode (user previously said "Always"),
|
|
43
|
+
// we silently retry (which will use 2.5 Pro due to bypass mode).
|
|
44
|
+
if (config.isPreviewModelFallbackMode()) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const fallbackModel = shouldActivatePreviewFallback
|
|
49
|
+
? DEFAULT_GEMINI_MODEL
|
|
50
|
+
: DEFAULT_GEMINI_FLASH_MODEL;
|
|
51
|
+
// Consult UI Handler for Intent
|
|
52
|
+
const fallbackModelHandler = config.fallbackModelHandler;
|
|
53
|
+
if (typeof fallbackModelHandler !== 'function')
|
|
54
|
+
return null;
|
|
55
|
+
try {
|
|
56
|
+
// Pass the specific failed model to the UI handler.
|
|
57
|
+
const intent = await fallbackModelHandler(failedModel, fallbackModel, error);
|
|
58
|
+
// Process Intent and Update State
|
|
59
|
+
return await processIntent(config, intent, failedModel, fallbackModel, authType, error);
|
|
60
|
+
}
|
|
61
|
+
catch (handlerError) {
|
|
62
|
+
console.error('Fallback UI handler failed:', handlerError);
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
15
65
|
}
|
|
16
66
|
/**
|
|
17
67
|
* New fallback logic using the ModelAvailabilityService
|
|
@@ -23,58 +73,39 @@ async function handlePolicyDrivenFallback(config, failedModel, authType, error)
|
|
|
23
73
|
const chain = resolvePolicyChain(config);
|
|
24
74
|
const { failedPolicy, candidates } = buildFallbackPolicyContext(chain, failedModel);
|
|
25
75
|
const failureKind = classifyFailureKind(error);
|
|
26
|
-
const availability = config.getModelAvailabilityService();
|
|
27
|
-
const getAvailabilityContext = () => {
|
|
28
|
-
if (!failedPolicy)
|
|
29
|
-
return undefined;
|
|
30
|
-
return { service: availability, policy: failedPolicy };
|
|
31
|
-
};
|
|
32
|
-
let fallbackModel;
|
|
33
76
|
if (!candidates.length) {
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
!selectedPolicy) {
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
fallbackModel = selectedFallbackModel;
|
|
47
|
-
// failureKind is already declared and calculated above
|
|
48
|
-
const action = resolvePolicyAction(failureKind, selectedPolicy);
|
|
49
|
-
if (action === 'silent') {
|
|
50
|
-
applyAvailabilityTransition(getAvailabilityContext, failureKind);
|
|
51
|
-
return processIntent(config, 'retry_always', fallbackModel);
|
|
52
|
-
}
|
|
53
|
-
// This will be used in the future when FallbackRecommendation is passed through UI
|
|
54
|
-
const recommendation = {
|
|
55
|
-
...selection,
|
|
56
|
-
selectedModel: fallbackModel,
|
|
57
|
-
action,
|
|
58
|
-
failureKind,
|
|
59
|
-
failedPolicy,
|
|
60
|
-
selectedPolicy,
|
|
61
|
-
};
|
|
62
|
-
void recommendation;
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
const availability = config.getModelAvailabilityService();
|
|
80
|
+
const selection = availability.selectFirstAvailable(candidates.map((policy) => policy.model));
|
|
81
|
+
const lastResortPolicy = candidates.find((policy) => policy.isLastResort);
|
|
82
|
+
const fallbackModel = selection.selectedModel ?? lastResortPolicy?.model;
|
|
83
|
+
const selectedPolicy = candidates.find((policy) => policy.model === fallbackModel);
|
|
84
|
+
if (!fallbackModel || fallbackModel === failedModel || !selectedPolicy) {
|
|
85
|
+
return null;
|
|
63
86
|
}
|
|
87
|
+
// failureKind is already declared and calculated above
|
|
88
|
+
const action = resolvePolicyAction(failureKind, selectedPolicy);
|
|
89
|
+
if (action === 'silent') {
|
|
90
|
+
return processIntent(config, 'retry_always', failedModel, fallbackModel, authType, error);
|
|
91
|
+
}
|
|
92
|
+
// This will be used in the future when FallbackRecommendation is passed through UI
|
|
93
|
+
const recommendation = {
|
|
94
|
+
...selection,
|
|
95
|
+
selectedModel: fallbackModel,
|
|
96
|
+
action,
|
|
97
|
+
failureKind,
|
|
98
|
+
failedPolicy,
|
|
99
|
+
selectedPolicy,
|
|
100
|
+
};
|
|
101
|
+
void recommendation;
|
|
64
102
|
const handler = config.getFallbackModelHandler();
|
|
65
103
|
if (typeof handler !== 'function') {
|
|
66
104
|
return null;
|
|
67
105
|
}
|
|
68
106
|
try {
|
|
69
107
|
const intent = await handler(failedModel, fallbackModel, error);
|
|
70
|
-
|
|
71
|
-
// to the failed model (e.g. marking it terminal if it had a quota error).
|
|
72
|
-
// We DO NOT apply it if the user chose 'stop' or 'retry_later', allowing
|
|
73
|
-
// them to try again later with the same model state.
|
|
74
|
-
if (intent === 'retry_always' || intent === 'retry_once') {
|
|
75
|
-
applyAvailabilityTransition(getAvailabilityContext, failureKind);
|
|
76
|
-
}
|
|
77
|
-
return await processIntent(config, intent, fallbackModel);
|
|
108
|
+
return await processIntent(config, intent, failedModel, fallbackModel, authType, error);
|
|
78
109
|
}
|
|
79
110
|
catch (handlerError) {
|
|
80
111
|
debugLogger.error('Fallback handler failed:', handlerError);
|
|
@@ -89,20 +120,41 @@ async function handleUpgrade() {
|
|
|
89
120
|
debugLogger.warn('Failed to open browser automatically:', getErrorMessage(error));
|
|
90
121
|
}
|
|
91
122
|
}
|
|
92
|
-
async function processIntent(config, intent, fallbackModel) {
|
|
123
|
+
async function processIntent(config, intent, failedModel, fallbackModel, authType, error) {
|
|
124
|
+
const isAvailabilityEnabled = config.isModelAvailabilityServiceEnabled();
|
|
93
125
|
switch (intent) {
|
|
94
126
|
case 'retry_always':
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
127
|
+
if (isAvailabilityEnabled) {
|
|
128
|
+
// TODO(telemetry): Implement generic fallback event logging. Existing
|
|
129
|
+
// logFlashFallback is specific to a single Model.
|
|
130
|
+
config.setActiveModel(fallbackModel);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// If the error is non-retryable, e.g. TerminalQuota Error, trigger a regular fallback to flash.
|
|
134
|
+
// For all other errors, activate previewModel fallback.
|
|
135
|
+
if (failedModel === PREVIEW_GEMINI_MODEL &&
|
|
136
|
+
!(error instanceof TerminalQuotaError)) {
|
|
137
|
+
activatePreviewModelFallbackMode(config);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
activateFallbackMode(config, authType);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
98
143
|
return true;
|
|
99
144
|
case 'retry_once':
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
145
|
+
if (isAvailabilityEnabled) {
|
|
146
|
+
config.setActiveModel(fallbackModel);
|
|
147
|
+
}
|
|
103
148
|
return true;
|
|
104
149
|
case 'stop':
|
|
105
|
-
|
|
150
|
+
if (isAvailabilityEnabled) {
|
|
151
|
+
// TODO(telemetry): Implement generic fallback event logging. Existing
|
|
152
|
+
// logFlashFallback is specific to a single Model.
|
|
153
|
+
config.setActiveModel(fallbackModel);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
activateFallbackMode(config, authType);
|
|
157
|
+
}
|
|
106
158
|
return false;
|
|
107
159
|
case 'retry_later':
|
|
108
160
|
return false;
|
|
@@ -113,4 +165,19 @@ async function processIntent(config, intent, fallbackModel) {
|
|
|
113
165
|
throw new Error(`Unexpected fallback intent received from fallbackModelHandler: "${intent}"`);
|
|
114
166
|
}
|
|
115
167
|
}
|
|
168
|
+
function activateFallbackMode(config, authType) {
|
|
169
|
+
if (!config.isInFallbackMode()) {
|
|
170
|
+
config.setFallbackMode(true);
|
|
171
|
+
coreEvents.emitFallbackModeChanged(true);
|
|
172
|
+
if (authType) {
|
|
173
|
+
logFlashFallback(config, new FlashFallbackEvent(authType));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function activatePreviewModelFallbackMode(config) {
|
|
178
|
+
if (!config.isPreviewModelFallbackMode()) {
|
|
179
|
+
config.setPreviewModelFallbackMode(true);
|
|
180
|
+
// We might want a specific event for Preview Model fallback, but for now we just set the mode.
|
|
181
|
+
}
|
|
182
|
+
}
|
|
116
183
|
//# sourceMappingURL=handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/fallback/handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/fallback/handler.ts"],"names":[],"mappings":"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"}
|