UNPKG

@assistant-ui/react

Version:

TypeScript/React library for AI Chat

153 lines (137 loc) 3.9 kB
import type { CompleteAttachment } from "./AttachmentTypes"; import type { ReadonlyJSONValue } from "assistant-stream/utils"; import type { TextMessagePart, ReasoningMessagePart, SourceMessagePart, ImageMessagePart, FileMessagePart, Unstable_AudioMessagePart, ToolCallMessagePart, ThreadUserMessagePart, ThreadAssistantMessagePart, } from "./MessagePartTypes"; // Re-export message part types for convenience export type { TextMessagePart, ReasoningMessagePart, SourceMessagePart, ImageMessagePart, FileMessagePart, Unstable_AudioMessagePart, ToolCallMessagePart, ThreadUserMessagePart, ThreadAssistantMessagePart, }; // Alias for the role of a thread message export type MessageRole = ThreadMessage["role"]; type MessageCommonProps = { readonly id: string; readonly createdAt: Date; }; export type ThreadStep = { readonly messageId?: string; readonly usage?: | { readonly promptTokens: number; readonly completionTokens: number; } | undefined; }; export type MessagePartStatus = | { readonly type: "running"; } | { readonly type: "complete"; } | { readonly type: "incomplete"; readonly reason: | "cancelled" | "length" | "content-filter" | "other" | "error"; readonly error?: unknown; }; export type ToolCallMessagePartStatus = | { readonly type: "requires-action"; readonly reason: "interrupt"; } | MessagePartStatus; export type MessageStatus = | { readonly type: "running"; } | { readonly type: "requires-action"; readonly reason: "tool-calls" | "interrupt"; } | { readonly type: "complete"; readonly reason: "stop" | "unknown"; } | { readonly type: "incomplete"; readonly reason: | "cancelled" | "tool-calls" | "length" | "content-filter" | "other" | "error"; readonly error?: ReadonlyJSONValue; }; export type ThreadSystemMessage = MessageCommonProps & { readonly role: "system"; readonly content: readonly [TextMessagePart]; readonly metadata: { readonly custom: Record<string, unknown>; }; }; export type ThreadUserMessage = MessageCommonProps & { readonly role: "user"; readonly content: readonly ThreadUserMessagePart[]; readonly attachments: readonly CompleteAttachment[]; readonly metadata: { readonly custom: Record<string, unknown>; }; }; export type ThreadAssistantMessage = MessageCommonProps & { readonly role: "assistant"; readonly content: readonly ThreadAssistantMessagePart[]; readonly status: MessageStatus; readonly metadata: { readonly unstable_state: ReadonlyJSONValue; readonly unstable_annotations: readonly ReadonlyJSONValue[]; readonly unstable_data: readonly ReadonlyJSONValue[]; readonly steps: readonly ThreadStep[]; readonly custom: Record<string, unknown>; }; }; export type RunConfig = { // TODO allow user customization via global type overrides readonly custom?: Record<string, unknown>; }; export type AppendMessage = Omit<ThreadMessage, "id"> & { parentId: string | null; /** The ID of the message that was edited or undefined. */ sourceId: string | null; runConfig: RunConfig | undefined; startRun?: boolean | undefined; }; type BaseThreadMessage = { readonly status?: ThreadAssistantMessage["status"]; readonly metadata: { readonly unstable_state?: ReadonlyJSONValue; readonly unstable_annotations?: readonly ReadonlyJSONValue[]; readonly unstable_data?: readonly ReadonlyJSONValue[]; readonly steps?: readonly ThreadStep[]; readonly custom: Record<string, unknown>; }; readonly attachments?: ThreadUserMessage["attachments"]; }; export type ThreadMessage = BaseThreadMessage & (ThreadSystemMessage | ThreadUserMessage | ThreadAssistantMessage);