← HealthBench logsCoverage matrixConfig check v2Config check v1Log viewer →
HealthBench · model coverage audit

Which model ran which bench, and what is still missing

The coverage picture

Nominally the matrix is nearly full: 45 of 48 model × bench cells have a run. Usably, only 3 of the 8 benches have a complete, apples-to-apples set of all 6 models. The blockers are not missing runs, they are config drift: the grader model changes between benches, and epochs changes between models on the same bench.

Six models were evaluated: GPT-5.5, Claude Opus 4.7, DeepSeek-V4-Pro, PLaMo-3.0-Prime, MedGemma-27B-text-it and MedGemma-4B-it. Eight benches: HealthBench full, consensus and hard, plus HealthBench Professional whole-set and its four use-case slices (consult, writing, research, red-teaming). 68 logs across 10 HuggingFace spaces.

The good news for a comprehensive story: only 5 runs are strictly required to close every real gap, and 3 of those 5 are grader-only passes that reuse cached model responses, so they are cheap. One further decision (what to do about a half-finished gpt-4.1 re-grade) is worth 8 more runs or a deletion, your call.

Model × bench matrix

Scores are the length-adjusted HealthBench score × 100, which is the headline metric OpenAI reports. The last four columns are the Professional use-case slices. Each column header carries its judge model (4.1 = openai/gpt-4.1, 4o-mini = openai/gpt-4o-mini, 5.4 = openai/gpt-5.4) and sample count: columns are internally consistent but not comparable to each other.

Model full4.1 · 5000 consens.4o-mini · 3671 hard4o-mini · 1000 prof5.4 · 525 consult5.4 · 236 writing5.4 · 142 research5.4 · 147 red‑team5.4 · 191
GPT-5.5 55.8c 82.0c 26.0c 47.8 48.6c 36.0c 57.9c 28.2c
Opus 4.7 54.3c 80.2c 27.8c 48.0 47.0c 36.2c 61.1c 26.7c
DeepSeek-V4-Pro 41.7 78.5c 13.8c 31.0* 25.6*c 5.0 52.9 −6.9
PLaMo 3.0 Prime 32.4 74.8c 9.6c 13.7 15.4c −4.3c 28.6c −11.8c
MedGemma 27B 33.2 76.6 4.8p 20.0 17.8p 9.1p 34.4p −6.8c
MedGemma 4B 18.3p 70.8 1.3 9.0 8.2p GAP GAP GAP
physician baseline 43.9

in the comparable set for that column   present but off-config   no run exists
* ran at epochs=1 where the rest of the column ran epochs=8  ·  c score comes from a full cache replay (no model generation)  ·  p mostly cached (<200 candidate tokens per sample)

Reading the cells

The c and p markers matter less than they look. Caching a model's response and re-grading it is legitimate reuse: the response does not depend on the judge. What the markers tell you is that the number cannot be independently reproduced from the published log alone, because the generation happened in some earlier run. 27 of 68 logs are full replays; only 23 generated fresh candidate responses.

The * marker is the one that breaks a table. DeepSeek's Professional runs used epochs=1 (525 samples) while every other model used epochs=8 (4200 samples). More epochs shrinks per-sample judge noise, so DeepSeek's 31.0 carries visibly more error than GPT-5.5's 47.8 next to it.

What is already complete

Three benches have all six models under one judge and one epoch setting. These you can publish today without caveats beyond the usual judge disclosure.

full 6/6
consensus 6/6
hard 6/6
prof 5/6
consult 5/6
writing 5/6
research 5/6
red-team 5/6
olive = complete 6-model comparable set · outline = incomplete

Model rankings are stable across every bench, which is the reassuring part: GPT-5.5 and Opus 4.7 lead and are within noise of each other, DeepSeek is third, then MedGemma-27B and PLaMo trade places depending on the bench, and MedGemma-4B is last everywhere. Whatever you fix in the gaps below is very unlikely to reorder the leaderboard.

The harness itself is validated. The physician baseline on Professional comes out at 43.9 against OpenAI's published 43.7. That is the anchor that says the scoring pipeline is correct, so the gaps below are coverage problems, not correctness problems.

What to run next

5 required runs

These five close every genuine hole in the matrix. Ordered by how much they buy you.

1 · DeepSeek-V4-Pro, Professional whole-set at epochs=8 fixes the * on prof

