// the assumption
You picked a model when you started the project, and everything calls it. That is a reasonable default: one client, one config, nothing to think about. It is also why the cheapest work in your system is billed at your most expensive rate.
The price ladder is steeper than people expect
Published per-token rates span a wide range across a single vendor's lineup. Comparing the top tier to the smallest in the same family, the gap is roughly five to one on both input and output; comparing the very largest to the smallest it is closer to ten to one. The exact multiple depends on which two you line up.
What actually moves
The work that does not need a frontier model has a recognisable shape: one question in, one answer out, nothing to reason about. Anthropic's own surface guidance puts classification, summarisation, extraction and question answering in the "single call" tier — the simplest thing that meets the need.
If a step is on the top list, it is a candidate. If you would not trust the answer without checking it, it is not.
The trap: caches belong to one model
Here is the part that turns a saving into a loss. Prompt caches are scoped to a single model. Switch models partway through a conversation and the cached prefix is invalidated — not partially, but the whole thing: tools, system prompt and message history all rebuild at full price on the next call.
A model switch is the most destructive tier of cache invalidation there is. Changing tool_choice, attaching an image or toggling thinking all leave the tools-and-system cache intact. Changing the model does not.
The fix
Do not swap the model mid-conversation. Give the cheap step its own call. A classification or extraction step almost never needs the conversation history — it needs one input and one instruction. Pull it out into a standalone request on the small model and the main loop's cache is untouched.
For agent architectures the documented pattern is the same idea with a name: spawn a subagent on the cheaper model for the sub-task, and leave the main loop where it is. The subagent gets its own context, so nothing the parent cached is disturbed.
The other lever on the same bill is effort — how hard the model works on a given request. Lower effort means fewer, more consolidated tool calls and less preamble. It is often the cheaper change to make first, because it does not move any step to a different model at all.
Related: prompt caching covers why that repeated prefix is worth protecting in the first place, and the agent loop covers why an agent's transcript grows the way it does.
Sources: Anthropic — pricing per million tokens (the ratios above are arithmetic on that table; check it before relying on a multiple) · Anthropic — prompt caching, on caches being model-scoped and what each change invalidates · Anthropic — the effort parameter.
One concept a week. Free.
The deeper, copy-paste version of each ToolCall short — in your inbox.
// total: 0.00 · spam: void · unsubscribe: one click
