Fix: Corrects handling of empty function call args #175
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.
This attempts to address the bug found in this trac ticket: https://core.trac.wordpress.org/ticket/64483
Basically, when models send a function call they provide the arguments for the function every time, even when there are no arguments (e.g.
get_current_time()). It's passed as an empty JSON object:args: {}. This is converted into an array, because empty lists and associative arrays can't be differentiated in PHP. As a result, an empty array is passed as the arguments of a newFunctionCall. This is wrong. An empty JSON object means "there are no arguments" which, in PHP, would benull.This attempts to correct this in two places:
FunctionCalltonull. This is because this is likely a common scenario Providers will run into, and passing an empty array is otherwise not meaningful.FunctionCallas part of a message history, it handles convertingnullinto an empty object correctly, as the model would expect.