← all posts
// economics · commercial-models

Commercial vs free models for customer-support automation: tools and integration quality

Run a support model on a GPU you own and you hit a hard ceiling fast: one card processes one batch at a time, every ticket behind it waits. "Commercial versus free" hides more than that: a paid API bundles inference with a service, a free tier is a limited version of it, an open-weight model is an artifact with a license and a compute bill attached, and local inference swaps the invoice for hardware, electricity, and maintenance. That looks appealing until you read why subscription pricing is the wrong shape for most AI spend too.

For customer-support automation you're buying a resolved or safely escalated case, not a completion. The failure that matters isn't a bad sentence, it's a confident policy mistake or an unauthorized account action. A cheap generation that fails validation and eats ten minutes of a reviewer's day can cost more than the pricier call that finishes once.

What decides this is tool reliability: schemas, streaming, argument precision, authorization, errors, state surviving a dropped connection. Open side: a free-tier or open-weight model in a narrow workflow. Commercial side: an API picked for multilingual reasoning and tool use. Use real model names and prices in the experiment, not in the permanent rule: catalogs reshuffle, allowances vanish, quantizations improve unannounced.

score the ticket, not the tool call

Test both routes on the same fixtures, valid and adversarial, scoring whether the case got resolved, not which tool name got picked first. Give both the same evidence and acceptance bar, each keeping its own prompt template and API. If one provider ships a native tool the other must hand-build, count that gap.

Track this per route under test:

  • exact model revision, not the family name
  • input, cached, reasoning, output tokens
  • queue time, first token, completion, timeout rate
  • hardware energy and idle allocation, if local
  • pass, retry, abstain, or human-repair, per case
  • engineering and incident time to stay alive
  • privacy, license, and fallback constraints

Score against resolution accuracy, escalation quality, handling time, and policy compliance, then label every failure: missing evidence, an ignored instruction, malformed output, wrong reasoning, a tool error, an unsafe action. Those labels make a routing call defensible later. A small local model can be fine on most tickets, failing only once ambiguity crosses some threshold.

spare hardware still costs somebody something

The commercial route earns its premium when native search, computer use, file handling, or managed state removes real complexity you'd otherwise build, not an argument for sending everything to the priciest model. Test a cheaper tier too, output and reasoning effort capped. Managed capacity is worth paying for when it removes real work, not because a vendor gave you a dashboard.

The open-weight route earns its keep when the workflow needs a small, stable tool set and portability matters more than convenience, roughly the local-first cascade territory. It compounds with steady utilization on narrow tasks, and shrinks when the model barely fits, reloads constantly, or depends on a runtime only one engineer understands. Spare GPU capacity isn't free: the moment another workload needs it, somebody pays for the contention.

Treating API compatibility as proof of identical tool-call behavior is the mistake I see most. It isn't. Attach every number to a workload and a time period: list price per million tokens and tokens per second are diagnostic, not outcomes. What you want is cost per accepted task, p95 latency, failure severity, human attention spent.

the seam that has to outlive the vendor

Put provider-specific request and response handling behind one narrow adapter, nowhere else. Store prompts and schemas in version control, not a vendor's playground. Keep job state outside any thread object only one provider can read back. Contract-test streaming, tool calls, structured output, errors, cancellation, and token accounting per route.

Fallback has to be explicit, or it's an accident waiting to happen. A degraded local mode is often fine if the commercial API is down, but the person on the ticket should know something changed. Quietly routing sensitive data to a remote provider once local capacity runs out defeats the point: privacy and authorization run before capability, never after.

Re-run the comparison whenever traffic, model versions, prices, licenses, hardware utilization, or review practice shifts enough to matter. A choice right at ten thousand cases a month can be wrong at a hundred thousand. A model that choked last year might clear the bar now on a better quant, and a free tier can vanish with one changelog entry.

None of this produces a universal winner, and I've stopped expecting one. What holds up is the smallest set of routes that clears the quality gate, keeps cost and data movement visible, and fails safely. "Free" and "commercial" are procurement labels, not engineering ones. What I still haven't worked out is how you retire a route once a fallback has quietly become the path most tickets take, without anyone noticing when it stopped being one.

#commercial-models#open-models#cost