HealthBench

July 24, 2026 ยท View on GitHub

An implementation of OpenAI's HealthBench and HealthBench Professional evaluation frameworks, based on simple-evals. This repository focuses exclusively on HealthBench evaluations, adds support for additional models (Claude, Gemini), and is kept in sync with the upstream scoring and evaluation logic so results are fully reproducible. Some model providers (e.g. Moonshot AI, Z.AI, Meta AI, xAI) are accessed via hopper, a unified Python interface for calling model APIs.

Supported Evaluations

Eval nameDescriptionExamples
healthbenchFull HealthBench benchmark5,000
healthbench_hardDifficult subset of HealthBench1,000
healthbench_consensusConsensus subset of HealthBench3,671
healthbench_metaMeta-evaluation (grader quality)29,511
healthbench_professionalHealthBench Professional (clinician chat tasks)525

Grader: healthbench, healthbench_hard, healthbench_consensus, and healthbench_meta use gpt-4.1-2025-04-14 (Chat Completions API) by default. healthbench_professional uses gpt-5.4-2026-03-05 at low reasoning effort (Responses API) per the paper. Override with --healthbench-grader-model and --healthbench-grader-reasoning-effort.

Data: healthbench, healthbench_hard, and healthbench_consensus load from ๐Ÿค— openai/healthbench with OpenAI public blob as fallback. healthbench_professional loads from ๐Ÿค— openai/healthbench-professional with a bundled local file as fallback. healthbench_meta loads from the OpenAI public blob.

HealthBench Professional evaluates LLMs on real clinician chat tasks spanning three use cases: care consult, writing and documentation, and medical research. It applies a length adjustment penalty by default (center=2,000 chars, penalty=0.0147 per 500 chars) as described in Section 4.1 of the paper. Data is loaded from HuggingFace automatically, with the bundled local file as a fallback if HuggingFace is unavailable.

Setup

Step 1: Install uv (if not already installed):

curl -LsSf https://astral.sh/uv/install.sh | sh

Step 2: Clone the repository and install dependencies:

git clone https://github.com/your-username/HealthBench.git
cd HealthBench
uv sync

Environment Variables

Create a .env file in the project root with your API keys:

OPENAI_API_KEY=your_openai_key
ANTHROPIC_API_KEY=your_anthropic_key
GEMINI_API_KEY=your_gemini_key
# Only needed for models run via hopper:
MOONSHOT_API_KEY=your_moonshot_key
ZAI_API_KEY=your_zai_key
META_API_KEY=your_meta_key
XAI_API_KEY=your_xai_key

Usage

Run all commands from inside the HealthBench directory.

Quick test (10 examples, useful for verifying setup):

uv run python -m healthbench \
  --model gpt-5.5-2026-04-23 \
  --eval healthbench_hard \
  --n-threads 4 \
  --examples 10

Run full HealthBench:

uv run python -m healthbench \
  --model gpt-4.1 \
  --eval healthbench

Run HealthBench Hard or Consensus:

uv run python -m healthbench --model gpt-4.1 --eval healthbench_hard
uv run python -m healthbench --model gpt-4.1 --eval healthbench_consensus

Run HealthBench Professional:

uv run python -m healthbench \
  --model gpt-4.1 \
  --eval healthbench_professional

This automatically loads the 525-example dataset from HuggingFace, applies the paper's default length adjustment (center=2,000, penalty=0.0147/500 chars), and uses gpt-5.4-2026-03-05 at low reasoning as the grader โ€” all visible in the printed args namespace at runtime.

Override the grader for any eval:

uv run python -m healthbench \
  --model gpt-4.1 \
  --eval healthbench \
  --healthbench-grader-model gpt-5.4-2026-03-05 \
  --healthbench-grader-reasoning-effort low

Parameters

ParameterDescription
--modelModel name, or comma-separated list of names (use --list-models to see all available models)
--list-modelsPrint all available model names and exit
--evalEvaluation type: healthbench, healthbench_hard, healthbench_consensus, healthbench_meta, healthbench_professional
--model-reasoning-effortReasoning effort for the candidate model(s): low, medium, high, xhigh (xhigh is Anthropic-only). Only applies to reasoning-capable samplers (Responses API or hopper); the effort is appended to the model name in output files.
--n-threadsNumber of parallel threads (default: 4)
--n-repeatsNumber of evaluation repeats (default: 1)
--examplesNumber of examples to run (overrides default)
--debugRun in debug mode with 10 examples
--output-dirDirectory to write results (default: results/)
--healthbench-input-pathCustom JSONL data path in HealthBench format (only for --eval=healthbench)
--healthbench-grader-modelGrader model ID (default: gpt-4.1-2025-04-14; auto-set to gpt-5.4-2026-03-05 for healthbench_professional)
--healthbench-grader-reasoning-effortReasoning effort for the grader: low, medium, high (auto-set to low for healthbench_professional)
--healthbench-length-adjustment-centerCenter character count for length penalty (auto-set to 2000 for healthbench_professional)
--healthbench-length-adjustment-penalty-per-500-charsScore penalty per 500 response characters (auto-set to 0.0147 for healthbench_professional)
--healthbench-professional-modeValidation bundle for --eval=healthbench with a custom input path โ€” requires --healthbench-input-path, --healthbench-grader-model gpt-5.4-2026-03-05, --healthbench-grader-reasoning-effort low, and both length adjustment flags

Tips & FAQ

Managing API Rate Limits

The --n-threads parameter controls parallel API requests. The default is 4, which is safe for local development on any machine. Raise it if you have high-tier API access and want faster runs.

API tierRecommended --n-threads
High-tier / Enterprise50โ€“120
Standard10โ€“20
Low-tier / Free / Local4 (default)
uv run python -m healthbench \
  --model gpt-4o \
  --eval healthbench \
  --n-threads 20

References