Three entry points, in increasing order of cost. Every command below was run end to end before this file was written.
Nothing to run, nothing to serve: download one cell, expand it, score it.
pip install numpy huggingface_hub zstandard
git clone https://github.com/kookhh0827/copy-inflation-search-agents.git
cd copy-inflation-search-agents
huggingface-cli download kookhh0827/copy-inflation-search-agents \
--repo-type dataset --include "data/frames/gpt-oss-120b/*" --local-dir cell
cd cell/data/frames/gpt-oss-120b
for s in runs evals stats; do
mkdir -p $s && zstd -dc $s.tar.zst | tar -x -C $s
doneEach archive expands to r0/ … r7/, one directory per rollout index:
runs/r0/run_<timestamp>.json trajectory: tool calls + returned text,
reasoning spans, final answer, usage
evals/r0/run_<timestamp>_eval.json judge verdict, extracted answer, gold
stats/r0/run_<timestamp>.prob.json per-token top-5 log-probabilities
That is exactly the layout the voter expects:
python ../../../../rgv/vote.py \
--runs-dir runs --evals-dir evals --stats-dir statsLoaded 150 questions
Method Accuracy
-----------------------------------
Single (per-rollout) 79.4%
Simple Majority 78.7%
RGV (prose-recall) 79.3%
Jaccard 80.0%
DeepConf 82.7%
Verb 80.7%
Oracle (pass@8) 92.7%
n_questions=150, n_rollouts=1200
--stats-dir is what makes the DeepConf row possible; drop it and that row
falls back to uniform weights. Numbers depend on the extraction and clustering
choices the scorer makes — see rgv/vote.py, which is about 200 lines and has
no dependency beyond NumPy.
This is the paper's central measurement, and it needs no model and no API key.
python diagnostics/copy_mask.py --runs-dir runs --stats-dir stats
python diagnostics/copy_report.py --cell frames/gpt-oss-120bIt reports, per cell:
- copy fraction — how much of what the agent generated is a substring of its own retrieved documents (78–92% across the cells in the paper),
- copy-inflation gap — mean log-probability of copied vs non-copy tokens,
- within-question variance share — how much of a weight's spread lives inside a question rather than between questions. This is the quantity weighted voting consumes; when it collapses, confidence voting degenerates into majority voting.
Point it at your own agent's rollouts to find out whether its confidence signal is contaminated before you rely on it.
pip install -r requirements-rollout.txt
cp .env.example .env # FIREWORKS_API_KEY, SERPER_KEY_ID
bash scripts/start_web_search.sh & # BrowseComp / GAIA / FRAMES
bash scripts/start_corpus_search.sh & # BrowseComp-Plus (FAISS index)
bash launchers/frames/launch_oss-120b.sh # 8 rollouts x 150 questions
pip install -r requirements-grading.txt # vLLM + Qwen3-32B judge
bash scripts/grade_all.sh frames oss-120b
python rgv/vote.py --runs-dir runs/frames/oss-120b \
--evals-dir evals/frames/oss-120b \
--stats-dir stats/frames/oss-120bLaunchers are resumable: re-running one continues from the last checkpoint
rather than repeating completed questions. Tongyi-DeepResearch is served
locally (scripts/start_tongyi_vllm.sh, 8× RTX PRO 6000 in our setup); the
other four models go through the Fireworks API.
Sampling parameters per model are in configs/models.yaml, and each launcher
records what it actually used in the metadata field of every run file — so
the released archives carry their own provenance.
rgv/manifest.py lists all 34 cells with their question counts. Two notes:
browsecomp-plus/tongyi-deepresearchis the 830-question pool used for the paper's deep-dive analyses, but it has no per-token log-probabilities on disk. For token-level work usebrowsecomp-plus/gpt-oss-120bor any FRAMES cell instead.gaia/*andhle/*ship with question and gold-answer text redacted, since those benchmarks do not permit redistribution. Everything the agent produced is intact; join onqidagainst the official releases to recover the questions.