UNPKG

@assistant-ui/react

Version:

Typescript/React library for AI Chat

124 lines 3.8 kB
// src/runtimes/edge/converters/fromLanguageModelMessages.ts var fromLanguageModelMessages = (lm, { mergeSteps } = {}) => { const messages = []; for (const lmMessage of lm) { const role = lmMessage.role; switch (role) { case "system": { messages.push({ role: "system", content: [ { type: "text", text: lmMessage.content } ] }); break; } case "user": { messages.push({ role: "user", content: lmMessage.content.map((part) => { const type = part.type; switch (type) { case "text": { return { type: "text", text: part.text }; } case "image": { if (part.image instanceof URL) { return { type: "image", image: part.image.href }; } throw new Error("Only images with URL data are supported"); } case "file": { if (part.data instanceof URL) { return { type: "file", data: part.data.href, mimeType: part.mimeType }; } throw new Error("Only files with URL data are supported"); } default: { const unhandledType = type; throw new Error(`Unknown content part type: ${unhandledType}`); } } }) }); break; } case "assistant": { const newContent = lmMessage.content.map((part) => { if (part.type === "tool-call") { return { type: "tool-call", toolCallId: part.toolCallId, toolName: part.toolName, argsText: JSON.stringify(part.args), args: part.args }; } if (part.type === "redacted-reasoning" || part.type === "file" || part.type === "reasoning") { return null; } return part; }).filter((p) => !!p); if (mergeSteps) { const previousMessage = messages[messages.length - 1]; if (previousMessage?.role === "assistant") { previousMessage.content = [ ...previousMessage.content, ...newContent ]; break; } } messages.push({ role: "assistant", content: newContent }); break; } case "tool": { const previousMessage = messages[messages.length - 1]; if (previousMessage?.role !== "assistant") throw new Error( "A tool message must be preceded by an assistant message." ); for (const tool of lmMessage.content) { const toolCall = previousMessage.content.find( (c) => c.type === "tool-call" && c.toolCallId === tool.toolCallId ); if (!toolCall) throw new Error("Received tool result for an unknown tool call."); if (toolCall.toolName !== tool.toolName) throw new Error("Tool call name mismatch."); const writable = toolCall; writable.result = tool.result; if (tool.isError) { writable.isError = true; } } break; } default: { const unhandledRole = role; throw new Error(`Unknown message role: ${unhandledRole}`); } } } return messages; }; export { fromLanguageModelMessages }; //# sourceMappingURL=fromLanguageModelMessages.mjs.map