Skip to main content

AdverseMed-500

DOI License: MIT Python 3.10+ PyPI: adversemed-gen HF Datasets OSF Preregistered Open In Colab

An adversarial medical-QA benchmark of 500 physician-verified false-premise questions designed to stress-test large-language-model calibration on clinical-safety edge cases.

Companion release for:

Vallamsetty, D. (2026). AdverseMed-500: A Physician-Verified False-Premise Benchmark for Measuring Miscalibration in Medical Language Models. The Harker School, San Jose, CA, USA. Pre-registered at OSF: https://osf.io/mehu4

What is in the benchmark

Each of the 500 questions embeds a false clinical premise in one of four failure categories:

Category N
Contraindication 150
Drug–drug interaction 125
Impossible timing 100
Physiological impossibility 125

Difficulty distribution: 108 obvious / 183 subtle / 209 expert.

The correct action on every AdverseMed-500 item is abstain (i.e. flag the false premise), not to pick any listed A–D option. A well-calibrated model should refuse.

Every question was independently reviewed and locked by the first author on 2026-07-23; see benchmark/verified_yaml/ for the per-question ground truth including references to CDC / FDA / clinical-guideline sources.

Dataset integrity:

SHA-256(adversemed_500.jsonl) =
  26cae9e190bc96a96814241ef4e0c779f2ff7de51dd811dcdb425a8af1c586a9

See benchmark/SHA256SUMS.

Quickstart

# 1. Clone
git clone https://github.com/calnugget/adversemed-500.git && cd adversemed-500

# 2. Load the 500-item benchmark
python -c "import json; \
  items = [json.loads(l) for l in open('benchmark/adversemed_500.jsonl')]; \
  print(f'{len(items)} items | first stem:', items[0]['stem'][:80])"

# 3. (Optional) install the generator to mine new adversarial items
pip install -e generator/   # or: pip install adversemed-gen  (once published)

Colab: click the "Open in Colab" badge above for a runnable demo notebook.

Repo layout

adversemed-500/
├── README.md                              # you are here
├── LICENSE                                # MIT
├── CITATION.cff                           # for citation-manager tools
├── .gitignore
├── PROTOCOL.md                            # full study protocol
├── THESIS.md                              # thesis statement + design rationale
├── benchmark/
│   ├── adversemed_500.jsonl               # the 500 questions
│   ├── manifest.json                      # SHA + row counts + category splits
│   ├── SHA256SUMS
│   ├── PATTERNS.md                        # 65-pattern failure library
│   ├── CATEGORIES.md                      # category definitions
│   ├── RUBRIC.md                          # rubric for physician verification
│   ├── SOURCES.md                         # seed benchmarks and citation policy
│   ├── WORKFLOW.md                        # construction workflow
│   ├── PROGRESS.md                        # construction log
│   ├── PROGRAMMATIC.md                    # programmatic-verification notes
│   ├── BENCHMARK_README.md                # extra README from construction dir
│   └── verified_yaml/                     # per-question ground truth (500 files)
│       ├── 001_mmr_pregnancy_contraindication.yaml
│       ├── ...
│       └── 500_*.yaml
├── generator/                             # adversemed-gen: mutate → filter → verify
│   ├── README.md
│   ├── DESIGN.md
│   ├── V0_1_LIMITATIONS.md
│   ├── setup.py
│   ├── cli.py                             # entry point
│   ├── pipeline.py                        # mutate-filter-verify orchestration
│   ├── mutate.py                          # premise-mutator patterns
│   ├── filter.py                          # heuristic filtering
│   ├── verify.py                          # LLM-assisted verification pass
│   ├── emit.py                            # writer to JSONL
│   ├── patterns.py                        # 65-pattern library (as Python data)
│   ├── __init__.py
│   └── prompts/                           # mutator / verifier / self-test prompts
├── inference_pipeline/                    # code to run models on the benchmark
│   ├── run_inference.py                   # main runner
│   ├── analyze.py                         # score outputs → calibration metrics
│   ├── prompt.py                          # per-elicitation-method prompt formatting
│   ├── elicitation.py                     # elicitation methods (temp0, log-prob, verbal, self-consistency)
│   ├── build_adversemed.py                # build script for the benchmark JSONL
│   ├── download_benchmarks.py             # fetch MedQA / MMLU-med / PubMedQA seeds
│   ├── smoke_test.py / smoke_test_v2.py
│   ├── secrets_helper.py                  # fetches API keys from GCP Secret Manager (NO secrets in file)
│   ├── requirements.txt
│   └── providers/                         # anthropic, openai, google, deepseek, bedrock_proxy
├── inference_summaries/                   # per-model per-method summary JSONs (20 files)
│   ├── claude-haiku-4-5__temperature_0.summary.json
│   ├── ...
│   └── gpt-5.4-mini__self_consistency.summary.json
└── scoring/
    └── analysis_outputs/                  # calibration-analysis JSONs used in the paper
        ├── summary.md
        └── <model>__<method>.analysis.json

