branch:
utils.ts
813 bytesRaw
import type { UIMessage } from "ai";
import { isToolUIPart } from "ai";
/**
* Clean up incomplete tool calls from messages before sending to API
* Prevents API errors from interrupted or failed tool executions
*/
export function cleanupMessages(messages: UIMessage[]): UIMessage[] {
return messages.filter((message) => {
if (!message.parts) return true;
// Filter out messages with incomplete tool calls
const hasIncompleteToolCall = message.parts.some((part) => {
if (!isToolUIPart(part)) return false;
// Remove tool calls that are still streaming or awaiting input without results
return (
part.state === "input-streaming" ||
(part.state === "input-available" && !part.output && !part.errorText)
);
});
return !hasIncompleteToolCall;
});
}