Rightshold™ Sign up

Answers · AI evidence

Does a passing AI eval score prove what the AI did in one specific incident?

Last updated

TL;DR: No. An eval measures a rate: how often a model, prompt and settings passed the cases you chose, on the day you ran it. An incident is one event: one input, one retrieved context, one reported model version, one output, at one time. A 98% pass rate is fully consistent with this case being in the 2%, and if the incident's input wasn't in the test set the score says nothing direct about it. What answers "what happened" is a per-run record kept when it happened: the exact request and retrieved context, the model the provider reports, the settings, the exact output and the provider's request id, hashed and timestamped. Evals answer different questions: was this kind of failure foreseeable, did you test for it, and did a later change make it more or less likely. Keep both kinds of evidence, label which is which, and preserve the incident record before you change the prompt, model or retrieval.

What should I check, step by step?

1. Freeze the incident first. Pull the run record (request body with system prompt version, retrieved documents and tool results, the model value the provider returned, settings, exact output, request id) before anyone edits the prompt, swaps the model or re-indexes documents. Provider copies are short-lived: OpenAI's data controls page lists abuse-monitoring logs kept up to 30 days by default, and Anthropic says it deletes API inputs and outputs within 30 days by default.

  1. Write the two questions down separately. What happened in this run is answered by the run record. How often does this happen is answered by evals. Mixing them is how a pass rate ends up quoted as if it described one conversation.
  2. Check whether the eval set covers the incident at all: the same kind of input, the same retrieval source, the same tools. If it doesn't, the old score is about other cases. Add the incident input and close variants as new cases.
  3. Compare configurations. If the model value, system_fingerprint (OpenAI) or modelVersion (Gemini) in the incident record differs from the eval run's, or the prompt template commit differs, the eval measured a different setup.
  4. Re-run the incident input many times on the pinned model and settings and report the failure rate with its sample size. One clean re-run doesn't show the original output didn't happen: OpenAI calls seed best effort and says model outputs are variable by nature.
  5. Quote eval results with n. Zero failures in n independent trials still leaves a 95% upper bound of about 3/n on the failure rate (the statistical rule of three), so 0 failures in 100 runs is consistent with a failure rate of up to about 3%.
  6. Keep the eval run itself checkable: hashes of the dataset, the scorer version, the settings and the result log, with a signed timestamp. "We tested this" is evidence only if someone else can see what was tested and when.
  7. If the EU AI Act's high-risk rules apply to your system, they expect automatic logs (Article 12), kept at least six months by providers (Article 19) and deployers (Article 26(6)). Regulation (EU) 2026/1744 moved these Chapter III requirements to 2 December 2027 for Annex III systems and 2 August 2028 for Annex I systems.

What does an AI eval pass rate actually measure, and what doesn't it tell you about one conversation?

An eval runs a fixed set of cases through a configuration and counts passes. Its result is a property of that set, that configuration and that day. It is the right tool for comparing versions, catching regressions and estimating how often a kind of failure happens.

What evidence do I need to show what an AI system did in one specific incident?

The exact inputs the model saw: system prompt, conversation so far, retrieved passages and tool results, as sent. Logging only the user's message loses most of what decided the answer.

How should eval results and per-run records be used together in an AI incident dispute?

Use the run record to establish the facts of the incident: what was asked, what context was supplied, which model answered and what it said. Use evals to answer whether the failure was a known risk, whether you tested for it and how often it happens.

How do I ask Rightshold about this (free, no key)?

Add the MCP server https://www.rightshold.com/mcp to Claude, Cursor, ChatGPT, Grok or VS Code, then ask: “Record a signed receipt for the incident run as I captured it: the reported model, hashes of the exact request (system prompt, retrieved context, tool results) and of the output the user saw, the provider request id and my incident reference.”

One-click setup

{
  "tool": "record_ai_run",
  "arguments": {
    "model": "claude-sonnet-4-5-20250929",
    "provider": "anthropic",
    "prompt_sha256": "<sha256 of the exact request JSON, including system prompt and retrieved context>",
    "output_sha256": "<sha256 of the exact output the user saw>",
    "params": {
      "request_id": "<request-id header value>",
      "template_commit": "<git sha of the prompt template>",
      "retrieval_snapshot": "<index or document version id>",
      "incident_ref": "<your ticket id>"
    },
    "ran_at": "2026-11-09T15:12:00Z"
  }
}

Rightshold records the hashes and fields you send, signs them and lets anyone check them later. It doesn't run your evals, decide what caused an incident, or judge whether an output was correct. Whether the EU AI Act applies to your system, and what a court or regulator will accept, are questions for a lawyer. Not legal advice.

What are the sources?

Related

Not legal advice. JSON · Markdown · All answers

Get a free API key in one call

No card and no email needed. 100 free credits; the license and policy checks stay free without a key.

curl -s -X POST https://www.rightshold.com/v1/accounts/signup -H "Content-Type: application/json" -d '{"accept_terms":true}'
export RIGHTSHOLD_API_KEY=rs_...   # the api_key from the reply (shown once)
curl -s https://www.rightshold.com/v1/licenses/check -H "Authorization: Bearer $RIGHTSHOLD_API_KEY" \
  -H "Content-Type: application/json" -d '{"license":"MIT","intended_use":{"commercial_use":true}}'