ADR-010: Tool/Function Calling Design
Status
Accepted (2024-04)
Context
Modern LLMs support tool/function calling for:
- External data retrieval.
- Action execution.
- Structured output generation.
Decision
Support OpenAI-compatible tool format:
Example: Tool definition
$tools = [
[
'type' => 'function',
'function' => [
'name' => 'get_weather',
'description' => 'Get weather for location',
'parameters' => [
'type' => 'object',
'properties' => [
'location' => ['type' => 'string'],
],
'required' => ['location'],
],
],
],
];
Copied!
Tool calls returned in Completion:
- A typed
list<ToolCall>(nullable) ofToolvalue objects — each with the toolCall id,nameand its arguments as an already JSON-decoded associative array (not an encoded string). A full tool-execution runtime was added later in ADR-038.
Consequences
Positive:
- ●● Industry-standard format.
- ●● Cross-provider compatibility.
- ● Flexible tool definitions.
- ● Type-safe parameters.
Negative:
- ◑ Complex nested structure.
- ◑ Provider translation needed.
- ✕ No automatic execution.
- ◑ Testing complexity.
Net Score: +5.0 (Positive impact - OpenAI-compatible format ensures broad compatibility)