From 473e292462ceb11112fc05d1f347c16c1a6eed53 Mon Sep 17 00:00:00 2001 From: Martin <1224973+mavaa@users.noreply.github.com> Date: Mon, 23 Feb 2026 15:05:14 +0100 Subject: [PATCH] fix tool calls with empty streamed arguments --- providers/openai/language_model.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/providers/openai/language_model.go b/providers/openai/language_model.go index 9df357ac8..593dd56ee 100644 --- a/providers/openai/language_model.go +++ b/providers/openai/language_model.go @@ -514,6 +514,26 @@ func (o languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S } } + for idx, tc := range toolCalls { + if tc.hasFinished { + continue + } + if tc.arguments == "" { + tc.arguments = "{}" + toolCalls[idx] = tc + } + if xjson.IsValid(tc.arguments) { + if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeToolInputEnd, ID: tc.id}) { + return + } + if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeToolCall, ID: tc.id, ToolCallName: tc.name, ToolCallInput: tc.arguments}) { + return + } + tc.hasFinished = true + toolCalls[idx] = tc + } + } + if len(acc.Choices) > 0 { choice := acc.Choices[0] providerMetadata = o.streamProviderMetadataFunc(choice, providerMetadata)