Files
OmniRoute/tests
diegosouzapw d62b128144 fix(account-fallback): classify Anthropic 'Usage Limit Reached' as quota (#2321)
Claude Code Pro/Team users hit a 429 cascade where every Claude account
got marked rate-limited for only a few seconds, retried, hit 429 again,
and the cycle exhausted all accounts until the 5h subscription window
finally reset. Root cause: Anthropic OAuth 429 bodies carry phrases like
'Usage Limit Reached' or 'Claude Pro usage limit reached' that don't
contain the word 'quota'. classifyErrorText fell through to
RATE_LIMIT_EXCEEDED with the OAuth ~5s base cooldown.

Three targeted changes in open-sse/services/accountFallback.ts:

1. classifyErrorText: recognize the Anthropic OAuth phrases ('usage limit
   reached', 'claude pro usage limit', 'you've reached your usage limit'
   and variants) and return QUOTA_EXHAUSTED.

2. checkFallbackError: new branch that, when the classifier flags
   QUOTA_EXHAUSTED for a non-credits/non-daily case, applies a deliberate
   1h cooldown (subscription quotas need real time to reset; the existing
   COOLDOWN_MS.paymentRequired is only 2 minutes).

3. parseRetryFromErrorText: parse absolute ISO 8601 timestamps in the
   body ('Try again at 2026-05-17T10:00:00Z', 'Please wait until ...').
   When present, honor the upstream's stated recovery time instead of
   the 1h default.

Cross-provider fallback for direct (non-combo) calls remains a separate
feature — operators wanting that should route Claude through a combo
that includes openrouter/claude or another fallback target.
2026-05-18 09:11:32 -03:00
..
2026-05-14 20:20:54 -03:00
2026-05-10 00:55:06 -03:00