Home ยป The Model Ignored the Tool and Answered in Prose
The Model Ignored the Tool and Answered in Prose

The Model Ignored the Tool and Answered in Prose

Figures on this page were verified 18 October 2026 against the providers' own documentation. Pricing, context windows and rate limits change without notice, so confirm any number against the provider before you rely on it. Tell us if something here is out of date.

A model that answers in plain text instead of calling your tool is behaving correctly by default; tool_choice: auto gives it the option to skip every tool you offered. This is the most misdiagnosed tool-use failure, because it reads like a model that forgot a tool exists, when it is almost always a model that judged a tool call unnecessary, under-described, or genuinely optional given the prompt.

auto means auto

The default tool choice on both providers permits a plain-text reply. On Anthropic, tool_choice: {"type": "auto"} is the default when tools are provided, and the documentation states it plainly: Claude determines whether to call a provided tool or not. On OpenAI, the default tool_choice: "auto" means the model may call zero, one, or multiple functions. Zero is an explicitly supported outcome on both APIs, not a bug.

If your prompt was answerable from general knowledge, or ambiguous about whether fresh data was required, a well-calibrated model will often just answer rather than calling a tool that may be unnecessary.

Force it when a tool call is mandatory

If skipping the tool is never acceptable for a given request, do not leave that decision to the model. Both providers offer a mode that requires some tool be called.

# Anthropic: force any tool, or one specific tool
{"tool_choice": {"type": "any"}}
{"tool_choice": {"type": "tool", "name": "get_weather"}}

# OpenAI: force any tool, or one specific function
{"tool_choice": "required"}
{"tool_choice": {"type": "function", "name": "get_weather"}}

One real constraint on the Anthropic side: Claude Opus 5.5, Claude Sonnet 5.5, Claude Fable 5.1 and Claude Mythos 5.1 do not support any or tool as a tool_choice type and return a 400 error if you send one. On those models, use auto together with strict tool use to guarantee a schema-valid call once the model does decide to call it, or add an explicit instruction in the prompt itself: “use the get_weather tool to answer this.”

Forcing a tool has a side effect: no narration

On Anthropic, forcing a tool prefills the assistant turn, which means the model will not emit any explanatory text before the tool call, even if your prompt asked it to narrate first. Forcing also skips thinking entirely on every model that accepts forced tool use: the response starts directly with the tool_use block. If you need the model to think or explain itself before calling the tool, do not force it; use auto with an explicit instruction instead.

The description is doing the persuading

Before reaching for a forced tool_choice, check whether the tool description actually states when it must be used. A description that only explains what a tool returns, without saying when to call it, leaves the decision entirely to the model’s judgement on each individual prompt.

WeakStrong
“Gets the current weather for a city.”“Gets the current weather for a city. Always call this when the user asks about weather, temperature, or whether to bring an umbrella, even if you believe you know typical conditions for that location.”
“Searches the order database.”“Searches the order database. Call this for any question referencing a specific order, order ID, or delivery, rather than answering from general knowledge.”

The second column in each row removes the judgement call. This usually fixes the problem without forcing anything, and it does not carry the narration and thinking trade-offs that forcing does.

Check stop_reason before concluding the tool was skipped

A response can legitimately contain text and a tool call together: Claude often narrates what it is about to do before the tool_use block appears. If your code only inspects the first content block, or checks for text and stops, you can mistake “answered, then called a tool” for “answered instead of calling a tool.” Always check stop_reason (Anthropic) or scan the full output/tool_calls array (OpenAI) rather than inferring from the presence of text alone.

Related errors

If a tool was called but the wrong one, see the model called the wrong tool. If the model calls a tool over and over instead of answering, that is the opposite failure, covered in tool-use loops. The full map is in the LLM API error reference.

Frequently asked questions

Why did the model answer in text instead of calling my tool?

Because the default tool_choice is auto, which permits a plain-text reply on both Anthropic and OpenAI. Zero tool calls is a supported outcome, not a bug.

How do I force a tool call?

On Anthropic use tool_choice type any or tool. On OpenAI use required or a named function. Claude Opus 5.5, Sonnet 5.5 and Fable 5.1 reject any and tool with a 400, so use auto with strict tool use or an explicit instruction instead.

What does forcing a tool cost me?

On Anthropic a forced call prefills the assistant turn, so the model cannot narrate first, and it skips thinking. If you need an explanation or reasoning before the call, use auto and instruct the model in the prompt.

Chirag Darji

Chirag Darji is the founder of VGraple and the editor of It's About You. He writes about the LLM APIs and developer tooling he works with, and every figure published here is checked against the provider's own documentation before it goes live, with the date it was verified shown on the page.

More Reading

Post navigation