limen
The same-configuration noise floor of an evaluation, and whether a published ranking clears it.
limen turns a directory of repeated identical evaluation runs into the three numbers that decide whether a comparison is real: the fraction of items whose pass/fail verdict is not constant across identical repeats, the noise floor a claimed improvement has to clear at the k you actually ran, and how often a leaderboard computed from a single run disagrees in sign with the leaderboard computed from all of them. These are emitted as per-pair SIGN-STABLE / SIGN-UNSTABLE rulings with every denominator shown, plus a CI gate that fails a benchmark report claiming a gain smaller than that report's own measured draw noise.
What it does not do, and this is the whole boundary of the instrument: it makes no statement about which model is better. A sign flip means "this comparison is not supported by its own measurement", never "the other one wins".
The quantities are not new, and the docs say so up front: the constant-verdict fraction upper-bounds TARa@N (Atil et al.), the rank-flip rate is IR's swap rate, psychometrics calls the per-item question decision consistency, quality engineering has had it for seventy years as attribute agreement analysis, and genomics' IDR is the exclude-then-re-rank step. The literature exists. An installable instrument did not. That is the whole claim.
Install
pip install limen-eval
Zero runtime dependencies, Python >= 3.12. The distribution is named
limen-eval (the bare name was taken); the import and the CLI are limen.
90 seconds
# a synthetic archive whose right answers are chosen (the instrument's oracle)
limen synth --out demo --models 3 --items 500 --draws 8 --flaky-fraction 0.05 --gap 0.02
# repeated-run logs -> a versioned ruling document
limen report demo/archive.verdicts.csv.gz --out demo-report
# fail CI when a claim does not clear its own noise
limen gate demo-report/report.json --require-sign-stable --min-effect-vs-noise 1.0
limen report reads:
- a generic long-format CSV (
model, task, item_id, draw_id, verdict, plus optionalscore, collected_at, model_version, raw_sha256), - lm-evaluation-harness
--log_samplesoutput trees (run the harness at least twice, or with repeats: limen needs k >= 2 draws per item), - inspect_ai
.evallogs at the per-epoch layer (each epoch is one draw; no inspect_ai dependency needed).
The ruling document
One deterministic JSON document per archive: per-(model, task) flakiness with always-pass / always-fail / mixed counts, the spread of the k single-draw scores with a minimum detectable difference at the observed k (after Kalibera & Jones), per-pair sign-stability rulings with drawn ties counted separately, a stable-items-only re-ranking that ships only together with its selection-bias mitigations, a drift guard whose missing-field state is UNAVAILABLE and never PASS, and a grader-defect count (verdict flips on byte-identical output are the grader's flakiness, not the model's). Regeneration from the same input is byte-identical. Rulings are versioned and immutable.
GitHub Action
- uses: KurathSec/limen@main
with:
report: limen-report/report.json
require-sign-stable: "true"
min-effect-vs-noise: "1.0"
Status
Alpha. The measurement definitions are frozen behind a versioned rulings spec
(limen spec list); changing any recorded meaning is a spec version bump, not
a patch. See docs/honesty.md for the full list of things this instrument
deliberately does not claim.
License
MIT.
Metadata
Release files for limen-eval 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| limen_eval-0.2.1.tar.gz | 1.3 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| limen_eval-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.4 MB
Release files / limen_eval-0.2.1.tar.gz
| Download URL | limen_eval-0.2.1.tar.gz |
|---|---|
| Size | 1.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a61ebfa73bf29dbba7f98cb88ece9440a1b33928ba77f40322782d8da850d6b2
|
|
BLAKE2b-256 checksum How to use checksums |
264184b0dcb8b29361ba6b5104cd2b0a51e9d633eb9975c2983d1a6888ccb782
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 22, 2026.
Transparency logRelease files / limen_eval-0.2.1-py3-none-any.whl
| Download URL | limen_eval-0.2.1-py3-none-any.whl |
|---|---|
| Size | 96.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1bb989aa5d2d11b6582a6a4616ff2d44f30377d2287cdc8853c646a9341c5d0b
|
|
BLAKE2b-256 checksum How to use checksums |
418aa8dc82aa1015a4374d017f1d9732aef40eb5ffae6e77ebcd6034ce7f199b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 22, 2026.
Transparency log