Scoped Providers

Lower-level assistant-ui providers for custom renderers, scoped message parts, attachments, and advanced composition.

API Reference

ChainOfThoughtByIndicesProvider

ChainOfThoughtByIndicesProvider props
startIndexnumber

endIndexnumber

ComposerAttachmentByIndexProvider

ComposerAttachmentByIndexProvider props
indexnumber

MessageAttachmentByIndexProvider

MessageAttachmentByIndexProvider props
indexnumber

MessageByIndexProvider

MessageByIndexProvider props
indexnumber

MessageProvider

MessageProvider props
messageThreadMessage

ThreadMessage
status?ThreadAssistantMessage["status"]

ThreadMessage["status"]
type"running"

metadataThreadMessage["metadata"]

ThreadMessage["metadata"]
unstable_state?ReadonlyJSONValueunstable

unstable_annotations?readonly ReadonlyJSONValue[]unstable

unstable_data?readonly ReadonlyJSONValue[]unstable

steps?readonly ThreadStep[]

submittedFeedback?ThreadMessage["metadata"]["submittedFeedback"]

ThreadMessage["metadata"]["submittedFeedback"]
type"positive" | "negative"

timing?MessageTiming

MessageTiming
streamStartTimenumber

firstTokenTime?number

totalStreamTime?number

tokenCount?number

tokensPerSecond?number

totalChunksnumber

toolCallCountnumber

isOptimistic?boolean

Marks a client-side optimistic placeholder. Such messages are evicted once off the head branch and are never persisted.

customRecord<string, unknown>

attachments?ThreadUserMessage["attachments"]

idstring

createdAtDate

role"system"

contentreadonly [TextMessagePart]

indexnumber

isLast?boolean

branchNumber?number

branchCount?number

PartByIndexProvider

PartByIndexProvider props
indexnumber

ReadonlyThreadProvider

ReadonlyThreadProvider props
messagesreadonly ThreadMessage[]

RuntimeAdapterProvider

RuntimeAdapterProvider props
adaptersRuntimeAdapters

RuntimeAdapters
modelContext?ModelContextProvider | undefined

RuntimeAdapters["modelContext"]
getModelContext() => ModelContext

subscribe?(callback: () => void) => Unsubscribe

history?ThreadHistoryAdapter | undefined

RuntimeAdapters["history"]
load() => Promise<ExportedMessageRepository & { state?: ReadonlyJSONValue; unstable_resume?: boolean; }>

resume?(options: ChatModelRunOptions) => AsyncGenerator<ChatModelRunResult, void, unknown>

append(item: ExportedMessageRepositoryItem) => Promise<void>

update?(item: ExportedMessageRepositoryItem) => Promise<void>

Rewrites a previously appended message in place, keyed by its message id. Adapters that implement this let a runtime persist a run paused for tool approval and finalize the same message once the run resumes. An update may arrive for an id whose earlier write failed; treat it as an upsert keyed on the message id rather than assuming the entry exists.

delete?(items: ExportedMessageRepositoryItem[]) => Promise<void>

withFormat?<TMessage, TStorageFormat extends Record<string, unknown>>(formatAdapter: MessageFormatAdapter<TMessage, TStorageFormat>) => GenericThreadHistoryAdapter<TMessage>

Required when used with `useAISDKRuntime` / `useChatRuntime`.

attachments?AttachmentAdapter | undefined

RuntimeAdapters["attachments"]
acceptstring

add(state: { file: File; }) => Promise<PendingAttachment> | AsyncGenerator<PendingAttachment, void>

remove(attachment: Attachment) => Promise<void>

send(attachment: PendingAttachment) => Promise<CompleteAttachment>

feedback?FeedbackAdapter | undefined

RuntimeAdapters["feedback"]
submit(feedback: FeedbackAdapterFeedback) => void

children?ReactNode

SuggestionByIndexProvider

SuggestionByIndexProvider props
indexnumber

TextMessagePartProvider

TextMessagePartProvider props
textstring

isRunning?boolean

ThreadListItemByIndexProvider

ThreadListItemByIndexProvider props
indexnumber

archivedboolean

ThreadListItemRuntimeProvider

ThreadListItemRuntimeProvider props
runtimeThreadListItemRuntime

ThreadListItemRuntime
pathThreadListItemRuntimePath

ThreadListItemRuntimePath
refstring

threadSelectorThreadListItemRuntimePath["threadSelector"]

ThreadListItemRuntimePath["threadSelector"]
type"main"

getState() => ThreadListItemState

initialize() => Promise<{ remoteId: string; externalId: string | undefined; }>

generateTitle(options?: ThreadListItemGenerateTitleOptions) => Promise<void>

switchTo(options?: { unarchive?: boolean; }) => Promise<void>

rename(newTitle: string) => Promise<void>

updateCustom(custom: Record<string, unknown> | undefined) => Promise<void>

archive() => Promise<void>

unarchive() => Promise<void>

delete() => Promise<void>

detach() => void

subscribe(callback: () => void) => Unsubscribe

unstable_on<E extends ThreadListItemEventType>(event: E, callback: ThreadListItemEventCallback<E>) => Unsubscribeunstable