@@ -325,6 +325,7 @@ func (o *openaiClient) stream(ctx context.Context, messages []message.Message, t
325 currentContent := ""
325 currentContent := ""
326 toolCalls := make([]message.ToolCall, 0)
326 toolCalls := make([]message.ToolCall, 0)
327 msgToolCalls := make(map[int64]openai.ChatCompletionMessageToolCall)
327 msgToolCalls := make(map[int64]openai.ChatCompletionMessageToolCall)
328+ toolMap := make(map[string]openai.ChatCompletionMessageToolCall)
328 for openaiStream.Next() {
329 for openaiStream.Next() {
329 chunk := openaiStream.Current()
330 chunk := openaiStream.Current()
330 // Kujtim: this is an issue with openrouter qwen, its sending -1 for the tool index
331 // Kujtim: this is an issue with openrouter qwen, its sending -1 for the tool index
@@ -332,7 +333,7 @@ func (o *openaiClient) stream(ctx context.Context, messages []message.Message, t
332 chunk.Choices[0].Delta.ToolCalls[0].Index = 0
333 chunk.Choices[0].Delta.ToolCalls[0].Index = 0
334 acc.AddChunk(chunk)
335 acc.AddChunk(chunk)
335− for _, choice := range chunk.Choices {
336+ for i, choice := range chunk.Choices {
336 reasoning, ok := choice.Delta.JSON.ExtraFields["reasoning"]
337 reasoning, ok := choice.Delta.JSON.ExtraFields["reasoning"]
337 if ok && reasoning.Raw() != "" {
338 if ok && reasoning.Raw() != "" {
338 reasoningStr := ""
339 reasoningStr := ""
@@ -361,6 +362,7 @@ func (o *openaiClient) stream(ctx context.Context, messages []message.Message, t
361 if tool.ID == toolCall.ID {
362 if tool.ID == toolCall.ID {
362 existingToolCall.Function.Arguments += toolCall.Function.Arguments
363 existingToolCall.Function.Arguments += toolCall.Function.Arguments
363 msgToolCalls[toolCall.Index] = existingToolCall
364 msgToolCalls[toolCall.Index] = existingToolCall
365+ toolMap[existingToolCall.ID] = existingToolCall
364 found = true
366 found = true
@@ -370,6 +372,7 @@ func (o *openaiClient) stream(ctx context.Context, messages []message.Message, t
371 existingToolCall.Function.Arguments += toolCall.Function.Arguments
373 existingToolCall.Function.Arguments += toolCall.Function.Arguments
372 msgToolCalls[toolCall.Index] = existingToolCall
374 msgToolCalls[toolCall.Index] = existingToolCall
375+ toolMap[existingToolCall.ID] = existingToolCall
375 newToolCall = true
378 newToolCall = true
@@ -394,7 +397,14 @@ func (o *openaiClient) stream(ctx context.Context, messages []message.Message, t
394 Arguments: toolCall.Function.Arguments,
397 Arguments: toolCall.Function.Arguments,
400+ toolMap[toolCall.ID] = msgToolCalls[toolCall.Index]
403+ toolCalls := []openai.ChatCompletionMessageToolCall{}
404+ for _, tc := range toolMap {
405+ toolCalls = append(toolCalls, tc)
407+ acc.Choices[i].Message.ToolCalls = toolCalls