What Should Customers See in a Closed-Versus-Open Model Comparison?
Paired per-case results rather than two averages, results split by evidence condition, recall on seeded cases, cost and latency measured from real calls, the exact model and adapter identity, the dataset version, the gate contract, what was excluded, and whether each number came from development, acceptance, or production.
Part 30 of the closed-to-open model transfer series is a specification for the comparison itself. It describes the fields a customer needs to make an informed switch decision, why each one matters, and the common presentations that look rigorous while hiding the failures that would change the decision.
The short version
A comparison is a claim about two identified models on identified cases under an identified contract. Every number on it should carry enough context that the customer could reproduce it, and every omission should be visible as an omission.
Two averages are not a comparison
The most common presentation is a table with the closed model's average score in one column and the open model's in the other. It answers the wrong question. Two averages can be equal while the models disagree on a third of the cases, and the cases where the open model loses are exactly the ones that decide whether a customer's hardest requests still get handled.
A comparison worth showing is paired. Each case ran on both models under the same inputs, the same pre-fetched tool results, and the same scoring, and the customer can see the distribution of per-case differences: how many cases the open model matched, how many it lost, by how much, and which ones. The average is a summary of that distribution, not a substitute for it.
The fields a comparison must carry
The table below lists what a customer should be able to find on the comparison without asking. Each row names the field, why it changes the decision, and the failure that its absence hides. A comparison missing several of these is a demo, not a decision document.
- Field
- Paired per-case deltas
- Why the customer needs it
- Shows where the models differ, not just the average
- What its absence hides
- Losses on hard cases offset by wins on easy ones
- Field
- Split by evidence condition
- Why the customer needs it
- Supported, partial, and no-evidence requests behave differently
- What its absence hides
- A model that invents answers when evidence is missing
- Field
- Seeded adverse-case recall
- Why the customer needs it
- Confirms the model does not miss the cases that must not be missed
- What its absence hides
- A default answer that scores well on ordinary cases
- Field
- Cost and latency per arm, measured
- Why the customer needs it
- The economic claim depends on real calls, not rate cards
- What its absence hides
- Projected savings that the serving bill will not deliver
- Field
- Exact model and adapter identity
- Why the customer needs it
- Ties the numbers to one reproducible artifact
- What its absence hides
- Results from a build that is not what gets deployed
- Field
- Dataset version and split manifest
- Why the customer needs it
- Proves the evaluation cases were never trained on
- What its absence hides
- Contamination that inflates the open model's score
- Field
- Gate contract and margin
- Why the customer needs it
- States what parity meant before the results existed
- What its absence hides
- A margin chosen after the fact to fit the outcome
- Field
- Exclusions and failures, per arm
- Why the customer needs it
- Missing cases change the denominator
- What its absence hides
- Timeouts and invalid outputs silently dropped from one side
Split the results by evidence condition
An agent's requests fall into conditions the evaluation should keep apart: requests the available evidence fully supports, requests it partially supports, and requests with no relevant evidence at all. The closed model and the open model often match on the first and diverge sharply on the third, where the right behavior is to say so rather than to answer.
A single pooled score averages across those conditions in whatever proportion the evaluation set happened to contain. Show the paired result within each condition, with its own case count. A customer whose traffic is heavy on partial-evidence requests needs that row, not the pooled one. Part 18 of this series describes how to construct the three conditions; the comparison should present them as they were constructed.
Show recall on the cases that must not be missed
Every agent has a class of request where a miss is expensive: a compliance flag, a refund limit, a safety escalation, an adverse finding. Seed the evaluation set with a known number of those cases and report how many each model caught. The number should be shown as a count, not a percentage, because the customer needs to know both the recall and how thin it is.
Be honest about what zero misses means. If the open model caught all 25 seeded cases, the 95 percent upper bound on its true miss rate is still about 12 percent by the rule of three. State that bound on the comparison. A customer who sees 100 percent recall without the case count will assume a certainty the evidence does not support.
Measure cost and latency, do not quote them
A comparison that lists the closed model's per-token price beside the open model's per-token price has not measured anything. Show cost per case for each arm computed from the tokens each model actually used on each case, because the open model may produce longer or shorter outputs than the closed one and the difference changes the bill. Show latency percentiles per arm from the same calls, at the concurrency the evaluation ran at, with that concurrency stated.
Label the serving configuration the numbers came from: hardware, quantization, engine, and whether it was a dedicated replica or a per-token endpoint. Part 28 covers why a number from one configuration does not transfer to another; the comparison should make the configuration visible so the customer can ask whether it matches what will be deployed.
Name the artifacts, not the model family
A comparison that says an 8B open model matched the closed model has named a family, not an artifact. The customer needs the base model identifier and revision, the adapter identifier, the training job, the dataset version the adapter was trained on, and the manifest that assigned cases to training, development, and protected splits. Those identifiers are what let anyone check that the evaluation cases were never seen in training and that the artifact evaluated is the artifact proposed for deployment.
The same applies to the closed arm. Closed models change under their aliases. Record the exact model version the comparison ran against and the date, because a comparison against last quarter's version of the closed model is a comparison against a model the customer may no longer be running.
State the gate contract before the results
The comparison should show the rule that was fixed before any candidate output was scored: the non-inferiority margin, the recall requirement on seeded cases, the mode checks for collapse, how missing data was treated on each side, and how many cases the rule required. A reader should be able to see that the rule existed first and that the result was judged against it, not that a rule was chosen to describe the result.
Show the outcome against each element of the rule separately. A candidate can pass the margin and fail recall, or pass both and fail a mode check. A single pass or fail label hides which element was close, and the close elements are where the customer's follow-up questions belong.
Show exclusions and the state each number came from
Cases that timed out, produced invalid output, or hit an infrastructure error have to appear on the comparison per arm, with the rule that was applied to them. A comparison that dropped twelve failed cases from the open arm and none from the closed arm has changed its denominator in a direction that favors the candidate, and the customer cannot see that unless the exclusions are listed.
Finally, label every number with the state it came from. Development numbers come from cases the team iterated on and can be optimistic. Acceptance numbers come from the frozen protected set and are the ones a switch decision should rest on. Production numbers come from live traffic after a switch and are the only ones that describe the customer's actual outcome. A comparison that mixes the three without labels invites the reader to treat a development score as a production result.
Where Converra fits
Converra's model benchmarks run every candidate on every scenario three times with median scoring and report quality, cost, and latency per model from the real calls, with the comparison table attached to the pull request that proposes the switch. For a fine-tuned candidate, the workflow records the gate result against a specific dataset version with protected splits, so the artifact identity and the split manifest travel with the result, and the production switch waits for an explicit approval on that candidate.
After a switch, the model-swap verdict on real traffic reports parity verified, regressed, confounded, or insufficient data with the cost delta per arm, which is the production row of the comparison above. No open-weight production verdict for a customer agent has been published yet; the fields described here are what a customer should demand from any comparison, whichever tool produces it.
Frequently asked questions
What should a comparison between a closed model and an open model include?
A comparison between a closed model and an open model should include paired per-case results, results split by evidence condition, recall on seeded hard cases, cost and latency measured from the calls, exact model and adapter identities, the dataset version, the pre-registered gate contract, per-arm exclusions, and the state each number came from.
Why is an average score not enough to compare two models?
An average score is not enough to compare two models because two equal averages can hide disagreement on a large share of cases, and the cases the open model loses are often the customer's hardest requests. Paired per-case differences show where the models diverge.
How should a model comparison present recall on critical cases?
A model comparison should present recall on critical cases as a count of seeded cases caught out of the total, together with the statistical upper bound on the miss rate. Zero misses in 25 cases still leaves a 95 percent upper bound of about 12 percent.
Should a model comparison show list prices or measured costs?
A model comparison should show measured costs per case from the tokens each model actually used, plus latency percentiles at a stated concurrency and serving configuration. List prices do not account for output length differences, fallbacks, or capacity.
What is the difference between development, acceptance, and production numbers in a model comparison?
Development numbers come from cases the team iterated on, acceptance numbers come from a frozen protected set, and production numbers come from live traffic after the switch. Only acceptance numbers should drive a switch decision, and only production numbers describe the actual outcome.
Related reading
Part 31: Approve, monitor, and roll back
What the customer does with the comparison once it is in front of them.
Part 21: What counts as parity
The definition the gate contract on the comparison is supposed to encode.
Model benchmarks for agents
How Converra produces a per-model comparison from your agent's own scenarios and attaches it to the switch PR.
Stop reading dashboards. Ship the fix.
Converra diagnoses the failure, tests the fix in simulation, and verifies it worked on your real traffic. Connect your production data and see it on your own agent.