mojave

Measurement science for AI evaluation.

source · MIT OR Apache-2.0


what it answers

question method crate / package
how reliable is your scoring?G-theory variance decompositionsalib-estimators
do your judges agree?IRR + latent-class diagnosticsirr
which tasks are doing work?IRT item analysismojave-calibrate
what's driving your scores?Sobol/Shapley sensitivity analysissalib-estimators, salib-shapley
can you stop early?anytime-valid inference, e-processesseq-anytime-valid
did anything change?SPC control charts, e-detectorspc-charts
are some tasks redundant?factor models, CFAmojave-calibrate
is the eval gameable?randomized item selection, anti-gamingeval-design

architecture

two layers, clean JSON boundary. Rust owns correctness and real-time decisions. Python owns offline model fitting (IRT, factor analysis, CFA/SEM). no PyO3, no FFI.

eval runner output (Inspect, HAL, lm-eval, custom)
        │
        ▼
   eval-ingest
        │
   ┌────┼────────────────────┐
   │    │                    │
   ▼    ▼                    ▼
 Rust engine    Python calibration    audit-chain
 salib-*  GSA   (mojave-calibrate)    tamper-evident
 irr      IRR   py-irt    IRT         provenance
 seq-*    seq   deepirtools factors   Ed25519 signing
 spc-*    SPC   semopy    CFA/SEM
 eval-design
   │            │
   │  ◀─ JSON ──┘
   ▼
 mojave-cli
 reports · signals · stop/continue decisions

Rust crates

sensitivity analysis (salib-*)

strict superset of Python SALib's method coverage, in Rust. full docs.

cratewhat
salib-coreRNG, distributions, problem specs
salib-samplersLHS, Sobol, Morris, FAST, Plackett-Burman, fractional-factorial
salib-estimatorsSobol (S1/S2/ST), Morris, FAST, RBD-FAST, DGSM, PAWN, Borgonovo, G-theory, ANOVA, HDMR
salib-surrogatepolynomial chaos expansion (full + sparse LARS)
salib-shapleyShapley effects for categorical inputs
salib-validationreference functions (Ishigami, Sobol G), frozen SALib CSV data

measurement engine

cratewhat
irrCohen's/Fleiss' κ, ICC, Krippendorff's α, Gwet's AC, Dawid-Skene, preference-leakage
seq-anytime-validSPRT, group-sequential, mSPRT, e-values, confidence sequences
spc-chartsShewhart, CUSUM, FIR CUSUM, EWMA, combined Shewhart-CUSUM, e-detector, ARL
eval-designcomputerized adaptive testing, randomized item selection, anti-gaming
perturbation-enginedeterministic perturbation primitives for eval sensitivity analysis
change-attributiongit-commit-to-score-change attribution

infrastructure

cratewhat
eval-corefoundational types — trial records, item metadata, score types
eval-ingestpluggable ingestion from eval runner output formats
eval-orchestratorpipeline orchestration — ingest through analysis through reporting
mojave-cliunified CLI entry point
audit-chaintamper-evident hash chain for audit provenance
audit-signEd25519 signing and COSE_Sign1 attestation

Python: mojave-calibrate

offline calibration pipeline. fits IRT models, factor models, and CFA/SEM, emits mojave-compatible JSON consumed by the Rust engine.

mojave-calibrate irt --input responses.jsonl --output pool.json \
    --model-type 2pl --content-domain reasoning --device cuda

mojave-calibrate factors --input responses.csv --output factors.json \
    --latent-size 3 --model-type grm

mojave-calibrate cfa --input data.csv --output cfa.json \
    --model "f1 =~ x1 + x2 + x3"
modulewrapswhat
irt.pypy-irtGPU Bayesian IRT (1PL, 2PL, 4PL) via Pyro
factors.pydeepirtoolsmultidimensional IRT + factor models via IWAVE
cfa.pysemopyconfirmatory factor analysis / structural equation modeling

development

# Rust
cargo test --workspace --all-targets
cargo clippy --workspace --all-targets -- -D warnings

# Python
cd python
uv sync --group dev
uv run pytest -v

Pre-commit hook: ./scripts/install-hooks.sh

pages

  • run cards — the output artifact, with worked examples
  • methods — the statistical toolkit, by question
  • validation — 4-gate validation discipline