What is on Zenodo (not in this repo)

The full replication package (raw model responses for all 5 models × 4 elicitation methods = 20 JSONL files, ~5.9 MB) is on Zenodo:

Raw per-response JSONL is included on Zenodo for full reproducibility of the calibration analysis; the per-model summary JSONs and analysis JSONs checked into this repo are sufficient to regenerate the paper's numeric results without touching the raw responses.

Models evaluated

  • Claude Haiku 4.5 (Anthropic)
  • Claude Opus 4.7 (Anthropic)
  • DeepSeek-Chat
  • Gemini 2.5 Pro (Google)
  • GPT-5.4-mini (OpenAI)

Each model was run with four elicitation methods: temperature_0, log_probability, verbal_probability, self_consistency.

How to reproduce

  1. Clone this repo and (optionally) download the Zenodo raw-response tarball.
  2. Create a Python 3.11 virtualenv:
    python3.11 -m venv .venv && source .venv/bin/activate
    pip install -r inference_pipeline/requirements.txt
    
  3. Provide API keys for the providers you want to re-run (ANTHROPIC_API_KEY, OPENAI_API_KEY, DEEPSEEK_API_KEY, GEMINI_API_KEY). See inference_pipeline/secrets_helper.py — the file itself contains no secrets; it looks up keys from GCP Secret Manager if PROJECT_ID is set, or you can just export env vars.
  4. Run inference for one model / method:
    python inference_pipeline/run_inference.py \
      --model claude-opus-4-7 \
      --method verbal_probability \
      --benchmark benchmark/adversemed_500.jsonl \
      --out inference_outputs/
    
  5. Score:
    python inference_pipeline/analyze.py \
      --input inference_outputs/claude-opus-4-7__verbal_probability.jsonl \
      --benchmark benchmark/adversemed_500.jsonl \
      --out analysis_outputs/
    

Pre-registration

  • OSF project: https://osf.io/mehu4
  • Amendment #1 (accepted 2026-07-21): extended construction deadline to 2026-08-30, N held at 500.
  • Construction locked 2026-07-23, 38 days ahead of amended deadline.

Citation

If you use this benchmark or code, please cite both the paper (once posted) and this repository via the CITATION.cff file. Please also cite the seed-benchmark sources (MedQA, MMLU-med, PubMedQA) as documented in benchmark/SOURCES.md.

BibTeX

@software{vallamsetty2026adversemed500,
  author       = {Vallamsetty, Dyuthi},
  title        = {{AdverseMed-500: A Physician-Verified False-Premise
                   Benchmark for Measuring Miscalibration in Medical
                   Language Models}},
  year         = 2026,
  publisher    = {Zenodo},
  version      = {1.0.0},
  doi          = {10.5281/zenodo.21961771},
  url          = {https://doi.org/10.5281/zenodo.21961771}
}

APA

Vallamsetty, D. (2026). AdverseMed-500: A Physician-Verified False-Premise Benchmark for Measuring Miscalibration in Medical Language Models (Version 1.0.0) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.21961771

Contributing

See CONTRIBUTING.md for how to add adversarial patterns, improve the scoring pipeline, or report issues with a specific benchmark item.

License

MIT — see LICENSE. The benchmark data itself is released under the same MIT license; please cite the seed sources per their terms if you reuse material derived from MedQA / MMLU-med / PubMedQA.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

adversemed_gen-0.1.1.tar.gz (31.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

adversemed_gen-0.1.1-py3-none-any.whl (37.5 kB view details)

Uploaded Python 3

File details

Details for the file adversemed_gen-0.1.1.tar.gz.

File metadata

  • Download URL: adversemed_gen-0.1.1.tar.gz
  • Upload date:
  • Size: 31.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for adversemed_gen-0.1.1.tar.gz
Algorithm Hash digest
SHA256 a1c2eb10d3578b3399633cf7dc4edb69c3ab6a8475b0ceaae14f64592b0d5e39
MD5 68aebac1f796852c06d4ce93181a405c
BLAKE2b-256 1edb13cdde887dc88afb31636d43f1f5a21d47555bbf62cc60715586ab20f726

See more details on using hashes here.

File details

Details for the file adversemed_gen-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: adversemed_gen-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 37.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for adversemed_gen-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3000afab4c08ced17588270a9be2bb1a60753820426ab603de63842d440778be
MD5 cc190700cb0d041e62ba6f0d955ab191
BLAKE2b-256 776678510bf0e7a541f2502787c41b1e7cd2abd54dec7ef2d8679a77bd967b0f

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page