streamUI

AI SDK RSC is currently experimental. We recommend using AI SDK UI for production. For guidance on migrating from RSC to UI, see our migration guide.

A helper function to create a streamable UI from LLM providers. This function is similar to AI SDK Core APIs and supports the same model interfaces.

To see streamUI in action, check out these examples.

Import

import { streamUI } from "@ai-sdk/rsc"

Parameters

model:

LanguageModel

initial?:

ReactNode

instructions:

Instructions

prompt:

string

messages:

Array<SystemModelMessage | UserModelMessage | AssistantModelMessage | ToolModelMessage> | Array<UIMessage>
SystemModelMessage

role:

'system'

content:

string
UserModelMessage

role:

'user'

content:

string | Array<TextPart | ImagePart | FilePart>
TextPart

type:

'text'

text:

string
ImagePart

type:

'image'

image:

string | Uint8Array | Buffer | ArrayBuffer | URL

mediaType?:

string
FilePart

type:

'file'

data:

string | Uint8Array | Buffer | ArrayBuffer | URL

mediaType:

string
AssistantModelMessage

role:

'assistant'

content:

string | Array<TextPart | ToolCallPart>
TextPart

type:

'text'

text:

string
ToolCallPart

type:

'tool-call'

toolCallId:

string

toolName:

string

args:

object based on zod schema
ToolModelMessage

role:

'tool'

content:

Array<ToolResultPart>
ToolResultPart

type:

'tool-result'

toolCallId:

string

toolName:

string

result:

unknown

isError?:

boolean

allowSystemInMessages?:

boolean

maxOutputTokens?:

number

temperature?:

number

topP?:

number

topK?:

number

presencePenalty?:

number

frequencyPenalty?:

number

stopSequences?:

string[]

seed?:

number

maxRetries?:

number

abortSignal?:

AbortSignal

headers?:

Record<string, string>

tools:

ToolSet
Tool

description?:

string

inputSchema:

zod schema

generate?:

(async (parameters) => ReactNode) | AsyncGenerator<ReactNode, ReactNode, void>

toolChoice?:

"auto" | "none" | "required" | { "type": "tool", "toolName": string }

text?:

(Text) => ReactNode
Text

content:

string

delta:

string

done:

boolean

providerOptions?:

Record<string,JSONObject> | undefined

onFinish?:

(result: OnFinishResult) => void
OnFinishResult

usage:

LanguageModelUsage
LanguageModelUsage

inputTokens:

number | undefined

inputTokenDetails:

LanguageModelInputTokenDetails
LanguageModelInputTokenDetails

noCacheTokens:

number | undefined

cacheReadTokens:

number | undefined

cacheWriteTokens:

number | undefined

outputTokens:

number | undefined

outputTokenDetails:

LanguageModelOutputTokenDetails
LanguageModelOutputTokenDetails

textTokens:

number | undefined

reasoningTokens:

number | undefined

totalTokens:

number | undefined

raw?:

object | undefined

value:

ReactNode

warnings:

Warning[] | undefined

response:

Response
Response

headers?:

Record<string, string>

Returns

value:

ReactNode

response?:

Response
Response

headers?:

Record<string, string>

warnings:

Warning[] | undefined

stream:

AsyncIterable<StreamPart> & ReadableStream<StreamPart>
StreamPart

type:

'text-delta'

textDelta:

string
StreamPart

type:

'tool-call'

toolCallId:

string

toolName:

string

args:

object based on zod schema
StreamPart

type:

'error'

error:

Error
StreamPart

type:

'finish'

finishReason:

'stop' | 'length' | 'content-filter' | 'tool-calls' | 'error' | 'other'

usage:

LanguageModelUsage
LanguageModelUsage

inputTokens:

number | undefined

inputTokenDetails:

LanguageModelInputTokenDetails
LanguageModelInputTokenDetails

noCacheTokens:

number | undefined

cacheReadTokens:

number | undefined

cacheWriteTokens:

number | undefined

outputTokens:

number | undefined

outputTokenDetails:

LanguageModelOutputTokenDetails
LanguageModelOutputTokenDetails

textTokens:

number | undefined

reasoningTokens:

number | undefined

totalTokens:

number | undefined

raw?:

object | undefined

Examples

Learn to render a React component as a function call using a language model in Next.js
Learn to persist and restore states UI/AI states in Next.js
Learn to route React components using a language model in Next.js
Learn to stream component updates to the client in Next.js