Scoring
How the judge turns a call or a chat into a score, a verdict and concrete suggestions.
After each call, a judge model reviews it against the scenario's success criteria. Duet keeps the judge on a short leash: it picks a band from 1 to 5 for each criterion, and fixed rules turn those bands into points, verdicts and an overall score. That keeps scores stable from one judgement to the next.
Criteria, weights and must criteria
Each scenario has between 1 and 30 criteria. Every criterion has:
- Text: one thing a good call does, like “The agent verifies identity before acting.”
- Kind: Must (essential: if it fails, the whole call counts as failed, whatever the score) or Should (it matters, but only through its weight).
- Evidence source: what the judge looks at. Transcript for what was said, Timing for how fast the agent answered, Trace for what happened inside the agent (tool calls, models, errors), which needs a Langfuse connection on the agent.
- Weight: how much it counts. The weights of a scenario must add up to exactly 100.
Bands, points and verdicts
For every criterion the judge picks a band. The band decides the points and the verdict:
| Band | Points | Verdict | What the judge saw |
|---|---|---|---|
| 5 | 100 | Pass | Fully met, shown by the evidence, with no defect. |
| 4 | 90 | Pass | Met, with a minor issue that does not change the outcome. |
| 3 | 70 | Partial | Partly met or mixed: an important part is missing or wrong. |
| 2 | 50 | Fail | Mostly not met, or met but with one serious (capping) defect. |
| 1 | 25 | Fail | Not met, contradicted, or a clear failure. |
A criterion the judge could not check gets Not observable instead, with no points (see below).
The overall score
The overall score, from 0 to 100, is the weighted average of the criteria that could be observed. Criteria that were not observable are left out and the others are re-weighted, so a missing trace neither helps nor hurts.
- The agent blocks the card or clearly confirms it is blocked.50/100FailB2/5Mustweight 50from transcriptIncomplete task
- The agent verifies identity before acting.100/100PassB5/5Shouldweight 30from transcript
- Every agent reply starts in under 2 seconds.70/100PartialB3/5Shouldweight 20from timingSlow response
In the example above: (50 × 50 + 100 × 30 + 70 × 20) ÷ 100 = 69. And because the first criterion is a must criterion that failed, the report also shows Must criterion failed. If the second criterion had not been observable, the score would be (50 × 50 + 70 × 20) ÷ 70 ≈ 56.
| Score | Label | Colour |
|---|---|---|
| 80 to 100 | Good | Green |
| 60 to 79 | Fair | Amber |
| Below 60 | Poor | Red |
Failure tags and caps
When a criterion is not perfect, the judge labels what went wrong with up to 5 failure tags from a fixed list. The report counts them across the call, so repeated problems stand out.
| Tag | Caps the criterion at band 2? |
|---|---|
| Fabricated information | Yes |
| Wrong information | Yes |
| Instruction ignored | Yes |
| Unsafe or policy violation | Yes |
| Missing information request | No |
| Incomplete task | No |
| Off topic | No |
| Unclear or unnatural speech | No |
| Cut-off or incomplete reply | No |
| Slow response | No |
| Tool or trace error | No |
When a criterion is not observable
| Reason | What to do |
|---|---|
| Traces unavailable | A trace criterion, but no traces: link a Langfuse connection to the agent, or wait for the traces and re-judge. |
| No timing data | A timing criterion, but the call had no measured agent turns. |
| The judge could not observe it | The call never got to that point. Check the scenario leads there, or that the call did not end early. |
| The judge gave no verdict | Rare. Re-judge the run. |
Three samples, one median
Language models can answer differently each time. So the judge looks at every call three times, on exactly the same evidence, and each criterion keeps the median band. The scorecard shows the three samples as small dots.
Bands 2 and 4 are two apart, so the report flags the criterion with Judges disagreed: a hint that its wording may be ambiguous.
Timing and latency
Latency is how long the agent takes to start answering: from the moment the caller stops speaking to the agent's first sound. A greeting has no latency. The report shows the median (p50) and the slowest reply.
As a rough guide for phone calls, a median under about 1.5 seconds feels responsive and replies over about 3 seconds feel broken. But the judge only applies what your timing criteria say, so write the number you expect, like “Every agent reply starts in under 2 seconds.”
Timing for text agents
A text agent has no sound, so its timings start when the user message is sent. The judge sees, for every reply, the time to the first text and to the full reply, and the tools the agent ran. In Stream mode latency is the time to the first text; in Invoke mode the whole reply arrives at once, so the first text and the full reply are the same. A reply that broke off (the agent failed before finishing it) is marked and never counts as a measured reply. Write timing criteria for what the user sees, like “Every reply starts within 3 seconds.”
Evidence
Every verdict comes with the evidence the judge relied on: exact quotes, and references to where they come from.
| Reference | Points to |
|---|---|
A3 | The agent's 3rd turn in the transcript. |
C2 | The caller's 2nd turn (for a text agent, the user's 2nd message). |
T3 | The timing row of the agent's 3rd turn (for a text agent, its 3rd reply). |
R1 | The 1st Langfuse trace of the call. |
Reading the results
Looks good
No must criterion failed, a score of 90 or more, nothing capped, every criterion observable, and samples that agree.
Needs work
A must criterion failed, a capped criterion, a score under about 70, or the same tag (like slow response or incomplete task) coming back across runs.
Inconclusive
Many criteria not observable, or a call that ended early (failed, or too long without speech). Fix the setup before drawing conclusions about the agent.
Suggestions and the brief
The judge also writes suggestions: concrete changes, each with an area (prompt, tools, flow, latency, voice or other), a priority (high, medium or low) and its evidence. The Handoff tab turns everything into a brief: a Markdown note meant to be pasted, on its own, into a coding agent. It covers the problems found, what could not be checked, the changes to make (most important first), what worked, and how to verify the fix.
Writing good criteria
- Make each one checkable from the call: “Confirms the card is blocked”, not “Is helpful”.
- One idea per criterion. Split “verifies identity and blocks the card” into two.
- Put the numbers in timing criteria (“under 2 seconds”).
- Keep must criteria for what truly makes or breaks the call.
- If the samples often disagree on a criterion (the report says Judges disagreed), its wording is probably ambiguous: make it more concrete.
- Keep a criterion when you edit it, rather than deleting and re-adding it, so results stay comparable over time.