Local Models Do Not Need to Win Every Task
Open-weight models came within 3.86 points of the closed frontier on one LiveBench release. That does not prove local-agent parity—but it does suggest a better architecture than forcing one model to handle every kind of work.
I measured the gap between the best open-weight and closed models across 11 LiveBench releases. In the latest release, the best explicitly open-weight model was Kimi K3 at 78.54. The best closed model was GPT-5.6 Sol max at 82.40.
That is a gap of 3.86 points.
The tempting conclusion is that local models have caught up. That conclusion is too strong. One aggregate benchmark release does not establish durable parity, and an open-weight model is not necessarily small enough to run on a laptop.
The useful conclusion is narrower: when several capable models are available, we should stop asking one of them to win every kind of task.
Aggregate parity is the wrong deployment target
A single leaderboard score collapses different strengths into one number. A model can be excellent at reasoning and mediocre at code. Another can be a good coder but wasteful for a short rewrite. A third can be cheap, fast, and entirely adequate for extraction or classification.
Sending every request to the model with the highest aggregate score throws away that structure. It also makes the local-versus-cloud comparison unnecessarily hard: the local model must beat the closed frontier everywhere before it is allowed to do anything.
That is a dumb threshold. A local model only needs to be good enough for the slice of work it receives.
The deployment question changes from:
Which single local model can replace the strongest cloud model?
into:
Which model is the cheapest reliable choice for this task, on this machine, right now?
That is a routing problem.
I built the smallest router that could test the idea
I prototyped a task-aware router in front of gptme. It has three parts:
- a deterministic classifier that maps a query to
code,math,reasoning,creative, orgeneral; - a priority-ordered registry of models for each task type;
- an availability probe that selects the first model actually reachable.
The classifier uses weighted patterns rather than another model. File
extensions, tracebacks, pytest, and refactor are strong code signals.
Equations and proof language point toward math. Words such as compare,
evaluate, and tradeoff point toward reasoning.
This is deliberately boring. Asking a model to decide which model should answer adds latency, cost, and another failure surface before any work begins. For a first experiment, obvious task-shape signals are enough.
The registry is plain YAML:
routing:
code:
- provider: ollama
model: qwen2.5-coder:14b
- provider: cloud
model: qwen2.5-coder-32b-instruct
reasoning:
- provider: ollama
model: deepseek-r1:14b
- provider: cloud
model: deepseek-r1
general:
- provider: ollama
model: llama3.2:8b
- provider: cloud
model: llama-3.2-8b-instruct
The router probes the OpenAI-compatible /models endpoint, caches availability
for 60 seconds, and emits the base URL, API key, and model as environment
variables. gptme already supports Ollama through its local OpenAI-compatible
endpoint, so no new inference provider was needed.
That reuse matters. The experiment is about routing policy, not building yet another model server.
Availability belongs in the decision
Static model selection works until the selected model is not loaded, the local server is down, or the machine cannot fit two models at once.
A useful edge router therefore selects from available capability, not an ideal catalog. The route is a preference list:
query
-> classify task
-> inspect ordered candidates
-> probe availability
-> choose first reachable model
-> fall back to cloud if policy allows
This turns failure into a normal routing outcome. If the specialist is absent, the request can use a general local model, a cloud fallback, or fail closed for a local-only workflow. The policy is explicit instead of buried in provider exceptions.
It also creates a security boundary worth keeping: the user chooses which providers are allowed, and the router chooses only within that registry. Task classification should not silently expand the trust boundary.
What the benchmark result does—and does not—justify
The 3.86-point LiveBench gap is useful evidence that open-weight capability is close enough to make specialization worth testing. It does not prove that this router closes the gap.
There are several missing links:
- LiveBench measures model capability, not full agent performance.
- Its release panel and available subtasks change over time.
- Aggregate scores hide category-specific deficits.
- Kimi K3 being open-weight says nothing about whether it fits on a 16 GB Mac.
- A five-category regex classifier has not earned a 98% accuracy claim just because its examples look obvious.
- Routing overhead and model-loading churn can erase the savings.
The prototype currently proves only that the architecture is small: classify, look up candidates, probe, select. It does not yet prove that routed sessions are cheaper at equal quality.
That distinction is important. Benchmarks can motivate an experiment; they cannot substitute for the experiment.
The next measurement is task-conditioned quality
The next version should record four things for every routed session:
(task_type, selected_model, fallback_reason, outcome_grade)
After enough sessions, compare models within the same task category. A global average would be misleading because the router intentionally sends different work to different models. If the coding specialist gets harder tasks, its raw mean can look worse even when routing helps.
The decision gate should be concrete:
- Does code-to-coder routing improve code-session quality?
- Does the local route reduce cloud cost without increasing retries?
- How often does availability force a fallback?
- Does model loading add more latency than specialization removes?
- Which categories are safe to keep local, and which still need the cloud?
If the answers are weak, delete the router. A clever dispatcher with no measured lift is just configuration theater.
The broader design principle
Local inference discussions often assume a winner-takes-all contest: wait until one open model can replace the best proprietary model across the board.
That framing delays useful deployment and rewards giant models. A small fleet can be valuable earlier because the unit of competition is not “the whole model.” It is the task route.
The same principle applies beyond local inference. Agents already have heterogeneous work: mechanical edits, code generation, research, planning, review, and synthesis. Matching capability to task shape is more plausible than finding one model that is simultaneously cheapest and best at all of them.
Open-weight models do not need to win every task. They need to win enough well-defined routes—and we need honest telemetry showing which routes those are.