From 3b9a13b5d9cc4683586b3639b4a0b89ffdab5c10 Mon Sep 17 00:00:00 2001 From: Bryan Frimin Date: Fri, 13 Mar 2026 18:26:38 +0100 Subject: [PATCH] Only advance streamed tool-call index for tool-use blocks Incrementing toolIndex on every ContentBlockStop caused it to drift when non-tool blocks (e.g. text) preceded tool-use blocks, making Bedrock tool calls disappear from the accumulated response. Track whether the current content block is a tool-use block and only bump the index when a tool-use block ends. Signed-off-by: Bryan Frimin --- pkg/llm/bedrock/provider.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkg/llm/bedrock/provider.go b/pkg/llm/bedrock/provider.go index a2554067c..0ae9aee18 100644 --- a/pkg/llm/bedrock/provider.go +++ b/pkg/llm/bedrock/provider.go @@ -347,6 +347,7 @@ type bedrockStream struct { current llm.ChatCompletionStreamEvent err error toolIndex int + inToolUse bool } func newBedrockStream(eventStream *bedrockruntime.ConverseStreamEventStream) *bedrockStream { @@ -387,6 +388,7 @@ func (s *bedrockStream) mapEvent(event types.ConverseStreamOutput) (llm.ChatComp switch e := event.(type) { case *types.ConverseStreamOutputMemberContentBlockStart: if start, ok := e.Value.Start.(*types.ContentBlockStartMemberToolUse); ok { + s.inToolUse = true return llm.ChatCompletionStreamEvent{ Delta: llm.MessageDelta{ ToolCalls: []llm.ToolCallDelta{{ @@ -397,6 +399,7 @@ func (s *bedrockStream) mapEvent(event types.ConverseStreamOutput) (llm.ChatComp }, }, true } + s.inToolUse = false return llm.ChatCompletionStreamEvent{}, false case *types.ConverseStreamOutputMemberContentBlockDelta: @@ -418,7 +421,10 @@ func (s *bedrockStream) mapEvent(event types.ConverseStreamOutput) (llm.ChatComp return llm.ChatCompletionStreamEvent{}, false case *types.ConverseStreamOutputMemberContentBlockStop: - s.toolIndex++ + if s.inToolUse { + s.toolIndex++ + s.inToolUse = false + } return llm.ChatCompletionStreamEvent{}, false case *types.ConverseStreamOutputMemberMessageStop: