UNPKG

@assistant-ui/react

Version:

TypeScript/React library for AI Chat

85 lines 3.07 kB
import { fromThreadMessageLike } from "../runtime-cores/external-store/ThreadMessageLike.js"; import { isJSONValue } from "../../utils/json/is-json.js"; export const auiV0Encode = (message) => { // TODO attachments are currently intentionally ignored // info: ID and createdAt are ignored (we use the server value instead) return { role: message.role, content: message.content.map((part) => { const type = part.type; switch (type) { case "text": { return { type: "text", text: part.text, }; } case "reasoning": { return { type: "reasoning", text: part.text, }; } case "source": { return { type: "source", sourceType: part.sourceType, id: part.id, url: part.url, ...(part.title ? { title: part.title } : undefined), }; } case "tool-call": { if (!isJSONValue(part.result)) { console.warn(`tool-call result is not JSON! ${JSON.stringify(part)}`); } return { type: "tool-call", toolCallId: part.toolCallId, toolName: part.toolName, ...(JSON.stringify(part.args) === part.argsText ? { args: part.args, } : { argsText: part.argsText }), ...(part.result ? { result: part.result } : {}), ...(part.isError ? { isError: true } : {}), }; } default: { const unhandledType = type; throw new Error(`Message part type not supported by aui/v0: ${unhandledType}`); } } }), metadata: message.metadata, ...(message.status ? { status: message.status?.type === "running" ? { type: "incomplete", reason: "cancelled", } : message.status, } : undefined), }; }; export const auiV0Decode = (cloudMessage) => { const payload = cloudMessage.content; const message = fromThreadMessageLike({ id: cloudMessage.id, createdAt: cloudMessage.created_at, ...payload, }, cloudMessage.id, { type: "complete", reason: "unknown", }); return { parentId: cloudMessage.parent_id, message, }; }; //# sourceMappingURL=auiV0.js.map