Skip to content
Changelog

Claude tool calls with no arguments now replay on other models

September 8, 20261 min read

When Claude called a zero-argument tool like get_status, Agno's Anthropic adapter treated the empty input as nothing and left function.arguments out of the stored call. Replaying that history through an OpenAI model then failed, because OpenAI expects the field.

The adapter now serializes every tool input in both streaming and non-streaming responses, so an empty input is kept as "{}".

# Before: a zero-argument call was stored without arguments
{"id": "toolu_01", "type": "function", "function": {"name": "get_status"}}
 
# Now: the empty input is kept
{"id": "toolu_01", "type": "function", "function": {"name": "get_status", "arguments": "{}"}}

Learn more about the Claude model in the documentation.

Frequently asked questions

When Claude called a tool with no arguments, the Agno Anthropic adapter left out function.arguments. OpenAI models expect that field, so replaying the history failed. Agno now stores the empty input as "{}".

Yes. Agno serializes every Claude tool input in both streaming and non-streaming responses, so zero-argument calls keep an arguments field and the history replays on any model.

Shipped around the same time