feat(ai): improve error handling

This commit is contained in:
AnotiaWang
2025-02-24 20:06:04 +08:00
parent 9f85c04490
commit f077807128
3 changed files with 31 additions and 5 deletions

View File

@ -126,7 +126,7 @@ export function generateSearchQueries({
system: systemPrompt(),
prompt,
onError({ error }) {
throw error
throwAiError('generateSearchQueries', error)
},
})
}
@ -174,7 +174,7 @@ function processSearchResult({
system: systemPrompt(),
prompt,
onError({ error }) {
throw error
throwAiError('processSearchResult', error)
},
})
}
@ -204,7 +204,7 @@ export function writeFinalReport({
system: systemPrompt(),
prompt: _prompt,
onError({ error }) {
throw error
throwAiError('writeFinalReport', error)
},
})
}

View File

@ -37,8 +37,7 @@ export function generateFeedback({
system: systemPrompt(),
prompt,
onError({ error }) {
console.error(`generateFeedback`, error)
throw error
throwAiError('generateFeedback', error)
},
})

27
utils/errors.ts Normal file
View File

@ -0,0 +1,27 @@
import { APICallError } from 'ai'
/**
* Parse an error thrown by the AI SDK, and re-throw it with a human-readable message
*/
export function throwAiError(operation: string, error: unknown) {
if (APICallError.isInstance(error)) {
let message = error.message
if (error.statusCode) message += ` (${error.statusCode})`
if (error.cause) message += `\nCause: ${error.cause}`
if (error.responseBody) message += `\nResponse: ${error.responseBody}`
if (error.url) message += `\nURL: ${error.url}`
console.error(`[${operation}]`, error, {
statusCode: error.statusCode,
response: error.responseBody,
cause: error.cause,
stack: error.stack,
isRetryable: error.isRetryable,
url: error.url,
})
throw new Error(message)
} else {
console.error(`[${operation}]`, error)
}
throw error
}