mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-27 08:05:33 +00:00
The account+model transient breaker reset its failure streak whenever the gap since the previous failure exceeded a one-minute window. That made the breaker's sensitivity a function of request rate rather than upstream health: a gateway called less often than once a minute never advanced past streak 1, where the cooldown is zero, so a consistently broken account was never blocked. Every request re-selected it, paid a full upstream attempt, and only then failed over to a healthy account. Observed on a low-traffic deployment: two accounts returning 500 and 503 stayed in rotation indefinitely, logging `failure_streak: 1, cooldown_ms: 0` on every request and adding ~750ms to each one before a working account was reached. The streak is already cleared on success — recordSuccess deletes the entry, and every OpenAI handler reports the schedule result — so the time-based reset is not needed to recover a healthy account. Keep a TTL purely to bound the map for account+model pairs that stopped being used, and raise it well above the cooldowns so it no longer doubles as a streak reset. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>