# @assistant-ui/react-ai-sdk URL: /docs/api-reference/integrations/vercel-ai-sdk Vercel AI SDK v5 integration with chat runtime hooks and transport utilities. Vercel AI SDK integration for assistant-ui. This package provides integration with AI SDK v5. For AI SDK v4, see the [AI SDK v4 (Legacy)](/docs/runtimes/ai-sdk/v4-legacy) documentation. API Reference \[#api-reference] useChatRuntime \[#usechatruntime] Creates a runtime directly with AI SDK v5's `useChat` hook integration. This is the recommended approach for most use cases. ```tsx import { useChatRuntime, AssistantChatTransport } from "@assistant-ui/react-ai-sdk"; import { AssistantRuntimeProvider } from "@assistant-ui/react"; const MyRuntimeProvider = ({ children }: { children: React.ReactNode }) => { const runtime = useChatRuntime({ transport: new AssistantChatTransport({ api: "/api/chat", }), }); return ( {children} ); }; ``` To customize the API endpoint, simply change the `api` parameter: ```tsx const runtime = useChatRuntime({ transport: new AssistantChatTransport({ api: "/my-custom-api/chat", }), }); ``` void", description: "Callback when a message completes streaming.", }, { name: "onError", type: "(error: Error) => void", description: "Callback for handling errors.", }, ], }, ], }, ]} /> By default, `useChatRuntime` uses `AssistantChatTransport` which automatically forwards system messages and frontend tools to your backend API. This enables your backend to receive the full context from the assistant-ui. useAISDKRuntime \[#useaisdkruntime] For advanced use cases where you need direct access to the `useChat` hook from AI SDK. ```tsx import { useChat } from "@ai-sdk/react"; import { useAISDKRuntime } from "@assistant-ui/react-ai-sdk"; import { AssistantRuntimeProvider } from "@assistant-ui/react"; const MyRuntimeProvider = ({ children }: { children: React.ReactNode }) => { const chat = useChat({ api: "/api/chat", }); const runtime = useAISDKRuntime(chat); return ( {children} ); }; ``` ", description: "The chat helpers from @ai-sdk/react's useChat hook.", }, { name: "options", type: "AISDKRuntimeOptions", description: "Optional configuration options.", children: [ { type: "AISDKRuntimeOptions", parameters: [ { name: "cloud", type: "AssistantCloud", description: "Optional AssistantCloud instance for chat persistence.", }, { name: "adapters", type: "RuntimeAdapters", description: "Optional runtime adapters for attachments, feedback, speech, etc.", }, ], }, ], }, ]} /> AssistantChatTransport \[#assistantchattransport] A transport that extends the default AI SDK transport to automatically forward system messages and frontend tools to your backend. ```tsx import { AssistantChatTransport } from "@assistant-ui/react-ai-sdk"; import { useChatRuntime } from "@assistant-ui/react-ai-sdk"; const runtime = useChatRuntime({ transport: new AssistantChatTransport({ api: "/my-custom-api/chat", }), }); ``` | Headers", description: "Optional headers to include in requests.", }, { name: "credentials", type: "RequestCredentials", description: "Optional credentials mode for fetch requests.", }, ], }, ], }, ]} /> frontendTools \[#frontendtools] Helper function to convert frontend tool definitions to AI SDK format for use in your backend. ```tsx import { frontendTools } from "@assistant-ui/react-ai-sdk"; import { streamText, convertToModelMessages } from "ai"; import { openai } from "@ai-sdk/openai"; export async function POST(req: Request) { const { messages, system, tools } = await req.json(); const result = streamText({ model: openai("gpt-4o"), system, messages: convertToModelMessages(messages), tools: { // Wrap frontend tools with the helper ...frontendTools(tools), // Your backend tools myBackendTool: tool({ // ... }), }, }); return result.toUIMessageStreamResponse(); } ``` ", description: "Frontend tools object forwarded from AssistantChatTransport.", }, ]} /> The `frontendTools` helper converts frontend tool definitions to the AI SDK format and ensures they are properly handled by the streaming response.