UNPKG

ai

Version:

AI SDK by Vercel - build apps like ChatGPT, Claude, Gemini, and more with a single interface for any model using the Vercel AI Gateway or go direct to OpenAI, Anthropic, Google, or any other model provider.

75 lines (57 loc) • 2.08 kB
--- title: useChat "An error occurred" description: Troubleshooting errors related to the "An error occurred" error in useChat. --- # `useChat` "An error occurred" ## Issue I am using [`useChat`](/docs/reference/ai-sdk-ui/use-chat) and I get the error "An error occurred". ## Background Error messages from `streamText` are masked by default when using `toUIMessageStream` for security reasons (secure-by-default). This prevents leaking sensitive information to the client. Failed tool calls are not masked by default. Their error text is sent to the client as the model received it, unless you set `redactToolErrors` or pass your own `onError`. See [Errors](/docs/ai-sdk-ui/chatbot-tool-usage#errors) in the tool usage guide. ## Solution To forward error details to the client or to log errors, use the `onError` function when calling `toUIMessageStream`. ```tsx export function errorHandler(error: unknown) { if (error == null) { return 'unknown error'; } if (typeof error === 'string') { return error; } if (error instanceof Error) { // matches the error text that the model receives for a failed tool call return error.toString(); } return JSON.stringify(error); } ``` A custom `onError` also handles failed tool calls, unless you set `redactToolErrors` to `false`. This function returns the same error text that the model receives for a failed tool call. If the two texts differ, the stored messages no longer match what the model received. See [Tool error text and message history](/docs/ai-sdk-ui/chatbot-tool-usage#tool-error-text-and-message-history). ```tsx const result = streamText({ // ... }); return createUIMessageStreamResponse({ stream: toUIMessageStream({ stream: result.stream, onError: errorHandler, }), }); ``` In case you are using `createUIMessageStream`, you can pass the `onError` function to it: ```tsx const response = createUIMessageStreamResponse({ stream: createUIMessageStream({ // ... async execute({ writer }) { // ... }, onError: errorHandler, }), }); ```