Fix BetaMessageAccumulator crash on empty string tool input #295
+34
−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.
Problem
BetaMessageAccumulatorthrowsAnthropicInvalidDataExceptionwhen streaming tool calls where the tool has no required parameters (empty input{}).Reproduction: https://github.com/zklapow/cuddly-tribble
Request
Tool schema with no required parameters:
{ "model": "claude-haiku-4-5-20251001", "tools": [{ "input_schema": { "type": "object", "properties": {}, "required": [] }, "name": "getCurrentTime", "description": "Returns the current time. This tool takes NO arguments." }] }Streaming Response
The API returns:
Note that:
content_block_startalready contains"input":{}(complete)content_block_deltasends"partial_json":""(empty string)The accumulator stores
""and thenJSON_MAPPER.readValue("")fails withMismatchedInputException.Fix
This PR adds a check to default empty accumulated JSON strings to
"{}"before parsing.Note: I am not sure this is a great fix, its kind of a workaround to remap the content in this way. Is this the expected output from this API? Should the partial JSON delta just get skipped in this case somehow?
Test
Added
accumulateToolUseContentBlockWithEmptyInputDeltatest case.