Parses native tool-call structures from provider responses.
Handles the three common shapes:
OpenAI / Ollama —
%{id:, type: "function", function: %{name:, arguments: "json"}}.argumentsis almost always a JSON-encoded string.Claude —
%{type: "tool_use", id:, name:, input: map()}.Pre-parsed — already-parsed
%{id:, name:, arguments: map()}. No-op.
Tolerant of both atom and string keys, and tolerant of either a JSON string
or a decoded map for arguments.
Summary
Functions
@spec parse(list()) :: {:ok, [ExAthena.Messages.ToolCall.t()]} | {:error, term()}