diff --git a/packages/opencode/src/provider/sdk/openai-compatible/src/responses/openai-error.ts b/packages/opencode/src/provider/sdk/openai-compatible/src/responses/openai-error.ts index e78824d3641..38871989f41 100644 --- a/packages/opencode/src/provider/sdk/openai-compatible/src/responses/openai-error.ts +++ b/packages/opencode/src/provider/sdk/openai-compatible/src/responses/openai-error.ts @@ -16,7 +16,19 @@ export const openaiErrorDataSchema = z.object({ export type OpenAIErrorData = z.infer +// Status codes that should trigger automatic retry +const RETRYABLE_STATUS_CODES = new Set([ + 404, // OpenAI Responses API can return 404 for transient "Item not found" errors + 408, // Request Timeout + 429, // Too Many Requests / Rate Limited + 500, // Internal Server Error + 502, // Bad Gateway + 503, // Service Unavailable + 504, // Gateway Timeout +]) + export const openaiFailedResponseHandler: any = createJsonErrorResponseHandler({ errorSchema: openaiErrorDataSchema, errorToMessage: (data) => data.error.message, + isRetryable: (response) => RETRYABLE_STATUS_CODES.has(response.status), })