Skip to main content

assessment-bench

Part of the lens family.

Python 3.11+ License: MIT

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-bench is a bench (a measurement product), not an -analyser and 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/y extraction with scaled fallback
  • ✅ Signals arm: one assessment-lens pass; 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 serve as a bundled Python sidecar

Development

ruff format . && ruff check . && pytest -v

License

MIT — see LICENSE.

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)

Source distribution for assessment-bench 0.5.1
File Size Uploaded
assessment_bench-0.5.1.tar.gz 99.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for assessment-bench 0.5.1
File Interpreter ABI Platform
assessment_bench-0.5.1-py3-none-any.whl Python 3 none any Details

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

Release history Release notifications | RSS feed

This release

0.5.1 This release

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

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