Agent evals

What the agent gets wrong.

The voice agent on this site answers questions about me from a fixed knowledge file. This is the scored suite that checks whether it stays inside what it actually knows. The current score is below; what the suite has already caught, including a production bug and two of my own bad tests, is further down and more interesting.

Loading the latest run…

What this suite has caught

A passing score is only worth reading if the suite has ever failed. This is the log of what it found, kept by hand.

Production defect 31 Aug 2026

The completion token ceiling was set to 90. When the model spent budget reasoning before writing, it returned empty content and the endpoint failed — roughly one call in eight, and only on harder questions, which made it look random rather than systematic. Clicking around the demo would never have surfaced it. Fixed with token headroom, a request timeout, and retry on transient upstream errors.

Two bad assertions 31 Aug 2026

Two cases failed against a correct agent. One demanded digits where the agent writes numbers as words, because everything it says is read aloud. The other matched the literal word "email" when the agent had given an actual email address. Both were fixed in the suite, not the agent — a red test is a hypothesis, not a verdict.

Runner defect 31 Aug 2026

An early version counted network failures as wrong answers and published a run reporting every case as failing. It had measured nothing. The runner now preflights the endpoint and discards any run containing a transport error rather than reporting a result it cannot stand behind.

How it works

Each case is a behavior contract rather than a sample answer: things that must appear, things that must never appear, and a global word ceiling. A case passes only if every check passes on every run.

Cases run three times, because language models are not deterministic. One that passes once and fails twice is a real defect a single run hides, so flaky is reported separately and counted as not passing.

When the agent says something wrong in a real conversation, the case gets written before the prompt is fixed. That order proves the fix worked and stops the regression coming back. A few cases publish their status only — the question itself is the sensitive part, and the full suite lives in the repository.