The only run here that needs fresh generation, so it is the expensive one: roughly 1.3M candidate tokens × 8 epochs plus about 22M judge tokens, by analogy with the other epochs=8 Professional runs. Everything else in the column already ran at 8 epochs, so this single run makes the Professional table uniform.

inspect eval healthbench_professional.py \
  --model openrouter/deepseek/deepseek-v4-pro \
  --epochs 8 \
  -T judge_model=openai/gpt-5.4 -T judge_reasoning_effort=low
2 · DeepSeek-V4-Pro, consult slice at epochs=8 fixes the * on consult

Once run 1 is in the cache, this is a grader-only pass over the same responses. It is the one slice DeepSeek never got at 8 epochs (writing, research and red-teaming already exist).

3–5 · MedGemma-4B, the three missing Professional slices writing, research, red-teaming

MedGemma-4B has consult but not the other three. Its epochs=8 whole-set Professional responses are already cached from the hs-original run on 2026-07-25, so all three are grader-only passes. Cheapest wins in the list.

for uc in writing research red_teaming; do
  inspect eval healthbench_professional.py@healthbench_professional_$uc \
    --model vllm/google/medgemma-4b-it --epochs 8 \
    -T judge_model=openai/gpt-5.4 -T judge_reasoning_effort=low
done

The gpt-4.1 decision

On 2026-08-05 the two MedGemma models were re-run on hard and consensus with the judge switched from gpt-4o-mini to gpt-4.1. Nothing else was re-run. That leaves a half-populated second column on both benches: 2 of 6 models have a gpt-4.1 number, 6 of 6 have a gpt-4o-mini number.

Two clean options, and you should pick one explicitly rather than let both sit in the folder:

OptionCostResult
Drop the Aug-05 runs from the reported set, keep gpt-4o-mini for hard and consensus. free Consistent today. But full stays on gpt-4.1 while hard and consensus stay on gpt-4o-mini, so the three non-professional benches still use two judges.
Finish the gpt-4.1 column: re-grade GPT-5.5, Opus 4.7, DeepSeek and PLaMo on hard and consensus. 8 grader-only runs, roughly 140M judge tokens All three non-professional benches on gpt-4.1, matching full. This is the version worth publishing if the audience compares across benches.

The candidate responses for all 8 of those are already cached from July, so option 2 needs no model generation at all, only judge spend.

Slices with no clean data at all

Beyond the four use-case slices, HealthBench Professional carries three more breakdown axes: difficulty (2 levels), source slice (3), and specialty (36). None of these has a usable number for any model, because they exist only as in-log metrics and those metrics are computed wrongly.

The in-log subset metrics (use_case_*_score, type_*_score, difficulty_*_score, source_slice_*_score, specialty_*_score) discard the length adjustment and clip each sample to [0, 1] before averaging. Comparing them against the standalone slice runs in hs-prof-subsets shows how far off that is:

Model · slicein-log metricstandalone runerror
PLaMo · red-teaming16.88−11.82+28.7
PLaMo · writing19.77−4.31+24.1
MedGemma-27B · red-teaming25.29−6.80+32.1
MedGemma-27B · writing38.799.13+29.7
GPT-5.5 · red-teaming45.8028.19+17.6
GPT-5.5 · consult60.5848.64+11.9
Opus 4.7 · research67.3961.07+6.3

Every error is positive, and the worst cases are the slices where models score near zero, which is exactly where per-sample clipping does the most damage. The four use-case slices are safe only because Ajay built hs-prof-subsets to recompute them as standalone task runs. Difficulty, source slice and specialty have no equivalent, so if you need those breakdowns they must be re-aggregated from per-sample scores, or run as standalone filtered tasks the way the use-case slices were.

Practical rule: never quote a _scorer/<axis>_score value out of a Professional log. Use hs-prof-subsets for the four use-case slices, and recompute anything else yourself.

Why cells disagree

Three sources of drift, in descending order of how much they move a number.

Judge model, worth up to 14 points 3 judges across the set

Raw healthbench_score is just achieved points over possible points (scorer.py:524), so it is fully determined by the judge's rubric verdicts and is untouched by the length-adjustment arguments. That makes these clean single-variable comparisons: same model, same task code, judge swapped.

                          gpt-4o-mini   gpt-4.1     delta
consensus, MedGemma-27B      0.7758     0.9105     +13.5
full, GPT-5.5                0.4873     0.5687      +8.1
full, Opus-4.7               0.4762     0.5344      +5.8
consensus, MedGemma-4B       0.7137     0.7583      +4.5
hard, MedGemma-27B           0.2109     0.1415      -6.9
hard, MedGemma-4B            0.1060    -0.0347     -14.1

