@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
|
@@ -1,422 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Data Stream Protocol
|
|
3
|
-
description: Integration with data stream protocol endpoints for streaming AI responses.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
The `@assistant-ui/react-data-stream` package provides integration with data stream protocol endpoints, enabling streaming AI responses with tool support and state management.
|
|
8
|
-
|
|
9
|
-
## Overview
|
|
10
|
-
|
|
11
|
-
The data stream protocol is a standardized format for streaming AI responses that supports:
|
|
12
|
-
|
|
13
|
-
- **Streaming text responses** with real-time updates
|
|
14
|
-
- **Tool calling** with structured parameters and results
|
|
15
|
-
- **State management** for conversation context
|
|
16
|
-
- **Error handling** and cancellation support
|
|
17
|
-
- **Attachment support** for multimodal interactions
|
|
18
|
-
|
|
19
|
-
## Installation
|
|
20
|
-
|
|
21
|
-
<InstallCommand npm={["@assistant-ui/react", "@assistant-ui/react-data-stream"]} />
|
|
22
|
-
|
|
23
|
-
## Basic Usage
|
|
24
|
-
|
|
25
|
-
<Steps>
|
|
26
|
-
|
|
27
|
-
<Step>
|
|
28
|
-
|
|
29
|
-
### Set up the Runtime
|
|
30
|
-
|
|
31
|
-
Use `useDataStreamRuntime` to connect to your data stream endpoint:
|
|
32
|
-
|
|
33
|
-
```tsx title="app/page.tsx"
|
|
34
|
-
"use client";
|
|
35
|
-
import { useDataStreamRuntime } from "@assistant-ui/react-data-stream";
|
|
36
|
-
import { AssistantRuntimeProvider } from "@assistant-ui/react";
|
|
37
|
-
import { Thread } from "@/components/assistant-ui/thread";
|
|
38
|
-
|
|
39
|
-
export default function ChatPage() {
|
|
40
|
-
const runtime = useDataStreamRuntime({
|
|
41
|
-
api: "/api/chat",
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
return (
|
|
45
|
-
<AssistantRuntimeProvider runtime={runtime}>
|
|
46
|
-
<Thread />
|
|
47
|
-
</AssistantRuntimeProvider>
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
</Step>
|
|
53
|
-
|
|
54
|
-
<Step>
|
|
55
|
-
|
|
56
|
-
### Create Backend Endpoint
|
|
57
|
-
|
|
58
|
-
Your backend endpoint should accept POST requests and return data stream responses:
|
|
59
|
-
|
|
60
|
-
```typescript title="app/api/chat/route.ts"
|
|
61
|
-
import { createAssistantStreamResponse } from "assistant-stream";
|
|
62
|
-
|
|
63
|
-
export async function POST(request: Request) {
|
|
64
|
-
const { messages, tools, system, threadId } = await request.json();
|
|
65
|
-
|
|
66
|
-
return createAssistantStreamResponse(async (controller) => {
|
|
67
|
-
// Process the request with your AI provider
|
|
68
|
-
const stream = await processWithAI({
|
|
69
|
-
messages,
|
|
70
|
-
tools,
|
|
71
|
-
system,
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
// Stream the response
|
|
75
|
-
for await (const chunk of stream) {
|
|
76
|
-
controller.appendText(chunk.text);
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
The request body includes:
|
|
83
|
-
- `messages` - The conversation history
|
|
84
|
-
- `tools` - Available tool definitions
|
|
85
|
-
- `system` - System prompt (if configured)
|
|
86
|
-
- `threadId` - The current thread/conversation identifier
|
|
87
|
-
|
|
88
|
-
</Step>
|
|
89
|
-
|
|
90
|
-
</Steps>
|
|
91
|
-
|
|
92
|
-
## Advanced Configuration
|
|
93
|
-
|
|
94
|
-
### Custom Headers and Authentication
|
|
95
|
-
|
|
96
|
-
```tsx
|
|
97
|
-
const runtime = useDataStreamRuntime({
|
|
98
|
-
api: "/api/chat",
|
|
99
|
-
headers: {
|
|
100
|
-
"Authorization": "Bearer " + token,
|
|
101
|
-
"X-Custom-Header": "value",
|
|
102
|
-
},
|
|
103
|
-
credentials: "include",
|
|
104
|
-
});
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
### Dynamic Headers
|
|
108
|
-
|
|
109
|
-
```tsx
|
|
110
|
-
const runtime = useDataStreamRuntime({
|
|
111
|
-
api: "/api/chat",
|
|
112
|
-
headers: async () => {
|
|
113
|
-
const token = await getAuthToken();
|
|
114
|
-
return {
|
|
115
|
-
"Authorization": "Bearer " + token,
|
|
116
|
-
};
|
|
117
|
-
},
|
|
118
|
-
});
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
### Dynamic Body
|
|
122
|
-
|
|
123
|
-
```tsx
|
|
124
|
-
const runtime = useDataStreamRuntime({
|
|
125
|
-
api: "/api/chat",
|
|
126
|
-
headers: async () => ({
|
|
127
|
-
"Authorization": `Bearer ${await getAuthToken()}`,
|
|
128
|
-
}),
|
|
129
|
-
body: async () => ({
|
|
130
|
-
requestId: crypto.randomUUID(),
|
|
131
|
-
timestamp: Date.now(),
|
|
132
|
-
signature: await computeSignature(),
|
|
133
|
-
}),
|
|
134
|
-
});
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### Event Callbacks
|
|
138
|
-
|
|
139
|
-
```tsx
|
|
140
|
-
const runtime = useDataStreamRuntime({
|
|
141
|
-
api: "/api/chat",
|
|
142
|
-
onResponse: (response) => {
|
|
143
|
-
console.log("Response received:", response.status);
|
|
144
|
-
},
|
|
145
|
-
onFinish: (message) => {
|
|
146
|
-
console.log("Message completed:", message);
|
|
147
|
-
},
|
|
148
|
-
onError: (error) => {
|
|
149
|
-
console.error("Error occurred:", error);
|
|
150
|
-
},
|
|
151
|
-
onCancel: () => {
|
|
152
|
-
console.log("Request cancelled");
|
|
153
|
-
},
|
|
154
|
-
});
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
## Tool Integration
|
|
158
|
-
|
|
159
|
-
<Callout type="warn">
|
|
160
|
-
Human-in-the-loop tools (using `human()` for tool interrupts) are not supported
|
|
161
|
-
in the data stream runtime. If you need human approval workflows or interactive
|
|
162
|
-
tool UIs, consider using [LocalRuntime](/docs/runtimes/custom/local) or
|
|
163
|
-
[Assistant Cloud](/docs/cloud) instead.
|
|
164
|
-
</Callout>
|
|
165
|
-
|
|
166
|
-
### Frontend Tools
|
|
167
|
-
|
|
168
|
-
Use `toToolsJSONSchema` to serialize client-side tools:
|
|
169
|
-
|
|
170
|
-
```tsx
|
|
171
|
-
import { tool } from "@assistant-ui/react";
|
|
172
|
-
import { toToolsJSONSchema } from "assistant-stream";
|
|
173
|
-
|
|
174
|
-
const myTools = {
|
|
175
|
-
get_weather: tool({
|
|
176
|
-
description: "Get current weather",
|
|
177
|
-
parameters: z.object({
|
|
178
|
-
location: z.string(),
|
|
179
|
-
}),
|
|
180
|
-
execute: async ({ location }) => {
|
|
181
|
-
const weather = await fetchWeather(location);
|
|
182
|
-
return `Weather in ${location}: ${weather}`;
|
|
183
|
-
},
|
|
184
|
-
}),
|
|
185
|
-
};
|
|
186
|
-
|
|
187
|
-
const runtime = useDataStreamRuntime({
|
|
188
|
-
api: "/api/chat",
|
|
189
|
-
body: {
|
|
190
|
-
tools: toToolsJSONSchema(myTools),
|
|
191
|
-
},
|
|
192
|
-
});
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
### Backend Tool Processing
|
|
196
|
-
|
|
197
|
-
Your backend should handle tool calls and return results:
|
|
198
|
-
|
|
199
|
-
```typescript title="Backend tool handling"
|
|
200
|
-
// Tools are automatically forwarded to your endpoint
|
|
201
|
-
const { tools } = await request.json();
|
|
202
|
-
|
|
203
|
-
// Process tools with your AI provider
|
|
204
|
-
const response = await ai.generateText({
|
|
205
|
-
messages,
|
|
206
|
-
tools,
|
|
207
|
-
// Tool results are streamed back automatically
|
|
208
|
-
});
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
## Assistant Cloud Integration
|
|
212
|
-
|
|
213
|
-
For Assistant Cloud deployments, use `useCloudRuntime`:
|
|
214
|
-
|
|
215
|
-
```tsx
|
|
216
|
-
import { useCloudRuntime } from "@assistant-ui/react-data-stream";
|
|
217
|
-
|
|
218
|
-
const runtime = useCloudRuntime({
|
|
219
|
-
cloud: assistantCloud,
|
|
220
|
-
assistantId: "my-assistant-id",
|
|
221
|
-
});
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
<Callout type="info">
|
|
225
|
-
The `useCloudRuntime` hook is currently under active development and not yet ready for production use.
|
|
226
|
-
</Callout>
|
|
227
|
-
|
|
228
|
-
## Message Conversion
|
|
229
|
-
|
|
230
|
-
### Framework-Agnostic Conversion (Recommended)
|
|
231
|
-
|
|
232
|
-
For custom integrations, use the framework-agnostic utilities from `assistant-stream`:
|
|
233
|
-
|
|
234
|
-
```tsx
|
|
235
|
-
import { toGenericMessages, toToolsJSONSchema } from "assistant-stream";
|
|
236
|
-
|
|
237
|
-
// Convert messages to a generic format
|
|
238
|
-
const genericMessages = toGenericMessages(messages);
|
|
239
|
-
|
|
240
|
-
// Convert tools to JSON Schema format
|
|
241
|
-
const toolSchemas = toToolsJSONSchema(tools);
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
The `GenericMessage` format can be easily converted to any LLM provider format:
|
|
245
|
-
|
|
246
|
-
```tsx
|
|
247
|
-
import type { GenericMessage } from "assistant-stream";
|
|
248
|
-
|
|
249
|
-
// GenericMessage is a union of:
|
|
250
|
-
// - { role: "system"; content: string }
|
|
251
|
-
// - { role: "user"; content: (GenericTextPart | GenericFilePart)[] }
|
|
252
|
-
// - { role: "assistant"; content: (GenericTextPart | GenericToolCallPart)[] }
|
|
253
|
-
// - { role: "tool"; content: GenericToolResultPart[] }
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
### AI SDK Specific Conversion
|
|
257
|
-
|
|
258
|
-
For AI SDK integration, use `toLanguageModelMessages`:
|
|
259
|
-
|
|
260
|
-
```tsx
|
|
261
|
-
import { toLanguageModelMessages } from "@assistant-ui/react-data-stream";
|
|
262
|
-
|
|
263
|
-
// Convert to AI SDK LanguageModelV2Message format
|
|
264
|
-
const languageModelMessages = toLanguageModelMessages(messages, {
|
|
265
|
-
unstable_includeId: true, // Include message IDs
|
|
266
|
-
});
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
<Callout type="info">
|
|
270
|
-
`toLanguageModelMessages` internally uses `toGenericMessages` and adds AI SDK-specific transformations.
|
|
271
|
-
For new custom integrations, prefer using `toGenericMessages` directly.
|
|
272
|
-
</Callout>
|
|
273
|
-
|
|
274
|
-
## Error Handling
|
|
275
|
-
|
|
276
|
-
The runtime automatically handles common error scenarios:
|
|
277
|
-
|
|
278
|
-
- **Network errors**: Automatically retried with exponential backoff
|
|
279
|
-
- **Stream interruptions**: Gracefully handled with partial content preservation
|
|
280
|
-
- **Tool execution errors**: Displayed in the UI with error states
|
|
281
|
-
- **Cancellation**: Clean abort signal handling
|
|
282
|
-
|
|
283
|
-
## Best Practices
|
|
284
|
-
|
|
285
|
-
### Performance Optimization
|
|
286
|
-
|
|
287
|
-
```tsx
|
|
288
|
-
// Use React.memo for expensive components
|
|
289
|
-
const OptimizedThread = React.memo(Thread);
|
|
290
|
-
|
|
291
|
-
// Memoize runtime configuration
|
|
292
|
-
const runtimeConfig = useMemo(() => ({
|
|
293
|
-
api: "/api/chat",
|
|
294
|
-
headers: { "Authorization": `Bearer ${token}` },
|
|
295
|
-
}), [token]);
|
|
296
|
-
|
|
297
|
-
const runtime = useDataStreamRuntime(runtimeConfig);
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
### Error Boundaries
|
|
301
|
-
|
|
302
|
-
```tsx
|
|
303
|
-
import { ErrorBoundary } from "react-error-boundary";
|
|
304
|
-
|
|
305
|
-
function ChatErrorFallback({ error, resetErrorBoundary }) {
|
|
306
|
-
return (
|
|
307
|
-
<div role="alert">
|
|
308
|
-
<h2>Something went wrong:</h2>
|
|
309
|
-
<pre>{error.message}</pre>
|
|
310
|
-
<button onClick={resetErrorBoundary}>Try again</button>
|
|
311
|
-
</div>
|
|
312
|
-
);
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
export default function App() {
|
|
316
|
-
return (
|
|
317
|
-
<ErrorBoundary FallbackComponent={ChatErrorFallback}>
|
|
318
|
-
<AssistantRuntimeProvider runtime={runtime}>
|
|
319
|
-
<Thread />
|
|
320
|
-
</AssistantRuntimeProvider>
|
|
321
|
-
</ErrorBoundary>
|
|
322
|
-
);
|
|
323
|
-
}
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
### State Persistence
|
|
327
|
-
|
|
328
|
-
```tsx
|
|
329
|
-
const runtime = useDataStreamRuntime({
|
|
330
|
-
api: "/api/chat",
|
|
331
|
-
body: {
|
|
332
|
-
// Include conversation state
|
|
333
|
-
state: conversationState,
|
|
334
|
-
},
|
|
335
|
-
onFinish: (message) => {
|
|
336
|
-
// Save state after each message
|
|
337
|
-
saveConversationState(message.metadata.unstable_state);
|
|
338
|
-
},
|
|
339
|
-
});
|
|
340
|
-
```
|
|
341
|
-
|
|
342
|
-
## Examples
|
|
343
|
-
|
|
344
|
-
Explore our [examples repository](https://github.com/assistant-ui/assistant-ui/tree/main/examples) for implementation references.
|
|
345
|
-
|
|
346
|
-
## LocalRuntimeOptions
|
|
347
|
-
|
|
348
|
-
`useDataStreamRuntime` accepts all options from `LocalRuntimeOptions` in addition to its own options. These control the underlying local runtime behavior.
|
|
349
|
-
|
|
350
|
-
### `maxSteps`
|
|
351
|
-
|
|
352
|
-
The maximum number of agentic steps (tool call rounds) allowed per run. Defaults to unlimited.
|
|
353
|
-
|
|
354
|
-
```tsx
|
|
355
|
-
const runtime = useDataStreamRuntime({
|
|
356
|
-
api: "/api/chat",
|
|
357
|
-
maxSteps: 5,
|
|
358
|
-
});
|
|
359
|
-
```
|
|
360
|
-
|
|
361
|
-
### `initialMessages`
|
|
362
|
-
|
|
363
|
-
Pre-populate the thread with messages on first render. Useful for continuing an existing conversation.
|
|
364
|
-
|
|
365
|
-
```tsx
|
|
366
|
-
const runtime = useDataStreamRuntime({
|
|
367
|
-
api: "/api/chat",
|
|
368
|
-
initialMessages: [
|
|
369
|
-
{ role: "user", content: [{ type: "text", text: "Hello" }] },
|
|
370
|
-
{ role: "assistant", content: [{ type: "text", text: "Hi! How can I help?" }] },
|
|
371
|
-
],
|
|
372
|
-
});
|
|
373
|
-
```
|
|
374
|
-
|
|
375
|
-
### `adapters`
|
|
376
|
-
|
|
377
|
-
Extend the runtime with optional capability adapters. The `chatModel` adapter is handled internally by `useDataStreamRuntime` and cannot be overridden here.
|
|
378
|
-
|
|
379
|
-
```tsx
|
|
380
|
-
const runtime = useDataStreamRuntime({
|
|
381
|
-
api: "/api/chat",
|
|
382
|
-
adapters: {
|
|
383
|
-
attachments: myAttachmentAdapter,
|
|
384
|
-
history: myHistoryAdapter,
|
|
385
|
-
speech: mySpeechAdapter,
|
|
386
|
-
dictation: myDictationAdapter,
|
|
387
|
-
feedback: myFeedbackAdapter,
|
|
388
|
-
suggestion: mySuggestionAdapter,
|
|
389
|
-
},
|
|
390
|
-
});
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
See the [LocalRuntime adapters documentation](/docs/runtimes/custom/local#adapters) for details on implementing each adapter.
|
|
394
|
-
|
|
395
|
-
### `cloud`
|
|
396
|
-
|
|
397
|
-
Connect to [Assistant Cloud](/docs/cloud) for managed multi-thread support, persistence, and thread management.
|
|
398
|
-
|
|
399
|
-
```tsx
|
|
400
|
-
import { AssistantCloud } from "assistant-cloud";
|
|
401
|
-
|
|
402
|
-
const cloud = new AssistantCloud({ /* ... */ });
|
|
403
|
-
|
|
404
|
-
const runtime = useDataStreamRuntime({
|
|
405
|
-
api: "/api/chat",
|
|
406
|
-
cloud,
|
|
407
|
-
});
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
### `unstable_humanToolNames`
|
|
411
|
-
|
|
412
|
-
Names of tools that should pause execution and wait for human or external approval before proceeding.
|
|
413
|
-
|
|
414
|
-
<Callout type="warn">
|
|
415
|
-
Human-in-the-loop tool interrupts (`unstable_humanToolNames`) are not supported
|
|
416
|
-
in the data stream runtime. Use [LocalRuntime](/docs/runtimes/custom/local) if
|
|
417
|
-
you need this feature.
|
|
418
|
-
</Callout>
|
|
419
|
-
|
|
420
|
-
## API Reference
|
|
421
|
-
|
|
422
|
-
For detailed API documentation, see the [`@assistant-ui/react-data-stream` API Reference](/docs/api-reference/integrations/react-data-stream).
|