← all posts
// economics · commercial-models

Commercial vs free models for tool-using agents: the operational burden

A local model that handles chat questions fine will choke the moment you hand it what a tool-using agent sends on every turn: an objective, every tool schema, and the full transcript of observations gathered so far.

That transcript only grows: each new turn resends everything every prior turn sent, plus the tool output collected along the way. A box sized for the median request falls over on the tail: retries, backtracking, extra steps after a malformed tool call. Local means a machine kept on, warm, and provisioned for the worst context length. Idle time isn't free: electricity and depreciation don't pause between calls.

People talk about "commercial versus free model" as one choice. It isn't. A paid API bundles inference with a service: uptime, monitoring, someone paged when it's down. A free hosted tier is usually just a scaled-down version of that. An open-weight model is an artifact: the license may or may not be genuinely open, and the compute to run it is still somebody's expense, yours now instead of a vendor's. Local inference swaps a token invoice for hardware, electricity, maintenance, and capacity planning. None of that shows in a price-per-million-tokens comparison, the trap behind why a flat subscription is the wrong mental model for AI cost: a cost you don't feel per unit stops working as a signal.

what the comparison actually has to track

For an agent, the unit that matters is a completed task whose tool calls stayed inside policy, not a generation. A cheap response that fails validation, retries twice, and eats ten minutes of a reviewer's attention has already lost to a pricier call that finished once. Track the whole path: setup time, monthly maintenance, failure recovery, upgrade testing, and what an hour of downtime costs someone else. Give both routes the same evidence and acceptance bar; if one provider hands you a native tool the other must build by hand, count that in its price.

Track a line for each of these, per route, per time period:

  • exact route and model revision
  • input, cached input, reasoning, and output tokens
  • queue time, first token, full completion, and timeouts
  • hardware draw and idle allocation
  • pass, retry, abstain, and human-repair rate
  • engineering and incident time
  • privacy, licensing, and fallback constraints

Keep the failures and label each one: missing evidence, an ignored instruction, a malformed tool call, bad reasoning, a tool error, or an action taken without authority. Those labels enable routing later. A cheap local model might nail every straightforward case and fall down only once context or ambiguity crosses some threshold, invisible without the labels.

the route that deserves the traffic

Commercial wins when the team wants a supported API and someone else's scaling more than control over the stack. That's no case for routing everything to the priciest model: put a cheaper tier in the comparison, cap reasoning effort and output length, and pay for the expensive tier only where the cheap one fails the gate. Managed capacity earns its cost when it removes work the team would otherwise do, not because a dashboard exists.

Local or open-weight wins when you already operate the accelerators and want control over versions and deployment, the logic behind a local-first cascade: steady, narrow, repeatable traffic on hardware you own, overflow sent elsewhere. The edge shrinks fast if the model barely fits, reloads constantly, needs a human to nurse it back after every crash, or depends on a runtime one person understands. Spare hardware isn't free if another workload loses it while your agent runs.

The recurring mistake: pricing engineering and incident time at zero against an API bill. Price per million tokens and tokens per second are diagnostic, not business outcomes. What matters is cost per accepted task, p95 latency, how bad failures get, and how much human attention the route still eats after launch.

plan the way out before you commit

Put every provider's request and response handling behind one narrow adapter, keep prompts and schemas in version control, and never let job state live only inside a vendor's thread object. Contract-test streaming, tool calls, structured output, errors, cancellation, and token accounting for each route, before you need it.

Fallback has to be explicit. A local model can be a reasonable degraded mode if the commercial API goes down, but people should know capability changed. If local capacity runs out, routing sensitive data to a remote provider defeats the point of the local path, so privacy and authorization rules run before capability routing, full stop.

Re-run the comparison whenever traffic, prices, licenses, versions, or hardware utilization move. A route right at ten thousand tasks a month can be wrong at a hundred thousand, and a local model that failed last year might pass now on a better quant while a free tier you depended on disappears.

Keep whichever route fails safely and tells you the moment it failed. Drop the rest.

#commercial-models#open-models#cost