Evaluate mechanistic estimates through the interventions, control loops, and safety decisions they guide.
1
stars
31
commits
Python
primary language
Sep 9, 2026
updated
Test an internal estimate by the action it causes.
Website · Browser walkthrough · Leaderboards · Run an observer · Submit predictions · Paper · Archived release
An observer uses available measurements to estimate something we cannot read directly—for example, whether a model's proposed action is unsafe or what an edit inside the model will do. ObserverBench tests both the estimate and the decision made from it. The task and decision rule stay fixed, so different observers face the same test.
Mechanistic Tomography asks how to measure a hidden internal quantity. ObserverBench asks whether that estimate helps us act.
You need Git, Python 3, and make. No model download, extra Python packages, or API key is needed.
git clone https://github.com/kwisatzh/observerbench.git
cd observerbench
make demo
One command runs both examples and prints their scores:
score(row) in
demo/safety_tutorial.py and rerun.These examples score locally and show their answers: no upload or maintainer review is needed. Their practice scores do not enter the research rankings.
Prefer no setup? Try the browser walkthrough. Choose an observer, change the checking budget, and watch which decisions improve.
ObserverBench reports:
Neither number replaces the other. Results are compared within the same task version and information access—not in one global ranking.
To make the comparison fair, every task declares five things:
Tasks cover closed-loop control, choosing internal edits, and safety triage. Three findings illustrate what they test:
0.893 vs. 0.870), but
more mean missed violations (10.80 vs. 9.07). Resampling the source
problems leaves the action ranking uncertain.The leaderboards show the results and comparison conditions for each task.
After the two examples, try another observer on one of these tasks. All return local feedback using public answers.
| Task | What you can change | What it reports |
|---|---|---|
| Safety tutorial | One risk score per request | Ranking accuracy, missed harm, unnecessary checks, action loss |
| Qwen2.5-7B base Copy-v2 | A predictor fitted on 40 saved interventions | Prediction error, selected-action loss, regret, gain over no-op |
| GPT-2-small IOI decision replay | A mean-effect prediction CSV; includes attribution patching | Chosen masks, action loss, paired comparisons with four observers and no-op |
| Evidence integrity and cross-agent origin | Which trusted observations to buy, then how to score pending operations | Missed severity, clean work retained, measurement cost, total loss |
The separate cross-model reuse diagnostic tests unchanged observer coefficients across architectures. It shows no transfer advantage; only aggregate results are public, not a runnable practice pack.
Run your method locally. For effect and safety tasks, provide a prediction table and an ObserverCard: a short record of what your method could read, how you built it, its cost, and the task version. The control task also accepts a Python implementation.
Start with the runner guide or jump to the relevant contract:
| Your method | Start here |
|---|---|
| State estimator and actuation direction | Control observer contract |
| Finite-effect predictor or prediction table | Effect-prediction contract |
| Safety risk monitor or score table | Safety observer contract |
| APPS or AI-control monitor | External monitor comparison |
For an existing-method example, run python examples/ioi_decision_submission.py
after installing numpy pandas matplotlib. It scores attribution patching's
saved predictions through the action-selection rule, without loading GPT-2.
See the IOI guide.
Public submissions use CSV and JSON files, not uploaded code. Automatic checks verify the file format, query IDs, finite values, source link, and declared access.
This route currently supports only the blinded paired-scope-v1 safety pack.
Sealed scoring is not active: a passing submission receives a file-check
result, not a score or rank. Use the open practice tasks for immediate scoring.
The two examples above need no installation. For the full Python command-line tools, run these from your downloaded repository:
python -m venv .venv
source .venv/bin/activate
python -m pip install -e .
See what is available:
observerbench list-tasks
observerbench list-effect-tasks
observerbench list-safety-tasks
observerbench list-safety-results
Run a small CPU task and generate its ObserverCard:
observerbench run safety_interlock_analytic \
--config configs/safety_interlock_analytic.yaml \
--outdir runs/safety-interlock
observerbench make-card \
--results runs/safety-interlock \
--outdir runs/safety-interlock/cards
The reproduction map links claims to saved results and instructions for rerunning the experiments. The notebooks cover named studies; they are not generic hosted runners.
To rebuild the paper from saved results, with LaTeX installed:
make -C paper/observerbench_v15_source
This rebuild does not download model weights or rerun model inference.
| Path | Contents |
|---|---|
src/observerbench/ | Python package and task contracts |
notebooks/ | Colab reproductions for named studies |
paper/ | Manuscript source and claim-to-artifact map |
docs/ | Detailed contracts, registrations, and protocols |
These are fixed tasks, not a hosted inference service or a general bring-your-own-model system. IOI uses documented circuit groups; the Qwen copy task tests a selected intervention surface, not the complete circuit. The safety tasks do not establish robustness against adaptive attackers.
Experiments designed/concieved by Vijay Erramilli. Code written by Vijay Erramilli and Codex.
@software{erramilli2026observerbench,
author = {Vijay Erramilli},
title = {ObserverBench: Testing Mechanistic Estimates for Intervention and Control},
year = {2026},
version = {0.1.0},
doi = {10.5281/zenodo.22136091},
url = {https://doi.org/10.5281/zenodo.22136091}
}
Software release 0.1.0 uses the Apache License 2.0.
31 commits
Python
88.4%
TeX
5.5%
Jupyter Notebook
2.7%
HTML
1.8%
Evaluate mechanistic estimates through the interventions, control loops, and safety decisions they guide.
1
stars
31
commits
Python
primary language
Sep 9, 2026
updated
Test an internal estimate by the action it causes.
Website · Browser walkthrough · Leaderboards · Run an observer · Submit predictions · Paper · Archived release
An observer uses available measurements to estimate something we cannot read directly—for example, whether a model's proposed action is unsafe or what an edit inside the model will do. ObserverBench tests both the estimate and the decision made from it. The task and decision rule stay fixed, so different observers face the same test.
Mechanistic Tomography asks how to measure a hidden internal quantity. ObserverBench asks whether that estimate helps us act.
You need Git, Python 3, and make. No model download, extra Python packages, or API key is needed.
git clone https://github.com/kwisatzh/observerbench.git
cd observerbench
make demo
One command runs both examples and prints their scores:
score(row) in
demo/safety_tutorial.py and rerun.These examples score locally and show their answers: no upload or maintainer review is needed. Their practice scores do not enter the research rankings.
Prefer no setup? Try the browser walkthrough. Choose an observer, change the checking budget, and watch which decisions improve.
ObserverBench reports:
Neither number replaces the other. Results are compared within the same task version and information access—not in one global ranking.
To make the comparison fair, every task declares five things:
Tasks cover closed-loop control, choosing internal edits, and safety triage. Three findings illustrate what they test:
0.893 vs. 0.870), but
more mean missed violations (10.80 vs. 9.07). Resampling the source
problems leaves the action ranking uncertain.The leaderboards show the results and comparison conditions for each task.
After the two examples, try another observer on one of these tasks. All return local feedback using public answers.
| Task | What you can change | What it reports |
|---|---|---|
| Safety tutorial | One risk score per request | Ranking accuracy, missed harm, unnecessary checks, action loss |
| Qwen2.5-7B base Copy-v2 | A predictor fitted on 40 saved interventions | Prediction error, selected-action loss, regret, gain over no-op |
| GPT-2-small IOI decision replay | A mean-effect prediction CSV; includes attribution patching | Chosen masks, action loss, paired comparisons with four observers and no-op |
| Evidence integrity and cross-agent origin | Which trusted observations to buy, then how to score pending operations | Missed severity, clean work retained, measurement cost, total loss |
The separate cross-model reuse diagnostic tests unchanged observer coefficients across architectures. It shows no transfer advantage; only aggregate results are public, not a runnable practice pack.
Run your method locally. For effect and safety tasks, provide a prediction table and an ObserverCard: a short record of what your method could read, how you built it, its cost, and the task version. The control task also accepts a Python implementation.
Start with the runner guide or jump to the relevant contract:
| Your method | Start here |
|---|---|
| State estimator and actuation direction | Control observer contract |
| Finite-effect predictor or prediction table | Effect-prediction contract |
| Safety risk monitor or score table | Safety observer contract |
| APPS or AI-control monitor | External monitor comparison |
For an existing-method example, run python examples/ioi_decision_submission.py
after installing numpy pandas matplotlib. It scores attribution patching's
saved predictions through the action-selection rule, without loading GPT-2.
See the IOI guide.
Public submissions use CSV and JSON files, not uploaded code. Automatic checks verify the file format, query IDs, finite values, source link, and declared access.
This route currently supports only the blinded paired-scope-v1 safety pack.
Sealed scoring is not active: a passing submission receives a file-check
result, not a score or rank. Use the open practice tasks for immediate scoring.
The two examples above need no installation. For the full Python command-line tools, run these from your downloaded repository:
python -m venv .venv
source .venv/bin/activate
python -m pip install -e .
See what is available:
observerbench list-tasks
observerbench list-effect-tasks
observerbench list-safety-tasks
observerbench list-safety-results
Run a small CPU task and generate its ObserverCard:
observerbench run safety_interlock_analytic \
--config configs/safety_interlock_analytic.yaml \
--outdir runs/safety-interlock
observerbench make-card \
--results runs/safety-interlock \
--outdir runs/safety-interlock/cards
The reproduction map links claims to saved results and instructions for rerunning the experiments. The notebooks cover named studies; they are not generic hosted runners.
To rebuild the paper from saved results, with LaTeX installed:
make -C paper/observerbench_v15_source
This rebuild does not download model weights or rerun model inference.
| Path | Contents |
|---|---|
src/observerbench/ | Python package and task contracts |
notebooks/ | Colab reproductions for named studies |
paper/ | Manuscript source and claim-to-artifact map |
docs/ | Detailed contracts, registrations, and protocols |
These are fixed tasks, not a hosted inference service or a general bring-your-own-model system. IOI uses documented circuit groups; the Qwen copy task tests a selected intervention surface, not the complete circuit. The safety tasks do not establish robustness against adaptive attackers.
Experiments designed/concieved by Vijay Erramilli. Code written by Vijay Erramilli and Codex.
@software{erramilli2026observerbench,
author = {Vijay Erramilli},
title = {ObserverBench: Testing Mechanistic Estimates for Intervention and Control},
year = {2026},
version = {0.1.0},
doi = {10.5281/zenodo.22136091},
url = {https://doi.org/10.5281/zenodo.22136091}
}
Software release 0.1.0 uses the Apache License 2.0.
31 commits
Python
88.4%
TeX
5.5%
Jupyter Notebook
2.7%
HTML
1.8%