- {messages.map((message) => (
-
- {message.role}:{' '}
- {message.parts
- .filter((part) => part.type === 'text')
- .map((part) => part.text)
- .join('')}
-
- ))}
-
-
-
- );
-}
-```
-
-**Key parameters:**
-
-| Parameter | Type | Description |
-|-----------|------|-------------|
-| `transport` | `ChatTransport` | Default: `DefaultChatTransport` with `/api/chat` |
-| `id` | `string` | Unique chat ID (for persistence/resume) |
-| `messages` | `UIMessage[]` | Initial messages |
-| `onError` | `(error: Error) => void` | Error callback |
-| `onFinish` | `(options) => void` | Called when stream finishes |
-| `onData` | `(dataPart) => void` | Custom data parts |
-| `resume` | `boolean` | Enable stream resumption after reload |
-| `sendAutomaticallyWhen` | `(options) => boolean` | Auto-resubmit on tool calls |
-
-**Returns:** `messages`, `sendMessage`, `regenerate`, `stop`, `clearError`, `resumeStream`, `addToolOutput`, `setMessages`, `status`, `error`
-
-**Status values:** `'ready'` | `'submitted'` | `'streaming'` | `'error'`
-
-### 1.3 AI SDK Data Stream Protocol (Backend SSE Format)
-
-Your backend **must** emit Server-Sent Events (SSE) in this format. Set header:
-
-```
-x-vercel-ai-ui-message-stream: v1
-```
-
-**Required stream parts (minimal chat):**
-
-```
-data: {"type":"start","messageId":"msg_abc123"}
-
-data: {"type":"text-start","id":"msg_abc123"}
-data: {"type":"text-delta","id":"msg_abc123","delta":"Hello"}
-data: {"type":"text-delta","id":"msg_abc123","delta":" world"}
-data: {"type":"text-end","id":"msg_abc123"}
-
-data: {"type":"finish"}
-data: [DONE]
-```
-
-**Full part reference:**
-
-| Part | Format | Purpose |
-|------|--------|---------|
-| `start` | `{"type":"start","messageId":"..."}` | Message start |
-| `text-start` | `{"type":"text-start","id":"..."}` | Text block start |
-| `text-delta` | `{"type":"text-delta","id":"...","delta":"..."}` | Incremental text |
-| `text-end` | `{"type":"text-end","id":"..."}` | Text block end |
-| `error` | `{"type":"error","errorText":"..."}` | Error in stream |
-| `finish` | `{"type":"finish"}` | Message complete |
-| `abort` | `{"type":"abort","reason":"..."}` | Stream aborted |
-| `[DONE]` | literal `[DONE]` | Stream termination |
-
-Additional parts: `reasoning-start/delta/end`, `source-url`, `source-document`, `file`, `tool-input-start`, `tool-input-delta`, `tool-input-available`, `tool-output-available`, `start-step`, `finish-step`, `data-*` (custom).
-
-### 1.4 Error Handling and Retry
-
-**Error object and retry:**
-```tsx
-const { messages, sendMessage, error, regenerate, clearError } = useChat();
-
-// Show error and retry button
-{error && (
- <>
- Something went wrong.
-