tweak: adjust retry check to be more defensive
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user