Skip to main content

1 · Define tools

2 · The model calls

When the model decides to use a tool, the response carries a call instead of (or alongside) text:
Chat Completions — finish_reason: tool_calls
Messages — stop_reason: tool_use
Arguments conform to your schema — parse them, run the tool, and send the result back. Models may emit several calls in one turn (parallel tool use); execute them all and return one result per call id.

3 · Return results

Append the result to the conversation and call the endpoint again — the model continues with the tool output in context. Repeat until it answers in text.

Steering with tool_choice

  • auto (default) — the model decides whether to call.
  • required / { "type": "any" } — must call some tool (Chat Completions / Messages respectively).
  • Named — force one specific tool: { "type": "function", "function": { "name": "get_weather" } } or { "type": "tool", "name": "get_weather" }.
  • none — text only, tools stay visible but uncallable.
Tool calls stream too: argument deltas arrive incrementally on both dialects (Streaming). For extracting structured data without any real tool, prefer Structured output.