Learn · Composing

The router that answered 164 coding problems with silence.

Bearing routes at 96.00 and emits nothing on HumanEval. That is the right behaviour in front of a specialist and the wrong behaviour as one. Routers, weight merges, and upcycled mixtures each answer the specialist's problem differently, and each owes different evidence.

LeanLogix6 min read

We did not trust the harness, so we ran the generation by hand. Bearing — a 1.5B router, our most proven and already-signed model under a new name — had just posted 0.00 on HumanEval, and a zero from a harness can mean a dozen things, most of them plumbing. It was not plumbing. Prompted with a Python function signature and a docstring, the model returned an empty string. All 164 problems. Zero characters.

On its own axis the same model routes at 96.00 with five-of-five refusal recall. Its base scores 76.00. Llama-3.1-8B, five times its size, scores 66.00 on the identical suite.

It is not damaged. It is specialised to silence outside its contract. That is exactly the behaviour you want from the model that stands in front of your specialists, and exactly the behaviour you cannot ship as one of them.

When a specialist cannot hold its general ability, the answer may be composition rather than a bigger specialist — a router in front of specialists, a merge of their weights, or an upcycled mixture of experts — and each of the three carries a different evidence obligation. This guide is about those obligations, because composition is where a lab that has been careful about single models most often starts being careless.

Five for five

Bearing was the fifth trained artifact to go through our publication gate, and the fifth to fail the same criterion: hold within three points of your base on the general suite. Three intake specialists at 1.5B dropped 54.88, 57.93 and 17.08 points. An intake specialist at 3B dropped 20.12. Bearing dropped all 57.93. Two roles, two base sizes, and a pattern that is no longer about a corpus or a capacity. Every narrow specialist we have built pays for its axis with general ability, and the one already signed and in service before the framework existed pays the most.

ArtifactBaseTunedRetainedOwn axis
intake-1.5B v157.933.055%82.67
intake-1.5B v257.930.000%85.51
intake-1.5B v357.9340.8570.5%82.10
intake-3B v173.7853.6672.7%85.80
Bearing 1.5B57.930.000%96.00
Five gate verdicts, five trained artifacts. Base HumanEval measured by us; retained is tuned as a share of base.

The obvious response — the one written into our own escalation memo as an option — is a two-model deployment: ship the specialist for its task and let a general model serve everything else. Operationally that is how it would run anyway. But it is worth noticing what it does to the criterion. It resolves the general-capability question by declaring general capability out of scope for the specialist and in scope for something else. That is not wrong. It is a composition decision wearing a deployment decision’s clothes, and it deserves to be measured like one.

Three ways to compose, three things you owe

A router in front of specialists is the arrangement Bearing was built for. A small model reads the request, decides which specialist owns it, or refuses, and hands it on. The specialists never see off-contract input, so their general-capability loss stops mattering in production. What you owe in evidence is the system, not the parts. Routing accuracy and refusal recall on the router; each specialist on its own axis; and then the composed system, prompts sent through the router, on the general suite and on every specialist axis, because the system’s general ability is whatever handles the requests the router declines to route. Memory is additive — a 1.5B router at roughly three gigabytes in front of a 3B specialist at roughly six is a nine-gigabyte deployment, not a 3B one — and the efficiency ratios have to be recomputed on the total. A router that refuses well is a genuine asset here. A router that refuses well and a specialist that fails the general criterion do not sum to a system that passes it until you measure the sum.

A weight merge is composition with no router and no training. Two or more fine-tunes of the same base are combined arithmetically into one set of weights. SLERP interpolates along the sphere between two checkpoints; TIES trims small deltas, resolves sign conflicts and merges what agrees; DARE randomly drops most of each delta and rescales what remains. mergekit is the reference implementation for all three. The appeal is obvious: one artifact, one memory footprint, no second model resident. The obligation is that the merge is a new model, and new models start from zero. It is measured on the general suite and on every constituent’s axis, and the interesting failure is interference: a merge can lose on both axes at once, and the only way to know is to run it. A merged model that inherits its parents’ scores on a model card is a model card making a claim nobody measured.

An upcycled mixture of experts turns dense checkpoints into the experts of a sparse model and adds a learned gate that activates a few of them per token. Branch-Train-MiX is the reference for growing experts as separate branches and merging them; Drop-Upcycling, and the training-free and progressive variants that followed it this year, are the current refinements; mergekit-moe will assemble one from existing checkpoints. More parameters are resident, fewer are active per token, and the router is inside the weights rather than in front of them. What you owe is everything you owed the merge plus the router’s training and its evidence, because the artifact is now a new base in its own right, with a gating behaviour that has never been measured anywhere.

The one rule that binds all three

A composed artifact is measured fresh and never inherits a constituent’s score. We have a precedent for how seriously to take that, and it is a smaller change than any of the above: fusing a LoRA adapter into its base. Arithmetically it should be a no-op for the model’s behaviour. We re-measured anyway. The 1.5B intake specialist went from 82.10 to 82.10 on the full suite; the 3B from 85.80 to 85.51; movements within a point, consistent with merging in bf16. That is the result you expect, and the reason to run it is that you did not know it until you had. If a fuse gets re-measured, a SLERP does, a router does, and an upcycled mixture certainly does.

The counter is cost: measuring a composed system on every axis of every constituent is a lot of runs, and the temptation is to measure the new thing on the axis it was built to improve and carry the rest forward. That is precisely the shortcut that produced the specialist problem in the first place. Every intake cycle improved the axis it was built for; the loss was on the axis nobody was building for. Composition moves the loss around in the same way — a router hides it behind a refusal, a merge spreads it across both parents, a mixture buries it in a gate — and the axis that finds it is always the one you were tempted to skip.

Where this stands, plainly: as of 5 September 2026 we have specified the compose stage in our lifecycle, with the same shape as every other stage — probes registered before the run, criteria declared before the measurement, promotion that fails closed — and we have not produced or measured a composed artifact. The router Bearing was renamed from is signed and released; Bearing itself is waiting on a fresh signature under the new name. The intake specialists sit behind the gate. Nothing on the Field Index is a composition, and when the first one appears there it will arrive with a general-suite score of its own, measured, not inherited from anything it was built out of.

Evidence

Every figure in this guide is taken from the repository documents below, measured by us on one harness with identical prompts, greedy decoding, and pinned datasets, or from the external sources listed with them.

On the platform

Keep reading

Benchmarking · 6 minHumanEval 57.93 to 3.05. The gate refused, and we kept the receipt.Choosing · 6 minWe declared an order of magnitude. The measurement came back 2.16×.
All guides