vuhaian/25k_from_rollouts
25k teacher rollouts from Affine SN120 24,930 prompt–completion pairs distilled from the published duel artifacts of Affine (Bittensor subnet 120). Each row is one teacher rollout on one agent turn: the conversation so far, the reasoning the teacher produced, and the bash action it took. Built from corpus epoch 5 (manifest 1cd8edc52646, 29,860 turns across 5 shards) and all 104 eval artifacts published up to 2026-08-10. Fields field type description… See the full description on the dataset page: https://huggingface.co/datasets/vuhaian/25k_from_rollouts.
25k teacher rollouts from Affine SN120
24,930 prompt–completion pairs distilled from the published duel artifacts of Affine (Bittensor subnet 120). Each row is one teacher rollout on one agent turn: the conversation so far, the reasoning the teacher produced, and the bash action it took.
Built from corpus epoch 5 (manifest 1cd8edc52646, 29,860 turns across 5 shards) and all 104 eval artifacts published up to 2026-08-10.
Fields
On answer_raw
The validator splits a completion into (z, y) with split_rollout(), and that function is lossy: it keeps only the last closed bash block, discards anything after it, and merges the latent <think> span with the visible THOUGHT: section. The original completion bytes were never published, so a byte-exact answer cannot be recovered.
What is well defined is the canonical assistant body the subnet builds in inject_prompt() and scores through force_text():
</think>\nTHOUGHT: {z}\n\n{y}This is the exact string the teacher's logprobs were measured against, which makes it the right training target. It was verified by round-tripping every row back through the validator's own split_rollout(): 24,930/24,930 recover y_raw exactly, and all recover the reasoning exactly.
One deliberate deviation: ~24% of z_raw values echo back the <think> tag they were generated inside, which would render a nested, unclosed THOUGHT: <think> in the target. Those tags are stripped in answer_raw only; z_raw keeps the original bytes.
Known data quality notes
- ~1,939 distinct turns. Rows outnumber turns because the teacher was sampled ~4× per turn and turns recur across duels. Group by
turn_idbefore splitting train/eval, or the same prefix will appear on both sides. - Repo skew.
conan-io/conanis 65% of rows andpygments/pygments19%, inherited from which turns duels happened to sample. - ~100 rows (0.4%) carry a corrupted thought label from the teacher itself —
THOught:,THOOTH:,THOPRHOUGHT:,THO</think></think>. The validator's label regex only strips an exactTHOUGHT:, so the debris survives inz_raw. Left as-is rather than silently rewriting teacher output; filter onz_raw.startswith("THO")if it matters for your run. - Deduplicated on
(turn_id, z_raw, y_raw), so identical rollouts are not repeated. Rollouts drawn from the newer corpus shards are near-unique; most duplication came from the original synthetic shard.
Usage
from datasets import load_dataset
ds = load_dataset("vuhaian/25k_from_rollouts", split="train")
def to_text(row, tokenizer):
prompt = tokenizer.apply_chat_template(
row["prefix"], tokenize=False, add_generation_prompt=True
)
if not prompt.rstrip().endswith("<think>"):
prompt += "<think>"
return {"prompt": prompt, "completion": row["answer_raw"]}The prompt must end inside an open <think> — that is the state the teacher generated from, and answer_raw begins with the matching </think>.
