Internal Benchmark Report — Sample
A worked example of a benchmark built for one organisation's own task — how the set was constructed, contamination controls, confidence intervals, and why the ranking reversed under task weighting.
Markdown. No sign-up, no email.
This is an illustrative example. The models are anonymised and every figure is invented. A benchmark's numbers are only meaningful for the task and set that produced them, which is precisely why copying someone else's is a mistake.
Internal benchmark — legal document analysis#
| Purpose | Rank candidate models for our own task, and track drift over time |
| Set | 400 items across 5 task types, built in-house from our own documents |
| Contamination control | Never published, never sent outside the evaluation, rebuilt annually |
| Scoring | Automated where objective; two blind human raters where not |
| Run | 3 repetitions per item per model |
1. Headline ranking#
| Score | 95% CI | Cost per item | p95 latency | |
|---|---|---|---|---|
| Model A | 78.4 | ±2.1 | $0.211 | 5.9 s |
| Model B | 76.9 | ±2.3 | $0.068 | 2.4 s |
| Model C | 71.2 | ±2.6 | $0.052 | 1.9 s |
A and B are not separated by this benchmark. The 1.5-point gap sits inside overlapping confidence intervals, and reporting "A wins" from these numbers would be reporting noise.
Most published comparisons omit the interval entirely, which is how three-point differences become headlines.
2. By task type — where the ranking reverses#
| Task type | Items | Model A | Model B | Model C |
|---|---|---|---|---|
| Clause extraction | 120 | 84.1 | 86.7 | 79.0 |
| Obligation identification | 90 | 81.2 | 77.4 | 70.1 |
| Date and party extraction | 80 | 92.0 | 91.4 | 88.2 |
| Risk summarisation | 60 | 74.8 | 68.0 | 61.4 |
| Cross-reference resolution | 50 | 51.2 | 49.9 | 44.0 |
Model B beats Model A on the task type that is 60% of our volume. The overall ranking is an average across a distribution that does not resemble our work.
Weighted by actual volume rather than by set composition:
| Unweighted | Volume-weighted | |
|---|---|---|
| Model A | 78.4 | 79.1 |
| Model B | 76.9 | 82.3 |
| Model C | 71.2 | 76.8 |
The ranking reverses, and the reversal is worth more than the entire headline table.
3. Cross-reference resolution — the honest row#
Every model scores near or below 51 on cross-reference resolution. This is the row that should be read first by anyone deciding what to automate.
At 51%, the task cannot be automated at any of the three. It is 12% of volume and it stays with a person. A benchmark that reports only an average conceals which parts of a job are currently out of reach, which is the most actionable thing it could tell you.
4. Contamination#
Taken seriously, because a benchmark a model has seen measures memory rather than capability.
- Built from our own documents, redacted, never published anywhere
- Never sent to any provider outside the evaluation itself, and no provider is offered it for improvement purposes
- Canary items: 12 items contain a distinctive invented phrase. If it ever appears in a model's output unprompted, the set is compromised and rebuilt.
- Rebuilt annually with fresh documents, keeping 20% of the previous set to bridge the two versions
- Providers' published scores on public benchmarks are recorded for context and are not used in the ranking
The canary check has fired zero times in three runs.
5. Where scoring is subjective#
Two of the five task types cannot be scored automatically. Risk summarisation and obligation identification were rated blind by two people against a rubric, with a third resolving disagreement.
| Agreement between raters | |
|---|---|
| Obligation identification | 88% |
| Risk summarisation | 71% |
Risk summarisation at 71% inter-rater agreement is the weakest number in this report. The raters disagree with each other nearly a third of the time, which places a ceiling on how much weight the 74.8 versus 68.0 gap can carry. It is reported, and the rubric is being tightened before the next run.
Reporting rater agreement is what separates a benchmark from a scoreboard.
6. Drift tracking#
The benchmark's second purpose is detecting change in a model we already use.
| Run | Model B score |
|---|---|
| 2026-02 | 76.1 |
| 2026-04 | 76.6 |
| 2026-06 | 71.8 |
| 2026-07 | 76.9 |
The June result is the most valuable data point here. A 4.8-point drop, well outside the interval, on an unchanged set with unchanged prompts. It coincided with a provider-side update, was raised, and the following version restored the score.
Without a stable internal set, that drop would have been experienced as scattered user complaints with no cause.
7. What this benchmark cannot tell you#
- Nothing about tasks not in it. Five task types is our work, not all legal work.
- Nothing about robustness to unusual inputs. Every item is a real document of the kind we process.
- Nothing about behaviour at production volume, latency under load, or cost at scale beyond the per-item figures.
- Nothing about how the models will behave next month, as the June row demonstrates.
8. Recommendation#
Model B, on volume-weighted performance, at a third of the cost and less than half the latency. Do not automate cross-reference resolution at any model. Re-run on every provider version change, and on a fixed quarterly schedule regardless.
Notes on using this format#
Report confidence intervals. The headline gap between the top two models was inside the noise. Without intervals it reads as a result.
Weight by your own volume. The unweighted ranking and the weighted ranking disagreed on the winner, and only one of them describes the work.
Report the row where everything fails. It tells you what not to automate, which is more actionable than knowing which model is 1.5 points ahead.
Guard against contamination and say how. A benchmark that has leaked measures memory. Canary items cost nothing and make the claim checkable.