@assistant-ui/mcp-docs-server 0.1.38 → 0.1.39
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 +8 -9
- package/.docs/organized/code-examples/with-a2a.md +16 -11
- package/.docs/organized/code-examples/with-ag-ui.md +16 -11
- package/.docs/organized/code-examples/{with-ai-sdk-v6.md → with-ai-sdk-v7.md} +32 -21
- package/.docs/organized/code-examples/with-artifacts.md +17 -10
- package/.docs/organized/code-examples/with-assistant-transport.md +15 -8
- package/.docs/organized/code-examples/with-browser-extension.md +15 -8
- package/.docs/organized/code-examples/with-chain-of-thought.md +17 -10
- package/.docs/organized/code-examples/with-cloud-standalone.md +10 -9
- package/.docs/organized/code-examples/with-cloud.md +18 -13
- package/.docs/organized/code-examples/with-custom-thread-list.md +17 -10
- package/.docs/organized/code-examples/with-elevenlabs-conversational.md +20 -13
- package/.docs/organized/code-examples/with-elevenlabs-scribe.md +20 -13
- package/.docs/organized/code-examples/with-eve.md +16 -9
- package/.docs/organized/code-examples/with-expo.md +27 -24
- package/.docs/organized/code-examples/with-external-store.md +16 -11
- package/.docs/organized/code-examples/with-ffmpeg.md +18 -13
- package/.docs/organized/code-examples/with-generative-ui.md +20 -15
- package/.docs/organized/code-examples/with-google-adk.md +15 -8
- package/.docs/organized/code-examples/with-heat-graph.md +8 -9
- package/.docs/organized/code-examples/with-image-generation.md +17 -10
- package/.docs/organized/code-examples/with-interactables.md +19 -15
- package/.docs/organized/code-examples/with-langchain.md +17 -10
- package/.docs/organized/code-examples/with-langgraph.md +17 -10
- package/.docs/organized/code-examples/with-livekit.md +21 -14
- package/.docs/organized/code-examples/with-mcp.md +25 -12
- package/.docs/organized/code-examples/with-opencode.md +22 -17
- package/.docs/organized/code-examples/with-pi.md +47 -12
- package/.docs/organized/code-examples/with-react-hook-form.md +19 -14
- package/.docs/organized/code-examples/with-react-ink-web.md +6 -6
- package/.docs/organized/code-examples/with-react-ink.md +2 -2
- package/.docs/organized/code-examples/with-react-router.md +20 -15
- package/.docs/organized/code-examples/with-resumable-stream.md +19 -12
- package/.docs/organized/code-examples/with-store.md +8 -9
- package/.docs/organized/code-examples/with-tanstack.md +16 -10
- package/.docs/organized/code-examples/with-tap-runtime.md +16 -11
- package/.docs/organized/code-examples/with-virtualized-thread.md +17 -12
- package/.docs/raw/docs/(docs)/base-ui.mdx +39 -0
- package/.docs/raw/docs/(docs)/cli.mdx +17 -1
- package/.docs/raw/docs/(docs)/installation.mdx +15 -1
- package/.docs/raw/docs/(docs)/rtl.mdx +2 -4
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/actions.mdx +56 -0
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/components.mdx +86 -0
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +19 -1
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/json-generative-ui.mdx +42 -0
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/rendering.mdx +53 -2
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/slack.mdx +81 -0
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/teams.mdx +86 -0
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/tokens.mdx +62 -0
- package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +4 -1
- package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +4 -2
- package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +37 -0
- package/.docs/raw/docs/(reference)/api-reference/overview.mdx +1 -0
- package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +29 -29
- package/.docs/raw/docs/(reference)/api-reference/primitives/composition.mdx +1 -0
- package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +3 -0
- package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +2 -0
- package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +0 -2
- package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +12 -9
- package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +4 -0
- package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +7 -1
- package/.docs/raw/docs/cloud/langgraph.mdx +3 -1
- package/.docs/raw/docs/guides/chatgpt-subscription.mdx +108 -0
- package/.docs/raw/docs/guides/dictation.mdx +185 -257
- package/.docs/raw/docs/guides/index.mdx +10 -0
- package/.docs/raw/docs/guides/mentions.mdx +31 -3
- package/.docs/raw/docs/guides/resumable-streams.mdx +12 -1
- package/.docs/raw/docs/guides/speech.mdx +47 -29
- package/.docs/raw/docs/guides/suggestions.mdx +70 -1
- package/.docs/raw/docs/guides/voice.mdx +197 -267
- package/.docs/raw/docs/ink/primitives.mdx +35 -1
- package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +10 -4
- package/.docs/raw/docs/integrations/frameworks/cloudflare-agents/overview.mdx +3 -3
- package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +1 -1
- package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +3 -3
- package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +1 -1
- package/.docs/raw/docs/integrations/gateways/index.mdx +2 -2
- package/.docs/raw/docs/integrations/observability/helicone.mdx +1 -1
- package/.docs/raw/docs/integrations/observability/langfuse.mdx +1 -1
- package/.docs/raw/docs/integrations/observability/langsmith.mdx +1 -1
- package/.docs/raw/docs/migrations/index.mdx +50 -0
- package/.docs/raw/docs/migrations/toolkit-tools.mdx +4 -2
- package/.docs/raw/docs/primitives/chain-of-thought.mdx +6 -1
- package/.docs/raw/docs/primitives/composer.mdx +16 -0
- package/.docs/raw/docs/primitives/selection-toolbar.mdx +25 -0
- package/.docs/raw/docs/react-native/primitives.mdx +23 -0
- package/.docs/raw/docs/runtimes/ag-ui/agent-state.mdx +124 -0
- package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +10 -1
- package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +13 -4
- package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +11 -11
- package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +5 -5
- package/.docs/raw/docs/runtimes/ai-sdk/{v6.mdx → v6-legacy.mdx} +8 -6
- package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +717 -0
- package/.docs/raw/docs/runtimes/concepts/adapters.mdx +1 -1
- package/.docs/raw/docs/runtimes/concepts/architecture.mdx +1 -1
- package/.docs/raw/docs/runtimes/custom/data-stream.mdx +10 -19
- package/.docs/raw/docs/runtimes/custom/external-store.mdx +1 -1
- package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +2 -0
- package/.docs/raw/docs/runtimes/eve/overview.mdx +1 -1
- package/.docs/raw/docs/runtimes/langgraph/agent-state.mdx +181 -0
- package/.docs/raw/docs/tools/backend.mdx +6 -3
- package/.docs/raw/docs/tools/defining-tools.mdx +7 -1
- package/.docs/raw/docs/tools/generative-ui.mdx +60 -2
- package/.docs/raw/docs/tools/mcp-apps.mdx +29 -11
- package/.docs/raw/docs/tools/mcp.mdx +100 -3
- package/.docs/raw/docs/tools/tool-ui.mdx +6 -4
- package/.docs/raw/docs/tools/user-managed-mcp.mdx +26 -3
- package/.docs/raw/docs/ui/accordion.mdx +16 -10
- package/.docs/raw/docs/ui/assistant-modal.mdx +8 -4
- package/.docs/raw/docs/ui/attachment.mdx +5 -1
- package/.docs/raw/docs/ui/badge.mdx +23 -12
- package/.docs/raw/docs/ui/follow-up-suggestions.mdx +2 -2
- package/.docs/raw/docs/ui/model-selector.mdx +32 -2
- package/.docs/raw/docs/ui/select.mdx +22 -14
- package/.docs/raw/docs/ui/sources.mdx +1 -1
- package/.docs/raw/docs/ui/tabs.mdx +25 -14
- package/.docs/raw/docs/utilities/heat-graph.mdx +2 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -1
- package/dist/prepare-docs/code-examples.d.ts.map +1 -1
- package/dist/prepare-docs/copy-raw.d.ts.map +1 -1
- package/dist/prompts/xulux-playground.d.ts +12 -0
- package/dist/prompts/xulux-playground.d.ts.map +1 -0
- package/dist/prompts/xulux-playground.js +33 -0
- package/dist/prompts/xulux-playground.js.map +1 -0
- package/dist/tools/docs.d.ts +2 -4
- package/dist/tools/docs.d.ts.map +1 -1
- package/dist/tools/docs.js +24 -8
- package/dist/tools/docs.js.map +1 -1
- package/dist/tools/examples.d.ts +2 -4
- package/dist/tools/examples.d.ts.map +1 -1
- package/dist/tools/examples.js +9 -6
- package/dist/tools/examples.js.map +1 -1
- package/dist/tools/resources.d.ts +0 -1
- package/dist/tools/resources.d.ts.map +1 -1
- package/dist/tools/search.d.ts +2 -5
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/tests/test-setup.d.ts.map +1 -1
- package/dist/tools/tests/test-setup.js +5 -1
- package/dist/tools/tests/test-setup.js.map +1 -1
- package/dist/tools/xulux-templates.d.ts +72 -0
- package/dist/tools/xulux-templates.d.ts.map +1 -0
- package/dist/tools/xulux-templates.js +82 -0
- package/dist/tools/xulux-templates.js.map +1 -0
- package/dist/utils/cache.d.ts +5 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +18 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/mcp-format.d.ts +1 -0
- package/dist/utils/mcp-format.d.ts.map +1 -1
- package/dist/utils/mcp-format.js +7 -4
- package/dist/utils/mcp-format.js.map +1 -1
- package/dist/utils/mdx.d.ts.map +1 -1
- package/dist/utils/paths.d.ts +1 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +3 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/search.d.ts.map +1 -1
- package/dist/utils/security.d.ts.map +1 -1
- package/dist/xulux/catalog-client.d.ts +14 -0
- package/dist/xulux/catalog-client.d.ts.map +1 -0
- package/dist/xulux/catalog-client.js +67 -0
- package/dist/xulux/catalog-client.js.map +1 -0
- package/dist/xulux/fallback-catalog.d.ts +7 -0
- package/dist/xulux/fallback-catalog.d.ts.map +1 -0
- package/dist/xulux/fallback-catalog.js +47 -0
- package/dist/xulux/fallback-catalog.js.map +1 -0
- package/dist/xulux/fetch-sandbox.d.ts +5 -0
- package/dist/xulux/fetch-sandbox.d.ts.map +1 -0
- package/dist/xulux/fetch-sandbox.js +40 -0
- package/dist/xulux/fetch-sandbox.js.map +1 -0
- package/dist/xulux/template-service.d.ts +84 -0
- package/dist/xulux/template-service.d.ts.map +1 -0
- package/dist/xulux/template-service.js +223 -0
- package/dist/xulux/template-service.js.map +1 -0
- package/dist/xulux/types.d.ts +55 -0
- package/dist/xulux/types.d.ts.map +1 -0
- package/dist/xulux/types.js +6 -0
- package/dist/xulux/types.js.map +1 -0
- package/package.json +5 -5
- package/src/index.ts +53 -0
- package/src/prompts/xulux-playground.ts +36 -0
- package/src/tools/docs.ts +25 -3
- package/src/tools/examples.ts +15 -10
- package/src/tools/tests/docs.test.ts +20 -0
- package/src/tools/tests/examples.test.ts +5 -5
- package/src/tools/tests/listings-cache.test.ts +19 -0
- package/src/tools/tests/mcp-protocol.test.ts +81 -1
- package/src/tools/tests/test-setup.ts +8 -0
- package/src/tools/tests/xulux-templates.test.ts +262 -0
- package/src/tools/xulux-templates.ts +141 -0
- package/src/utils/cache.ts +20 -0
- package/src/utils/mcp-format.ts +8 -6
- package/src/utils/paths.ts +4 -1
- package/src/utils/tests/cache.test.ts +51 -0
- package/src/utils/tests/mcp-format.test.ts +22 -0
- package/src/utils/tests/security.test.ts +1 -1
- package/src/xulux/catalog-client.ts +105 -0
- package/src/xulux/fallback-catalog.ts +63 -0
- package/src/xulux/fetch-sandbox.ts +56 -0
- package/src/xulux/template-service.ts +406 -0
- package/src/xulux/types.ts +60 -0
- package/.docs/raw/docs/(reference)/api-reference/hooks/utilities.mdx +0 -464
|
@@ -9,7 +9,7 @@ import { VercelIcon } from "@/components/icons/vercel";
|
|
|
9
9
|
[Mastra](https://mastra.ai/) is an open-source TypeScript agent framework. It provides primitives for AI applications: agents with memory and tool calling, deterministic LLM workflows, RAG, model routing, workflow graphs, and automated evals.
|
|
10
10
|
|
|
11
11
|
<Callout type="info">
|
|
12
|
-
This is an integration guide, not a runtime adapter. assistant-ui does not ship a `@assistant-ui/react-mastra` package. You wire up Mastra through the standard [AI SDK runtime](/docs/runtimes/ai-sdk/
|
|
12
|
+
This is an integration guide, not a runtime adapter. assistant-ui does not ship a `@assistant-ui/react-mastra` package. You wire up Mastra through the standard [AI SDK runtime](/docs/runtimes/ai-sdk/v7) by routing your API endpoint through Mastra's agent stream.
|
|
13
13
|
</Callout>
|
|
14
14
|
|
|
15
15
|
## Pick a pattern
|
|
@@ -19,7 +19,7 @@ This is an integration guide, not a runtime adapter. assistant-ui does not ship
|
|
|
19
19
|
| [Full-stack](/docs/integrations/frameworks/mastra/full-stack) | One Next.js app: API routes call Mastra in-process. Simpler deployment, single repo. |
|
|
20
20
|
| [Separate server](/docs/integrations/frameworks/mastra/separate-server) | Mastra runs as its own service; the Next.js frontend hits its API. Independent scaling, clearer separation of concerns. |
|
|
21
21
|
|
|
22
|
-
Both use the same client-side `useChatRuntime` from [`@assistant-ui/react-ai-sdk`](/docs/runtimes/ai-sdk/
|
|
22
|
+
Both use the same client-side `useChatRuntime` from [`@assistant-ui/react-ai-sdk`](/docs/runtimes/ai-sdk/v7). The only difference is where the Mastra agent lives.
|
|
23
23
|
|
|
24
24
|
## Architecture
|
|
25
25
|
|
|
@@ -52,6 +52,6 @@ Shared adapters (attachments, speech, feedback, history) work the same way descr
|
|
|
52
52
|
icon={<VercelIcon width={20} height={20} />}
|
|
53
53
|
title="AI SDK runtime"
|
|
54
54
|
description="The runtime that handles the client side of this integration."
|
|
55
|
-
href="/docs/runtimes/ai-sdk/
|
|
55
|
+
href="/docs/runtimes/ai-sdk/v7"
|
|
56
56
|
/>
|
|
57
57
|
</Cards>
|
|
@@ -196,6 +196,6 @@ Open `http://localhost:3000`, send a message, and confirm:
|
|
|
196
196
|
icon={<VercelIcon width={20} height={20} />}
|
|
197
197
|
title="AI SDK runtime"
|
|
198
198
|
description="The runtime that handles the client side of this integration."
|
|
199
|
-
href="/docs/runtimes/ai-sdk/
|
|
199
|
+
href="/docs/runtimes/ai-sdk/v7"
|
|
200
200
|
/>
|
|
201
201
|
</Cards>
|
|
@@ -8,7 +8,7 @@ import { VercelIcon } from "@/components/icons/vercel";
|
|
|
8
8
|
|
|
9
9
|
LLM gateways sit between your route handler and the upstream provider. They give you a single endpoint that fronts many providers, plus features like multi-provider fallback, prompt caching, and BYOK (bring-your-own-key) flows. Most are OpenAI API-compatible, so the integration is a `baseURL` swap on `createOpenAI` from `@ai-sdk/openai`.
|
|
10
10
|
|
|
11
|
-
For pure observability (proxy that logs every call) see [Helicone](/docs/integrations/observability/helicone). The gateways here overlap in spirit but are positioned around routing rather than logging.
|
|
11
|
+
For pure observability (proxy that logs every call) see [Helicone](/docs/integrations/observability/helicone). The gateways here overlap in spirit but are positioned around routing rather than logging. For local personal projects there is also a keyless option in the same `baseURL`-swap shape: a local OAuth proxy billed to your ChatGPT subscription; see [ChatGPT Subscription](/docs/guides/chatgpt-subscription).
|
|
12
12
|
|
|
13
13
|
## Compare
|
|
14
14
|
|
|
@@ -157,6 +157,6 @@ When to pick: self-host requirement, BYOK metering for end-users, or unified bil
|
|
|
157
157
|
icon={<VercelIcon width={20} height={20} />}
|
|
158
158
|
title="AI SDK runtime"
|
|
159
159
|
description="The runtime that ferries gateway responses to the chat UI."
|
|
160
|
-
href="/docs/runtimes/ai-sdk/
|
|
160
|
+
href="/docs/runtimes/ai-sdk/v7"
|
|
161
161
|
/>
|
|
162
162
|
</Cards>
|
|
@@ -124,6 +124,6 @@ If nothing appears, check the request in your network tab. The host should be `o
|
|
|
124
124
|
icon={<VercelIcon width={20} height={20} />}
|
|
125
125
|
title="AI SDK runtime"
|
|
126
126
|
description="The most common pairing: AI SDK route handler proxied through Helicone."
|
|
127
|
-
href="/docs/runtimes/ai-sdk/
|
|
127
|
+
href="/docs/runtimes/ai-sdk/v7"
|
|
128
128
|
/>
|
|
129
129
|
</Cards>
|
|
@@ -156,6 +156,6 @@ If nothing appears, check the server logs for OTel errors and confirm `LANGFUSE_
|
|
|
156
156
|
icon={<VercelIcon width={20} height={20} />}
|
|
157
157
|
title="AI SDK runtime"
|
|
158
158
|
description="The runtime that emits the telemetry Langfuse consumes."
|
|
159
|
-
href="/docs/runtimes/ai-sdk/
|
|
159
|
+
href="/docs/runtimes/ai-sdk/v7"
|
|
160
160
|
/>
|
|
161
161
|
</Cards>
|
|
@@ -146,6 +146,6 @@ Send a message. The trace should appear in your LangSmith project within seconds
|
|
|
146
146
|
icon={<VercelIcon width={20} height={20} />}
|
|
147
147
|
title="AI SDK runtime"
|
|
148
148
|
description="The runtime that ferries traces from the route to the chat UI."
|
|
149
|
-
href="/docs/runtimes/ai-sdk/
|
|
149
|
+
href="/docs/runtimes/ai-sdk/v7"
|
|
150
150
|
/>
|
|
151
151
|
</Cards>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Migration Guides
|
|
3
|
+
description: Upgrade assistant-ui versions and migrate deprecated APIs and integrations.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use these guides when upgrading assistant-ui or moving from APIs that have been deprecated or replaced.
|
|
7
|
+
|
|
8
|
+
## Version upgrades
|
|
9
|
+
|
|
10
|
+
<Cards>
|
|
11
|
+
<Card title="Migration to v0.14" href="/docs/migrations/v0-14">
|
|
12
|
+
Replace APIs removed after v0.11 and v0.12, and migrate primitive
|
|
13
|
+
`components` props to children render functions.
|
|
14
|
+
</Card>
|
|
15
|
+
<Card title="Migration to v0.12" href="/docs/migrations/v0-12">
|
|
16
|
+
Move from individual context hooks to the unified state API.
|
|
17
|
+
</Card>
|
|
18
|
+
<Card title="Migration to v0.11" href="/docs/migrations/v0-11">
|
|
19
|
+
Update code affected by the `ContentPart` to `MessagePart` rename.
|
|
20
|
+
</Card>
|
|
21
|
+
</Cards>
|
|
22
|
+
|
|
23
|
+
## APIs and integrations
|
|
24
|
+
|
|
25
|
+
<Cards>
|
|
26
|
+
<Card title="Migrating Tools to Toolkits" href="/docs/migrations/toolkit-tools">
|
|
27
|
+
Move legacy tool and tool UI registrations to the toolkit API.
|
|
28
|
+
</Card>
|
|
29
|
+
<Card
|
|
30
|
+
title="Migrating to react-langgraph v0.7"
|
|
31
|
+
href="/docs/migrations/react-langgraph-v0-7"
|
|
32
|
+
>
|
|
33
|
+
Upgrade to the simplified LangGraph integration API.
|
|
34
|
+
</Card>
|
|
35
|
+
<Card
|
|
36
|
+
title="Using old React versions"
|
|
37
|
+
href="/docs/migrations/react-compatibility"
|
|
38
|
+
>
|
|
39
|
+
Review compatibility notes for React 18 and React 19.
|
|
40
|
+
</Card>
|
|
41
|
+
</Cards>
|
|
42
|
+
|
|
43
|
+
## Stability
|
|
44
|
+
|
|
45
|
+
<Cards>
|
|
46
|
+
<Card title="Deprecation Policy" href="/docs/migrations/deprecation-policy">
|
|
47
|
+
Review stability guarantees and deprecation timelines for assistant-ui
|
|
48
|
+
features.
|
|
49
|
+
</Card>
|
|
50
|
+
</Cards>
|
|
@@ -32,7 +32,7 @@ const WeatherTool = makeAssistantTool({
|
|
|
32
32
|
});
|
|
33
33
|
|
|
34
34
|
export function App() {
|
|
35
|
-
const runtime = useChatRuntime(
|
|
35
|
+
const runtime = useChatRuntime();
|
|
36
36
|
|
|
37
37
|
return (
|
|
38
38
|
<AssistantRuntimeProvider runtime={runtime}>
|
|
@@ -80,7 +80,7 @@ import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
|
|
|
80
80
|
import toolkit from "./toolkit";
|
|
81
81
|
|
|
82
82
|
export function App() {
|
|
83
|
-
const runtime = useChatRuntime(
|
|
83
|
+
const runtime = useChatRuntime();
|
|
84
84
|
const aui = useAui({
|
|
85
85
|
tools: Tools({ toolkit }),
|
|
86
86
|
});
|
|
@@ -93,6 +93,8 @@ export function App() {
|
|
|
93
93
|
}
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
+
`useChatRuntime()` targets `/api/chat` by default. To point at a different endpoint or customize requests, see [Custom transport](/docs/runtimes/ai-sdk/v7#custom-transport).
|
|
97
|
+
|
|
96
98
|
## Mechanical Steps
|
|
97
99
|
|
|
98
100
|
1. Create a `Toolkit` object.
|
|
@@ -5,6 +5,8 @@ platforms: ["react"]
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
import { ChainOfThoughtPrimitiveSample } from "@/components/docs/samples/chain-of-thought-primitive";
|
|
8
|
+
import { ChainOfThoughtPrimitiveSample as ChainOfThoughtPrimitiveSampleRadix } from "@/components/docs/samples/chain-of-thought-primitive.radix";
|
|
9
|
+
import { Flavored } from "@/components/docs/contexts/flavor.server";
|
|
8
10
|
import {
|
|
9
11
|
ChainOfThoughtPrimitive as ChainOfThoughtPrimitiveDocs,
|
|
10
12
|
MessagePrimitive as MessagePrimitiveDocs,
|
|
@@ -18,7 +20,10 @@ For new grouped reasoning/tool-call UI, use `MessagePrimitive.GroupedParts`. `Ch
|
|
|
18
20
|
|
|
19
21
|
<Tabs items={["Preview", "Code"]}>
|
|
20
22
|
<Tab>
|
|
21
|
-
<
|
|
23
|
+
<Flavored
|
|
24
|
+
base={<ChainOfThoughtPrimitiveSample />}
|
|
25
|
+
radix={<ChainOfThoughtPrimitiveSampleRadix />}
|
|
26
|
+
/>
|
|
22
27
|
</Tab>
|
|
23
28
|
<Tab>
|
|
24
29
|
```tsx
|
|
@@ -165,6 +165,22 @@ Form container for message composition. Renders a `<form>` element unless `asChi
|
|
|
165
165
|
</ComposerPrimitive.Root>
|
|
166
166
|
```
|
|
167
167
|
|
|
168
|
+
#### Compact Mode
|
|
169
|
+
|
|
170
|
+
Pass `compact` to opt into compact detection. While the input holds at most a single line of text and the composer has no attachments, quote, queued messages, or active dictation, the root renders a `data-compact` attribute. The prop only exposes this attribute for styling — it does not change the layout by itself. Target it with CSS to collapse the composer into a single row:
|
|
171
|
+
|
|
172
|
+
```tsx
|
|
173
|
+
<ComposerPrimitive.Root
|
|
174
|
+
compact
|
|
175
|
+
className="group/composer flex flex-col data-[compact]:flex-row data-[compact]:items-center"
|
|
176
|
+
>
|
|
177
|
+
<ComposerPrimitive.Input placeholder="Ask anything..." />
|
|
178
|
+
<ComposerPrimitive.Send>Send</ComposerPrimitive.Send>
|
|
179
|
+
</ComposerPrimitive.Root>
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Once the text wraps onto a second line, the composer expands and stays expanded until the input is cleared, so the layout doesn't oscillate at the wrap boundary.
|
|
183
|
+
|
|
168
184
|
### Input
|
|
169
185
|
|
|
170
186
|
Text input with keyboard shortcuts. Renders a `<textarea>` element unless `asChild` is set.
|
|
@@ -63,6 +63,31 @@ The toolbar only appears when the selection is entirely within a single message.
|
|
|
63
63
|
|
|
64
64
|
`Root` returns `null` when there is no valid selection (collapsed selection, empty text, or no single-message match).
|
|
65
65
|
|
|
66
|
+
### Quote Regions
|
|
67
|
+
|
|
68
|
+
By default, any selected text inside a message can be quoted. For rich messages with tool cards, attachments, or custom controls, add `data-aui-quote-selectable` to the element that contains the message text. Once a message has a quote-selectable region, selections must stay inside the same marked region for the toolbar to appear.
|
|
69
|
+
|
|
70
|
+
```tsx
|
|
71
|
+
<MessagePrimitive.Root>
|
|
72
|
+
<div data-aui-quote-selectable="">
|
|
73
|
+
<MessagePrimitive.Parts />
|
|
74
|
+
</div>
|
|
75
|
+
<ToolCard />
|
|
76
|
+
</MessagePrimitive.Root>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Set `data-aui-quote-selectable="false"` to exclude an element instead: on the message root it disables quoting for the entire message, and inside a quotable region it carves that subtree out. The nearest marker wins, and any value other than `"false"` (including empty) marks a quotable region.
|
|
80
|
+
|
|
81
|
+
Apps know the message role at render time, so a role gate is a conditional attribute:
|
|
82
|
+
|
|
83
|
+
```tsx
|
|
84
|
+
const UserMessage = () => (
|
|
85
|
+
<MessagePrimitive.Root data-aui-quote-selectable="false">
|
|
86
|
+
<MessagePrimitive.Parts />
|
|
87
|
+
</MessagePrimitive.Root>
|
|
88
|
+
);
|
|
89
|
+
```
|
|
90
|
+
|
|
66
91
|
### Quote Action
|
|
67
92
|
|
|
68
93
|
The `Quote` button does two things on click:
|
|
@@ -362,6 +362,29 @@ Renders message content parts using render-prop functions instead of the compone
|
|
|
362
362
|
| `renderFile` | `(props: { part, index }) => ReactElement` | Renderer for file parts |
|
|
363
363
|
| `renderData` | `(props: { part, index }) => ReactElement` | Fallback renderer for data parts not handled by registered data UIs |
|
|
364
364
|
|
|
365
|
+
#### Rendering Markdown
|
|
366
|
+
|
|
367
|
+
`MessagePrimitive.Content` renders text parts with React Native's `<Text>` by default, so markdown syntax is displayed as plain text. To render markdown, install a React Native markdown renderer and pass it through `renderText`:
|
|
368
|
+
|
|
369
|
+
<InstallCommand npm={["react-native-markdown-display"]} />
|
|
370
|
+
|
|
371
|
+
```tsx
|
|
372
|
+
import Markdown from "react-native-markdown-display";
|
|
373
|
+
import { MessagePrimitive } from "@assistant-ui/react-native";
|
|
374
|
+
|
|
375
|
+
const AssistantMessage = () => {
|
|
376
|
+
return (
|
|
377
|
+
<MessagePrimitive.Root>
|
|
378
|
+
<MessagePrimitive.Content
|
|
379
|
+
renderText={({ part }) => (
|
|
380
|
+
<Markdown>{part.text}</Markdown>
|
|
381
|
+
)}
|
|
382
|
+
/>
|
|
383
|
+
</MessagePrimitive.Root>
|
|
384
|
+
);
|
|
385
|
+
};
|
|
386
|
+
```
|
|
387
|
+
|
|
365
388
|
### MessagePrimitive.Parts
|
|
366
389
|
|
|
367
390
|
Renders message content parts via a `components` prop. Tool call and data parts automatically render registered toolkit renderers and data UIs (via `useAssistantDataUI`), falling back to components provided here. A default `Text` component using React Native's `<Text>` is provided out of the box.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Agent state
|
|
3
|
+
description: Read and optimistically update agent-owned state with useAgUiState and useAgUiSetState over AG-UI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
`useAgUiState` mirrors the state your AG-UI agent owns. It updates live while the agent runs. `useAgUiSetState` lets you apply optimistic local updates that are sent with the next run.
|
|
7
|
+
|
|
8
|
+
## Basic usage
|
|
9
|
+
|
|
10
|
+
```tsx
|
|
11
|
+
import { useAgUiState, useAgUiSetState } from "@assistant-ui/react-ag-ui";
|
|
12
|
+
import { useAuiState } from "@assistant-ui/react";
|
|
13
|
+
|
|
14
|
+
type ResearchState = {
|
|
15
|
+
topic: string;
|
|
16
|
+
sources: string[];
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const state = useAgUiState<ResearchState>();
|
|
20
|
+
// state: ResearchState | undefined (latest agent state; updates live while the agent runs)
|
|
21
|
+
|
|
22
|
+
const setState = useAgUiSetState<ResearchState>();
|
|
23
|
+
// setState(next | (prev) => next) (optimistic local update; sent with the NEXT run)
|
|
24
|
+
|
|
25
|
+
const isRunning = useAuiState((s) => s.thread.isRunning);
|
|
26
|
+
// isRunning: boolean (whether the thread is currently running)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Example
|
|
30
|
+
|
|
31
|
+
Render agent state beside the chat and push an optimistic update from a control in your UI:
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
"use client";
|
|
35
|
+
|
|
36
|
+
import { useAgUiState, useAgUiSetState } from "@assistant-ui/react-ag-ui";
|
|
37
|
+
import { useAuiState } from "@assistant-ui/react";
|
|
38
|
+
import { Thread } from "@/components/assistant-ui/thread";
|
|
39
|
+
|
|
40
|
+
type ResearchState = {
|
|
41
|
+
topic: string;
|
|
42
|
+
sources: string[];
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export function ResearchAssistant() {
|
|
46
|
+
const state = useAgUiState<ResearchState>();
|
|
47
|
+
const setState = useAgUiSetState<ResearchState>();
|
|
48
|
+
const isRunning = useAuiState((s) => s.thread.isRunning);
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<div className="flex h-full">
|
|
52
|
+
<aside className="w-72 border-r p-4">
|
|
53
|
+
<h2>Research state</h2>
|
|
54
|
+
{state ? (
|
|
55
|
+
<ul>
|
|
56
|
+
<li>Topic: {state.topic}</li>
|
|
57
|
+
<li>Sources: {state.sources.join(", ") || "none"}</li>
|
|
58
|
+
</ul>
|
|
59
|
+
) : (
|
|
60
|
+
<p>No agent state yet.</p>
|
|
61
|
+
)}
|
|
62
|
+
<button
|
|
63
|
+
type="button"
|
|
64
|
+
disabled={isRunning}
|
|
65
|
+
onClick={() =>
|
|
66
|
+
setState((prev) => ({
|
|
67
|
+
topic: prev?.topic ?? "market analysis",
|
|
68
|
+
sources: [...(prev?.sources ?? []), "sec-filings"],
|
|
69
|
+
}))
|
|
70
|
+
}
|
|
71
|
+
>
|
|
72
|
+
Prefer SEC filings
|
|
73
|
+
</button>
|
|
74
|
+
{isRunning && <p>Agent is running…</p>}
|
|
75
|
+
</aside>
|
|
76
|
+
<main className="flex-1">
|
|
77
|
+
<Thread />
|
|
78
|
+
</main>
|
|
79
|
+
</div>
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The panel re-renders as `STATE_SNAPSHOT` and `STATE_DELTA` events arrive. The button updates the local snapshot immediately; that value is included as the `state` field of the next run input.
|
|
85
|
+
|
|
86
|
+
## How state is synced
|
|
87
|
+
|
|
88
|
+
The AG-UI protocol delivers agent state on the wire:
|
|
89
|
+
|
|
90
|
+
- `STATE_SNAPSHOT` replaces the full client-side snapshot.
|
|
91
|
+
- `STATE_DELTA` applies a JSON Patch to the current snapshot.
|
|
92
|
+
|
|
93
|
+
The runtime applies both client-side, so `useAgUiState` always reflects the latest merged snapshot. Calling the setter from `useAgUiSetState` updates that same local snapshot. On the next run, the runtime automatically includes it as the `state` field of the run input.
|
|
94
|
+
|
|
95
|
+
This works with any AG-UI agent (Mastra, Pydantic AI, CrewAI, LangGraph via AG-UI adapters, and other AG-UI-compliant servers).
|
|
96
|
+
|
|
97
|
+
## Write-back timing
|
|
98
|
+
|
|
99
|
+
`useAgUiSetState` is optimistic and local first. The value reaches the agent only when the next run starts. It is not a live channel into a run that is already in progress. Use it to stage preferences, filters, or other agent-owned fields that the next turn should see.
|
|
100
|
+
|
|
101
|
+
## Relationship to other state
|
|
102
|
+
|
|
103
|
+
Keep the three state layers distinct:
|
|
104
|
+
|
|
105
|
+
- **Your app state** stays yours (React state, URL, a store). assistant-ui does not own it.
|
|
106
|
+
- **`useAuiState`** reads assistant-ui's client state (messages, composer, thread status).
|
|
107
|
+
- **`useAgUiState` / `useAgUiSetState`** mirror state the **agent** owns, synced over the AG-UI wire via snapshots and deltas.
|
|
108
|
+
|
|
109
|
+
Use `useAgUiState` and `useAgUiSetState` for fields your agent maintains as shared state on the protocol. Use `useAuiState` for UI that depends on the chat thread itself. Use your own state for everything else.
|
|
110
|
+
|
|
111
|
+
## Next
|
|
112
|
+
|
|
113
|
+
<Cards>
|
|
114
|
+
<Card
|
|
115
|
+
title="Runtime options"
|
|
116
|
+
description="useAgUiRuntime options, adapters, supported events."
|
|
117
|
+
href="/docs/runtimes/ag-ui/runtime-options"
|
|
118
|
+
/>
|
|
119
|
+
<Card
|
|
120
|
+
title="Quickstart"
|
|
121
|
+
description="Minimal HttpAgent + useAgUiRuntime setup."
|
|
122
|
+
href="/docs/runtimes/ag-ui/quickstart"
|
|
123
|
+
/>
|
|
124
|
+
</Cards>
|
|
@@ -14,6 +14,7 @@ Reference for the runtime's API surface. Start with [quickstart](/docs/runtimes/
|
|
|
14
14
|
| `agent` | `HttpAgent` | An AG-UI client agent (from `@ag-ui/client`). Required. |
|
|
15
15
|
| `logger` | `Partial<Logger>` | Optional logger overrides. The runtime logs event-parser warnings and run lifecycle events. |
|
|
16
16
|
| `showThinking` | `boolean` | Whether to render `THINKING_*` and `REASONING_*` events as visible reasoning. Defaults to `true`. |
|
|
17
|
+
| `autoCancelPendingToolCalls` | `boolean` | Cancel unresolved client-side tool calls automatically when the user sends, edits, or reloads a message. Defaults to `true`. See [below](#auto-cancelling-pending-tool-calls). |
|
|
17
18
|
| `onError` | `(e: Error) => void` | Error callback fired on `RUN_ERROR` events and protocol errors. |
|
|
18
19
|
| `onCancel` | `() => void` | Cancellation callback fired when the user cancels a run. |
|
|
19
20
|
| `adapters` | `UseAgUiRuntimeAdapters` | Standard adapter slots (see below). |
|
|
@@ -137,7 +138,9 @@ await runtime.unstable_submitInterruptResponses(
|
|
|
137
138
|
|
|
138
139
|
### Steering away from an interrupt
|
|
139
140
|
|
|
140
|
-
When the user ignores the interrupt UI and just sends a new message, use the `useAgUiSteerAway` hook. Every open interrupt defaults to `status: "cancelled"`, the new message is appended, and the run resumes with `resume: ResumeEntry[]` on the wire.
|
|
141
|
+
When the user ignores the interrupt UI and just sends a new message, use the `useAgUiSteerAway` hook. Every open interrupt defaults to `status: "cancelled"`, the new message is appended, and the run resumes with `resume: ResumeEntry[]` on the wire.
|
|
142
|
+
|
|
143
|
+
The same hook also steers away from pending client-side tool calls. When the head assistant message is in `requires-action` with `reason: "tool-calls"` (frontend tools awaiting a result) and the user sends a new message, every unresolved tool call is cancelled with an error result, the message is completed, and a single fresh run starts with those cancellations in its history. Passing `responses` in this case throws, since responses only address interrupts. With nothing pending, `steerAway` behaves like a normal append.
|
|
141
144
|
|
|
142
145
|
```tsx
|
|
143
146
|
const steerAway = useAgUiSteerAway();
|
|
@@ -154,6 +157,12 @@ await steerAway("continue without the file", [
|
|
|
154
157
|
]);
|
|
155
158
|
```
|
|
156
159
|
|
|
160
|
+
### Auto-cancelling pending tool calls
|
|
161
|
+
|
|
162
|
+
By default the runtime does the tool-call half of this automatically: when client-side tool calls are still unresolved and the user sends a new message, edits an earlier one, or reloads, every unresolved tool call receives the same cancellation error result, the assistant message is completed, and the run proceeds with those cancellations in its history. Set `autoCancelPendingToolCalls: false` to opt out, in which case pending tool calls stay unresolved on a plain send and [steering away](#steering-away-from-an-interrupt) remains the explicit way to cancel them.
|
|
163
|
+
|
|
164
|
+
Pending interrupts are never auto-cancelled: sending while an interrupt is open still throws, and the interrupt must be answered with `useAgUiSubmitInterruptResponses` or discarded with `useAgUiSteerAway`.
|
|
165
|
+
|
|
157
166
|
## Supported events
|
|
158
167
|
|
|
159
168
|
The runtime parses the AG-UI event stream and maps each event type to assistant-ui state.
|
|
@@ -11,16 +11,19 @@ import { VercelIcon } from "@/components/icons/vercel";
|
|
|
11
11
|
|
|
12
12
|
| AI SDK | Runtime package | Docs |
|
|
13
13
|
| --- | --- | --- |
|
|
14
|
-
| `ai@^
|
|
14
|
+
| `ai@^7` + `@ai-sdk/react@^4` | `@assistant-ui/react-ai-sdk` (latest) | [v7 (current)](/docs/runtimes/ai-sdk/v7) |
|
|
15
|
+
| `ai@^6` + `@ai-sdk/react@^3` | `@assistant-ui/react-ai-sdk@1.x` | [v6 (legacy)](/docs/runtimes/ai-sdk/v6-legacy) |
|
|
15
16
|
| `ai@^5` + `@ai-sdk/react@^2` | `@assistant-ui/react-ai-sdk@0.x` | [v5 (legacy)](/docs/runtimes/ai-sdk/v5-legacy) |
|
|
16
17
|
| `ai@^4` | `@assistant-ui/react-data-stream` | [v4 (legacy)](/docs/runtimes/ai-sdk/v4-legacy) |
|
|
17
18
|
|
|
18
|
-
New projects should target
|
|
19
|
+
New projects should target v7. v6, v5, and v4 are documented for projects that have not migrated yet; all have known compatibility gaps and receive no new features.
|
|
19
20
|
|
|
20
21
|
## Architecture
|
|
21
22
|
|
|
22
23
|
`@assistant-ui/react-ai-sdk` is layered on `ExternalStoreRuntime` (see [architecture](/docs/runtimes/concepts/architecture)). Features that ship as runtime adapters work the same way they do everywhere else; see [adapters](/docs/runtimes/concepts/adapters).
|
|
23
24
|
|
|
25
|
+
For reload-safe streaming (persist an in-flight response so the client can reconnect), see [Resumable Streams](/docs/guides/resumable-streams).
|
|
26
|
+
|
|
24
27
|
## Choosing useChatRuntime vs useAISDKRuntime
|
|
25
28
|
|
|
26
29
|
Both ship in the same package.
|
|
@@ -33,9 +36,15 @@ Both ship in the same package.
|
|
|
33
36
|
<Cards>
|
|
34
37
|
<Card
|
|
35
38
|
icon={<VercelIcon width={20} height={20} />}
|
|
36
|
-
title="
|
|
39
|
+
title="v7 (current)"
|
|
37
40
|
description="Quickstart, frontend tools, attachments, quotes, history, multi-step, useAISDKRuntime."
|
|
38
|
-
href="/docs/runtimes/ai-sdk/
|
|
41
|
+
href="/docs/runtimes/ai-sdk/v7"
|
|
42
|
+
/>
|
|
43
|
+
<Card
|
|
44
|
+
icon={<VercelIcon width={20} height={20} />}
|
|
45
|
+
title="v6 (legacy)"
|
|
46
|
+
description="Reference for projects still on AI SDK v6."
|
|
47
|
+
href="/docs/runtimes/ai-sdk/v6-legacy"
|
|
39
48
|
/>
|
|
40
49
|
<Card
|
|
41
50
|
icon={<VercelIcon width={20} height={20} />}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: AI SDK v4 (legacy)
|
|
3
|
-
description: Reference for projects still on AI SDK v4. New projects should use
|
|
3
|
+
description: Reference for projects still on AI SDK v4. New projects should use v7.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
import { VercelIcon } from "@/components/icons/vercel";
|
|
7
7
|
|
|
8
8
|
<Callout type="warn">
|
|
9
|
-
AI SDK v4 is a legacy version. New projects should use [AI SDK
|
|
9
|
+
AI SDK v4 is a legacy version. New projects should use [AI SDK v7](/docs/runtimes/ai-sdk/v7). v4 integrations use the older `@assistant-ui/react-data-stream` package, not `@assistant-ui/react-ai-sdk`.
|
|
10
10
|
</Callout>
|
|
11
11
|
|
|
12
12
|
## Why legacy
|
|
@@ -53,10 +53,7 @@ import { useDataStreamRuntime } from "@assistant-ui/react-data-stream";
|
|
|
53
53
|
import { Thread } from "@/components/assistant-ui/thread";
|
|
54
54
|
|
|
55
55
|
export default function Home() {
|
|
56
|
-
const runtime = useDataStreamRuntime({
|
|
57
|
-
api: "/api/chat",
|
|
58
|
-
protocol: "data-stream",
|
|
59
|
-
});
|
|
56
|
+
const runtime = useDataStreamRuntime({ api: "/api/chat" });
|
|
60
57
|
return (
|
|
61
58
|
<AssistantRuntimeProvider runtime={runtime}>
|
|
62
59
|
<div className="h-full">
|
|
@@ -67,7 +64,10 @@ export default function Home() {
|
|
|
67
64
|
}
|
|
68
65
|
```
|
|
69
66
|
|
|
70
|
-
AI SDK v4's `toDataStreamResponse()` emits the data stream wire format
|
|
67
|
+
AI SDK v4's `toDataStreamResponse()` emits the data stream wire format with the
|
|
68
|
+
`x-vercel-ai-data-stream: v1` response header, so `useDataStreamRuntime`
|
|
69
|
+
detects it automatically. If a custom proxy strips or hides that header, pass
|
|
70
|
+
`protocol: "data-stream"` explicitly.
|
|
71
71
|
|
|
72
72
|
</Step>
|
|
73
73
|
</Steps>
|
|
@@ -85,12 +85,12 @@ AI SDK v4's `toDataStreamResponse()` emits the data stream wire format, so `prot
|
|
|
85
85
|
| Tool schema | `parameters: z.object({...})` | `inputSchema: zodSchema(z.object({...}))` |
|
|
86
86
|
| Message type | (untyped) | `UIMessage` |
|
|
87
87
|
|
|
88
|
-
## Migration to
|
|
88
|
+
## Migration to v7
|
|
89
89
|
|
|
90
90
|
When you are ready to upgrade:
|
|
91
91
|
|
|
92
92
|
1. Swap `@assistant-ui/react-data-stream` for `@assistant-ui/react-ai-sdk`.
|
|
93
|
-
2. Update your backend to AI SDK
|
|
93
|
+
2. Update your backend to the current AI SDK's `streamText` (see [v7 docs](/docs/runtimes/ai-sdk/v7)).
|
|
94
94
|
3. Switch the runtime hook from `useDataStreamRuntime` to `useChatRuntime`.
|
|
95
95
|
|
|
96
96
|
AI SDK provides codemods at [ai-sdk.dev/docs/migration-guides](https://ai-sdk.dev/docs/migration-guides) that handle the package-side rewrites.
|
|
@@ -104,9 +104,9 @@ An older release line of `@assistant-ui/react-ai-sdk` (0.1.10) supported AI SDK
|
|
|
104
104
|
<Cards>
|
|
105
105
|
<Card
|
|
106
106
|
icon={<VercelIcon width={20} height={20} />}
|
|
107
|
-
title="AI SDK
|
|
107
|
+
title="AI SDK v7"
|
|
108
108
|
description="Current integration; what new projects should target."
|
|
109
|
-
href="/docs/runtimes/ai-sdk/
|
|
109
|
+
href="/docs/runtimes/ai-sdk/v7"
|
|
110
110
|
/>
|
|
111
111
|
<Card
|
|
112
112
|
title="Data Stream Protocol"
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: AI SDK v5 (legacy)
|
|
3
|
-
description: Reference for projects still on AI SDK v5. New projects should use
|
|
3
|
+
description: Reference for projects still on AI SDK v5. New projects should use v7.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
import { VercelIcon } from "@/components/icons/vercel";
|
|
7
7
|
|
|
8
8
|
<Callout type="warn">
|
|
9
|
-
AI SDK v5 is a legacy version. New projects should use [AI SDK
|
|
9
|
+
AI SDK v5 is a legacy version. New projects should use [AI SDK v7](/docs/runtimes/ai-sdk/v7). v5 users stay on `@assistant-ui/react-ai-sdk@0.x`; the latest line targets v7+.
|
|
10
10
|
</Callout>
|
|
11
11
|
|
|
12
12
|
## Why legacy
|
|
13
13
|
|
|
14
14
|
AI SDK v6 introduced major API changes: async `convertToModelMessages`, a new tool schema, and `toUIMessageStreamResponse()`. v5 still works but no longer receives new features in `@assistant-ui/react-ai-sdk`. Pinning to `@0.x` keeps you on the v5-compatible surface.
|
|
15
15
|
|
|
16
|
-
This page is reference for existing v5 projects. Plan to migrate to
|
|
16
|
+
This page is reference for existing v5 projects. Plan to migrate to v7 when feasible.
|
|
17
17
|
|
|
18
18
|
## Setup
|
|
19
19
|
|
|
@@ -122,9 +122,9 @@ AI SDK provides codemods at [ai-sdk.dev/docs/migration-guides/migration-guide-6-
|
|
|
122
122
|
<Cards>
|
|
123
123
|
<Card
|
|
124
124
|
icon={<VercelIcon width={20} height={20} />}
|
|
125
|
-
title="AI SDK
|
|
125
|
+
title="AI SDK v7"
|
|
126
126
|
description="Current integration; what new projects should target."
|
|
127
|
-
href="/docs/runtimes/ai-sdk/
|
|
127
|
+
href="/docs/runtimes/ai-sdk/v7"
|
|
128
128
|
/>
|
|
129
129
|
<Card
|
|
130
130
|
icon={<VercelIcon width={20} height={20} />}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: AI SDK v6
|
|
3
|
-
description:
|
|
2
|
+
title: AI SDK v6 (legacy)
|
|
3
|
+
description: Reference for projects still on AI SDK v6. New projects should use v7.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
<Callout type="warn">
|
|
7
|
+
AI SDK v6 is a legacy version. New projects should use [AI SDK v7](/docs/runtimes/ai-sdk/v7). v6 users stay on `@assistant-ui/react-ai-sdk@1.x`; the latest line targets v7+.
|
|
8
|
+
</Callout>
|
|
9
|
+
|
|
10
|
+
Requires `ai@^6` and `@ai-sdk/react@^3`. For other versions see the [overview](/docs/runtimes/ai-sdk/overview).
|
|
7
11
|
|
|
8
12
|
## Quickstart
|
|
9
13
|
|
|
@@ -332,7 +336,6 @@ import { Thread } from "@/components/assistant-ui/thread";
|
|
|
332
336
|
|
|
333
337
|
export default function Page() {
|
|
334
338
|
const chat = useChat({
|
|
335
|
-
api: "/api/chat",
|
|
336
339
|
sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithApprovalResponses,
|
|
337
340
|
});
|
|
338
341
|
const runtime = useAISDKRuntime(chat);
|
|
@@ -391,7 +394,6 @@ const toolkit = defineToolkit({
|
|
|
391
394
|
|
|
392
395
|
export default function Page() {
|
|
393
396
|
const chat = useChat({
|
|
394
|
-
api: "/api/chat",
|
|
395
397
|
sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithApprovalResponses,
|
|
396
398
|
});
|
|
397
399
|
const runtime = useAISDKRuntime(chat);
|
|
@@ -610,7 +612,7 @@ const runtime = useAISDKRuntime(chat);
|
|
|
610
612
|
|
|
611
613
|
## Example
|
|
612
614
|
|
|
613
|
-
[`examples/with-ai-sdk-
|
|
615
|
+
The maintained example targets v7: [`examples/with-ai-sdk-v7`](https://github.com/assistant-ui/assistant-ui/tree/main/examples/with-ai-sdk-v7). The last v6 revision of that example lives in the repository history alongside the `@assistant-ui/react-ai-sdk` 1.x releases.
|
|
614
616
|
|
|
615
617
|
For responses that should survive a page reload mid-stream, see [Resumable streams](/docs/guides/resumable-streams), which wraps the same v6 byte stream in `assistant-stream/resumable`.
|
|
616
618
|
|