Guides / pin or float model version

Whether to pin a model version, and what each choice costs

Pinning a model version protects you from behaviour changing underneath you and exposes you to a different risk, because newer models are often cheaper. Anthropic's own list puts a deprecated model at three times its successor. Culpa, a local-first LLM cost, margin, and forecast ledger, records the model version on every call so the comparison is measurable.

Why this happens

The instinct is that pinning is the careful choice and floating is the risky one, and for behaviour that's right. A floating alias can move you onto a model that tokenizes differently or answers differently, and you find out from a metric rather than a changelog. What that instinct misses is the direction prices move. Model rates have fallen sharply between generations, so the pinned version is usually the expensive one, and the gap compounds every month nobody revisits it. Anthropic's pricing page makes this concrete by listing deprecated and retired models alongside current ones: Claude Opus 4.1, marked deprecated, is priced at three times Claude Opus 5. Worth separating from a related problem: none of this is model mix drift, where traffic moves between models with the code unchanged. Here the identifier in your code stays exactly the same, and what it means, or what it costs, changes around it. The fix is opposite too. Drift is fixed by pinning. This is fixed by reviewing the pin.

What this usually looks like

  • A model version was pinned once and nobody has revisited it since.
  • You're running a model the provider lists as deprecated.
  • Nobody knows which model versions are live in production right now.
  • Cost per call is flat while newer models have got cheaper.
  • A floating alias moved you to a new generation and the token counts jumped.

Free, no card, no account

Run the free Cost Leak Scan

It shows your most expensive conversation before you install anything.

Run the free Cost Leak ScanStart 14-day trial

Mistakes that cost the most

MistakeWhy it hurtsDo instead
Pinning and never reviewing it.Rates fall between generations, so an old pin becomes the expensive option by default.Put a recurring review on the pin, and re-price it against the current generation each time.
Floating to save the review effort.A generation change can move your token counts and your behaviour without warning.Pin deliberately, then move deliberately, so both changes are things you chose.
Assuming pinning is the cheap conservative option.Anthropic's own list prices a deprecated model at three times its successor.Check the current price of your pinned version against today's equivalent before renewing it.
Not recording the model version on the call.Without it a cost change from a version move looks identical to one from usage.Record the exact version string on every call, including whatever an alias resolved to.

Run this check tonight

  1. List every model version live in production right now, from your own call records.
  2. Check each against the provider's list for a deprecated or retired marker.
  3. Re-price last month's volume at the current generation's rates.
  4. Decide whether each pin is deliberate, and put a review date on the ones that are.

The cost of a pin nobody revisited

Illustrative example

Anthropic's pricing page, read 2026-08-05, lists Claude Opus 4.1 as deprecated at $15.00 input and $75.00 output per million, alongside Claude Opus 5 at $5.00 and $25.00. A modelled workload of 10 million input and 2 million output tokens a month is priced at both. The rates and the deprecation markers are published, the volume is modelled.

on the deprecated Opus 4.1: 10M x $15.00/M + 2M x $75.00/M = $150.00 + $150.00 = $300.00
on Opus 5: 10M x $5.00/M + 2M x $25.00/M = $50.00 + $50.00 = $100.00
exactly 3x, on identical traffic, for a decision nobody revisited
the difference is $200.00 a month, or $2,400.00 a year, per workload

Three times, and the input and output multiples are both exactly three, which is what makes this easy to miss: nothing about the shape of the bill changes, only its size. The pin was probably the right call the day it was made. It stopped being right the day the successor shipped at a third of the price, and nothing announced that.

Every number, with its confidence and source

FigureWhat it meansConfidenceSource
3xcost of a deprecated model against its current successor on identical trafficcalculatedAnthropic's pricing page at platform.claude.com/docs/en/docs/about-claude/pricing, read 2026-08-05, lists Claude Opus 4.1 as deprecated at $15.00 input and $75.00 output per million, and Claude Opus 5 at $5.00 and $25.00. A modelled 10 million input and 2 million output tokens costs $150.00 + $150.00 = $300.00 on the former and $50.00 + $50.00 = $100.00 on the latter, a factor of exactly 3 on both rates. The rates and deprecation markers are published, the volume is modelled.

What a generic answer can’t know

Which model version actually served a call is knowledge that exists at the moment of the call and nowhere afterwards, particularly when an alias resolved to something. An invoice groups by model name as the provider records it, which tells you what you were billed for and not what your code asked for, and the two differ precisely when a float has moved. Culpa records the version on every call alongside the feature, customer and run, prices it from a versioned price book in exact decimal, and keeps the ledger on infrastructure you control. That makes a version change visible as a step in cost per call on a specific date rather than as an unexplained movement, and it makes the review answerable: which versions are live, what each is costing, and what the current generation would cost on the same traffic.

Questions founders ask next

Is pinning a model version cheaper or more expensive?

Usually more expensive over time, which surprises people. Rates fall between generations, so a pin made a year ago is likely above the current price. Anthropic's own list puts deprecated Claude Opus 4.1 at $15.00 and $75.00 per million against Claude Opus 5 at $5.00 and $25.00, exactly three times.

Should I use a floating alias then?

Only if you're watching for the move. A float can put you on a new generation that tokenizes differently, which changes your token counts without changing your code. The safer pattern is to pin deliberately and review the pin on a schedule, so both the staying and the moving are decisions.

How is this different from model mix drift?

Drift is traffic moving between models while your code stays the same, through fallbacks or routing. This is one identifier whose meaning or price changes around it. The fixes are opposite: drift is fixed by pinning, and a stale pin is fixed by reviewing it.

What should I record to catch this?

The exact model version on every call, including whatever an alias actually resolved to. Without it a cost change from a version move looks identical to one from usage, and the two need completely different responses.

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.

Keep reading


Sources: Anthropic pricing. Last reviewed 2026-08-05, rates effective 2026-07-02. Plain text version.