@assistant-ui/mcp-docs-server 0.1.29 → 0.1.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/.docs/organized/code-examples/waterfall.md +15 -7
  2. package/.docs/organized/code-examples/with-a2a.md +9 -21
  3. package/.docs/organized/code-examples/with-ag-ui.md +11 -8
  4. package/.docs/organized/code-examples/with-ai-sdk-v6.md +10 -10
  5. package/.docs/organized/code-examples/with-artifacts.md +12 -10
  6. package/.docs/organized/code-examples/with-assistant-transport.md +11 -12
  7. package/.docs/organized/code-examples/with-chain-of-thought.md +83 -54
  8. package/.docs/organized/code-examples/with-cloud-standalone.md +14 -11
  9. package/.docs/organized/code-examples/with-cloud.md +9 -10
  10. package/.docs/organized/code-examples/with-custom-thread-list.md +61 -16
  11. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +17 -12
  12. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +13 -13
  13. package/.docs/organized/code-examples/with-expo.md +25 -21
  14. package/.docs/organized/code-examples/with-external-store.md +8 -8
  15. package/.docs/organized/code-examples/with-ffmpeg.md +17 -12
  16. package/.docs/organized/code-examples/with-generative-ui.md +9 -9
  17. package/.docs/organized/code-examples/with-google-adk.md +8 -8
  18. package/.docs/organized/code-examples/with-heat-graph.md +5 -5
  19. package/.docs/organized/code-examples/with-interactables.md +10 -25
  20. package/.docs/organized/code-examples/with-langchain.md +437 -0
  21. package/.docs/organized/code-examples/with-langgraph.md +16 -16
  22. package/.docs/organized/code-examples/with-livekit.md +18 -13
  23. package/.docs/organized/code-examples/with-opencode.md +105 -62
  24. package/.docs/organized/code-examples/with-parent-id-grouping.md +10 -10
  25. package/.docs/organized/code-examples/with-react-hook-form.md +220 -148
  26. package/.docs/organized/code-examples/with-react-ink.md +2 -2
  27. package/.docs/organized/code-examples/with-react-router.md +12 -12
  28. package/.docs/organized/code-examples/with-store.md +8 -5
  29. package/.docs/organized/code-examples/with-tanstack.md +10 -10
  30. package/.docs/organized/code-examples/with-tap-runtime.md +10 -6
  31. package/.docs/raw/docs/(docs)/cli.mdx +2 -1
  32. package/.docs/raw/docs/(docs)/copilots/assistant-frame.mdx +1 -0
  33. package/.docs/raw/docs/(docs)/copilots/make-assistant-tool-ui.mdx +10 -3
  34. package/.docs/raw/docs/(docs)/copilots/make-assistant-tool.mdx +8 -3
  35. package/.docs/raw/docs/(docs)/copilots/make-assistant-visible.mdx +1 -0
  36. package/.docs/raw/docs/(docs)/copilots/model-context.mdx +1 -0
  37. package/.docs/raw/docs/(docs)/copilots/motivation.mdx +1 -0
  38. package/.docs/raw/docs/(docs)/copilots/use-assistant-instructions.mdx +1 -0
  39. package/.docs/raw/docs/(docs)/devtools.mdx +1 -0
  40. package/.docs/raw/docs/(docs)/index.mdx +1 -0
  41. package/.docs/raw/docs/(docs)/installation.mdx +1 -0
  42. package/.docs/raw/docs/(docs)/rtl.mdx +80 -0
  43. package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +34 -0
  44. package/.docs/raw/docs/(reference)/api-reference/adapters/feedback-speech.mdx +41 -0
  45. package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +26 -0
  46. package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +34 -0
  47. package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +31 -0
  48. package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +20 -0
  49. package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +26 -0
  50. package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +72 -0
  51. package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +41 -0
  52. package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +48 -0
  53. package/.docs/raw/docs/(reference)/api-reference/hooks/utilities.mdx +30 -0
  54. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +23 -0
  55. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +21 -0
  56. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +7 -0
  57. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +149 -40
  58. package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +65 -0
  59. package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +2 -0
  60. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +50 -6
  61. package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +15 -0
  62. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +36 -1
  63. package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +38 -0
  64. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +9 -0
  65. package/.docs/raw/docs/(reference)/migrations/v0-14.mdx +144 -6
  66. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +231 -3
  67. package/.docs/raw/docs/cloud/ai-sdk.mdx +221 -3
  68. package/.docs/raw/docs/cloud/langgraph.mdx +274 -2
  69. package/.docs/raw/docs/{(docs)/guides → guides}/attachments.mdx +41 -36
  70. package/.docs/raw/docs/guides/branching.mdx +76 -0
  71. package/.docs/raw/docs/guides/chain-of-thought.mdx +166 -0
  72. package/.docs/raw/docs/{(docs)/guides → guides}/context-api.mdx +50 -22
  73. package/.docs/raw/docs/{(docs)/guides → guides}/dictation.mdx +2 -0
  74. package/.docs/raw/docs/guides/editing.mdx +102 -0
  75. package/.docs/raw/docs/guides/index.mdx +103 -0
  76. package/.docs/raw/docs/{(docs)/guides → guides}/interactables.mdx +49 -0
  77. package/.docs/raw/docs/{(docs)/guides → guides}/latex.mdx +51 -8
  78. package/.docs/raw/docs/guides/mentions.mdx +520 -0
  79. package/.docs/raw/docs/{(docs)/guides → guides}/message-timing.mdx +8 -2
  80. package/.docs/raw/docs/{(docs)/guides → guides}/multi-agent.mdx +64 -4
  81. package/.docs/raw/docs/{(docs)/guides → guides}/quoting.mdx +10 -17
  82. package/.docs/raw/docs/guides/slash-commands.mdx +361 -0
  83. package/.docs/raw/docs/guides/speech.mdx +156 -0
  84. package/.docs/raw/docs/{(docs)/guides → guides}/suggestions.mdx +21 -83
  85. package/.docs/raw/docs/{(docs)/guides → guides}/tool-ui.mdx +108 -36
  86. package/.docs/raw/docs/{(docs)/guides → guides}/tools.mdx +131 -35
  87. package/.docs/raw/docs/{(docs)/guides → guides}/voice.mdx +39 -0
  88. package/.docs/raw/docs/ink/index.mdx +1 -3
  89. package/.docs/raw/docs/ink/migration.mdx +1 -3
  90. package/.docs/raw/docs/ink/primitives.mdx +37 -1
  91. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +520 -0
  92. package/.docs/raw/docs/integrations/auth/better-auth.mdx +191 -0
  93. package/.docs/raw/docs/integrations/auth/clerk.mdx +172 -0
  94. package/.docs/raw/docs/integrations/auth/next-auth.mdx +196 -0
  95. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +79 -0
  96. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +188 -0
  97. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +57 -0
  98. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +201 -0
  99. package/.docs/raw/docs/integrations/gateways/index.mdx +157 -0
  100. package/.docs/raw/docs/integrations/index.mdx +173 -0
  101. package/.docs/raw/docs/integrations/observability/helicone.mdx +130 -0
  102. package/.docs/raw/docs/integrations/observability/langfuse.mdx +156 -0
  103. package/.docs/raw/docs/integrations/observability/langsmith.mdx +146 -0
  104. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +712 -0
  105. package/.docs/raw/docs/integrations/tools/mcp.mdx +267 -0
  106. package/.docs/raw/docs/primitives/action-bar.mdx +1 -0
  107. package/.docs/raw/docs/primitives/assistant-modal.mdx +1 -0
  108. package/.docs/raw/docs/primitives/attachment.mdx +1 -0
  109. package/.docs/raw/docs/primitives/branch-picker.mdx +1 -0
  110. package/.docs/raw/docs/primitives/chain-of-thought.mdx +90 -85
  111. package/.docs/raw/docs/primitives/composer.mdx +96 -63
  112. package/.docs/raw/docs/primitives/error.mdx +1 -0
  113. package/.docs/raw/docs/primitives/index.mdx +2 -1
  114. package/.docs/raw/docs/primitives/message.mdx +68 -5
  115. package/.docs/raw/docs/primitives/selection-toolbar.mdx +1 -0
  116. package/.docs/raw/docs/primitives/suggestion.mdx +1 -0
  117. package/.docs/raw/docs/primitives/thread-list.mdx +39 -0
  118. package/.docs/raw/docs/primitives/thread.mdx +16 -13
  119. package/.docs/raw/docs/react-native/index.mdx +1 -3
  120. package/.docs/raw/docs/react-native/migration.mdx +1 -3
  121. package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +396 -0
  122. package/.docs/raw/docs/runtimes/a2a/overview.mdx +60 -0
  123. package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +216 -0
  124. package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +70 -0
  125. package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +243 -0
  126. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +123 -0
  127. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +52 -0
  128. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +71 -131
  129. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +69 -63
  130. package/.docs/raw/docs/runtimes/ai-sdk/v6.mdx +365 -101
  131. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +265 -0
  132. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +125 -0
  133. package/.docs/raw/docs/runtimes/concepts/stability.mdx +67 -0
  134. package/.docs/raw/docs/runtimes/concepts/threads.mdx +428 -0
  135. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +703 -0
  136. package/.docs/raw/docs/runtimes/custom/data-stream.mdx +323 -0
  137. package/.docs/raw/docs/runtimes/custom/external-store.mdx +253 -1236
  138. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +746 -0
  139. package/.docs/raw/docs/runtimes/custom/overview.mdx +71 -0
  140. package/.docs/raw/docs/runtimes/google-adk/api.mdx +256 -0
  141. package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +717 -0
  142. package/.docs/raw/docs/runtimes/google-adk/overview.mdx +69 -0
  143. package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +229 -0
  144. package/.docs/raw/docs/runtimes/langchain.mdx +533 -0
  145. package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +305 -0
  146. package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +104 -0
  147. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +84 -0
  148. package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +496 -0
  149. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +127 -0
  150. package/.docs/raw/docs/runtimes/langgraph/threads.mdx +113 -0
  151. package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +3 -3
  152. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -23
  153. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +1 -1
  154. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +191 -0
  155. package/.docs/raw/docs/runtimes/opencode/overview.mdx +48 -0
  156. package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +119 -0
  157. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +74 -198
  158. package/.docs/raw/docs/ui/accordion.mdx +1 -0
  159. package/.docs/raw/docs/ui/assistant-modal.mdx +1 -0
  160. package/.docs/raw/docs/ui/assistant-sidebar.mdx +1 -0
  161. package/.docs/raw/docs/ui/attachment.mdx +1 -0
  162. package/.docs/raw/docs/ui/badge.mdx +1 -0
  163. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +200 -0
  164. package/.docs/raw/docs/ui/context-display.mdx +1 -0
  165. package/.docs/raw/docs/ui/diff-viewer.mdx +1 -0
  166. package/.docs/raw/docs/ui/directive-text.mdx +114 -0
  167. package/.docs/raw/docs/ui/file.mdx +1 -0
  168. package/.docs/raw/docs/ui/image.mdx +1 -0
  169. package/.docs/raw/docs/ui/markdown.mdx +2 -14
  170. package/.docs/raw/docs/ui/mermaid.mdx +1 -0
  171. package/.docs/raw/docs/ui/message-timing.mdx +3 -2
  172. package/.docs/raw/docs/ui/model-selector.mdx +1 -0
  173. package/.docs/raw/docs/ui/part-grouping.mdx +325 -313
  174. package/.docs/raw/docs/ui/quote.mdx +1 -0
  175. package/.docs/raw/docs/ui/reasoning.mdx +69 -32
  176. package/.docs/raw/docs/ui/scrollbar.mdx +1 -0
  177. package/.docs/raw/docs/ui/select.mdx +1 -0
  178. package/.docs/raw/docs/ui/sources.mdx +1 -0
  179. package/.docs/raw/docs/ui/streamdown.mdx +1 -0
  180. package/.docs/raw/docs/ui/syntax-highlighting.mdx +1 -0
  181. package/.docs/raw/docs/ui/tabs.mdx +1 -0
  182. package/.docs/raw/docs/ui/thread-list.mdx +17 -0
  183. package/.docs/raw/docs/ui/thread.mdx +56 -1
  184. package/.docs/raw/docs/ui/tool-fallback.mdx +1 -0
  185. package/.docs/raw/docs/ui/tool-group.mdx +39 -11
  186. package/.docs/raw/docs/ui/voice.mdx +1 -0
  187. package/.docs/raw/docs/utilities/heat-graph.mdx +1 -0
  188. package/.docs/raw/docs/utilities/react-o11y.mdx +278 -0
  189. package/.docs/raw/docs/utilities/tw-shimmer.mdx +1 -0
  190. package/dist/utils/logger.js +1 -1
  191. package/dist/utils/logger.js.map +1 -1
  192. package/package.json +4 -4
  193. package/src/tools/tests/path-traversal.test.ts +1 -1
  194. package/src/utils/logger.ts +1 -1
  195. package/.docs/raw/docs/(docs)/guides/branching.mdx +0 -65
  196. package/.docs/raw/docs/(docs)/guides/chain-of-thought.mdx +0 -164
  197. package/.docs/raw/docs/(docs)/guides/editing.mdx +0 -66
  198. package/.docs/raw/docs/(docs)/guides/mentions.mdx +0 -406
  199. package/.docs/raw/docs/(docs)/guides/slash-commands.mdx +0 -275
  200. package/.docs/raw/docs/(docs)/guides/speech.mdx +0 -38
  201. package/.docs/raw/docs/runtimes/a2a/index.mdx +0 -298
  202. package/.docs/raw/docs/runtimes/assistant-transport.mdx +0 -1033
  203. package/.docs/raw/docs/runtimes/custom/custom-thread-list.mdx +0 -268
  204. package/.docs/raw/docs/runtimes/custom/local.mdx +0 -1464
  205. package/.docs/raw/docs/runtimes/data-stream.mdx +0 -422
  206. package/.docs/raw/docs/runtimes/google-adk/index.mdx +0 -686
  207. package/.docs/raw/docs/runtimes/helicone.mdx +0 -61
  208. package/.docs/raw/docs/runtimes/langgraph/index.mdx +0 -607
  209. package/.docs/raw/docs/runtimes/langgraph/tutorial/index.mdx +0 -12
  210. package/.docs/raw/docs/runtimes/langserve.mdx +0 -116
  211. package/.docs/raw/docs/runtimes/mastra/full-stack-integration.mdx +0 -218
  212. package/.docs/raw/docs/runtimes/mastra/overview.mdx +0 -18
  213. package/.docs/raw/docs/runtimes/mastra/separate-server-integration.mdx +0 -217
  214. package/.docs/raw/docs/ui/mention.mdx +0 -168
