xinxuxin/keystone-bench
A clinical decision-evidence benchmark: pull the one fact an answer rests on, and see whether the assistant's action moves with the evidence. Built on HealthBench.
Keystone Bench – A Clinical‑Decision Evidence Benchmark for Chat‑based AI Assistants
What it is
- A data set and evaluation framework that measures how well a medical chat assistant reacts when the evidence it relies on changes. Each original HealthBench conversation (a patient‑doctor dialogue) is paired with twins – edited versions that alter exactly one decisive fact (e.g., remove a pregnancy status, add a contradictory lab value, change a demographic attribute). A control version re‑words the original without changing any fact.
- For every twin the benchmark provides a decision frame (what decision is being made, which fact the decision rests on) and an evidence state that lists:
- the acceptable actions the assistant should take,
- actions that are forbidden,
- the decisive question the assistant must ask or answer,
- the fact it must not assume.
- Human clinicians write rubrics for the original conversation; the benchmark then scores whether the model’s reply respects the rubric after the fact is missing, contradicted, or altered.
Why it matters
- Current medical‑chat benchmarks only check if a model gives a correct answer for the original prompt. They ignore what the model should do when a key piece of evidence is absent or wrong – a situation that happens often in real‑world triage.
- Keystone makes that gap measurable, letting researchers quantify evidence‑sensitivity (does the model change its answer appropriately) and robustness to edits (does it keep answering when it shouldn’t).
Key components
| Component | Description |
|---|---|
| Twins (7,419 total) | Four systematic edit families per source: missing_evidence, conflicting_evidence, demographic_shift, salient_distractor (negative control) plus five optional families such as alternative_evidence and alternative_evidence_hard that tweak a numeric value across a clinical threshold. |
| Sources | 1,260 HealthBench conversations (multi‑turn, byte‑identical to the original). |
| Layers / splits | core, strict, primary, quick – increasingly stringent subsets; dev/test split (80/20) ensures twins and controls never cross splits. |
| Reference results | Pre‑computed replies from five commercial assistants (GPT‑4.1 judge) so users can compare new models without paying for API calls. |
| Grader / judge | A separate LLM (different vendor) that maps a model’s reply to the evidence‑state annotation, producing labels like acceptable, forbidden, escalated, etc. |
| CLI / Python library | Install via pip install keystone-bench. Commands such as keystone build, keystone run, keystone audit handle data construction, evaluation, and full audit reporting. |
| Audits & checks | SHA‑256 file hashes, 131 unit tests, shortcut‑audit, and a “degenerate‑policy” check that ensures no fixed policy can cheat the benchmark. |
How to use it
- Install the package and rebuild the benchmark locally (it pulls the open‑source HealthBench data and applies the published edits).
- Load pairs in Python (
load_pairs) or list them withkeystone pairs. - Run your model on each original/twin/control conversation, providing a separate LLM as the judge (must be a different vendor).
- Collect records and call
summarizeor inspect the generatedREPORT.mdfor per‑family scores. - Audit the whole run with
keystone audit– it checks that the expected effects (twin‑minus‑control differences, equivalence of controls, etc.) hold.
What the published results show
- On the quick set (40 items per family), the best‑performing model (GPT‑5.6‑terra) achieved a 0.74 success rate on
missing_evidence(asking the missing question) and 0.96 ondemographic_shift(adjusting advice). Negative‑control families stayed near 0.9‑0.95 unchanged, confirming the benchmark’s ability to separate true evidence‑sensitivity from trivial answer‑stability. - On the held‑out test split, all preregistered hypotheses (perturbation families cause a measurable shift, controls show equivalence, etc.) were confirmed with strong statistical significance.
Who might find it useful
- Researchers building medical chatbots who need a rigorous, clinically‑grounded way to test how a model reacts to missing or contradictory information.
- Evaluation engineers who want a reproducible benchmark with built‑in audits, versioned data, and reference results.
- Regulators or safety teams looking for evidence that a system does not hallucinate or ignore critical gaps in patient data.
Where to start
- Read the Project page and the linked docs (
DATA_CARD.md,SCHEMA.md,PROTOCOL.md) for full definitions of families and evidence states. - Clone the repo, install the dev extras, and run the quickstart script in
examples/quickstart.py. - Use the provided reference runs (
results/reference/) to validate your own judge implementation before testing new models.
All details above are taken directly from the repository’s README; no additional features have been inferred.
Related
- Project
- Dispatch
- Dispatch
- Project
- Dispatch