assessment-bench
Part of the lens family.
Benchmark assessment approaches. Run one cohort through competing
assessment arms — pure-LLM marking (the baseline) and the family's
signal-based observations (assessment-lens) — with repeated runs,
consistency statistics, and agreement against human marks.
The bench measures; it never marks.
assessment-benchis a bench (a measurement product), not an-analyserand not a marking tool. It exists to answer research questions like: how consistent is LLM marking across repeated runs and providers? and which deterministic signals actually track human judgement?
What it does
experiment.yaml (rubric + cohort + arms)
├─ llm arm(s) : submission + rubric → provider → score × repetitions
├─ hybrid arm(s) : submission + rubric + signals → provider → score × repetitions
├─ signals arm : assessment-lens → evidence values (deterministic, once)
└─ human marks : optional ground-truth CSV
↓
result.json + runs.csv + signals.csv + agreement.csv
• per-submission consistency: mean / median / std-dev / CV / reliability
• agreement: Pearson & Spearman of every arm mean and every numeric signal
against the human marks
Install
# from source (family layout)
uv venv && source .venv/bin/activate
uv pip install -e ".[dev]"
# the signals arm needs the analyser stack (bundle-analyser CLI on PATH):
uv pip install -e ".[analysers]"
# LLM arms (Anthropic, OpenAI, Ollama, OpenRouter, Grok, Gemini):
uv pip install -e ".[llm]" # + export ANTHROPIC_API_KEY / OPENAI_API_KEY /
# OPENROUTER_API_KEY / XAI_API_KEY / GEMINI_API_KEY
Quick start
assessment-bench init experiment.yaml # commented example config
# edit: point at your rubric.yaml + submissions/, choose arms
assessment-bench run experiment.yaml -o out/
LLM arms specify provider and model per arm — comparing
claude-haiku-4-5 vs gpt-4o-mini vs a local llama3.1 via Ollama is just
three arms in one config.
Relationship to the family
- Analysers generate deterministic signals (assessment-agnostic).
- assessment-lens maps signals to a rubric as observations — never scores.
- assessment-bench measures both approaches against human judgement. The LLM arm produces scores because that is the approach under test; the bench treats them as data points, not grades for students.
Status
v0.5.1 (on PyPI). Working today:
- ✅ Experiment config (YAML) → cohort discovery → arms → structured results
- ✅ LLM arm: multi-provider (anthropic / openai / ollama / openrouter / grok /
gemini), repeated runs, strict
SCORE: x/yextraction with scaled fallback - ✅ Signals arm: one
assessment-lenspass; raw evidence values consumed (not the presence-based coverage) - ✅ Consistency stats (ported from the original Rust prototype) + Pearson/Spearman agreement vs human marks
- ✅ Hybrid arm — LLM marking with the deterministic signals in context (one assessment-lens pass per cohort, shared across signals/hybrid arms)
- ✅ HTTP API (
assessment-bench serve, the[serve]extra) — health/manifest contract routes plus background experiment runs for UIs - ✅ Desktop shell — assessment-bench-desktop
wraps
serveas a bundled Python sidecar
Development
ruff format . && ruff check . && pytest -v
License
MIT — see LICENSE.
Metadata
Release files for assessment-bench 0.5.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 | Provenance | Actions |
|---|---|---|---|---|
| assessment_bench-0.5.1.tar.gz | 99.6 kB | Without provenance | Details for assessment_bench-0.5.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| assessment_bench-0.5.1-py3-none-any.whl | Python 3 | none | any | Details for assessment_bench-0.5.1-py3-none-any.whl |
Total release size: 122.3 kB
Release files / assessment_bench-0.5.1.tar.gz
| Download URL | assessment_bench-0.5.1.tar.gz |
|---|---|
| Size | 99.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ca62182e43b4fa0cc1307bf8e9b8eed20467d0e264f4185a7dd811fad068ac09
|
|
BLAKE2b-256 checksum How to use checksums |
3db92d6a69d70ea48e5170215fa92f1350efefc67ca47a9f316689f83e9e8199
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.0
|
Release files / assessment_bench-0.5.1-py3-none-any.whl
| Download URL | assessment_bench-0.5.1-py3-none-any.whl |
|---|---|
| Size | 22.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7da4a635d645f2923e010b699dd1fe17ae008c8b2e1ecc8a2e29ba04d849084e
|
|
BLAKE2b-256 checksum How to use checksums |
653ad4db575d3d8aae72c5aeb5856fc4819a065ba34951c41543e670cead8ad2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.0
|
Security for assessment-bench 0.5.1
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.