diff --git a/src/agents/failover-error.e2e.test.ts b/src/agents/failover-error.e2e.test.ts index 5fb9d06e60..ab31855cbb 100644 --- a/src/agents/failover-error.e2e.test.ts +++ b/src/agents/failover-error.e2e.test.ts @@ -13,6 +13,7 @@ describe("failover-error", () => { expect(resolveFailoverReasonFromError({ status: 403 })).toBe("auth"); expect(resolveFailoverReasonFromError({ status: 408 })).toBe("timeout"); expect(resolveFailoverReasonFromError({ status: 400 })).toBe("format"); + expect(resolveFailoverReasonFromError({ status: 503 })).toBe("timeout"); }); it("infers format errors from error messages", () => { diff --git a/src/agents/failover-error.ts b/src/agents/failover-error.ts index 6592cfc7f7..d2ec6c35c5 100644 --- a/src/agents/failover-error.ts +++ b/src/agents/failover-error.ts @@ -161,6 +161,9 @@ export function resolveFailoverReasonFromError(err: unknown): FailoverReason | n if (status === 408) { return "timeout"; } + if (status === 503) { + return "timeout"; + } if (status === 400) { return "format"; } diff --git a/src/agents/pi-embedded-helpers.isbillingerrormessage.e2e.test.ts b/src/agents/pi-embedded-helpers.isbillingerrormessage.e2e.test.ts index 931a1bbe34..c62aac873b 100644 --- a/src/agents/pi-embedded-helpers.isbillingerrormessage.e2e.test.ts +++ b/src/agents/pi-embedded-helpers.isbillingerrormessage.e2e.test.ts @@ -348,4 +348,17 @@ describe("classifyFailoverReason", () => { "rate_limit", ); }); + it("classifies provider high-demand / service-unavailable messages as rate_limit", () => { + expect( + classifyFailoverReason( + "This model is currently experiencing high demand. Please try again later.", + ), + ).toBe("rate_limit"); + expect(classifyFailoverReason("LLM error: service unavailable")).toBe("rate_limit"); + expect( + classifyFailoverReason( + '{"error":{"code":503,"message":"The model is overloaded. Please try later","status":"UNAVAILABLE"}}', + ), + ).toBe("rate_limit"); + }); }); diff --git a/src/agents/pi-embedded-helpers/errors.ts b/src/agents/pi-embedded-helpers/errors.ts index 5233eb9c42..088707eef5 100644 --- a/src/agents/pi-embedded-helpers/errors.ts +++ b/src/agents/pi-embedded-helpers/errors.ts @@ -583,7 +583,12 @@ const ERROR_PATTERNS = { "resource_exhausted", "usage limit", ], - overloaded: [/overloaded_error|"type"\s*:\s*"overloaded_error"/i, "overloaded"], + overloaded: [ + /overloaded_error|"type"\s*:\s*"overloaded_error"/i, + "overloaded", + "service unavailable", + "high demand", + ], timeout: [ "timeout", "timed out",