Skip to main content

evalaudit

Tests

Statistical validity checks for human-graded AI evaluations.

Three experts graded 200 items. One of them disagreed with the other two on almost everything. Nobody noticed, because nobody computed agreement — and half the items were only graded once, so it could not have been computed.

That evaluation produced a number. The number is now in a slide deck.

evalaudit is the set of checks that should have run first.


Start here

from evalaudit import score_ci

wins = [1] * 58 + [0] * 42
print(score_ci(wins).summary())
58.0% pass rate (95% CI: 48.2%-67.2%, n=100). The interval spans
19 points; treat differences smaller than that as unresolved.

The interval crosses 50%. On this data the new model might be worse than the old one. That evaluation cannot support the decision being made with it.


Why this exists

scipy computes McNemar's test. sklearn computes Cohen's kappa. Several libraries now put bootstrapped intervals on automated eval scores.

What is missing is anything built for the human side of evaluation: the graders, the rubric, the LLM judge standing in for both. That is where the expensive failures happen, and it is where almost no tooling exists.

Every function returns an object with a .summary(). The numbers are the input to the audit. The sentence is the output.

Two rules the library follows throughout:

  • Never report a bare p-value. Always an effect size and an interval.
  • State what the data cannot support, not only what it can.

What it checks

Module Question
agreement Do your graders agree? Which grader is the outlier? Which items are ambiguous rather than hard?
judge Does your LLM judge track your humans — and on which slices does it stop? Is it biased by position or length?
pairwise In a blind pairwise comparison, which models are actually separable?
power Could this many comparisons ever have detected the effect you care about?
scores Is there an interval around your headline number, and how wide?
compare Does the margin between two systems survive a paired test?
audit All of the above, as a report ranked by what changes the conclusion.

The first four are the point. The last three are the foundation they stand on.


Status

Early. scores is implemented. agreement, judge and pairwise are specified and landing over the coming weeks.


Coverage

A statistics package earns trust by showing its intervals cover at the rate they claim. Every interval here is tested by simulation: generate 1,000 datasets with a known truth, confirm the 95% interval contains it about 95% of the time. Those tests run in CI and you can read them in tests/.


promptstats covers the automated side well — prompt sensitivity, model comparison across prompt variations, bootstrapped intervals on benchmark scores. If your evaluation has no human graders in it, start there.


Install

git clone https://github.com/ondibahezron-glitch/evalaudit.git
cd evalaudit
pip install -e ".[dev]"

Python 3.9+, numpy, scipy, pandas. Nothing else. PyPI package coming soon.


Licence

MIT.

Metadata

Release files for evalaudit 0.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for evalaudit 0.0.1
File Size Uploaded
evalaudit-0.0.1.tar.gz 8.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for evalaudit 0.0.1
File Interpreter ABI Platform
evalaudit-0.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 15.2 kB

Release files / evalaudit-0.0.1.tar.gz

Download URL evalaudit-0.0.1.tar.gz
Size 8.4 kB
Tags Source
SHA-256 checksum
How to use checksums
4b303b8ed50a616f948fcc4998c8378ab59bd3278834d6347c5b41d8b384107e
BLAKE2b-256 checksum
How to use checksums
de24502bd6fd2a795e6719411682a9084038974dc0e31ea08c9f44777dfd00a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / evalaudit-0.0.1-py3-none-any.whl

Download URL evalaudit-0.0.1-py3-none-any.whl
Size 6.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f2f8969548f4dd969e01045f0f27cb4cc639501ef8577c33841c45772ed10d72
BLAKE2b-256 checksum
How to use checksums
862e2536a17e66796c05a3b8a9114f74fb5834e8b0e0c620195db70e2f0d6fe6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

This release

0.0.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page