@@ -0,0 +1,323 @@
1
+ ---
2
+ title: Data Stream Protocol
3
+ description: Standard message-streaming protocol on top of LocalRuntime.
4
+ ---
5
+
6
+ `@assistant-ui/react-data-stream` consumes the data stream protocol, a standardized format for streaming AI responses. It is layered on `LocalRuntime` (see [architecture](/docs/runtimes/concepts/architecture)), so all `LocalRuntime` features apply.
7
+
8
+ The protocol supports streaming text, tool calls, conversation context, error handling, cancellation, and attachments.
9
+
10
+ ## When to use it
11
+
12
+ Pick this runtime when:
13
+
14
+ - Your backend already speaks the data stream protocol (or you can make it do so).
15
+ - You want a thin message-stream contract without writing a `ChatModelAdapter`.
16
+ - You are migrating from AI SDK v4 and want the v4 pattern preserved (see [v4 docs](/docs/runtimes/ai-sdk/v4-legacy)).
17
+
18
+ If your backend exposes a richer state surface, consider [`AssistantTransport`](/docs/runtimes/custom/assistant-transport) instead.
19
+
20
+ ## Install
21
+
22
+ <PlatformTabs>
23
+ <Tab value="React">
24
+
25
+ <InstallCommand npm={["@assistant-ui/react", "@assistant-ui/react-data-stream"]} />
26
+
27
+ </Tab>
28
+ <Tab value="React Native">
29
+
30
+ <InstallCommand expo={["@assistant-ui/react-native", "@assistant-ui/react-data-stream"]} />
31
+
32
+ </Tab>
33
+ <Tab value="React Ink">
34
+
35
+ <InstallCommand npm={["@assistant-ui/react-ink", "@assistant-ui/react-data-stream", "ink", "react"]} />
36
+
37
+ </Tab>
38
+ </PlatformTabs>
39
+
40
+ ## Quickstart
41
+
42
+ <Steps>
43
+ <Step>
44
+
45
+ ### Set up the runtime
46
+
47
+ <PlatformTabs>
48
+ <Tab value="React">
49
+
50
+ ```tsx title="app/page.tsx"
51
+ "use client";
52
+
53
+ import { useDataStreamRuntime } from "@assistant-ui/react-data-stream";
54
+ import { AssistantRuntimeProvider } from "@assistant-ui/react";
55
+ import { Thread } from "@/components/assistant-ui/thread";
56
+
57
+ export default function ChatPage() {
58
+ const runtime = useDataStreamRuntime({ api: "/api/chat" });
59
+ return (
60
+ <AssistantRuntimeProvider runtime={runtime}>
61
+ <Thread />
62
+ </AssistantRuntimeProvider>
63
+ );
64
+ }
65
+ ```
66
+
67
+ </Tab>
68
+ <Tab value="React Native">
69
+
70
+ ```tsx title="app/index.tsx"
71
+ import { useDataStreamRuntime } from "@assistant-ui/react-data-stream";
72
+ import { AssistantRuntimeProvider } from "@assistant-ui/react-native";
73
+ import { View } from "react-native";
74
+ import { Thread } from "@/components/assistant-ui/thread";
75
+
76
+ const API_URL = process.env.EXPO_PUBLIC_API_URL ?? "http://localhost:3000";
77
+
78
+ export default function ChatPage() {
79
+ const runtime = useDataStreamRuntime({ api: `${API_URL}/api/chat` });
80
+ return (
81
+ <AssistantRuntimeProvider runtime={runtime}>
82
+ <View style={{ flex: 1 }}>
83
+ <Thread />
84
+ </View>
85
+ </AssistantRuntimeProvider>
86
+ );
87
+ }
88
+ ```
89
+
90
+ </Tab>
91
+ <Tab value="React Ink">
92
+
93
+ ```tsx title="app.tsx"
94
+ import { useDataStreamRuntime } from "@assistant-ui/react-data-stream";
95
+ import { AssistantRuntimeProvider } from "@assistant-ui/react-ink";
96
+ import { Box } from "ink";
97
+ import { Thread } from "./components/thread.js";
98
+
99
+ export function App() {
100
+ const runtime = useDataStreamRuntime({
101
+ api: "http://localhost:3000/api/chat",
102
+ });
103
+ return (
104
+ <AssistantRuntimeProvider runtime={runtime}>
105
+ <Box flexDirection="column">
106
+ <Thread />
107
+ </Box>
108
+ </AssistantRuntimeProvider>
109
+ );
110
+ }
111
+ ```
112
+
113
+ </Tab>
114
+ </PlatformTabs>
115
+
116
+ </Step>
117
+ <Step>
118
+
119
+ ### Create the backend endpoint
120
+
121
+ Your backend should accept POST requests and return data stream responses:
122
+ For React Native and Ink, host this endpoint in a separate backend project and
123
+ point the client runtime at its absolute URL.
124
+
125
+ ```ts title="app/api/chat/route.ts"
126
+ import { createAssistantStreamResponse } from "assistant-stream";
127
+
128
+ export async function POST(request: Request) {
129
+ const { messages, tools, system, threadId } = await request.json();
130
+
131
+ return createAssistantStreamResponse(async (controller) => {
132
+ const stream = await processWithAI({ messages, tools, system });
133
+ for await (const chunk of stream) {
134
+ controller.appendText(chunk.text);
135
+ }
136
+ });
137
+ }
138
+ ```
139
+
140
+ The request body includes `messages`, `tools`, `system` (if configured), and `threadId`.
141
+
142
+ </Step>
143
+ </Steps>
144
+
145
+ ## Headers and authentication
146
+
147
+ ```tsx
148
+ const runtime = useDataStreamRuntime({
149
+ api: "/api/chat",
150
+ headers: { Authorization: `Bearer ${token}`, "X-Custom-Header": "value" },
151
+ credentials: "include",
152
+ });
153
+ ```
154
+
155
+ Evaluate per-request:
156
+
157
+ ```tsx
158
+ const runtime = useDataStreamRuntime({
159
+ api: "/api/chat",
160
+ headers: async () => ({
161
+ Authorization: `Bearer ${await getAuthToken()}`,
162
+ }),
163
+ body: async () => ({
164
+ requestId: crypto.randomUUID(),
165
+ timestamp: Date.now(),
166
+ signature: await computeSignature(),
167
+ }),
168
+ });
169
+ ```
170
+
171
+ ## Event callbacks
172
+
173
+ ```tsx
174
+ const runtime = useDataStreamRuntime({
175
+ api: "/api/chat",
176
+ onResponse: (response) => console.log("status:", response.status),
177
+ onFinish: (message) => console.log("done:", message),
178
+ onError: (error) => console.error(error),
179
+ onCancel: () => console.log("cancelled"),
180
+ });
181
+ ```
182
+
183
+ ## Tool integration
184
+
185
+ <Callout type="warn">
186
+ Human-in-the-loop tools (`unstable_humanToolNames`, `human()` interrupts) are not supported in the data stream runtime. Use [`LocalRuntime`](/docs/runtimes/custom/local-runtime) directly if you need approval flows.
187
+ </Callout>
188
+
189
+ ### Frontend tools
190
+
191
+ Serialize client-side tools with `toToolsJSONSchema`:
192
+
193
+ ```tsx
194
+ import { tool } from "@assistant-ui/react";
195
+ import { toToolsJSONSchema } from "assistant-stream";
196
+
197
+ const myTools = {
198
+ get_weather: tool({
199
+ description: "Get current weather",
200
+ parameters: z.object({ location: z.string() }),
201
+ execute: async ({ location }) => {
202
+ const weather = await fetchWeather(location);
203
+ return `Weather in ${location}: ${weather}`;
204
+ },
205
+ }),
206
+ };
207
+
208
+ const runtime = useDataStreamRuntime({
209
+ api: "/api/chat",
210
+ body: { tools: toToolsJSONSchema(myTools) },
211
+ });
212
+ ```
213
+
214
+ ### Backend tool processing
215
+
216
+ ```ts title="Backend tool handling"
217
+ const { tools } = await request.json();
218
+ const response = await ai.generateText({ messages, tools });
219
+ ```
220
+
221
+ Tool results stream back automatically.
222
+
223
+ ## Message conversion
224
+
225
+ ### Generic (recommended)
226
+
227
+ ```tsx
228
+ import { toGenericMessages, toToolsJSONSchema } from "assistant-stream";
229
+
230
+ const genericMessages = toGenericMessages(messages);
231
+ const toolSchemas = toToolsJSONSchema(tools);
232
+ ```
233
+
234
+ `GenericMessage` is a union of `system`, `user` (with text and file parts), `assistant` (with text and tool-call parts), and `tool` (with tool-result parts). It is easy to convert to any LLM provider format.
235
+
236
+ ### AI SDK specific
237
+
238
+ ```tsx
239
+ import { toLanguageModelMessages } from "@assistant-ui/react-data-stream";
240
+
241
+ const languageModelMessages = toLanguageModelMessages(messages, {
242
+ unstable_includeId: true,
243
+ });
244
+ ```
245
+
246
+ `toLanguageModelMessages` internally uses `toGenericMessages` with AI-SDK-specific transformations. For new integrations prefer `toGenericMessages` directly.
247
+
248
+ ## Assistant Cloud integration
249
+
250
+ ```tsx
251
+ import { useCloudRuntime } from "@assistant-ui/react-data-stream";
252
+
253
+ const runtime = useCloudRuntime({
254
+ cloud: assistantCloud,
255
+ assistantId: "my-assistant-id",
256
+ });
257
+ ```
258
+
259
+ <Callout type="info">
260
+ `useCloudRuntime` is currently under active development and not yet ready for production.
261
+ </Callout>
262
+
263
+ ## LocalRuntimeOptions
264
+
265
+ `useDataStreamRuntime` accepts every `LocalRuntimeOptions` option in addition to its own. The `chatModel` adapter slot is handled internally and cannot be overridden.
266
+
267
+ ```tsx
268
+ const runtime = useDataStreamRuntime({
269
+ api: "/api/chat",
270
+ initialMessages: [
271
+ { role: "user", content: [{ type: "text", text: "Hello" }] },
272
+ { role: "assistant", content: [{ type: "text", text: "Hi!" }] },
273
+ ],
274
+ maxSteps: 5,
275
+ cloud, // see "AssistantCloud" in /docs/runtimes/concepts/threads
276
+ adapters: {
277
+ attachments: myAttachmentAdapter,
278
+ history: myHistoryAdapter,
279
+ speech: mySpeechAdapter,
280
+ feedback: myFeedbackAdapter,
281
+ suggestion: mySuggestionAdapter,
282
+ },
283
+ });
284
+ ```
285
+
286
+ See [adapters](/docs/runtimes/concepts/adapters) for adapter contracts and [LocalRuntime](/docs/runtimes/custom/local-runtime) for inherited options.
287
+
288
+ ## Error handling
289
+
290
+ The runtime handles common error scenarios automatically:
291
+
292
+ - Network errors: retried with exponential backoff.
293
+ - Stream interruptions: gracefully handled with partial content preserved.
294
+ - Tool execution errors: displayed in the UI with error states.
295
+ - Cancellation: clean abort signal handling.
296
+
297
+ ## Examples
298
+
299
+ [`examples/`](https://github.com/assistant-ui/assistant-ui/tree/main/examples) contains reference implementations.
300
+
301
+ ## API reference
302
+
303
+ For the full hook reference, see [`@assistant-ui/react-data-stream` API](/docs/api-reference/integrations/react-data-stream).
304
+
305
+ ## Related
306
+
307
+ <Cards>
308
+ <Card
309
+ title="LocalRuntime"
310
+ description="The core runtime data-stream is built on."
311
+ href="/docs/runtimes/custom/local-runtime"
312
+ />
313
+ <Card
314
+ title="Assistant Transport"
315
+ description="State-streaming protocol alternative."
316
+ href="/docs/runtimes/custom/assistant-transport"
317
+ />
318
+ <Card
319
+ title="Adapters"
320
+ description="Attachments, speech, feedback, history, suggestions."
321
+ href="/docs/runtimes/concepts/adapters"
322
+ />
323
+ </Cards>