Rightshold™ Sign up

Answers · AI evidence

How do I make LLM eval results reproducible and tamper-evident?

Last updated

TL;DR: Pin the exact model snapshot, record every generation setting (including seed and system_fingerprint), hash the dataset, prompts and scorer code, run several epochs and report the spread, then hash the final eval log and get the hash timestamped. Exact reruns usually aren't possible (seeds are best effort and models get retired), so the goal is a record that shows what ran and proves the results weren't changed afterwards.

What should I check, step by step?

1. Use a dated or pinned model ID (for example gpt-4o-2024-08-06), never a moving alias, and save the model value the API returns, since that's what actually answered.

  1. Record the generation settings: temperature, top_p, max tokens, seed, tools and system prompt. With OpenAI, also save system_fingerprint from each response, since it changes when the backend configuration changes.
  2. Hash the inputs: the dataset file, the prompt templates and the scorer or grader code (a git commit is fine). Put the hashes in the log.
  3. Run more than one epoch and report the spread, not just the best run. Sampling makes single runs noisy, and OpenAI calls seed best effort.
  4. Keep provider request and response ids. Inspect, for example, logs ModelEvent.request_ids and ModelOutput.response_id for OpenAI, Anthropic and several other providers.
  5. When the run is final, compute a SHA-256 of the log file and get that hash timestamped independently, so anyone can see if a score was edited later.
  6. If you edit scores after review, use a tool that keeps the history (Inspect's edit_score keeps the original value and provenance) and hash the edited log as a new version.

Why exact reproduction usually fails

OpenAI's API reference says seed makes a best effort to sample deterministically and determinism is not guaranteed. A changed system_fingerprint means the backend changed between runs.

What a good eval log contains

Inspect's EvalLog is a useful reference. It has the eval spec (task, model, creation time), the plan (solvers and generation config), aggregate results, token usage, and every sample with its input, output, target and score. inspect log export-config writes the run config back out so the same setup can be run again.

Deterministic checks versus model graders

Rules like 'is valid JSON matching this schema', 'contains no API keys' or 'matches this regex' give the same answer every time and can be re-checked by anyone with the output.

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 this eval run: the model snapshot, hashes of the dataset and of the final eval log, the seed, the scorer commit and when it ran.”

One-click setup

{
  "tool": "record_ai_run",
  "arguments": {
    "model": "gpt-4o-2024-08-06",
    "provider": "openai",
    "prompt_sha256": "<sha256 of the dataset file>",
    "output_sha256": "<sha256 of the final .eval log>",
    "params": {
      "seed": 42,
      "temperature": 0,
      "epochs": 5,
      "scorer_commit": "<git sha>",
      "accuracy": 0.87
    },
    "ran_at": "2026-10-30T14:00:00Z"
  }
}

Rightshold doesn't run your eval or score it. It records the hashes and settings you send, signs them and lets anyone check them later. 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}}'