[Bugfix] Fix DeepSeekV31ToolParser to correctly parse multiple tools in non-streaming output #25405
+55
−1
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.
…ming output
Purpose
Problem
In non-streaming output mode,
DeepSeekV31ToolParser
fails to correctly parse multiple tool calls.For example, given the input:
<|tool▁call▁begin|>get_current_time<|tool▁sep|>{}<|tool▁call▁end|>
<|tool▁call▁begin|>big_number_add<|tool▁sep|>{"a": 923, "b": 24922}<|tool▁call▁end|>
The parser incorrectly extracts:
This merges two separate tool calls into one, breaking downstream processing.
Solution
<|tool▁call▁begin|> ... <|tool▁call▁end|>
block independently.function_name
andfunction_arguments
, even when multiple tools appear consecutively.Result
Now, the same input correctly parses into:
Test Plan
I have added test cases in
test_deepseekv31_tool_parser.py
specifically covering the issue described above.The tests verify that multiple tool calls in non-streaming output are parsed correctly,
ensuring each tool's function name and arguments are extracted independently.
Test Result
Essential Elements of an Effective PR Description Checklist
supported_models.md
andexamples
for a new model.