From 57d96d72ed4d8bd167daa57a143b78761d298e8f Mon Sep 17 00:00:00 2001 From: David Brailovsky Date: Thu, 9 Jul 2026 13:58:32 +0200 Subject: [PATCH] add ResourceExhausted as a retryable error (#6449) fixes #6364 --- packages/ai/src/utils/retry.ts | 3 +++ packages/ai/test/retry.test.ts | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/packages/ai/src/utils/retry.ts b/packages/ai/src/utils/retry.ts index f0a18013..24e327ad 100644 --- a/packages/ai/src/utils/retry.ts +++ b/packages/ai/src/utils/retry.ts @@ -79,6 +79,9 @@ const RETRYABLE_PROVIDER_ERROR_PATTERN = buildProviderErrorPattern([ "you can retry your request", "try your request again", "please retry your request", + + // gRPC based providers (e.g. NVIDIA NIM) + "ResourceExhausted", ]); /** diff --git a/packages/ai/test/retry.test.ts b/packages/ai/test/retry.test.ts index 64ff6d42..70b0c409 100644 --- a/packages/ai/test/retry.test.ts +++ b/packages/ai/test/retry.test.ts @@ -6,6 +6,7 @@ const openAIExplicitRetryMessage = "An error occurred while processing your request. You can retry your request, or contact us through our help center at help.openai.com if the error persists. Please include the request ID req_******** in your message."; const bedrockExplicitRetryMessage = '{"message":"The system encountered an unexpected error during processing. Try your request again."}'; +const nvidiaNIMResourceExhaustedMessage = "ResourceExhausted: Worker local total request limit reached (288/48)"; const bunFetchSocketClosedMessage = "The socket connection was closed unexpectedly. For more information, pass `verbose: true` in the second argument to fetch()"; @@ -21,6 +22,11 @@ describe("provider retry classification", () => { fauxAssistantMessage("", { stopReason: "error", errorMessage: bedrockExplicitRetryMessage }), ), ).toBe(true); + expect( + isRetryableAssistantError( + fauxAssistantMessage("", { stopReason: "error", errorMessage: nvidiaNIMResourceExhaustedMessage }), + ), + ).toBe(true); }); it("matches Bun fetch socket drop wording", () => {