Fix index field not populated in streaming mode with n>1 and tool calls #15962
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Title
Fix index field not populated in streaming mode with n>1 and tool calls
Relevant issues
Fixes #8977
Fixes LIT-1340
Pre-Submission checklist
Please complete all items before asking a LiteLLM maintainer to review your PR
tests/litellm/directory, Adding at least 1 test is a hard requirement - see detailsmake test-unitType
🐛 Bug Fix
Changes
Problem
When using OpenAI's streaming mode with
n>1and tool calls, theindexfield in choice objects was not being populated correctly. LiteLLM always returnedindex=0for all choices, while OpenAI correctly returns different indices (0, 1, 2, etc.) to distinguish between the different completions requested via thenparameter.Root Cause
The issue was in the
is_chunk_non_empty()method instreaming_handler.py. When processing tool call chunks:completion_obj["content"]is empty (since tool calls don't have text content)model_response.choices[0].delta.tool_callsis_chunk_non_empty()to returnFalse, skipping the code path that properly processes and preserves the index from the original OpenAI chunkindex=0was always usedSolution
Extended the
is_chunk_non_empty()method to check fortool_callsandfunction_callin the delta object: