Skip to content
on-policy-self-distillation

gpt-5.6-sol

on-policy-self-distillation — graded by the task's verifier against a measured baseline.

backend
modal
variant
codex azure_ai/gpt-5.6-sol
metric
AIME24 avg@12 accuracy
actions
428
duration
9h 21m
recorded
2026-08-02

run idopsd-aime24-4gpus__eNDoWrD

Everything gpt-5.6-sol did on this task, in order.

download JSON ↗
codexgpt-5.6-sol444 turns16 narration428 reasoning428 action428 observation1 final
#76
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "39",
  "yield_time_ms": 30000,
  "max_tokens": 3000
}
wait result
Script completed
Wall time 0.0 seconds
Output:
Using the latest cached version of the dataset since siyanzhao/Openthoughts_math_30k_opsd couldn't be found on the Hugging Face Hub (offline mode is enabled).
Found the latest cached dataset configuration 'default' at /opt/hf_cache/datasets/siyanzhao___openthoughts_math_30k_opsd/default/0.0.0/1f33e9dc2e8a1c639ca74f8024ad4a9f1f5eae62 (last modified on Sun Aug  2 18:58:42 2026).
amc_aime 477 94 84
math 5351 2953 2940
olympiads 21315 7607 7563
aops_forum 2291 1210 1207
#77
narration

The first candidate scores 55.0% on the noisy 15-problem avg@4 screen—encouraging but not decisive. I’m now testing a domain-balanced on-policy curriculum: concentrate the fixed 3,200 training examples on numeric, non-multiple-choice AMC/AIME and AoPS problems, with repeated exposure to the scarce AIME-like subset. This changes neither optimizer steps nor batch size; it spends the same rollout budget on trajectories closest to the target reasoning distribution.

