File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -60,6 +60,15 @@ export function retryable(error: Err) {
6060 // even when the provider SDK doesn't explicitly mark them as retryable.
6161 if ( ! error . data . isRetryable && ! ( status !== undefined && status >= 500 ) ) return undefined
6262 if ( error . data . responseBody ?. includes ( "FreeUsageLimitError" ) ) return GO_UPSELL_MESSAGE
63+ // Non-transient rate limits (weekly/monthly quotas) should not be retried
64+ // they won't resolve with backoff and can take days to reset.
65+ const lower = error . data . message . toLowerCase ( )
66+ if (
67+ lower . includes ( "weekly" ) ||
68+ lower . includes ( "monthly" ) ||
69+ lower . includes ( "exceeded your" )
70+ )
71+ return undefined
6372 return error . data . message . includes ( "Overloaded" ) ? "Provider is overloaded" : error . data . message
6473 }
6574
Original file line number Diff line number Diff line change @@ -230,6 +230,26 @@ describe("session.retry.retryable", () => {
230230 expect ( retryable ) . toBeDefined ( )
231231 expect ( retryable ) . toBe ( "Response decompression failed" )
232232 } )
233+
234+ test ( "does not retry weekly rate limit errors" , ( ) => {
235+ const error = new MessageV2 . APIError ( {
236+ message : "Too Many Requests: Sorry, you've exceeded your weekly rate limit. Please review ..." ,
237+ isRetryable : true ,
238+ statusCode : 429 ,
239+ } ) . toObject ( ) as MessageV2 . APIError
240+
241+ expect ( SessionRetry . retryable ( error ) ) . toBeUndefined ( )
242+ } )
243+
244+ test ( "does not retry monthly quota errors" , ( ) => {
245+ const error = new MessageV2 . APIError ( {
246+ message : "You have exceeded your monthly usage quota" ,
247+ isRetryable : true ,
248+ statusCode : 429 ,
249+ } ) . toObject ( ) as MessageV2 . APIError
250+
251+ expect ( SessionRetry . retryable ( error ) ) . toBeUndefined ( )
252+ } )
233253} )
234254
235255describe ( "session.message-v2.fromError" , ( ) => {
You can’t perform that action at this time.
0 commit comments