3DVerifierBench
Harbor adapterDVerifierBench Grounding Generative Verification in 3D ContentShuanglin Li, Jiaying Lin, Shuquan Ye.
- Samples
- 2,581
- Released
- 2026
- Scores
- 10
KlinikeBench: Evaluating Language Models Beyond Diagnostic Accuracy
KlinikeBench: 333 long-horizon clinical consultations with an LLM-simulated patient, a 140-tool clinical action surface and four-gate scoring (diagnosis, required tools, parameterised actions, LLM-judged must-ask coverage).
$ npm i -g lettokenburn-cli$ ltb bench run klinikebench/klinikebench@5 --benchmark klinikebench -a claude-code -m anthropic/claude-opus-4-8$ ltb bench push
Harbor-native: you can also call Harbor directly.
$ harbor run -d klinikebench/klinikebench@5 -a claude-code -m anthropic/claude-opus-4-8
Runs happen on your machine with your own subscription; only the score summary is pushed. CLI docs
| Harness | Source | Confidence | Link | |||
|---|---|---|---|---|---|---|
| Claude Opus 5 | 29.4 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| Claude Opus 5.5 | 28.8 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| GPT-6 Astra | 24.3 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| GPT-5.6 Sol | 23.7 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| GPT-5.4 | 23.4 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| Grok-4.7 | 22.2 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| Grok-4.6 | 21.9 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| Grok-4.3 | 21.3 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| Gemini 3.8 Flash | 18.9 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| Claude Opus 4.8 | 16.8 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| GPT-5.5 | 16.8 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| GPT-5.4-mini | 15.9 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| Gemini-3.5-flash | 15.6 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| GPT-5.1 | 15.3 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| Claude Sonnet 5 | 13.8 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| Gemini 3.7 Flash | 10.8 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| GPT-5.6-terra | 8.4 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| GPT-4.1 | 7.5 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| GPT-5.6 Luna | 7.5 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| GPT-4o | 3.9 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| GPT-5.3-codex | 3.6 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| Claude Haiku 4.5 | 2.7 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| GPT-4.1-mini | 2.1 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| GPT-4.1-nano | 0.9 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
| GPT-4o-mini | 0.6 | N/A | Independent | medium | Sep 29, 2026 | arxiv.org |
Every number links to where it was published. Low-confidence rows are muted and need per-cell verification.
333 long-horizon clinical consultations for LLM agents. In each task the agent plays a clinician: it interviews an LLM-simulated patient, orders tests and looks things up through a 140-tool clinical action surface, and records a diagnosis. Everything happens through the clinic CLI inside the task container:
clinic brief # patient id, specialty, turn budget
clinic tools # tool schemas
clinic say "When did the pain start?"
clinic call order_lab_test '{"patient_id": "P...", "test_name": "CBC"}'
clinic call record_diagnosis '{"patient_id": "P...", "diagnosis": "...", "confidence": "high", "reasoning": "..."}'The verifier scores four gates; reward = 1 only if all pass (pass@1 in the paper):
| gate | passes when | |---|---| | diagnosis | the recorded diagnosis matches the reference (or an accepted synonym) | | required tools | every required clinical tool was called | | parameterised actions | no forbidden tool or parameter violations | | must-ask | an LLM judge confirms every must-ask history topic was covered |
/logs/verifier/reward.json also reports each gate separately, plus episode length.
Budgets: 10 patient turns and 30 agent steps (slightly more for tool-heavy tasks), 40 min agent timeout.
The simulated patient (in the task container) and the must-ask judge (in the verifier) call an OpenAI-compatible chat-completions endpoint. The paper's protocol uses gpt-5.4-mini for both, which is the default:
export OPENAI_API_KEY=... # used for the patient and the judge harbor run -d klinikebench/klinikebench -a terminus-2 -m <provider/model>
Override per role with CAA_PATIENT_BASE_URL / CAA_PATIENT_MODEL / CAA_PATIENT_API_KEY and CAA_JUDGE_BASE_URL / CAA_JUDGE_MODEL / CAA_JUDGE_API_KEY. CAA_JUDGE_ENABLED=0 switches the must-ask gate to a rule-based scorer (no judge calls; numbers are then not comparable to the paper). Changing the patient or judge model also changes scores; report them alongside results.
Keeping the key out of the agent's reach. Harbor passes [environment.env] into the container, so the agent's shell can see the patient key. For leaderboard-grade runs, run a small OpenAI-compatible proxy on the host that adds the key, point the patient at it and leave the key unset:
export CAA_PATIENT_BASE_URL=http://172.17.0.1:<port>/v1 # docker0 address on Linux; host.docker.internal on macOS export CAA_PATIENT_API_KEY= OPENAI_API_KEY= # the proxy holds the key; the judge can use its own CAA_JUDGE_API_KEY
Each episode makes at most one patient call per patient turn (10 max) and one judge call per must-ask topic.
CAA_REWARD_MODE = outcome (default: the benchmark score), diagnosis (diagnosis gate only) or multigate((2·diagnosis + required_tools + parameterised_actions + must_ask) / 5). Only changes the scalar reward; every gate is always logged. Used for RL training.
CAA_MAX_STEPS_OVERRIDE = an integer agent-step cap, or none to remove it (step-cap ablation). Empty by default.klinikebench/klinikebench contains all 333 tasks. The fine-tuning experiments use a 283 / 50 train / test split (42 of the 50 test diagnoses never occur in training); the task-id lists are in splits/ of the training code repository (https://github.com/Zehui127/klinikebench-train). To run only the 50 test tasks:
harbor run -d klinikebench/klinikebench $(sed 's|^|-i klinikebench/|' splits/heldout_task_ids.txt) -a terminus-2 -m <provider/model>
hpoa, primekg and mendeley tags in task ids);the patient is always an LLM simulation.
back to per-task data (scores mostly moved on the required-tools gate). Adds CAA_REWARD_MODE and CAA_MAX_STEPS_OVERRIDE; their defaults don't change scoring. Case content is unchanged.
If you use KlinikeBench, please cite the KlinikeBench paper (arXiv:2609.38480):
@misc{fang2026klinikebench,
title = {KlinikeBench: Evaluating Language Models Beyond Diagnostic Accuracy},
author = {Fang, Xueting and Li, Zehui and Yang, Yang and Giovino, Camilla and Patel, Shubh K. and
Prajapati, Shailly and Subasri, Vallijah and Shan, Caihua},
year = {2026},
eprint = {2609.38480},
archivePrefix = {arXiv},
url = {https://arxiv.org/abs/2609.38480}
}