diff --git a/packages/ai/src/provider-error.ts b/packages/ai/src/provider-error.ts index 963c7599cf..a155719319 100644 --- a/packages/ai/src/provider-error.ts +++ b/packages/ai/src/provider-error.ts @@ -135,7 +135,7 @@ export function classifyProviderFailure(input: ProviderFailure): LLMError["reaso rateLimit: input.rateLimit, }) } - if (input.status !== undefined && input.status >= 500) + if (input.status === 408 || input.status === 409 || (input.status !== undefined && input.status >= 500)) return new ProviderInternalReason({ ...common, status: input.status, @@ -145,7 +145,6 @@ export function classifyProviderFailure(input: ProviderFailure): LLMError["reaso if ( input.status === 400 || input.status === 404 || - input.status === 409 || input.status === 413 || input.status === 422 ) diff --git a/packages/ai/test/provider-error.test.ts b/packages/ai/test/provider-error.test.ts index ea0464089e..667009fa0a 100644 --- a/packages/ai/test/provider-error.test.ts +++ b/packages/ai/test/provider-error.test.ts @@ -58,6 +58,12 @@ describe("provider error classification", () => { ).toEqual(["ProviderInternal", "ProviderInternal"]) }) + test("classifies transient client statuses as provider internal", () => { + expect( + [408, 409].map((status) => classifyProviderFailure({ message: `HTTP ${status}`, status })._tag), + ).toEqual(["ProviderInternal", "ProviderInternal"]) + }) + test("classifies nested provider codes when a top-level code is also present", () => { expect( [