Skip to main content

The pattern

Pass fail_threshold to suite.run(). A completed quality failure raises EvalGateFailure with exit code 1. Since 0.17.0, an active gate defaults to zero tolerated errors and blocks empty or skipped coverage with exit code 2 (indeterminate). Set max_error_rate explicitly only if you intend to permit an error budget. A high pass rate alone does not establish sufficient coverage.
Save through the save_json / save_html / save_junit_xml kwargs, not by calling report.save_json(...) on the line after a gated run(). A failing gate raises EvalGateFailure from inside run(), so statements after it never execute — exactly the runs whose artifacts you need most. The kwargs write the report before the gate is evaluated.
A case with one measured check and another skipped check still counts as evaluated. The built-in gate blocks wholly skipped cases. Use an acceptance policy for required checks and per-slice coverage.

GitHub Actions

Apply a saved release contract

This uses the same versioned policy as eval_acceptance_report in multivon-mcp 0.4.0. The corresponding eval-action v2 update is prepared but pending publication; check its release notes before choosing an action version. The policy returns accept/reject/indeterminate with exit codes 0/1/2; it does not require a baseline or a p-value.

Compare against a baseline

This returns 0 for complete, paired results with no regressions, 1 for a quality regression, and 2 for incomplete evidence (including errors, skips, or unmatched cases). It does not prove equivalence or require a significant p-value before flagging a case regression.

Speed up CI with parallel workers

Async runner for async model functions

Save and view results

Or get the HTML as a string (useful in notebooks or custom pipelines):
View a saved report from the CLI:
Convert a saved JSON report to HTML:

Run a specific eval file

--html and --json inject environment variables that the suite picks up automatically — no changes to your eval script needed.

Tips

  • Keep a golden dataset: a small set of cases (20-50) that cover your most critical behaviors, run on every PR.
  • Use tags to split fast deterministic evals (every commit) from slower LLM-judge evals (nightly, or main only).
  • Archive results.json per run as a build artifact so you can track score trends over time.