content/docs/07-reference/05-ai-sdk-errors/ai-ui-message-stream-error.mdx
This error occurs when a UI message stream contains invalid or out-of-sequence chunks.
Common causes:
text-delta chunk without a preceding text-start chunktext-end chunk without a preceding text-start chunkreasoning-delta chunk without a preceding reasoning-start chunkreasoning-end chunk without a preceding reasoning-start chunktool-input-delta chunk without a preceding tool-input-start chunkThis error often surfaces when an upstream request fails before any tokens are streamed and a custom transport tries to write an inline error message to the UI stream without the proper start chunk.
chunkType: The type of chunk that caused the error (e.g., text-delta, reasoning-end, tool-input-delta)chunkId: The ID associated with the failing chunk (part ID or toolCallId)message: The error message with details about what went wrongYou can check if an error is an instance of AI_UIMessageStreamError using:
import { UIMessageStreamError } from 'ai';
if (UIMessageStreamError.isInstance(error)) {
console.log('Chunk type:', error.chunkType);
console.log('Chunk ID:', error.chunkId);
// Handle the error
}
Ensure proper chunk ordering: Always send a *-start chunk before any *-delta or *-end chunks for the same ID:
// Correct order
writer.write({ type: 'text-start', id: 'my-text' });
writer.write({ type: 'text-delta', id: 'my-text', delta: 'Hello' });
writer.write({ type: 'text-end', id: 'my-text' });
Verify IDs match: Ensure the id used in *-delta and *-end chunks matches the id used in the corresponding *-start chunk.
Handle error paths correctly: When writing error messages in custom transports, ensure you emit the full start/delta/end sequence:
// When handling errors in custom transports
writer.write({ type: 'text-start', id: errorId });
writer.write({
type: 'text-delta',
id: errorId,
delta: 'Request failed...',
});
writer.write({ type: 'text-end', id: errorId });
Check stream producer logic: Review your streaming implementation to ensure chunks are sent in the correct order, especially when dealing with concurrent operations or merged streams.