#78
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "const patch = \"*** Begin Patch\\n*** Update File: /workspace/repo/opsd_train.py\\n@@\\n-from datasets import load_dataset\\n+from datasets import concatenate_datasets, load_dataset\\n@@\\n-    train_dataset = dataset[\\\"train\\\"]\\n+    train_dataset = dataset[\\\"train\\\"]\\n+\\n+    # Target-domain replay curriculum.  With only 3,200 examples seen in a\\n+    # 100-step run, uniform sampling spends almost all of the rollout budget on\\n+    # unrelated/easy items (the raw corpus contains only a small AMC/AIME\\n+    # fraction).  Select numeric, free-response contest problems and upsample\\n+    # the particularly scarce AIME-like partition.  This uses only rows from\\n+    # the released training set and keeps the optimizer-step/global-batch\\n+    # budget unchanged.\\n+    import re\\n+\\n+    multiple_choice = re.compile(r\\\"\\\\\\\\text(?:bf)?\\\\{\\\\\\\\?\\\\(?A\\\\)?\\\\}|\\\\(A\\\\)|\\\\bA\\\\)\\\")\\n+\\n+    def numeric_free_response(example):\\n+        answer = (example.get(\\\"Answer\\\") or \\\"\\\").strip()\\n+        answer_match = re.fullmatch(r\\\"(?:\\\\\\\\boxed\\\\{)?(\\\\d+)(?:\\\\})?\\\", answer)\\n+        return answer_match is not None and int(answer_match.group(1)) <= 999 and not multiple_choice.search(\\n+            example[\\\"problem\\\"]\\n+        )\\n+\\n+    aime_like = train_dataset.filter(\\n+        lambda x: x[\\\"source\\\"] == \\\"amc_aime\\\" and numeric_free_response(x),\\n+        desc=\\\"Selecting AIME-like curriculum rows\\\",\\n+    )\\n+    aops_numeric = train_dataset.filter(\\n+        lambda x: x[\\\"source\\\"] == \\\"aops_forum\\\" and numeric_free_response(x),\\n+        desc=\\\"Selecting numeric AoPS curriculum rows\\\",\\n+    )\\n+    train_dataset = concatenate_datasets([aime_like] * 15 + [aops_numeric]).shuffle(seed=training_args.seed)\\n+    if os.environ.get(\\\"LOCAL_RANK\\\", \\\"0\\\") == \\\"0\\\":\\n+        print(\\n+            f\\\"Contest curriculum: {len(aime_like)} AIME-like rows x15 + \\\"\\n+            f\\\"{len(aops_numeric)} numeric AoPS rows = {len(train_dataset)} rows\\\"\\n+        )\\n*** End Patch\";\ntext(await tools.apply_patch(patch));"
}
exec result
Script completed
Wall time 0.0 seconds
Output:
{}
#79
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "const r = await tools.exec_command({cmd:\"python -m py_compile opsd_train.py && python - <<'PY'\\nimport re\\nfrom datasets import load_dataset\\nD=load_dataset('siyanzhao/Openthoughts_math_30k_opsd')['train']\\nmc=re.compile(r'\\\\\\\\text(?:bf)?\\\\{\\\\\\\\?\\\\(?A\\\\)?\\\\}|\\\\(A\\\\)|\\\\bA\\\\)')\\ndef f(x):\\n a=(x.get('Answer') or '').strip(); m=re.fullmatch(r'(?:\\\\\\\\boxed\\\\{)?(\\\\d+)(?:\\\\})?',a)\\n return m is not None and int(m.group(1))<=999 and not mc.search(x['problem'])\\nprint(sum(x['source']=='amc_aime' and f(x) for x in D),sum(x['source']=='aops_forum' and f(x) for x in D))\\nPY\",\"workdir\":\"/workspace/repo\",\"yield_time_ms\":30000,\"max_output_tokens\":3000});\ntext(r.output);"
}
exec result
Script completed
Wall time 5.7 seconds
Output:
Using the latest cached version of the dataset since siyanzhao/Openthoughts_math_30k_opsd couldn't be found on the Hugging Face Hub (offline mode is enabled).
Found the latest cached dataset configuration 'default' at /opt/hf_cache/datasets/siyanzhao___openthoughts_math_30k_opsd/default/0.0.0/1f33e9dc2e8a1c639ca74f8024ad4a9f1f5eae62 (last modified on Sun Aug  2 18:58:42 2026).
84 1207
#80
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "const r = await tools.exec_command({cmd:\"SEED=42 OUT_DIR=/workspace/runs/curriculum PORT=12952 bash /workspace/train_capped.sh\",\"workdir\":\"/workspace\",\"yield_time_ms\":1000,\"max_output_tokens\":1500});\ntext(r.output); if(r.session_id) text(`SESSION_ID=${r.session_id}`);"
}
exec result
Script completed
Wall time 1.2 seconds
Output:
SESSION_ID=25845
#81
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "let out=\"\";for(let i=0;i<3;i++){const r=await tools.write_stdin({session_id:25845,chars:\"\",yield_time_ms:60000,max_output_tokens:300});out+=r.output.slice(-500)+\"\\n\";if(r.exit_code!==undefined)break;}text(out);\n"
}
exec result
Script running with cell ID 43
Wall time 11.0 seconds
Output:
#82
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "43",
  "yield_time_ms": 60000,
  "max_tokens": 500
}
wait result
Script running with cell ID 43
Wall time 61.0 seconds
Output:
#83
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "43",
  "yield_time_ms": 60000,
  "max_tokens": 500
}
wait result
Script running with cell ID 43
Wall time 61.0 seconds
Output:
#84
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "43",
  "yield_time_ms": 60000,
  "max_tokens": 800
}
wait result
Script completed
Wall time 37.0 seconds
Output:
re aligned accordingly, being updated with the tokenizer's values. Updated tokens: {'bos_token_id': None, 'pad_token_id': 151643}.
[rank2]:W0802 19:01:08.949000 6673 torch/utils/cpp_extension.py:2425] TORCH_CUDA_ARCH_LIST is not set, all archs for visible cards are included for compilation. 
[rank2]:W0802 19:01:08.949000 6673 torch/utils/cpp_extension.py:2425] If this is not desired, please set os.environ['TORCH_CUDA_ARCH_LIST'] to specific architectures.

  0%|          | 0/100 [00:00<?, ?it/s]
241} $:

$$
\sqrt{32241} \approx 179.55
$$

So,

$$
n \approx \frac{-1 + 179.55}{2} \approx \frac{178.55}{2} \approx 89.275
$$

