@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.
- package/.docs/organized/code-examples/waterfall.md +15 -7
- package/.docs/organized/code-examples/with-a2a.md +9 -21
- package/.docs/organized/code-examples/with-ag-ui.md +11 -8
- package/.docs/organized/code-examples/with-ai-sdk-v6.md +10 -10
- package/.docs/organized/code-examples/with-artifacts.md +12 -10
- package/.docs/organized/code-examples/with-assistant-transport.md +11 -12
- package/.docs/organized/code-examples/with-chain-of-thought.md +83 -54
- package/.docs/organized/code-examples/with-cloud-standalone.md +14 -11
- package/.docs/organized/code-examples/with-cloud.md +9 -10
- package/.docs/organized/code-examples/with-custom-thread-list.md +61 -16
- package/.docs/organized/code-examples/with-elevenlabs-conversational.md +17 -12
- package/.docs/organized/code-examples/with-elevenlabs-scribe.md +13 -13
- package/.docs/organized/code-examples/with-expo.md +25 -21
- package/.docs/organized/code-examples/with-external-store.md +8 -8
- package/.docs/organized/code-examples/with-ffmpeg.md +17 -12
- package/.docs/organized/code-examples/with-generative-ui.md +9 -9
- package/.docs/organized/code-examples/with-google-adk.md +8 -8
- package/.docs/organized/code-examples/with-heat-graph.md +5 -5
- package/.docs/organized/code-examples/with-interactables.md +10 -25
- package/.docs/organized/code-examples/with-langchain.md +437 -0
- package/.docs/organized/code-examples/with-langgraph.md +16 -16
- package/.docs/organized/code-examples/with-livekit.md +18 -13
- package/.docs/organized/code-examples/with-opencode.md +105 -62
- package/.docs/organized/code-examples/with-parent-id-grouping.md +10 -10
- package/.docs/organized/code-examples/with-react-hook-form.md +220 -148
- package/.docs/organized/code-examples/with-react-ink.md +2 -2
- package/.docs/organized/code-examples/with-react-router.md +12 -12
- package/.docs/organized/code-examples/with-store.md +8 -5
- package/.docs/organized/code-examples/with-tanstack.md +10 -10
- package/.docs/organized/code-examples/with-tap-runtime.md +10 -6
- package/.docs/raw/docs/(docs)/cli.mdx +2 -1
- package/.docs/raw/docs/(docs)/copilots/assistant-frame.mdx +1 -0
- package/.docs/raw/docs/(docs)/copilots/make-assistant-tool-ui.mdx +10 -3
- package/.docs/raw/docs/(docs)/copilots/make-assistant-tool.mdx +8 -3
- package/.docs/raw/docs/(docs)/copilots/make-assistant-visible.mdx +1 -0
- package/.docs/raw/docs/(docs)/copilots/model-context.mdx +1 -0
- package/.docs/raw/docs/(docs)/copilots/motivation.mdx +1 -0
- package/.docs/raw/docs/(docs)/copilots/use-assistant-instructions.mdx +1 -0
- package/.docs/raw/docs/(docs)/devtools.mdx +1 -0
- package/.docs/raw/docs/(docs)/index.mdx +1 -0
- package/.docs/raw/docs/(docs)/installation.mdx +1 -0
- package/.docs/raw/docs/(docs)/rtl.mdx +80 -0
- package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +34 -0
- package/.docs/raw/docs/(reference)/api-reference/adapters/feedback-speech.mdx +41 -0
- package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +26 -0
- package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +34 -0
- package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +31 -0
- package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +20 -0
- package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +26 -0
- package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +72 -0
- package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +41 -0
- package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +48 -0
- package/.docs/raw/docs/(reference)/api-reference/hooks/utilities.mdx +30 -0
- package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +23 -0
- package/.docs/raw/docs/(reference)/api-reference/overview.mdx +21 -0
- package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +7 -0
- package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +149 -40
- package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +65 -0
- package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +2 -0
- package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +50 -6
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +15 -0
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +36 -1
- package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +38 -0
- package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +9 -0
- package/.docs/raw/docs/(reference)/migrations/v0-14.mdx +144 -6
- package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +231 -3
- package/.docs/raw/docs/cloud/ai-sdk.mdx +221 -3
- package/.docs/raw/docs/cloud/langgraph.mdx +274 -2
- package/.docs/raw/docs/{(docs)/guides → guides}/attachments.mdx +41 -36
- package/.docs/raw/docs/guides/branching.mdx +76 -0
- package/.docs/raw/docs/guides/chain-of-thought.mdx +166 -0
- package/.docs/raw/docs/{(docs)/guides → guides}/context-api.mdx +50 -22
- package/.docs/raw/docs/{(docs)/guides → guides}/dictation.mdx +2 -0
- package/.docs/raw/docs/guides/editing.mdx +102 -0
- package/.docs/raw/docs/guides/index.mdx +103 -0
- package/.docs/raw/docs/{(docs)/guides → guides}/interactables.mdx +49 -0
- package/.docs/raw/docs/{(docs)/guides → guides}/latex.mdx +51 -8
- package/.docs/raw/docs/guides/mentions.mdx +520 -0
- package/.docs/raw/docs/{(docs)/guides → guides}/message-timing.mdx +8 -2
- package/.docs/raw/docs/{(docs)/guides → guides}/multi-agent.mdx +64 -4
- package/.docs/raw/docs/{(docs)/guides → guides}/quoting.mdx +10 -17
- package/.docs/raw/docs/guides/slash-commands.mdx +361 -0
- package/.docs/raw/docs/guides/speech.mdx +156 -0
- package/.docs/raw/docs/{(docs)/guides → guides}/suggestions.mdx +21 -83
- package/.docs/raw/docs/{(docs)/guides → guides}/tool-ui.mdx +108 -36
- package/.docs/raw/docs/{(docs)/guides → guides}/tools.mdx +131 -35
- package/.docs/raw/docs/{(docs)/guides → guides}/voice.mdx +39 -0
- package/.docs/raw/docs/ink/index.mdx +1 -3
- package/.docs/raw/docs/ink/migration.mdx +1 -3
- package/.docs/raw/docs/ink/primitives.mdx +37 -1
- package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +520 -0
- package/.docs/raw/docs/integrations/auth/better-auth.mdx +191 -0
- package/.docs/raw/docs/integrations/auth/clerk.mdx +172 -0
- package/.docs/raw/docs/integrations/auth/next-auth.mdx +196 -0
- package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +79 -0
- package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +188 -0
- package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +57 -0
- package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +201 -0
- package/.docs/raw/docs/integrations/gateways/index.mdx +157 -0
- package/.docs/raw/docs/integrations/index.mdx +173 -0
- package/.docs/raw/docs/integrations/observability/helicone.mdx +130 -0
- package/.docs/raw/docs/integrations/observability/langfuse.mdx +156 -0
- package/.docs/raw/docs/integrations/observability/langsmith.mdx +146 -0
- package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +712 -0
- package/.docs/raw/docs/integrations/tools/mcp.mdx +267 -0
- package/.docs/raw/docs/primitives/action-bar.mdx +1 -0
- package/.docs/raw/docs/primitives/assistant-modal.mdx +1 -0
- package/.docs/raw/docs/primitives/attachment.mdx +1 -0
- package/.docs/raw/docs/primitives/branch-picker.mdx +1 -0
- package/.docs/raw/docs/primitives/chain-of-thought.mdx +90 -85
- package/.docs/raw/docs/primitives/composer.mdx +96 -63
- package/.docs/raw/docs/primitives/error.mdx +1 -0
- package/.docs/raw/docs/primitives/index.mdx +2 -1
- package/.docs/raw/docs/primitives/message.mdx +68 -5
- package/.docs/raw/docs/primitives/selection-toolbar.mdx +1 -0
- package/.docs/raw/docs/primitives/suggestion.mdx +1 -0
- package/.docs/raw/docs/primitives/thread-list.mdx +39 -0
- package/.docs/raw/docs/primitives/thread.mdx +16 -13
- package/.docs/raw/docs/react-native/index.mdx +1 -3
- package/.docs/raw/docs/react-native/migration.mdx +1 -3
- package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +396 -0
- package/.docs/raw/docs/runtimes/a2a/overview.mdx +60 -0
- package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +216 -0
- package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +70 -0
- package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +243 -0
- package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +123 -0
- package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +52 -0
- package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +71 -131
- package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +69 -63
- package/.docs/raw/docs/runtimes/ai-sdk/v6.mdx +365 -101
- package/.docs/raw/docs/runtimes/concepts/adapters.mdx +265 -0
- package/.docs/raw/docs/runtimes/concepts/architecture.mdx +125 -0
- package/.docs/raw/docs/runtimes/concepts/stability.mdx +67 -0
- package/.docs/raw/docs/runtimes/concepts/threads.mdx +428 -0
- package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +703 -0
- package/.docs/raw/docs/runtimes/custom/data-stream.mdx +323 -0
- package/.docs/raw/docs/runtimes/custom/external-store.mdx +253 -1236
- package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +746 -0
- package/.docs/raw/docs/runtimes/custom/overview.mdx +71 -0
- package/.docs/raw/docs/runtimes/google-adk/api.mdx +256 -0
- package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +717 -0
- package/.docs/raw/docs/runtimes/google-adk/overview.mdx +69 -0
- package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +229 -0
- package/.docs/raw/docs/runtimes/langchain.mdx +533 -0
- package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +305 -0
- package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +104 -0
- package/.docs/raw/docs/runtimes/langgraph/overview.mdx +84 -0
- package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +496 -0
- package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +127 -0
- package/.docs/raw/docs/runtimes/langgraph/threads.mdx +113 -0
- package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +3 -3
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -23
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +1 -1
- package/.docs/raw/docs/runtimes/opencode/hooks.mdx +191 -0
- package/.docs/raw/docs/runtimes/opencode/overview.mdx +48 -0
- package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +119 -0
- package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +74 -198
- package/.docs/raw/docs/ui/accordion.mdx +1 -0
- package/.docs/raw/docs/ui/assistant-modal.mdx +1 -0
- package/.docs/raw/docs/ui/assistant-sidebar.mdx +1 -0
- package/.docs/raw/docs/ui/attachment.mdx +1 -0
- package/.docs/raw/docs/ui/badge.mdx +1 -0
- package/.docs/raw/docs/ui/composer-trigger-popover.mdx +200 -0
- package/.docs/raw/docs/ui/context-display.mdx +1 -0
- package/.docs/raw/docs/ui/diff-viewer.mdx +1 -0
- package/.docs/raw/docs/ui/directive-text.mdx +114 -0
- package/.docs/raw/docs/ui/file.mdx +1 -0
- package/.docs/raw/docs/ui/image.mdx +1 -0
- package/.docs/raw/docs/ui/markdown.mdx +2 -14
- package/.docs/raw/docs/ui/mermaid.mdx +1 -0
- package/.docs/raw/docs/ui/message-timing.mdx +3 -2
- package/.docs/raw/docs/ui/model-selector.mdx +1 -0
- package/.docs/raw/docs/ui/part-grouping.mdx +325 -313
- package/.docs/raw/docs/ui/quote.mdx +1 -0
- package/.docs/raw/docs/ui/reasoning.mdx +69 -32
- package/.docs/raw/docs/ui/scrollbar.mdx +1 -0
- package/.docs/raw/docs/ui/select.mdx +1 -0
- package/.docs/raw/docs/ui/sources.mdx +1 -0
- package/.docs/raw/docs/ui/streamdown.mdx +1 -0
- package/.docs/raw/docs/ui/syntax-highlighting.mdx +1 -0
- package/.docs/raw/docs/ui/tabs.mdx +1 -0
- package/.docs/raw/docs/ui/thread-list.mdx +17 -0
- package/.docs/raw/docs/ui/thread.mdx +56 -1
- package/.docs/raw/docs/ui/tool-fallback.mdx +1 -0
- package/.docs/raw/docs/ui/tool-group.mdx +39 -11
- package/.docs/raw/docs/ui/voice.mdx +1 -0
- package/.docs/raw/docs/utilities/heat-graph.mdx +1 -0
- package/.docs/raw/docs/utilities/react-o11y.mdx +278 -0
- package/.docs/raw/docs/utilities/tw-shimmer.mdx +1 -0
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/package.json +4 -4
- package/src/tools/tests/path-traversal.test.ts +1 -1
- package/src/utils/logger.ts +1 -1
- package/.docs/raw/docs/(docs)/guides/branching.mdx +0 -65
- package/.docs/raw/docs/(docs)/guides/chain-of-thought.mdx +0 -164
- package/.docs/raw/docs/(docs)/guides/editing.mdx +0 -66
- package/.docs/raw/docs/(docs)/guides/mentions.mdx +0 -406
- package/.docs/raw/docs/(docs)/guides/slash-commands.mdx +0 -275
- package/.docs/raw/docs/(docs)/guides/speech.mdx +0 -38
- package/.docs/raw/docs/runtimes/a2a/index.mdx +0 -298
- package/.docs/raw/docs/runtimes/assistant-transport.mdx +0 -1033
- package/.docs/raw/docs/runtimes/custom/custom-thread-list.mdx +0 -268
- package/.docs/raw/docs/runtimes/custom/local.mdx +0 -1464
- package/.docs/raw/docs/runtimes/data-stream.mdx +0 -422
- package/.docs/raw/docs/runtimes/google-adk/index.mdx +0 -686
- package/.docs/raw/docs/runtimes/helicone.mdx +0 -61
- package/.docs/raw/docs/runtimes/langgraph/index.mdx +0 -607
- package/.docs/raw/docs/runtimes/langgraph/tutorial/index.mdx +0 -12
- package/.docs/raw/docs/runtimes/langserve.mdx +0 -116
- package/.docs/raw/docs/runtimes/mastra/full-stack-integration.mdx +0 -218
- package/.docs/raw/docs/runtimes/mastra/overview.mdx +0 -18
- package/.docs/raw/docs/runtimes/mastra/separate-server-integration.mdx +0 -217
- 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>
|