diff options
Diffstat (limited to 'internal/retry/backoff.go')
| -rw-r--r-- | internal/retry/backoff.go | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/internal/retry/backoff.go b/internal/retry/backoff.go index b91abc4..a372b37 100644 --- a/internal/retry/backoff.go +++ b/internal/retry/backoff.go @@ -17,6 +17,12 @@ const maxBackoffDelay = 5 * time.Minute // IsRateLimitError returns true if err looks like a transient rate-limit // (e.g. HTTP 429, "too many requests", "overloaded") that is worth retrying. +// +// Patterns are additive across providers: the original set matches +// OpenAI-compatible error text (internal/llm); "rate_limit_error", +// "overloaded_error", and "529" additionally match Anthropic's Messages API +// error shape (HTTP 429 with error.type "rate_limit_error", or HTTP 529 +// with error.type "overloaded_error" — see internal/provider/anthropic). func IsRateLimitError(err error) bool { if err == nil { return false @@ -25,7 +31,10 @@ func IsRateLimitError(err error) bool { return strings.Contains(msg, "rate limit") || strings.Contains(msg, "too many requests") || strings.Contains(msg, "429") || - strings.Contains(msg, "overloaded") + strings.Contains(msg, "overloaded") || + strings.Contains(msg, "rate_limit_error") || + strings.Contains(msg, "overloaded_error") || + strings.Contains(msg, "529") } // ParseRetryAfter extracts a Retry-After duration from an error message. |
