Guides / output token creep

Output token creep, and why your input metrics miss it

Output token creep is a rise in tokens generated per call while input stays flat, so any monitoring built around prompt size sees nothing at all. It matters because output bills five to eight times input on most models here. Culpa, a local-first LLM cost, margin, and forecast ledger, tracks input and output separately per feature, so the two curves stop being reported as one number.

Why this happens

Teams instrument prompt length because prompts are the part they write. Output is the part the model decides, so it drifts without a commit behind it. A one-line instruction asking for more thorough answers, a model swap to something more verbose, or a format change from a list to prose can all raise output length sharply. On a model where output bills eight times input, four hundred extra output tokens cost the same as three thousand two hundred extra input tokens, and only one of those two would have been noticed.

What this usually looks like

  • Cost per call rose while average prompt size stayed flat.
  • Responses got noticeably longer and everyone read that as a quality improvement.
  • A model change shipped and nobody compared output length before and after.
  • Your dearest feature is the one that returns prose rather than structured fields.

Free, no card, no account

Run the free Cost Leak Scan

It shows your most expensive conversation before you install anything.

Run a free scan

Mistakes that cost the most

MistakeWhy it hurtsDo instead
Monitoring prompt size without monitoring response size.Output is the expensive side on nearly every model, so you're watching the cheaper half of the bill.Track both series per feature, and alert on output length the same way you alert on latency.
Asking for thoroughness in the prompt with no length bound.Thoroughness has no upper limit, so the instruction quietly buys as many tokens as the model feels like.State a target length or a structure, and set a max token limit that reflects what you actually render.
Swapping models without comparing output length.Two models at the same rate can differ substantially in verbosity, which changes cost with no rate change.Measure tokens per response on both models over the same inputs before switching.

Run this check tonight

  1. Plot average output tokens per call per feature over the last six months.
  2. Find your model's output-to-input ratio, then multiply any output growth by it before judging its size.
  3. Check whether your max output token setting matches what the interface actually displays.
  4. Look at your most verbose feature and count how much of a typical response the user reads.
  5. Compare output length before and after your last model change, if anyone recorded it.

One instruction asking for thoroughness

Illustrative example

A summarisation feature on Gemini 2.5 Flash at real rates of $0.0003 per 1k input and $0.0025 output, an output-to-input ratio of 8.33. The prompt stayed at 3,000 tokens throughout. Volumes are modelled.

Before: (3 x $0.0003) + (0.25 x $0.0025) = $0.0009 + $0.000625 = $0.001525
After: (3 x $0.0003) + (0.7 x $0.0025) = $0.0009 + $0.00175 = $0.00265
Cost per call rose 74% with input completely unchanged
At 4 million calls a month: $6,100 becomes $10,600
One output token here costs what 8.33 input tokens cost, so 450 extra output tokens price like 3,750 extra input tokens

A $4,500 monthly increase from a single instruction, invisible to every prompt-size metric on the dashboard, because the prompt never changed.

Every number, with its confidence and source

FigureWhat it meansConfidenceSource
$0.001525 to $0.00265modelled cost per call before and after an output-length increase on Gemini 2.5 FlashestimatedBoth endpoints at real Gemini 2.5 Flash rates per 1k tokens from the price book, effective 2026-07-02. A range because the output lengths are modelled.
8.33xoutput-to-input price ratio on Gemini 2.5 Flash, the widest in the price bookcalculated$0.0025 output divided by $0.0003 input per 1k, from the price book, effective 2026-07-02.

What a generic answer can’t know

A provider reports total output tokens and nothing about which feature produced them or how long they used to be. Detecting creep needs your own output-length series split by feature and joined to your releases. Culpa keeps that on your infrastructure, where your prompts and responses stay, and counts the calls to run your plan.

Questions founders ask next

Why does output cost more than input?

Generation is sequential and compute-bound in a way that reading a prompt isn't, and providers price it accordingly. Across the models in Culpa's price book the ratio runs from about 1.34x on some open-weight models to 8.33x on Gemini 2.5 Flash.

How do I stop responses getting longer?

Set a max output token limit that matches what your interface renders, ask for a specific structure rather than for thoroughness, and track output length per feature so a change shows up as a metric rather than as a bill.

Does a reasoning model make this worse?

It can, because reasoning tokens bill as output on most providers while never reaching the user. That makes the gap between what you pay for and what you display wider, so measuring rendered length alone understates the cost.

On your infrastructure

Culpa runs on your infrastructure. Your prompts and responses never leave it. Culpa counts calls to run your plan, and it fails open, so if it ever breaks your app keeps running.


How Culpa works

Find the culprit. Not just the total.

Your dashboard shows what you spent. It stops short of who spent it. Culpa shows the conversation, the user and the feature behind it.

Your prompts stay local.

Culpa runs on your own infrastructure. What you send to a model reaches us at no point.

Every dollar has a name.

Follow any charge to the conversation, the user, the feature and the customer behind it.

See the bill before it lands.

Cost your next feature before you ship it. You get the likely bill and the worst case, at best, median, p90 and p99.

Three steps to your first answer.

1

Change one base URL.

Or drop in the Python or TypeScript library.

2

Find your most expensive conversation.

In the first session, not the first week.

3

Cost your next feature before you ship it.

Base URLhttp://localhost:4545/v1Your traffic keeps flowing if Culpa ever stops.

Why the bill went up

Example dashboard

Calls traced

418,209

across 3 projects

Spend this week

$378.41

+ $182 vs last week

Failed calls

312

74% retried, and you paid for all of them

+ $182 this week traced to one culprit

Spend over 14 days

$0$20$40$60$8024262830020406
user_384report_generatorconv_91fprompt_v1894,220 tokens3 retries$6.81

Most expensive users

user_384$38.42
user_119$21.07
user_562$14.90
user_204$8.30
user_871$5.10

Next week forecast

Best$180
Median$240
p90$310
p99$395

Graded against reality. Accuracy shown as results land.

Free, no card, no account

Run the free Cost Leak Scan

It shows your most expensive conversation before you install anything.

Run a free scan

Keep reading


Sources: Gemini API pricing. Last reviewed 2026-08-01. Plain text version.