Try $ n = 89 $:

$$
n(n + 1) = 89 \cdot 90 = 8010 < 8060
$$

Try $ n = 90 $:

$$
n(n + 1) = 90 \cdot 91 = 8190 > 8060
$$

So the smallest $ n $ such that $ n(n + 1) > 8060 $ is $ n = 90 $

---

### ✅ Final Answer:

$$
\boxed{90}
$$<|im_end|>
================================================================================


  7%|▋         | 7/100 [00:57<12:39,  8.17s/it]
       | 14/100 [01:54<11:40,  8.15s/it]vLLM generation done - elapsed time: 3.31s, prompts: 4, total tokens: 3106, avg length: 776.5, speed: 938.8 tok/s
vLLM generation done - elapsed time: 3.36s, prompts: 4, total tokens: 3485, avg length: 871.2, speed: 1037.8 tok/s
vLLM generation done - elapsed time: 3.37s, prompts: 4, total tokens: 3757, avg length: 939.2, speed: 1115.8 tok/s
vLLM generation done - elapsed time: 3.41s, prompts: 4, total tokens: 4096, avg length: 1024.0, speed: 1201.8 tok/s

#85
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "let out=\"\";for(let i=0;i<5;i++){const r=await tools.write_stdin({session_id:25845,chars:\"\",yield_time_ms:60000,max_output_tokens:100});out+=r.output.slice(-220)+\"\\n\";if(r.exit_code!==undefined){out+=`EXIT${r.exit_code}`;break;}}text(out);\n"
}
exec result
Script running with cell ID 44
Wall time 11.0 seconds
Output:
#86
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "44",
  "yield_time_ms": 60000,
  "max_tokens": 200
}
wait result
Script running with cell ID 44
Wall time 61.0 seconds
Output:
#87
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "44",
  "yield_time_ms": 60000,
  "max_tokens": 200
}
wait result
Script running with cell ID 44
Wall time 61.0 seconds
Output:
#88
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "44",
  "yield_time_ms": 60000,
  "max_tokens": 200
}
wait result
Script running with cell ID 44
Wall time 61.0 seconds
Output:
#89
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "44",
  "yield_time_ms": 60000,
  "max_tokens": 200
}
wait result
Script running with cell ID 44
Wall time 61.0 seconds
Output:
#90
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "44",
  "yield_time_ms": 60000,
  "max_tokens": 500
}
wait result
Script completed
Wall time 24.7 seconds
Output:
57 tokens truncated… time: 3.41s, prompts: 4, total tokens: 4096, avg length: 1024.0, speed: 1202.6 tok/s
vLLM generation done - elapsed time: 3.27s, prompts: 4, total tokens: 3145, avg length: 786.2, speed: 960.8 tok/s

ngt…1998 tokens truncated…                            
{'loss': 0.0126, 'grad_norm': 0.04813661426305771, 'learning_rate': 5e-06, 'on_policy_loss': 0.0126, 'epoch': 0.39}

 30%|███       | 30/100 [04:05<09:31,  8.17s/it]
31 tokens truncated… time: 3.39s, prompts: 4, total tokens: 3847, avg length: 961.8, speed: 1136.3 tok/s
vLLM generation done - elapsed time: 3.40s, prompts: 4, total tokens: 3839, avg length: 959.8, speed: 1129.2 tok/s

 length…2036 tokens truncated…8.0, speed: 1076.8 tok/s
vLLM generation done - elapsed time: 3.41s, prompts: 4, total tokens: 4096, avg length: 1024.0, speed: 1201.1 tok/s

 45%|████▌     | 45/100 [06:06<07:27,  8.13s/it]
avg lengt…1980 tokens truncated…                      
{'loss': 0.0125, 'grad_norm': 0.04413760080933571, 'learning_rate': 5e-06, 'on_policy_loss': 0.0125, 'epoch': 0.67}

 52%|█████▏    | 52/100 [07:04<06:33,  8.21s/it]
