tweak: retry logic to catch certain provider problems

This commit is contained in:
Aiden Cline
2026-01-26 16:12:41 -05:00
parent 6a62b44593
commit 8b5dde5536
2 changed files with 56 additions and 20 deletions

View File

@@ -1,5 +1,6 @@
import type { NamedError } from "@opencode-ai/util/error"
import { MessageV2 } from "./message-v2"
import { iife } from "@/util/iife"
export namespace SessionRetry {
export const RETRY_INITIAL_DELAY = 2000
@@ -63,28 +64,36 @@ export namespace SessionRetry {
return error.data.message.includes("Overloaded") ? "Provider is overloaded" : error.data.message
}
if (typeof error.data?.message === "string") {
const json = iife(() => {
try {
const json = JSON.parse(error.data.message)
if (json.type === "error" && json.error?.type === "too_many_requests") {
return "Too Many Requests"
if (typeof error.data?.message === "string") {
const parsed = JSON.parse(error.data.message)
return parsed
}
if (json.code.includes("exhausted") || json.code.includes("unavailable")) {
return "Provider is overloaded"
}
if (json.type === "error" && json.error?.code?.includes("rate_limit")) {
return "Rate Limited"
}
if (
json.error?.message?.includes("no_kv_space") ||
(json.type === "error" && json.error?.type === "server_error") ||
!!json.error
) {
return "Provider Server Error"
}
} catch {}
}
return undefined
return JSON.parse(error.data.message)
} catch {
return undefined
}
})
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") {
return "Too Many Requests"
}
if (code.includes("exhausted") || code.includes("unavailable")) {
return "Provider is overloaded"
}
if (json.type === "error" && json.error?.code?.includes("rate_limit")) {
return "Rate Limited"
}
if (
json.error?.message?.includes("no_kv_space") ||
(json.type === "error" && json.error?.type === "server_error") ||
!!json.error
) {
return "Provider Server Error"
}
}
}