ReqLLM. ToolCall
(ReqLLM v1.12.0)
View Source
Represents a single tool call from an assistant message.
This struct matches the OpenAI Chat Completions API wire format:
{
"id": "call_abc123",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{"location":"Paris"}"
}
}Fields
id- Unique call identifier (auto-generated if nil)type- Always "function" (reserved for future extensibility)function- Map withname(string) andarguments(JSON string)
Examples
iex> ToolCall.new("call_abc", "get_weather", ~s({"location":"Paris"}))
%ReqLLM.ToolCall{
id: "call_abc",
type: "function",
function: %{name: "get_weather", arguments: ~s({"location":"Paris"})}
}
iex> ToolCall.new(nil, "get_time", "{}")
%ReqLLM.ToolCall{
id: "call_..." # auto-generated
type: "function",
function: %{name: "get_time", arguments: "{}"}
}
Summary
Functions
Extract the arguments JSON string from a ToolCall.
Extract and decode the arguments as a map from a ToolCall. Returns nil if decoding fails.
Returns true when the ToolCall (or tool-call-shaped map) represents a
server-side builtin invocation. Handles both OpenAI-shaped wrappers and
bare maps: unwraps a nested :function map when present.
Find the first tool call matching the given name and return its decoded arguments. Returns nil if no match found or if arguments cannot be decoded.
Returns true when the given map carries a truthy :builtin? (or
"builtin?") flag directly on it. Does not unwrap a nested
:function map — use it for chunk metadata or raw tool-call shapes
that don't have the OpenAI function nesting.
Normalize a map or ToolCall to the standard %{id, name, arguments} format.
Check if a ToolCall matches the given function name.
Extract the function name from a ToolCall.
Create a new ToolCall with OpenAI-compatible structure.
Create a ToolCall representing a server-side builtin invocation that the
provider executed on the model's behalf (e.g. OpenAI Responses API
web_search_call, file_search_call).
Sets :builtin? => true on map when flag is true; otherwise returns
map unchanged. Used by stream/response builders that propagate the
builtin marker onto plain tool-call maps before they reach new_builtin/3.
Returns the Zoi schema for this module
Convert a ToolCall to a flat map with decoded arguments.
Types
Functions
Extract the arguments JSON string from a ToolCall.
Extract and decode the arguments as a map from a ToolCall. Returns nil if decoding fails.
Returns true when the ToolCall (or tool-call-shaped map) represents a
server-side builtin invocation. Handles both OpenAI-shaped wrappers and
bare maps: unwraps a nested :function map when present.
Prefer this over flagged_builtin?/1 whenever you have a %ToolCall{}
or a map that may carry the OpenAI function: nesting.
Find the first tool call matching the given name and return its decoded arguments. Returns nil if no match found or if arguments cannot be decoded.
Returns true when the given map carries a truthy :builtin? (or
"builtin?") flag directly on it. Does not unwrap a nested
:function map — use it for chunk metadata or raw tool-call shapes
that don't have the OpenAI function nesting.
For structured %ToolCall{} or OpenAI-wrapped maps, prefer builtin?/1.
Normalize a map or ToolCall to the standard %{id, name, arguments} format.
Accepts ToolCall structs or plain maps with atom/string keys. Arguments are decoded from JSON if provided as a string.
Examples
iex> ToolCall.from_map(%{"id" => "call_123", "name" => "get_weather", "arguments" => ~s({"location":"Paris"})})
%{id: "call_123", name: "get_weather", arguments: %{"location" => "Paris"}}
iex> tc = ToolCall.new("call_456", "get_time", "{}")
iex> ToolCall.from_map(tc)
%{id: "call_456", name: "get_time", arguments: %{}}
Check if a ToolCall matches the given function name.
Extract the function name from a ToolCall.
Create a new ToolCall with OpenAI-compatible structure.
Parameters
id- Unique identifier (generates "call_<uuid>" if nil)name- Function namearguments_json- Arguments as JSON-encoded string
Examples
ToolCall.new("call_123", "get_weather", ~s({"location":"SF"}))
ToolCall.new(nil, "get_time", "{}")
Create a ToolCall representing a server-side builtin invocation that the
provider executed on the model's behalf (e.g. OpenAI Responses API
web_search_call, file_search_call).
These calls are exposed in message.tool_calls for inspection and
observability — the OTel GenAI bridge surfaces them as tool_call parts
in gen_ai.output.messages. They are not replayable: the provider
already executed them, and the OpenAI Responses request schema rejects
them in input. Request encoders, finish_reason derivation, and tool
call ID sanitisers must skip entries where builtin?(tc) is true.
arguments_json should be a JSON-encoded string capturing whatever
per-call payload the provider returned (action, query, result URLs, etc.).
Sets :builtin? => true on map when flag is true; otherwise returns
map unchanged. Used by stream/response builders that propagate the
builtin marker onto plain tool-call maps before they reach new_builtin/3.
Returns the Zoi schema for this module
Convert a ToolCall to a flat map with decoded arguments.
Returns a map with :id, :name, and :arguments keys.
Arguments are decoded from JSON; returns empty map if decoding fails.
Examples
iex> tc = ToolCall.new("call_123", "get_weather", ~s({"location":"Paris"}))
iex> ToolCall.to_map(tc)
%{id: "call_123", name: "get_weather", arguments: %{"location" => "Paris"}}
iex> tc = ToolCall.new("call_456", "get_time", "{}")
iex> ToolCall.to_map(tc)
%{id: "call_456", name: "get_time", arguments: %{}}