Prospector / README.md
mjbuehler's picture haiqian-mit's picture
Duplicate from haiqian-mit/Prospector
3804d6f
|
Raw History Blame Contribute Delete
7.86 kB
---
license: apache-2.0
base_model:
- Qwen/Qwen3.5-4B
tags:
- lora
- knowledge-graph
- tool-use
- graph-traversal
- question-answering
- scientific-reasoning
---
# Prospector
Prospector is a compact LLM policy post-trained to answer questions over a
scientific knowledge graph. The policy calls a small set of tools to traverse
the graph turn by turn, building its context from what each call returns,
and answers with a chain of edges that is checked against what its tools
retrieved. Prospector is Qwen3.5 at 0.8B, 2B and 4B parameters with LoRA
adapters, trained on one graph built from the semiconductor-manufacturing
literature. With frozen weights, the same adapters transfer to graphs from
three other fields.
This repository holds the weights, the training rows and the stored
evaluation runs of the paper, laid out as the code repository expects them.
The code that serves, evaluates and trains them is at
[github.com/lamm-mit/Prospector](https://github.com/lamm-mit/Prospector).
Its README covers the evaluation harness, serving a policy, training one on
your own graph, and the command behind every number in the paper.
## Get started
The code repository's quick start, on a Mac with Apple silicon
or a Linux machine with an NVIDIA GPU:
```bash
# install uv, unless you have it
curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
git clone https://github.com/lamm-mit/Prospector && cd Prospector
# download this repository's adapters and data into the checkout, about 9 GB
uvx --from huggingface_hub hf download lamm-mit/Prospector --local-dir . \
--include "models/*" --include "data/*"
# build the environment and evaluate Prospector-4B on six questions
./quickstart.sh
```
The first run also downloads the base model from the Hub and merges the
adapters into it. The semiconductor graph is then under `data/raw/`, and the
code repository's `data/raw/README.md` downloads the three other graphs. The
code repository's README, under "Reproducing the paper", gives for each
number in the paper the command that recomputes it and the stored run the
number is computed from.
## Results
The gate accepts a cited chain when every cited edge was returned by a tool
and the answer names a node of the chain. Gated accuracy is the fraction of
questions whose chain passes the gate and whose answer names a gold label.
The table gives means over the seeds of the runs stored here, ± one standard
deviation.
| policy, graph | gated accuracy |
|---|---|
| Prospector-4B, semiconductor, eight seeds (`flash20cap1024-s0` to `-s7`) | 0.839 ± 0.015 |
| Prospector-2B, semiconductor, eight seeds (`q2bd2eval-ck120-s0` to `-s7`) | 0.755 ± 0.016 |
| Prospector-0.8B, semiconductor, eight seeds (`q0.8bd2eval-ck120-s0` to `-s7`) | 0.694 ± 0.021 |
| Prospector-4B, bio-inspired materials, three seeds (`flash20stackbio-s0` to `-s2`) | 0.803 ± 0.017 |
| Prospector-4B, PFAS, three seeds (`stack1kpfas-ctx32k-s0` to `-s2`) | 0.766 ± 0.022 |
| Prospector-4B, materials properties, three seeds (`stack1kmatprop-s0` to `-s2`) | 0.809 ± 0.011 |
## The served policies
The paper's recipe trains each size in four stages: a supervised stage on a
frontier teacher's demonstrations, a GRPO round over whole episodes, a
second supervised stage on the demonstrations blended with the policy's own
kept episodes, and two decision rounds of GRPO that resume stored
mid-episode states. A verifier is then trained on the served policy's own
samples. Each size serves the second supervised stage's adapter with the
checkpoint that each decision round's evaluation grid picked applied on top,
in this load order, over `Qwen/Qwen3.5-<size>`. The policies run with the
`plain_chatml` chat template at a budget of 20 tool calls and 1,024
generated tokens a turn.
| size | policy (`--adapter`, in load order) | verifier |
|---|---|---|
| 4B | `models/traj_sft_4b_flash20g2/final`, `models/traj_grpo_4b_flash20d1/checkpoint-120`, `models/traj_grpo_4b_flash20d2/checkpoint-120` | `models/verifier_sft_4b_flash20v/final` |
| 2B | `models/traj_sft_2b_flash20g2/final`, `models/traj_grpo_2b_flash20d1/checkpoint-100`, `models/traj_grpo_2b_flash20d2/checkpoint-120` | `models/verifier_sft_2b_flash20v/final` |
| 0.8B | `models/traj_sft_0.8b_flash20g2/final`, `models/traj_grpo_0.8b_flash20d1/checkpoint-100`, `models/traj_grpo_0.8b_flash20d2/checkpoint-120` | `models/verifier_sft_0.8b_flash20v/final` |
The adapters are PEFT LoRA adapters in transformers' fused naming for Qwen3.5
(`in_proj_qkv`), which the code repository's pinned `transformers` and `peft`
load. Each `run.json` records the chat template its adapter was trained
under, and each GRPO round's `peak.txt` records the checkpoint its grid
picked.
## What is here
Downloaded into a checkout's root, every file lands where the code expects
it. `MANIFEST` lists every file by pattern with its reason.
```
data/raw/ the semiconductor graph, the paper's own; the code repository's
data/raw/README.md downloads the three other graphs from their sources
models/ the recipe's six training runs at each size, each adapter with the
run.json that records what it was trained from, and
recipe_backfill_v1.json, which records how those run.json files were
written and each later change made by hand to a stored file here
data/traj/ the training rows of each stage, each with a .provenance.json sidecar
naming what it was built from, where one exists
data/runs/ the stored evaluation runs: every run the paper reads or the code
repository's README names, the timing runs behind the cost figure,
and the latent-state probe's derived files under _probe/
data/analysis/ inference_speed.json, which prices the timing runs at the posted
rates it dates
MANIFEST the list of what is here and why, pattern by pattern
```
The set is the smallest that serves the three policies, lets `prospector
run` re-evaluate a size over the released adapters without training
anything, and recomputes every figure in the paper from stored runs, with
the probe's hidden states (about 1.7 GB a run) regenerated by its `states`
stage from the stored transcripts.
**The training rows.** `data/traj/` holds the rows each stage trained from,
named as the code derives them. Stage 1's demonstrations
(`tsmc_sft_mix_flash20.jsonl`) are shared by the three sizes. The second
supervised stage's mix, the decision rounds' stored states and the
verifier's rows exist per size. The teacher runs the demonstrations came
from (`flash20-teach-4x-g0` to `-g7` and `-p2`) are under `data/runs/`. The
0.8B's and 2B's mixes and stored states were rebuilt by the code's builders
from the stored runs they were sampled from, and the same builders reproduce
the 4B's files byte for byte. With these adapters in place, `prospector run`
trains nothing. At 0.8B and 2B the command reuses the stored evaluations
here, which carry the names it derives, and evaluates what it does not find.
At 4B, whose stored runs carry older names, the command evaluates afresh
under its own names.
**The stored runs.** A run is a directory `data/runs/<name>--<benchmark>/`
in the shape the code repository's README describes. A closed-book or
retrieved-subgraph run, which has no episodes, holds one reply per question
and, where it was scored, the scorer's output under the same gate.
## License and citation
The adapters, the rows, the runs and the semiconductor graph are released
under the Apache License 2.0.
```bibtex
@article{yang2026prospector,
title = {Prospector: learning a compact graph traversal policy for scientific reasoning},
author = {Yang, Haiqian and Buehler, Markus J.},
journal = {arXiv preprint},
year = {2026}
}
```