gpt-4.1 is more generous than gpt-4o-mini on consensus and harsher on hard, so you cannot even predict the direction of the shift, let alone correct for it. Three judges are in play across the set: gpt-4o-mini (healthbench-v1, all of hs-hard, all of hs-consensus), gpt-4.1 (all of hs-non-professional, plus the Aug-05 re-runs), and gpt-5.4 at reasoning_effort=low for every Professional run.

Epochs, worth a couple of points of extra noise 8 vs 1 on Professional

Professional ran at epochs=8 for five models and epochs=1 for DeepSeek. Every other bench ran at epochs=1 for everyone, so no repeat-epoch variance estimate exists for full, consensus or hard at all.

Cache reuse, worth about 3.5 points on one measured pair cache=true everywhere

DeepSeek has two Professional runs with identical nominal config. The 2026-07-25 one in hs-original spent 10 candidate tokens per sample (a replay) and scored 34.30 raw; the 2026-08-06 one in healthbench-professional-deepseek-v4-pro generated 1.26M tokens fresh and scored 37.81 raw. Use the fresh one. The 3.5-point gap is about 1.5 standard errors, so it is plausibly just resampling, but it is the only direct measurement of cached-versus-fresh drift in the whole set.

How big does a gap have to be to matter

Bootstrap standard errors from the logs, so you can tell a real difference from resampling noise before commissioning a re-run:

Benchnstd errorreads as
full50000.005differences under 1 point are noise
consensus36710.005same
hard10000.010differences under 2 points are noise
professional5250.023differences under 4.5 points are noise

This is why GPT-5.5 at 47.8 and Opus 4.7 at 48.0 on Professional should be reported as tied, and why the judge-swap effects above (up to 14 points) are unambiguously real rather than noise.

One footnote: the Aug-05 MedGemma-4B hard runs report a standard error of exactly 0.0. That is a clipping artifact, not precision. The bootstrap clamps the mean to [0, 1], and since that run's mean is negative every resample clamps to 0, collapsing the spread. Treat the std error as unknown for any run with a negative mean.

Where everything lives

All ten HealthBench spaces are mirrored locally, 68 logs. healthbench-v1 is a symlink into the inspect_ai sandbox where it already lived.

DirectoryrunsContents
healthbench-v17first attempt, 2 usable, gpt-4o-mini judge, no length adjustment
hs-non-professional6the full column
hs-consensus6the consensus column
hs-hard6the hard column
hs-original6the professional column
hs-prof-subsets26the four use-case slices plus physician baseline
medgemma-healthbench-hard2Aug-05 gpt-4.1 re-grade, hard
healthbench-hard-medgemma-v22same experiment, different provider prefix
healthbench-consensus-medgemma2Aug-05 gpt-4.1 re-grade, consensus
healthbench-professional-deepseek-v4-pro1the fresh DeepSeek Professional run

Per-run detail with judge, epochs, token counts and a provenance classification is in hb-spaces/MANIFEST.csv, one row per log. hb-spaces/INDEX.md carries the trap list. On HuggingFace, healthbench-profes and healthbench-prof-part1 exist but hold no logs, so there is nothing to mirror.

Questions this raises

If I only have budget for one thing, what is it?
The DeepSeek Professional epochs=8 run. It is the single cell that breaks the Professional table, and Professional is the bench with the physician baseline, so it is the one you would actually put in front of someone.
Can I merge the four use-case slices back into a whole-set Professional score?
No. 236 + 142 + 147 + 191 = 716 against 525 total samples, so samples carry multiple use-case tags and the slices overlap. Use the whole-set run for the headline and the slices only as breakdowns.
Are the two MedGemma hard spaces duplicates?
Effectively yes. medgemma-healthbench-hard and healthbench-hard-medgemma-v2 are the same experiment run two hours apart, differing only in whether the model was addressed as openai-api/vllm/google/… or vllm/google/…. The 0.8-point spread between them is vLLM sampling noise, which incidentally gives you a free repeatability estimate for the local models.
Was gpt-5-nano ever evaluated?
One attempt on 2026-07-09, which died on a 401. It is not part of the model set.
Why do so many runs show zero token usage?
cache=true was set on every run, and Inspect does not count cache hits toward stats.model_usage. An empty model_usage means every call was served from cache, which is the fastest way to spot a replay masquerading as a re-run.