diff --git a/packages/ai/src/protocols/utils/tool-stream.ts b/packages/ai/src/protocols/utils/tool-stream.ts index 2640077411c..7f15395693d 100644 --- a/packages/ai/src/protocols/utils/tool-stream.ts +++ b/packages/ai/src/protocols/utils/tool-stream.ts @@ -60,14 +60,21 @@ const inputStart = (tool: PendingTool) => providerMetadata: tool.providerMetadata, }) -const inputDelta = (tool: PendingTool, text: string) => - LLMEvent.toolInputDelta({ - id: tool.id, - name: tool.name, - namespace: tool.namespace, - text, - input: Option.getOrElse(parsePartialInput(tool.input), () => ({})), - }) +const inputDelta = (tool: PendingTool, text: string): LLMEvent => { + const raw = tool.input + let parsed: unknown + return { + ...LLMEvent.toolInputDelta({ + id: tool.id, + name: tool.name, + namespace: tool.namespace, + text, + }), + get input() { + return (parsed ??= Option.getOrElse(parsePartialInput(raw), () => ({}))) + }, + } +} const toolCall = (route: string, tool: PendingTool, inputOverride?: string) => { const raw = inputOverride ?? tool.input