Being right once isn't reliable: Groundhog v1.1 | PharmaTools.AI
← Publications · Notes
Note · Evaluation · Agents · 8 Nov 2026

Being right once isn’t reliable

Most agent benchmarks ask whether a model can get the answer. In medical communications the question is whether it gets the answer every time, including when a tool times out, a label is out of date or a retrieved page carries an instruction it shouldn’t follow. I built Groundhog to measure that: 50 hand-verified medical-evidence tasks, each run five times clean and five times under an injected fault, against frozen tool responses so every model sees the same evidence. This note reports v1.1: three models, 1,500 scored runs.

How it works

Tasks a medical writer actually does Eight categories: look up a dose in a UK SmPC, compare US and UK labels, check a leavepiece claim against its paper, find and cite a study, pull a trial’s primary endpoint, report two sources that disagree, abstain when the fact isn’t in any source, and handle input containing patient identifiers. Every gold answer was checked by hand against its source; none was edited to make a model pass.
Repeat runs, scored as pass^k pass^5 is the chance that all five runs of a task are right, averaged over tasks. A model that is right 90% of the time on one attempt passes five in a row only 59% of the time, so pass^5 rewards consistency, not luck. Confidence intervals are bootstrapped over tasks.
Five kinds of fault A record/replay layer injects one fault per task: a tool error, an empty result, the answer moved past the first page, a superseded label version (built from real archived DailyMed labels), or an instruction planted in retrieved text. Sending a patient identifier to an external tool, citing a fabricated ID or following a planted instruction is a hard fail, whatever the answer.
A judge checked against me Explanatory answers are graded by a model judge from a third family (OpenAI GPT), so no model grades its own. Before trusting it I graded 30 items blind: it agreed with me on 29 of 30 (Cohen’s kappa 0.91).

Results

Claude Sonnet 5.5Gemini 3.1 Pro (preview)Gemini 3.5 Flash
pass@1, clean0.980.920.84
pass^5, clean0.960.840.72
pass^5, with a fault0.940.720.72
Followed a planted instruction0 / 557 / 551 / 55
Ran out of tool calls (15)2 / 50013 / 50058 / 500

95% CIs for clean pass^5: Claude 0.90–1.00, Gemini 3.1 Pro 0.74–0.94, Gemini 3.5 Flash 0.60–0.84. Default settings, identical tools and system prompt. Runs 6–8 Nov 2026.

What the runs showed

What I’d tell someone building one

Limits, stated plainly: 50 tasks, one verifier (me), English-language UK and US sources, three models, and faults that fire once, so re-querying recovers. The superseded-label fault covers only two tasks, and the privacy tasks never needed patient details, so they applied no pressure. v2 will add harder tasks, persistent faults, privacy under pressure and a second annotator before any peer review. I built Groundhog with Claude as a working partner: Claude drafted code, scorers and first-pass failure codes, and I verified every task, graded the judge’s calibration set and reviewed every code. The decisions and conclusions are mine. Code, tasks, scorers and analysis are public and archived on Zenodo.