Quickstart

Run QuoteBench

Validate the frozen core, run your own model through both contracts, and decompose the result into transport damage and compensation.

1. Validate the frozen core

Every task's oracle command must pass its exact-final-state validator before anything else runs.

python3 -m quotebench validate --executor docker

2. Run your own model

Point the runner at any OpenAI-compatible chat-completions endpoint. Run the raw contract and the disclosed-boundary contract; each run generates one command per task, executes it on its own transport, and scores the final state. Expect 56 calls per contract per trial.

export QUOTEBENCH_API_KEY=...
python3 -m quotebench run --model MODEL_ID \
  --base-url https://api.example.com/v1 \
  --contract raw --out raw.jsonl --executor docker
python3 -m quotebench run --model MODEL_ID \
  --base-url https://api.example.com/v1 \
  --contract nested-shell-v2 --out disclosed.jsonl --executor docker

3. Decompose the crossover

The crossover command replays every stored reply through both transports and prints RR, RN, NR, NN, transport damage (RN − RR), contract-conditioned compensation (NN − RN), and the matched gap (NN − RR) for your model.

python3 -m quotebench crossover --raw raw.jsonl --disclosed disclosed.jsonl

The run-your-model guide covers flags, resume, and how to read the four cells.

Score generations you already have

Supply one JSON object per line with task_id, contract, and reply; the scorer executes each reply on the transport its contract implies.

python3 -m quotebench score \
  --input generations.jsonl --out scored.jsonl --executor docker