From 71d0b863527899b0cecae1396bcf14f545787b5a Mon Sep 17 00:00:00 2001 From: Vageesh Kumar Date: Sat, 21 Feb 2026 04:12:56 -0800 Subject: [PATCH] fix(agents): skip auth profile cooldown for timeout failures A timeout is model/network-specific, not an auth issue. Marking the auth profile as failed on timeout poisons fallback models on the same provider (e.g. gpt-5.3 timeout would block gpt-5.2 via shared profile cooldown). The prompt-phase path already guards against this; this aligns the post-response timeout path to match. Co-Authored-By: Claude Opus 4.6 --- src/agents/pi-embedded-runner/run.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/agents/pi-embedded-runner/run.ts b/src/agents/pi-embedded-runner/run.ts index e396ca08249..dc36421fbf6 100644 --- a/src/agents/pi-embedded-runner/run.ts +++ b/src/agents/pi-embedded-runner/run.ts @@ -960,13 +960,18 @@ export async function runEmbeddedPiAgent( timedOut || assistantFailoverReason === "timeout" ? "timeout" : (assistantFailoverReason ?? "unknown"); - await markAuthProfileFailure({ - store: authStore, - profileId: lastProfileId, - reason, - cfg: params.config, - agentDir: params.agentDir, - }); + // Skip cooldown for timeouts: a timeout is model/network-specific, + // not an auth issue. Marking the profile would poison fallback models + // on the same provider (e.g. gpt-5.3 timeout blocks gpt-5.2). + if (reason !== "timeout") { + await markAuthProfileFailure({ + store: authStore, + profileId: lastProfileId, + reason, + cfg: params.config, + agentDir: params.agentDir, + }); + } if (timedOut && !isProbeSession) { log.warn( `Profile ${lastProfileId} timed out (possible rate limit). Trying next account...`,