Convert external message formats into assistant-ui's message and thread state for the external store runtime.
API Reference
getExternalStoreMessages
const getExternalStoreMessages: <T>(input: { messages: readonly ThreadMessage[]; } | ThreadMessage | ThreadMessage["content"][number]) => T[];unstable_convertExternalMessages
const unstable_convertExternalMessages: <T extends WeakKey>(messages: T[], callback: useExternalMessageConverter.Callback<T>, isRunning: boolean, metadata: useExternalMessageConverter.Metadata, cache?: ExternalMessageConversionCache) => ThreadMessage[];unstable_createExternalMessageConversionCache
Creates a cache for plain external message conversion. Pass the same cache on every call for one message list, and a source message that has not changed since the previous call converts to the same ThreadMessage object.
Entries are keyed by source message identity and rebuilt whenever callback or metadata is a different object than on the previous call, so keep both referentially stable.
const unstable_createExternalMessageConversionCache: () => ExternalMessageConversionCache;unstable_createMessageConverter
const unstable_createMessageConverter: <T extends object>(callback: useExternalMessageConverter.Callback<T>) => { useThreadMessages: ({ messages, isRunning, joinStrategy, metadata, }: { messages: T[]; isRunning: boolean; joinStrategy?: JoinStrategy | undefined; metadata?: useExternalMessageConverter.Metadata; }) => ThreadMessage[]; toThreadMessages: (messages: T[], isRunning?: boolean, metadata?: useExternalMessageConverter.Metadata) => ThreadMessage[]; toOriginalMessages: (input: ThreadRuntimeState | ThreadMessage | ThreadMessage["content"][number]) => unknown[]; toOriginalMessage: (input: ThreadRuntimeState | ThreadMessage | ThreadMessage["content"][number]) => {}; useOriginalMessage: () => {}; useOriginalMessages: () => unknown[]; };useExternalMessageConverter
- options{ callback: useExternalMessageConverter.Callback<T>; messages: T[]; isRunning: boolean; joinStrategy?: JoinStrategy | undefined; metadata?: useExternalMessageConverter.Metadata | undefined; }
- { callback: useExternalMessageConverter.Callback<T>; messages: T[]; isRunning: boolean; joinStrategy?: JoinStrategy | undefined; metadata?: useExternalMessageConverter.Metadata | undefined; }
- callbackuseExternalMessageConverter.Callback<T>
- messagesT[]
- isRunningboolean
- joinStrategy?JoinStrategy | undefined
- metadata?useExternalMessageConverter.Metadata | undefined
- { callback: useExternalMessageConverter.Callback<T>; messages: T[]; isRunning: boolean; joinStrategy?: JoinStrategy | undefined; metadata?: useExternalMessageConverter.Metadata | undefined; }["metadata"]
- toolStatuses?Record<string, ToolExecutionStatus>
- error?ReadonlyJSONValue
- cancelledMessageIds?ReadonlySet<string>
- ReadonlySet
- forEach(callbackfn: (value: string, value2: string, set: ReadonlySet<string>) => void, thisArg?: any) => void
- has(value: string) => boolean
- sizenumber
- entries() => SetIterator<[string, string]>
- keys() => SetIterator<string>
- values() => SetIterator<string>
- messageTiming?Record<string, MessageTiming>
bindExternalStoreMessage
Tip
Experimental. This API is experimental and may change without notice.
Attach the original external store message(s) to a ThreadMessage or message part.
This is a no-op if the target already has a bound message.
Use getExternalStoreMessages to retrieve the bound messages later.
const bindExternalStoreMessage: <T>(target: object, message: T | T[]) => void;