From 69ba898a7b2567f7a1ff01e440fd0d4f611e29e2 Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Sun, 4 Oct 2026 20:41:46 -0500 Subject: [PATCH] perf(ai): lazily parse partial JSON on tool-input-delta (#53255) --- .../ai/src/protocols/utils/tool-stream.ts | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) 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