Field note · 19 September 2026

A reasoning model can spend your whole budget thinking and return nothing.

We pointed our free AI writing tools at a new model chosen on price, and it returned an empty result with no error. The API and the prompt were fine. The model was a reasoning model: it spent its entire output allowance thinking and never reached the answer. Switching to an instruct model of similar cost fixed it immediately.

30 min · Fixed quote before we build · Projects from $2,500

What it looked like

The request succeeded, with no error, no timeout and no failed status. The page showed a single empty result card. To a visitor that looks like a broken product, and nothing in the logs says otherwise, which is what makes this failure easy to miss.

Where the tokens went

Reasoning models think in the open before answering, usually inside a think block, and that thinking is billed and counted against the same output allowance as the answer. Our generators cap output deliberately: 700 tokens for short hooks, 1,000 for ad copy, 1,200 for a script. Those caps are generous for the answers we want and far too small for a model that reasons first. The model hit the ceiling mid-thought and stopped before writing a single line of the actual output.

The model listing gave no warning. Ours had a name that suggested speed, and its price per token told us it was cheap. Neither said how many tokens it would spend before the answer began.

Why it showed as empty rather than as an error

Our parser strips think blocks before looking for JSON, which is correct. It then falls back to treating whatever remains as a single plain-text result when the JSON cannot be read, which is also reasonable. The two behaviours combined badly: strip the thinking, find nothing left, and return one item containing an empty string. The page rendered exactly what it was given.

  • The strip only matched a closed think block, so a model cut off mid-thought left its reasoning in the output instead.
  • The fallback returned an item whether or not any text survived the cleaning.
  • An empty string is not an error, so nothing upstream complained.

Both are now fixed. Unterminated think blocks are stripped to the end of the response, and empty output raises a real error so the visitor sees a message they can act on instead of a blank panel.

What the models actually cost for this job

Our prompts are small. A 228-token system prompt plus a template and the user inputs comes to roughly 600 tokens in, against an output capped between 700 and 1,200. At that size the price differences between models are large in ratio and small in absolute terms, so price alone is a poor way to choose.

ModelCost per runWhat $10 buys
Mistral Small 24B Instructabout $0.00011roughly 90,000 runs
Claude Haiku 4.5, directabout $0.0056roughly 1,800 runs

Measured at 600 input and 1,000 output tokens, September 2026. Reasoning models are left out: for this job, their real cost is a run that returns no answer.

The fifty-fold spread is real, but both numbers are small. Choosing the cheaper model is sensible once you have confirmed that it answers directly instead of reasoning first.

What to change

  • Pick an instruct model for structured generation, not a reasoning model. Reasoning is valuable for hard problems and wasted on writing ten short lines to a fixed format.
  • Do not read speed into a model name. Several models carrying words that suggest speed reason before answering.
  • Treat empty output as an error, never as a result. A blank panel reads as a broken product.
  • Strip unterminated think blocks, not just closed ones, because truncation is exactly when the closing tag goes missing.
  • Check the token accounting after the first live run. Output tokens at or near your ceiling with nothing to show for them is the signature of this failure.

We build and run tools like these for other businesses as well: see our AI automation agency page.

Another error that hid its real cause, and how we traced it, is in our note on Instagram's "Container Publication failed".

Questions, answered.

How do I tell whether a model reasons before answering?

The provider documentation usually says so, but names are unreliable. The practical test is one live run: look at the output token count and compare it with what you actually received. Tokens spent with little or no visible answer means the budget went into reasoning.

Can I just raise the token limit instead of changing model?

You can, and it will often work, but you pay for every reasoning token on every run for output that does not need reasoning. For short structured writing an instruct model is both cheaper and faster.

Why did the request succeed if nothing came back?

Hitting the output ceiling is a normal completion, not a failure. The API returns whatever was produced before the limit, which in this case was thinking that our code correctly removed. Nothing in that chain is an error condition.

Does this affect JSON mode?

It makes it worse. A model that never reaches the answer never emits the JSON, so a strict parser falls back to raw text, and after the thinking is stripped there is no raw text either.

Tell us what's slowing you down. We'll show you what to automate first.

Free · 30 min · Projects from $2,500

contact@aistrikeforce.com