#91
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "let out=\"\";for(let i=0;i<6;i++){const r=await tools.write_stdin({session_id:25845,chars:\"\",yield_time_ms:60000,max_output_tokens:100});out+=r.output.slice(-180)+\"\\n\";if(r.exit_code!==undefined){out+=`EXIT${r.exit_code}`;break;}}text(out);\n"
}
exec result
Script running with cell ID 45
Wall time 11.0 seconds
Output:
#92
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "45",
  "yield_time_ms": 60000,
  "max_tokens": 200
}
wait result
Script running with cell ID 45
Wall time 61.0 seconds
Output:
#93
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "45",
  "yield_time_ms": 60000,
  "max_tokens": 200
}
wait result
Script running with cell ID 45
Wall time 61.0 seconds
Output:
#94
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "45",
  "yield_time_ms": 60000,
  "max_tokens": 200
}
wait result
Script running with cell ID 45
Wall time 61.0 seconds
Output:
#95
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "45",
  "yield_time_ms": 60000,
  "max_tokens": 200
}
wait result
Script running with cell ID 45
Wall time 61.0 seconds
Output:
#96
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "45",
  "yield_time_ms": 60000,
  "max_tokens": 200
}
wait result
Script running with cell ID 45
Wall time 61.0 seconds
Output:
#97
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "45",
  "yield_time_ms": 60000,
  "max_tokens": 500
}
wait result
Script completed
Wall time 8.4 seconds
Output:
s: 4, total tokens: 3735, avg length: 933.8, speed: 1104.2 tok/s
vLLM generation done - elapsed time: 3.40s, prompts: 4, total tokens: 3907, avg length: 976.8, speed: 1150.1 tok/s

 4, total tokens: 4096, avg length: 1024.0, speed: 1203.4 tok/s
vLLM generation done - elapsed time: 3.41s, prompts: 4, total tokens: 4096, avg length: 1024.0, speed: 1201.1 tok/s

: 1157.5 tok/s
vLLM generation done - elapsed time: 3.39s, prompts: 4, total tokens: 4096, avg length: 1024.0, speed: 1208.8 tok/s

 75%|███████▌  | 75/100 [10:11<03:22,  8.12s/it]
: 1207.1 tok/s
vLLM generation done - elapsed time: 3.43s, prompts: 4, total tokens: 4096, avg length: 1024.0, speed: 1195.4 tok/s

 83%|████████▎ | 83/100 [11:13<02:16,  8.01s/it]
 4, total tokens: 4096, avg length: 1024.0, speed: 1204.7 tok/s
vLLM generation done - elapsed time: 3.44s, prompts: 4, total tokens: 4096, avg length: 1024.0, speed: 1191.2 tok/s

: 4, total tokens: 3678, avg length: 919.5, speed: 1088.3 tok/s
vLLM generation done - elapsed time: 3.40s, prompts: 4, total tokens: 4096, avg length: 1024.0, speed: 1204.7 tok/s

#98
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "let out=\"\";for(let i=0;i<3;i++){const r=await tools.write_stdin({session_id:25845,chars:\"\",yield_time_ms:60000,max_output_tokens:150});out+=r.output.slice(-300)+\"\\n\";if(r.exit_code!==undefined){out+=`EXIT${r.exit_code}`;break;}}text(out);\n"
}
exec result
Script running with cell ID 46
Wall time 11.0 seconds
Output:
#99
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "46",
  "yield_time_ms": 60000,
  "max_tokens": 400
}
wait result
Script completed
Wall time 0.9 seconds
Output:
essGroupNCCL.cpp:1538] Warning: WARNING: destroy_process_group() was not called before program exit, which can leak resources. For more info, please see https://pytorch.org/docs/stable/distributed.html#shutdown (function operator())
TRAIN_CKPT=/workspace/runs/curriculum/capped_seed42/checkpoint-100

EXIT0
#100
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "const r = await tools.exec_command({cmd:\"VAL_N=4 NUM_PROBLEMS=15 bash /workspace/dev_eval.sh /workspace/runs/curriculum/capped_seed42/checkpoint-100\",\"workdir\":\"/workspace\",\"yield_time_ms\":1000,\"max_output_tokens\":500});\ntext(r.output); if(r.session_id) text(`SESSION_ID=${r.session_id}`);"
}
exec result
Script completed
Wall time 1.2 seconds
Output:
SESSION_ID=60604