useChat "An error occurred"

Issue

I am using useChat and I get the error "An error occurred".

Background

Error messages from streamText are masked by default when using toDataStreamResponse for security reasons (secure-by-default). This prevents leaking sensitive information to the client.

Solution

To forward error details to the client or to log errors, use the getErrorMessage function when calling toDataStreamResponse.

export function errorHandler(error: unknown) {
if (error == null) {
return 'unknown error';
}
if (typeof error === 'string') {
return error;
}
if (error instanceof Error) {
return error.message;
}
return JSON.stringify(error);
}
const result = streamText({
// ...
});
return result.toDataStreamResponse({
getErrorMessage: errorHandler,
});

In case you are using createDataStreamResponse, you can use the onError function when calling toDataStreamResponse:

const response = createDataStreamResponse({
// ...
async execute(dataStream) {
// ...
},
onError: errorHandler,
});