UNPKG

@tanstack/ai

Version:

Core TanStack AI library - Open source AI SDK

145 lines (144 loc) 4.13 kB
function updateTextPart(messages, messageId, content) { return messages.map((msg) => { if (msg.id !== messageId) { return msg; } const parts = [...msg.parts]; const lastPart = parts.length > 0 ? parts[parts.length - 1] : null; if (lastPart && lastPart.type === "text") { parts[parts.length - 1] = { type: "text", content }; } else { parts.push({ type: "text", content }); } return { ...msg, parts }; }); } function updateToolCallPart(messages, messageId, toolCall) { return messages.map((msg) => { if (msg.id !== messageId) { return msg; } const parts = [...msg.parts]; const existing = parts.find( (p) => p.type === "tool-call" && p.id === toolCall.id ); const toolCallPart = { type: "tool-call", id: toolCall.id, name: toolCall.name, arguments: toolCall.arguments, state: toolCall.state, // Carry forward approval and output from the existing part ...existing?.approval && { approval: { ...existing.approval } }, ...existing?.output !== void 0 && { output: existing.output } }; if (existing) { parts[parts.indexOf(existing)] = toolCallPart; } else { parts.push(toolCallPart); } return { ...msg, parts }; }); } function updateToolResultPart(messages, messageId, toolCallId, content, state, error) { return messages.map((msg) => { if (msg.id !== messageId) { return msg; } const parts = [...msg.parts]; const resultPartIndex = parts.findIndex( (p) => p.type === "tool-result" && p.toolCallId === toolCallId ); const toolResultPart = { type: "tool-result", toolCallId, content, state, ...error && { error } }; if (resultPartIndex >= 0) { parts[resultPartIndex] = toolResultPart; } else { parts.push(toolResultPart); } return { ...msg, parts }; }); } function updateToolCallApproval(messages, messageId, toolCallId, approvalId) { return messages.map((msg) => { if (msg.id !== messageId) { return msg; } const parts = [...msg.parts]; const toolCallPart = parts.find( (p) => p.type === "tool-call" && p.id === toolCallId ); if (toolCallPart) { toolCallPart.state = "approval-requested"; toolCallPart.approval = { id: approvalId, needsApproval: true }; } return { ...msg, parts }; }); } function updateToolCallWithOutput(messages, toolCallId, output, state, errorText) { return messages.map((msg) => { const parts = [...msg.parts]; const toolCallPart = parts.find( (p) => p.type === "tool-call" && p.id === toolCallId ); if (toolCallPart) { toolCallPart.output = errorText ? { error: errorText } : output; if (state) { toolCallPart.state = state; } else { toolCallPart.state = "input-complete"; } } return { ...msg, parts }; }); } function updateToolCallApprovalResponse(messages, approvalId, approved) { return messages.map((msg) => { const parts = [...msg.parts]; const toolCallPart = parts.find( (p) => p.type === "tool-call" && p.approval?.id === approvalId ); if (toolCallPart && toolCallPart.approval) { toolCallPart.approval.approved = approved; toolCallPart.state = "approval-responded"; } return { ...msg, parts }; }); } function updateThinkingPart(messages, messageId, content) { return messages.map((msg) => { if (msg.id !== messageId) { return msg; } const parts = [...msg.parts]; const thinkingPartIndex = parts.findIndex((p) => p.type === "thinking"); const thinkingPart = { type: "thinking", content }; if (thinkingPartIndex >= 0) { parts[thinkingPartIndex] = thinkingPart; } else { parts.push(thinkingPart); } return { ...msg, parts }; }); } export { updateTextPart, updateThinkingPart, updateToolCallApproval, updateToolCallApprovalResponse, updateToolCallPart, updateToolCallWithOutput, updateToolResultPart }; //# sourceMappingURL=message-updaters.js.map