Skip to content

Commit f077807

Browse files
committed
feat(ai): improve error handling
1 parent 9f85c04 commit f077807

File tree

3 files changed

+31
-5
lines changed

3 files changed

+31
-5
lines changed

lib/deep-research.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ export function generateSearchQueries({
126126
system: systemPrompt(),
127127
prompt,
128128
onError({ error }) {
129-
throw error
129+
throwAiError('generateSearchQueries', error)
130130
},
131131
})
132132
}
@@ -174,7 +174,7 @@ function processSearchResult({
174174
system: systemPrompt(),
175175
prompt,
176176
onError({ error }) {
177-
throw error
177+
throwAiError('processSearchResult', error)
178178
},
179179
})
180180
}
@@ -204,7 +204,7 @@ export function writeFinalReport({
204204
system: systemPrompt(),
205205
prompt: _prompt,
206206
onError({ error }) {
207-
throw error
207+
throwAiError('writeFinalReport', error)
208208
},
209209
})
210210
}

lib/feedback.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ export function generateFeedback({
3737
system: systemPrompt(),
3838
prompt,
3939
onError({ error }) {
40-
console.error(`generateFeedback`, error)
41-
throw error
40+
throwAiError('generateFeedback', error)
4241
},
4342
})
4443

utils/errors.ts

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { APICallError } from 'ai'
2+
3+
/**
4+
* Parse an error thrown by the AI SDK, and re-throw it with a human-readable message
5+
*/
6+
export function throwAiError(operation: string, error: unknown) {
7+
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)
23+
} else {
24+
console.error(`[${operation}]`, error)
25+
}
26+
throw error
27+
}

0 commit comments

Comments
 (0)