Model Adapters

Adapter interfaces for connecting chat models, streaming responses, and model execution to assistant-ui runtimes.

API Reference

ChatModelAdapter

ChatModelAdapter
run(options: ChatModelRunOptions) => Promise<ChatModelRunResult> | AsyncGenerator<ChatModelRunResult, void>

ChatModelRunOptions

ChatModelRunOptions
messagesreadonly ThreadMessage[]

runConfigRunConfig

RunConfig
custom?Record<string, unknown>

abortSignalAbortSignal

AbortSignal
abortedboolean

onabort((this:AbortSignal,ev:Event)=>any)|null

reasonany

throwIfAborted() => void

addEventListener{ <K>(type: K, listener: (this: AbortSignal, ev: AbortSignalEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; }

removeEventListener{ <K>(type: K, listener: (this: AbortSignal, ev: AbortSignalEventMap[K]) => any, options?: boolean | EventListenerOptions): void; (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; }

dispatchEvent(event: Event) => boolean

The **`dispatchEvent()`** method of the EventTarget sends an Event to the object, (synchronously) invoking the affected event listeners in the appropriate order. The normal event processing rules (including the capturing and optional bubbling phase) also apply to events dispatched manually with dispatchEvent(). MDN Reference

contextModelContext

ModelContext
priority?number | undefined

system?string | undefined

tools?Record<string, Tool<any, any>> | undefined

callSettings?LanguageModelV1CallSettings | undefined

ModelContext["callSettings"]
maxTokens?number

temperature?number

topP?number

presencePenalty?number

frequencyPenalty?number

seed?number

headers?Record<string, string | undefined>

config?LanguageModelConfig | undefined

ModelContext["config"]
apiKey?string

baseUrl?string

modelName?string

reasoningEffort?string

unstable_composerMetadata?Record<string, unknown> | undefinedunstable

Persisted message metadata pulled at send time and merged into the outgoing user message's `metadata.custom` (not forwarded to the model directly). Ignored by the transport, which only reads system/tools/callSettings/config.

unstable_assistantMessageId?string | undefinedunstable

unstable_threadId?string | undefinedunstable

unstable_parentId?string | null | undefinedunstable

unstable_getMessage() => ThreadMessageunstable

ChatModelRunResult

ChatModelRunResult
content?readonly ThreadAssistantMessagePart[] | undefined

status?MessageStatus | undefined

metadata?ChatModelRunResult["metadata"]

ChatModelRunResult["metadata"]
unstable_state?ReadonlyJSONValueunstable

unstable_annotations?readonly ReadonlyJSONValue[] | undefinedunstable

unstable_data?readonly ReadonlyJSONValue[] | undefinedunstable

steps?readonly ThreadStep[] | undefined

timing?MessageTiming | undefined

ChatModelRunResult["metadata"]["timing"]
streamStartTimenumber

firstTokenTime?number

totalStreamTime?number

tokenCount?number

tokensPerSecond?number

totalChunksnumber

toolCallCountnumber

custom?Record<string, unknown> | undefined

ChatModelRunUpdate

ChatModelRunUpdate
contentreadonly ThreadAssistantMessagePart[]

metadata?Record<string, unknown>

CreateResumeRunConfig

CreateResumeRunConfig
parentIdstring | null

sourceId?string | null | undefined

runConfig?RunConfig | undefined

CreateResumeRunConfig["runConfig"]
custom?Record<string, unknown>

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

CreateStartRunConfig

CreateStartRunConfig
parentIdstring | null

sourceId?string | null | undefined

runConfig?RunConfig | undefined

CreateStartRunConfig["runConfig"]
custom?Record<string, unknown>

LanguageModelConfig

LanguageModelConfig
apiKey?string

baseUrl?string

modelName?string

reasoningEffort?string