Skip to content

Commit 7f5423c

Browse files
committed
fix: complete fast mode fallback and status wiring
1 parent 9509aa0 commit 7f5423c

7 files changed

Lines changed: 27 additions & 4 deletions

File tree

src/acp/translator.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1498,6 +1498,7 @@ export class AcpGatewayAgent implements Agent {
14981498
modelProvider: session.modelProvider,
14991499
model: session.model,
15001500
fastMode: session.fastMode,
1501+
effectiveFastMode: session.effectiveFastMode,
15011502
verboseLevel: session.verboseLevel,
15021503
traceLevel: session.traceLevel,
15031504
reasoningLevel: session.reasoningLevel,

src/agents/agent-command.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1926,6 +1926,7 @@ async function agentCommandInternal(
19261926
fastMode === "auto"
19271927
? (opts.fastModeAutoOnSeconds ?? fastModeState.fastAutoOnSeconds)
19281928
: fastModeState.fastAutoOnSeconds,
1929+
isFinalFallbackAttempt: runOptions?.isFinalFallbackAttempt,
19291930
timeoutMs,
19301931
runTimeoutOverrideMs,
19311932
runId,

src/agents/command/attempt-execution.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,7 @@ export function runAgentAttempt(params: {
478478
fastMode?: FastMode;
479479
fastModeStartedAtMs?: number;
480480
fastModeAutoOnSeconds?: number;
481+
isFinalFallbackAttempt?: boolean;
481482
timeoutMs: number;
482483
runTimeoutOverrideMs?: number;
483484
runId: string;
@@ -790,6 +791,7 @@ export function runAgentAttempt(params: {
790791
fastMode: params.fastMode,
791792
fastModeStartedAtMs: params.fastModeStartedAtMs,
792793
fastModeAutoOnSeconds: params.fastModeAutoOnSeconds,
794+
isFinalFallbackAttempt: params.isFinalFallbackAttempt,
793795
verboseLevel: params.resolvedVerboseLevel,
794796
bashElevated: params.opts.bashElevated,
795797
timeoutMs: params.timeoutMs,

src/agents/embedded-agent-runner/run.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4123,7 +4123,9 @@ async function runEmbeddedAgentInternal(
41234123
};
41244124
}
41254125
} finally {
4126-
await maybeEmitFastModeAutoResetBestEffort();
4126+
if (params.isFinalFallbackAttempt !== false) {
4127+
await maybeEmitFastModeAutoResetBestEffort();
4128+
}
41274129
forgetPromptBuildDrainCacheForRun(params.runId);
41284130
stopRuntimeAuthRefreshTimer();
41294131
await runAgentCleanupStep({

src/agents/embedded-agent-runner/run/params.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ export type RunEmbeddedAgentParams = {
151151
fastModeAutoOnSeconds?: number;
152152
/** Shared notification state for nested harnesses that can observe the same tool boundary. */
153153
fastModeAutoProgressState?: FastModeAutoProgressState;
154+
/** True when the outer model fallback loop has reached its final candidate. */
155+
isFinalFallbackAttempt?: boolean;
154156
verboseLevel?: VerboseLevel;
155157
reasoningLevel?: ReasoningLevel;
156158
toolResultFormat?: ToolResultFormat;

src/agents/model-fallback.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ export function isFallbackSummaryError(err: unknown): err is FallbackSummaryErro
168168

169169
export type ModelFallbackRunOptions = {
170170
allowTransientCooldownProbe?: boolean;
171+
isFinalFallbackAttempt?: boolean;
171172
};
172173

173174
type ModelFallbackRuntimeContext = {
@@ -1657,7 +1658,10 @@ async function runWithModelFallbackInternal<T>(
16571658
run: params.run,
16581659
...candidate,
16591660
attempts,
1660-
options: runOptions,
1661+
options: {
1662+
...runOptions,
1663+
isFinalFallbackAttempt: i + 1 === candidates.length,
1664+
},
16611665
// Only the outer fallback loop knows another candidate remains. Carry
16621666
// that fact through this attempt so the embedded runner does not freeze
16631667
// the shared lane before the next candidate can run.

src/status/status-message.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
import { resolveContextTokensForModel } from "../agents/context.js";
1010
import { DEFAULT_CONTEXT_TOKENS, DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js";
1111
import { resolveExtraParams } from "../agents/embedded-agent-runner/extra-params.js";
12+
import { resolveFastModeState } from "../agents/fast-mode.js";
1213
import { resolveModelAuthMode } from "../agents/model-auth.js";
1314
import {
1415
areRuntimeModelRefsEquivalent,
@@ -25,7 +26,6 @@ import {
2526
formatProviderModelRef,
2627
resolveSelectedAndActiveModel,
2728
} from "../auto-reply/model-runtime.js";
28-
import { formatFastModeStatusValue } from "../shared/fast-mode.js";
2929
import type {
3030
ElevatedLevel,
3131
ReasoningLevel,
@@ -56,6 +56,7 @@ import {
5656
} from "../media-understanding/runner.entries.js";
5757
import type { MediaUnderstandingDecision } from "../media-understanding/types.js";
5858
import { resolveAgentIdFromSessionKey } from "../routing/session-key.js";
59+
import { formatFastModeStatusValue } from "../shared/fast-mode.js";
5960
import { resolveStatusTtsSnapshot } from "../tts/status-config.js";
6061
import {
6162
estimateUsageCost,
@@ -882,6 +883,13 @@ export function buildStatusMessage(args: StatusArgs): string {
882883
const verboseLevel =
883884
args.resolvedVerbose ?? args.sessionEntry?.verboseLevel ?? args.agent?.verboseDefault ?? "off";
884885
const fastMode = args.resolvedFast ?? args.sessionEntry?.fastMode ?? false;
886+
const fastModeState = resolveFastModeState({
887+
cfg: args.config,
888+
provider: activeProvider,
889+
model: activeModel,
890+
agentId: args.agentId,
891+
sessionEntry: args.sessionEntry,
892+
});
885893
const reasoningLevel =
886894
args.resolvedReasoning ??
887895
args.sessionEntry?.reasoningLevel ??
@@ -970,7 +978,10 @@ export function buildStatusMessage(args: StatusArgs): string {
970978
`Execution: ${execution.label}`,
971979
`Runtime: ${agentRuntimeLabel}`,
972980
`Think: ${thinkLevel}`,
973-
`Fast: ${formatFastModeStatusValue({ mode: fastMode })}`,
981+
`Fast: ${formatFastModeStatusValue({
982+
mode: fastMode,
983+
fastAutoOnSeconds: fastModeState.fastAutoOnSeconds,
984+
})}`,
974985
textVerbosity ? `Text: ${textVerbosity}` : null,
975986
verboseLabel,
976987
traceLabel,

0 commit comments

Comments
 (0)