Skip to content

Commit 5e3eb5f

Browse files
committed
fix: better handle for RetryError
1 parent e5b3cdd commit 5e3eb5f

File tree

1 file changed

+41
-16
lines changed

1 file changed

+41
-16
lines changed

utils/errors.ts

+41-16
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,50 @@
1-
import { APICallError } from 'ai'
1+
import { APICallError, RetryError } from 'ai'
2+
3+
function handleApiCallError(operation: string, error: APICallError) {
4+
let message = error.message
5+
if (error.statusCode) message += ` (${error.statusCode})`
6+
if (error.cause) message += `\nCause: ${error.cause}`
7+
if (error.responseBody) message += `\nResponse: ${error.responseBody}`
8+
if (error.url) message += `\nURL: ${error.url}`
9+
10+
console.error(`[${operation}]`, error, {
11+
statusCode: error.statusCode,
12+
response: error.responseBody,
13+
cause: error.cause,
14+
stack: error.stack,
15+
isRetryable: error.isRetryable,
16+
url: error.url,
17+
})
18+
throw new Error(message)
19+
}
20+
21+
function handleRetryError(operation: string, error: RetryError) {
22+
if (APICallError.isInstance(error.lastError)) {
23+
handleApiCallError(operation, error.lastError)
24+
}
25+
let message = error.message
26+
if (error.cause) message += `\nCause: ${error.cause}`
27+
if (error.stack) message += `\nStack: ${error.stack}`
28+
if (error.reason) message += `\nReason: ${error.reason}`
29+
30+
console.error(`[${operation}]`, error, {
31+
cause: error.cause,
32+
stack: error.stack,
33+
lastError: error.lastError,
34+
reason: error.reason,
35+
errors: error.errors,
36+
})
37+
throw new Error(message)
38+
}
239

340
/**
441
* Parse an error thrown by the AI SDK, and re-throw it with a human-readable message
542
*/
643
export function throwAiError(operation: string, error: unknown) {
744
if (APICallError.isInstance(error)) {
8-
let message = error.message
9-
if (error.statusCode) message += ` (${error.statusCode})`
10-
if (error.cause) message += `\nCause: ${error.cause}`
11-
if (error.responseBody) message += `\nResponse: ${error.responseBody}`
12-
if (error.url) message += `\nURL: ${error.url}`
13-
14-
console.error(`[${operation}]`, error, {
15-
statusCode: error.statusCode,
16-
response: error.responseBody,
17-
cause: error.cause,
18-
stack: error.stack,
19-
isRetryable: error.isRetryable,
20-
url: error.url,
21-
})
22-
throw new Error(message)
45+
handleApiCallError(operation, error)
46+
} else if (RetryError.isInstance(error)) {
47+
handleRetryError(operation, error)
2348
} else {
2449
console.error(`[${operation}]`, error)
2550
}

0 commit comments

Comments
 (0)