fix(ai): disable hidden provider 429 retries (#4991)

This commit is contained in:
Armin Ronacher
2026-05-26 23:41:58 +02:00
committed by GitHub
parent 96f0edd02b
commit 8fb1e877cd
10 changed files with 161 additions and 31 deletions

View File

@@ -2422,6 +2422,12 @@ export class AgentSession {
// Auto-Retry
// =========================================================================
private _isNonRetryableProviderLimitError(errorMessage: string): boolean {
return /GoUsageLimitError|FreeUsageLimitError|Monthly usage limit reached|available balance|insufficient_quota|out of budget|quota exceeded|billing/i.test(
errorMessage,
);
}
/**
* Check if an error is retryable (overloaded, rate limit, server errors).
* Context overflow errors are NOT retryable (handled by compaction instead).
@@ -2434,6 +2440,7 @@ export class AgentSession {
if (isContextOverflow(message, contextWindow)) return false;
const err = message.errorMessage;
if (this._isNonRetryableProviderLimitError(err)) return false;
// Match: overloaded_error, provider returned error, rate limit, 429, 500, 502, 503, 504, service unavailable, network/connection errors (including connection lost), WebSocket transport closes/errors, fetch failed, premature stream endings, HTTP/2 closed before response, terminated, retry delay exceeded
return /overloaded|provider.?returned.?error|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server.?error|internal.?error|network.?error|connection.?error|connection.?refused|connection.?lost|websocket.?closed|websocket.?error|other side closed|fetch failed|upstream.?connect|reset before headers|socket hang up|ended without|stream ended before message_stop|http2 request did not get a response|timed? out|timeout|terminated|retry delay/i.test(
err,