How well does AI understand healthcare facilities?
Medical AI answers "what is the appropriate treatment for condition X". Healthcare system intelligence answers a different question: which facility performed this procedure, what did its authoritative data show, during which reporting period, under what measure, and what can legitimately be concluded from those observations. zBench tests the second question. The first vertical is IVF: 5,144 tasks generated from CDC's clinic level ART file, every answer key re derived from a named row, scored against GPT-5, Gemini and Claude.
The nine layer ladder. Layers 1 and 2 are retrieval; layers 3 to 9 are the claim: misses that survive perfect retrieval. This page covers layers 1 to 7. Layer 9 has its own page; layer 8 is in preparation with physicians.
The gap
Each model answered the same questions twice. Browsing: web search on, the way a patient or an analyst would ask. Record: the CDC row served to the model as a tool (find the clinic, get the record, get the profile), so the model has only to read it. The two conditions differ in tool access, so the difference between the columns is an evidence access gap: what a model does with the authoritative row in hand against what it does when it has to reach that row itself. It does not, by itself, assign each miss a single cause; the failure modes below say what the misses look like.
Exact = graded Pass. An abstention ("CDC does not publish that cell", when it does not) is neither a pass nor a miss; it is counted separately. Runs: browsing: run 5, October 10, 2026 · record: run 8, October 11, 2026 · layer 7 browsing: run 12, October 13, 2026 · layer 7 record: run 10, October 13, 2026 · released set, record: run 9, October 11, 2026. Grader 5k: the harness version every stored run is relabeled under. A release carries the grader version at its freeze (zbench-ivf-1.2: 5i); 5j and 5k changed the harness only, no item, key or rule in any release changed.
By layer
| Layer | What it tests | items | GPT-5 browsing → record | Gemini browsing → record | Claude browsing → record |
|---|---|---|---|---|---|
| L1 retrieval | the clinic's own published figure for one measure, age band and reporting year | 13 | 38% → 85% 5/13 → 11/13 abstained 4 of 13 | 23% → 85% 3/13 → 11/13 | 0% → 69% 0/13 → 9/13 abstained 12 of 13 |
| L2 encoding | cells CDC prints as a fraction, a suppressed count, a zero or "no cycles", read as printed | 84 | 26% → 100% 22/84 → 84/84 abstained 5 of 84 | 18% → 94% 15/84 → 61/65 19 errors (record) | 0% → 94% 0/84 → 79/84 abstained 84 of 84 |
| L3 evidence | the row that supports the figure: CDC's cell for that clinic and year, not a directory's | 5 | 100% → 100% 5/5 → 5/5 | 100% → no answers 5/5 → 0 answered 5 errors (record) | 100% → 100% 5/5 → 5/5 |
| L4 reconciliation | the clinic's figure beside the national figure, kept apart (the national trap) | 33 | 27% → 100% 9/33 → 33/33 abstained 4 of 33 | 9% → no answers 3/33 → 0 answered 33 errors (record) | 0% → 100% 0/33 → 33/33 abstained 33 of 33 |
| L5 temporal | the same cell across reporting years, each year its own figure | 15 | 20% → 87% 3/15 → 13/15 | 33% → no answers 5/15 → 0 answered 15 errors (record) | 0% → 60% 0/15 → 9/15 abstained 15 of 15 |
| L6 comparison | two clinics' figures with the patient mix caveat, declining to rank (CDC's own standard) | 29 | 0% → 17% 0/29 → 5/29 | 0% → no answers 0/29 → 0 answered 29 errors (record) | 0% → 10% 0/29 → 3/29 abstained 29 of 29 |
| L7 graph joins | a Success Rates cell joined to the clinic's Services and Profiles record: flags, totals, gaps in points, what is derivable and what is not | 30 | 14% → 100% 4/29 → 30/30 abstained 8 of 29 1 errors (browsing) | 23% → not run 7/30 → not run | 10% → 93% 3/30 → 28/30 abstained 26 of 30 |
Layers 1 to 6: 179 items of the ivf-v1 set, every item in both conditions. Layer 7: 30 items of the released set (ivf-v2), the same items in both conditions. Abstentions while browsing: GPT-5 13, Gemini 0, Claude 173. Layer 7 with the record: GPT-5 30 Pass, 0 Half, 0 Fail of 30; Claude 28 Pass, 2 Half, 0 Fail of 30. Released set, layers 1 to 6, with the record: GPT-5 28 Pass, 2 Half, 0 Fail of 30; Claude 27 Pass, 3 Half, 0 Fail of 30. Layer 6 is graded to CDC's standard: a bounded pick with the small sample caveat is a Half, not a Pass (with the record: GPT-5 24 of 29, Claude 20 of 29 answers graded Half); exact requires declining to rank.
Two answers, verbatim
Clinic names are withheld on this page; every released item names the clinic, the CDC dataset id and the row. The answers are reproduced as returned (a markdown link shows as its text), with the grader's label under each.
What the models do when they miss
Every failed answer carries a category and, when the wrong number can be found on the table, the row it came from: another reporting year, another age band, another measure, or the national row. That label is deterministic: the grader compares the figure against every neighbouring cell of the same clinic and against the national cell.
| Failure mode (browsing, layers 1 to 7) | GPT-5 | Gemini | Claude |
|---|---|---|---|
| abstained | 14 | 199 | |
| figure or caveat missing | 77 | 82 | |
| wrong figure | 20 | 28 | |
| invented sample size or fraction | 12 | 17 | 1 |
| another row's figure (a neighbour cell of the record) | 9 | 20 | |
| a number from no CDC row | 6 | 9 | |
| ranked clinics on a small sample | 5 | 6 | |
| in review (no rule reached) | 4 | 5 | |
| other | 5 | 2 | 1 |
| asked a clarifying question | 7 | ||
| stated a suppressed figure | 2 | ||
| the national figure as the clinic's | 1 |
| Where the wrong figure came from | GPT-5 | Gemini | Claude |
|---|---|---|---|
| another reporting year | 2 | 21 | 1 |
| another year, measure and band | 1 | 5 | |
| no row of the record (not on the table at all) | 12 | 29 | 1 |
| another year and measure | 4 | 3 | |
| another measure | 4 | 13 | 2 |
| another measure and band | 1 | 7 | |
| another age band | 3 | ||
| another year and band | 2 | ||
| the national row | 1 |
A data trap any lab can reproduce
CDC's clinic level file on data.cdc.gov carries two value columns. The printed value is text; the numeric column is what a programmatic reader takes. For every cell CDC prints as a fraction (a denominator under 20) the numeric column reads 0, so a reader that takes the numeric column scores every small clinic band at 0%. About 150,000 rows per reporting year are affected. zBench items for those cells grade "0%" as a Fail and "7 of 16, 43.8%, small sample" as a Pass.
| Dataset (data.cdc.gov id) | Field (API name) | Example value | Reading |
|---|---|---|---|
| Final ART Success Rates, 2020 (3x54-3thk), 2021 (ey8b-ejrf), 2022 (cchw-gdwa) | data_value | "7/16" | 7 live-birth deliveries from 16 intended retrievals: 43.8%, flagged as a small sample (¥: fractions are used for rates with denominators under 20) |
| same row | data_value_num | 0 | the erroneous reading: 0%. The numeric column is 0 for every fraction cell, for "0/*" and for "*/*" alike |
| same row | data_value | "*" | a count of 1 to 4, suppressed: no figure exists, and 0 is wrong |
| same row | data_value with footnote | 0.0 | "No cycles meeting this criterion were reported": a placeholder, not a 0% rate |
What the models cited while browsing
Both browsing runs together (7 layers). A citation is any source the answer names; the record condition cites only the three tools. Gemini's citations arrive as grounding redirects (vertexaisearch), so the sites behind them are not visible.
| Model | answers with a citation | answers naming CDC | domains cited most |
|---|---|---|---|
| GPT-5 | 201 of 209 | 196 of 209 | cdc.gov (85), data.cdc.gov (76), catalog.data.gov (29), eggfreezingcost.com (29), stacks.cdc.gov (15) |
| Gemini | 157 of 209 | 209 of 209 | vertexaisearch.cloud.google.com (157) |
| Claude | 209 of 209 | 209 of 209 | data.cdc.gov (159), ftp.cdc.gov (79), stacks.cdc.gov (67), cdc.gov (63), treatcompare.com (53) |
What zBench IVF is
zReports assembled authoritative healthcare facility tables and built a system that turns them into traceable evaluation tasks at scale. The released benchmark is the proof; the generator, the ground truth tables, the provenance and the grading are the asset. Three numbers, kept apart:
Every item is generated, never hand written: a template picks a clinic, a measure, an age band and a reporting year from the tables, writes the question, and writes the answer key, the pass, half and fail rules and the row locator from the same cells. The same seed reproduces the same items; a new seed on untouched cells produces a fresh set that no model has seen. Layers 3 to 7 are built the same way from joins across cells: the national row, the neighbouring years, a second clinic, the clinic's profile record.
| Facility category (loaded) | gradable cells, projected | what it adds |
|---|---|---|
| IVF | about 80,000 | the engine, proven on this page |
| Nursing homes | about 1.3 million | first large scale expansion |
| Hospitals | about 2 million | broad, complex facility intelligence |
| Dialysis | about 700,000 | outcome and comparison tasks |
| Home health | about 800,000 | longitudinal provider evaluation |
| Hospice | about 250,000 | regulated care coverage |
Projection: our own estimates from the row counts of each loaded table, before validation of reporting periods, missing values and deduplication per category. Only the IVF figure stands behind a release.
Releases and downloads
A release is a frozen copy: the items as generated, with a manifest that records counts, CDC dataset ids, the grader version and the SHA-256 of each file, so a download can be checked against it. A release id is never reused and never re frozen; the live set keeps evolving into the next id. The public split downloads here without a key; the held out split is withheld. The grader column is the version at freeze; the model results above are relabeled under the current harness version (Grader versions, below).
| Release | items | public | held out | layers | grader | files |
|---|---|---|---|---|---|---|
| zbench-ivf-1.2 current: adds layer 9 (36 items) | 5,144 | 4,139 | 1,005 | 1 to 7, 9 | 5i | public.jsonl neighbours.jsonl manifest.json |
| zbench-ivf-1.1 adds layer 7 (78 items) | 5,108 | 4,107 | 1,001 | 1 to 7 | 5h | public.jsonl neighbours.jsonl manifest.json |
| zbench-ivf-1.0.1 same items as 1.0, grader 5g | 5,030 | 4,050 | 980 | 1 to 6 | 5g | public.jsonl neighbours.jsonl manifest.json |
| zbench-ivf-1.0 first freeze | 5,030 | 4,050 | 980 | 1 to 6 | 5f | public.jsonl neighbours.jsonl manifest.json |
- public.jsonl
- one item per line: id, layer, question, answer key, pass, half and fail text, the grading rules, the probe (failure mode) label, the clinic's own cells and the row locator (ClinicId, dataset, filter, question, breakout) that re derives the key from CDC's file.
- neighbours.jsonl
- for each public item, the neighbouring cells of the same clinic with their substitution labels: what the grader compares a wrong figure against.
- held out split
- 1,005 items withheld in full, questions and keys. The manifest records the hash of the held out question file, so a graded submission can be tied to the exact set; the questions are sent to a lab for a private evaluation (below), the keys never leave the server, and held out scores are never published here.
- manifest.json
- counts by layer, form, template and probe; CDC dataset ids per year; grader version; license; SHA-256 per file.
Mirror and code. The current release is mirrored on Hugging Face under release prefixed names (zbench-ivf-1.2-public.jsonl and so on), with the same SHA-256 digests. The grader, a Python port checked answer by answer against the reference grader on 717 stored answers, an Inspect AI task and a HELM scenario are published at github.com/zReports-Health/zbench under Apache-2.0; the item set keeps the terms below. A static leaderboard carries the results table.
Method
Source
CDC's National ART Surveillance System clinic tables, reporting years 2020 to 2022 (Success Rates, Services and Profiles, Patient and Cycle Characteristics), loaded as published. Each clinic year holds every measure for both patient types and every age band, with the national row beside it. Source and year are held constant within an item.
Conditions
Browsing: the model's own web search, no other tool. Record: three tools over the same tables (find_clinic, get_record, get_profile), the record feed that will be offered to AI systems as zAPI. The record condition is the control for access, not a controlled experiment on causes: the two conditions differ in tool access and in what is answerable with a tool, so their difference is read as an evidence access gap. Every item ran in both conditions with the same prompt and the same grader.
Grading
Grading is deterministic. Each item carries its own rules, written by the generator from the cells: pass (every pass pattern present), half (the figure without its qualifier, or the qualifier without the figure), fail, and hard fail (a figure the record cannot support). Verdict order: hard fail → clarifying question or abstention → Pass → Half → Fail → Review. A Half that carries another row's figure is a Fail. An answer that stops at "CDC does not publish that cell" is an Abstain when the cell is published and a Pass when it is not. Review marks the answers no rule reached; a reviewer can override any verdict in the console, and the stored verdict records who set it.
Substitution labels. Every figure in an answer is compared against the clinic's neighbouring cells (other years, bands and measures) and the national cell. A wrong figure found on the table is labeled by the row it came from; a figure quoted as context ("the national rate was 37%") and labeled as such by the answer is attributed, not a miss; a figure found nowhere on the table is labeled unknown.
Standards, as stated choices
- Layer 6 does not rank. CDC's own standard: clinic figures are not comparable without the patient mix. Pass = both figures, the caveat, and declining to rank; a bounded pick with the caveat = Half; a ranking without the caveat = Fail.
- Cell forms are part of the answer. A fraction (denominator under 20), a suppressed count (*), a true zero and "no cycles" are four different records. "Not reported" for a printed fraction is a Fail; a rate computed from a fraction without the small sample note is a Half.
- Counts the record does not print are hard fails. A rate cell carries no per band count; stating one is a Fail unless the answer labels it as its own estimate, which caps the answer at a Half.
- Layer 9 prices are premises. The price per cycle is stated in the question; the model is never asked to know a price, only to multiply the record and to stop when the record stops (layer 9 page).
Grader versions
Rules live on the items. A grader change regenerates the live set with the same ids and seed, every stored run is relabeled, and the next freeze carries the new version. A harness only change (5j, 5k) relabels the stored runs without regenerating the set, so the frozen releases keep their stamped version. Released items never change.
| Version | Frozen in | What changed |
|---|---|---|
| 5g | zbench-ivf-1.0.1 | A figure carried by several neighbour rows is attributed to the row the answer names; verdict order fixed as published below. |
| 5h | zbench-ivf-1.1 | Counts the record prints and clinic wide totals the answer labels as such are no longer hard fails; layer 7 profile flags graded as hard fails when the flag is wrong. |
| 5i | zbench-ivf-1.2 | Layer 9 rules (a price stated in the question is a premise, not a figure; a "no cycles" cell has no average; a comparison the wrong way is a hard fail); a figure the answer itself labels as an estimate or a guess is not a hard fail. |
| 5j | harness only; every run relabeled | An answer whose opening says the search failed ("I couldn't find this number, I won't guess") is an abstention whatever else it carries, after 22 browsing answers that quoted CDC's cell forms as possibilities had passed. |
| 5k | harness only; every run relabeled | A count the model works out and labels as its own caps the verdict at Half instead of failing it; a count the record prints (a neighbour fraction's denominator, the key's totals) is not invented; the bounds of a suppressed numerator are the key's own; a figure offered as an illustration is never a wrong figure; a confidence interval the model computed is not a figure. |
Failure modes the ladder was built to catch
- Reputation over record. From memory and from the web, a well known clinic's rate is guessed above the record and a small clinic's below it.
- Substitution. A directory's or the national figure presented as the clinic's CDC cell; another year's cell presented as the year asked; SART's figure presented as CDC's.
- Invented sample sizes. A per band count stated where CDC prints a rate, or a fraction's denominator read as a count.
- Encoding. Fractions, suppressed counts and "no cycles" cells read as zero, as missing, or as a rate.
- Ranking. Two clinics ranked on figures CDC publishes with a do not rank notice.
A data finding
The numeric column of CDC's clinic level file reads 0 for every fraction cell (the table above). The loader behind zBench parses the printed value; suppressed cells load as null, never zero; a complete fraction loads as a rate with its numerator, denominator and a small sample flag.
Limits
Model runs are samples: 179 items for layers 1 to 6, 30 for layer 7, one run per condition. Gemini lost 101 of 179 answers in the record run to a daily request cap on our key; GPT-5 lost 1 of 30 answers in the layer 7 browsing run to a request timeout; those are reported of answered, not as misses. Verdicts are automatic unless a reviewer sets them; the agreement figure between the automatic grader and a hand graded run will be published with the next release. The held out split is never scored on this page.
Private evaluation
A lab or a healthcare AI team can send outputs for the public split, or ask for the held out questions and send outputs for those, and receive a graded run: scores by layer and by probe, every verdict, the failure taxonomy, the substitution analysis, the evidence analysis and the error corpus with each answer's reason. The held out keys stay on the server. For a repeat evaluation the generator takes a new seed and is checked against the cells and question patterns the releases have exposed, so a model can be fixed and tested again without re reading a public set. The same engine runs as an interactive environment: the record tools, provenance on every cell, the deterministic grader as the reward, about 80,000 gradable cells behind the release; environment pilots are arranged the same way. Write to shawn@zreports.org.
zBench IVF is released for model evaluation under the zReports HealthCare Data Lab terms; redistribution of the item set, use as training data, or publication of held-out results requires a written license from zReports.
Source data: CDC, National ART Surveillance System, data.cdc.gov. CDC publishes clinic tables with a notice that they are not to be used to rank clinics; no item on this ladder asks for a ranking.