tweak: adjust retry check to be more defensive

This commit is contained in:
Aiden Cline
2026-01-27 11:22:03 -05:00
parent 0aa93379bd
commit f12f7e7718
2 changed files with 27 additions and 17 deletions

View File

@@ -76,24 +76,28 @@ export namespace SessionRetry {
return undefined return undefined
} }
}) })
if (!json || typeof json !== "object") return undefined try {
const code = typeof json.code === "string" ? json.code : "" if (!json || typeof json !== "object") return undefined
const code = typeof json.code === "string" ? json.code : ""
if (json.type === "error" && json.error?.type === "too_many_requests") { if (json.type === "error" && json.error?.type === "too_many_requests") {
return "Too Many Requests" return "Too Many Requests"
} }
if (code.includes("exhausted") || code.includes("unavailable")) { if (code.includes("exhausted") || code.includes("unavailable")) {
return "Provider is overloaded" return "Provider is overloaded"
} }
if (json.type === "error" && json.error?.code?.includes("rate_limit")) { if (json.type === "error" && json.error?.code?.includes("rate_limit")) {
return "Rate Limited" return "Rate Limited"
} }
if ( if (
json.error?.message?.includes("no_kv_space") || json.error?.message?.includes("no_kv_space") ||
(json.type === "error" && json.error?.type === "server_error") || (json.type === "error" && json.error?.type === "server_error") ||
!!json.error !!json.error
) { ) {
return "Provider Server Error" return "Provider Server Error"
}
} catch {
return undefined
} }
} }
} }

View File

@@ -102,6 +102,12 @@ describe("session.retry.retryable", () => {
expect(SessionRetry.retryable(error)).toBe("Provider Server Error") expect(SessionRetry.retryable(error)).toBe("Provider Server Error")
}) })
test("does not throw on numeric error codes", () => {
const error = wrap(JSON.stringify({ type: "error", error: { code: 123 } }))
const result = SessionRetry.retryable(error)
expect(result).toBeUndefined()
})
test("returns undefined for non-json message", () => { test("returns undefined for non-json message", () => {
const error = wrap("not-json") const error = wrap("not-json")
expect(SessionRetry.retryable(error)).toBeUndefined() expect(SessionRetry.retryable(error)).toBeUndefined()