> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abliteration.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Tool calling on abliteration.ai

> Function calling on abliteration.ai across all three API surfaces. Pick the format that matches your client.

**To call tools on abliteration.ai**, send the tool definitions in your request body using the native shape for whichever API surface you're calling — OpenAI Chat Completions, OpenAI Responses, and Anthropic Messages each use a different shape. The model returns a `tool_use` block (or `tool_calls` array, on OpenAI) when it wants to invoke one.

<CardGroup cols={3}>
  <Card title="OpenAI Chat Completions" icon="code" href="/capabilities/tool-calling/openai-chat-completions">
    Nested `function` schema, `tool_calls` array, `role: "tool"` results.
  </Card>

  <Card title="OpenAI Responses" icon="code" href="/capabilities/tool-calling/openai-responses">
    Flat function schema, `function_call` items, `function_call_output` results.
  </Card>

  <Card title="Anthropic Messages" icon="code" href="/capabilities/tool-calling/anthropic-messages">
    `input_schema` shape, `tool_use` blocks, `tool_result` blocks.
  </Card>
</CardGroup>

## Quick comparison

|                | Chat Completions              | Responses                     | Anthropic Messages          |
| -------------- | ----------------------------- | ----------------------------- | --------------------------- |
| Tool def shape | `{type, function: {…}}`       | `{type, name, parameters}`    | `{name, input_schema}`      |
| Model returns  | `message.tool_calls[]`        | `output[].function_call`      | `content[].tool_use`        |
| Continue with  | `role: "tool"` message        | `function_call_output` item   | `tool_result` content block |
| Stream marker  | `finish_reason: "tool_calls"` | `response.function_call.done` | `stop_reason: "tool_use"`   |
