diff --git a/src/sse/handlers/chat.ts b/src/sse/handlers/chat.ts index aadf7d29d3..4c4d589a0c 100644 --- a/src/sse/handlers/chat.ts +++ b/src/sse/handlers/chat.ts @@ -2294,7 +2294,14 @@ async function handleSingleModelChat( } ); - if (shouldFallback) { + // An explicit pin (combo step `connectionId` / `x-omniroute-connection`) is an + // operator instruction, not a suggestion: the account cooldown above is still + // recorded, but selection must NOT silently rotate to a sibling account of the + // same provider. Pinned steps fall through to combo orchestration, which moves + // to the next target — with ITS own pin. Same rule the antigravity + // stream-readiness / pre-response-timeout and account-semaphore paths above + // already apply. + if (shouldFallback && !hasForcedConnection) { if (Number.isFinite(cooldownMs) && cooldownMs > 0) { lastCooldownMs = cooldownMs; requestRetryLastCooldownMs = cooldownMs;