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
596
duration
7h 59m
recorded
2026-08-03

run idopsd-aime24-4gpus__kuc95M7

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

download JSON ↗
codexgpt-5.6-sol669 turns73 narration596 reasoning596 action596 observation1 final
#501
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "245",
  "yield_time_ms": 60000,
  "max_tokens": 120
}
wait result
Script completed
Wall time 42.1 seconds
Output:
Warning: truncated output (original token count: 175)
Total output lines: 1

{"chunk_id":"9253bc","wall_time_seconds":60.000998445,"session_id":70127,"original_token_count":208,"output":"Warning: truncated output (original token count: 208)\nTotal output lines: 2\n\n\rProcessed prompts: 100%|████████…55 tokens truncated…██▋    | 48/84 [13:26<08:43, 14.55s/it, est. speed input: 5.02 toks/s, output: 964.32 toks/s]\rProcessed prompts:  62%|██████▎   | 60/96 [13:28<05:13,  8.72s/it, est. speed input: 10.13 toks/s, output: 1375.48 toks/s]"}
#502
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "const r = await tools.write_stdin({session_id:70127,chars:\"\",yield_time_ms:60000,max_output_tokens:120});\ntext(JSON.stringify(r));\n"
}
exec result
Script running with cell ID 246
Wall time 11.0 seconds
Output:
#503
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "246",
  "yield_time_ms": 60000,
  "max_tokens": 120
}
wait result
Script completed
Wall time 42.1 seconds
Output:
{"chunk_id":"244568","wall_time_seconds":60.000997893,"session_id":70127,"original_token_count":33,"output":"\rProcessed prompts:  43%|████▎     | 36/84 [14:12<15:00, 18.77s/it, est. speed input: 4.08 toks/s, output: 687.43 toks/s]"}
#504
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "const r = await tools.write_stdin({session_id:70127,chars:\"\",yield_time_ms:60000,max_output_tokens:120});\ntext(JSON.stringify(r));\n"
}
exec result
Script running with cell ID 247
Wall time 11.0 seconds
Output:
#505
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "247",
  "yield_time_ms": 60000,
  "max_tokens": 120
}
wait result
Script completed
Wall time 42.3 seconds
Output:
Warning: truncated output (original token count: 175)
Total output lines: 1

{"chunk_id":"b472a8","wall_time_seconds":60.001125492,"session_id":70127,"original_token_count":209,"output":"Warning: truncated output (original token count: 209)\nTotal output lines: 2\n\n\rProcessed prompts:  75%|███████▌…55 tokens truncated…█▋    | 48/84 [15:31<08:21, 13.94s/it, est. speed input: 5.01 toks/s, output: 1012.70 toks/s]\rProcessed prompts:  71%|███████▏  | 60/84 [15:44<03:43,  9.32s/it, est. speed input: 6.21 toks/s, output: 1339.69 toks/s]"}
#506
narration

One shard is complete; the remaining three are now past approximately 50–75%. No failures have occurred.

#507
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "const r = await tools.write_stdin({session_id:70127,chars:\"\",yield_time_ms:60000,max_output_tokens:120});\ntext(JSON.stringify(r));\n"
}
exec result
Script completed
Wall time 8.3 seconds
Output:
{"chunk_id":"19c29d","wall_time_seconds":8.287407652,"exit_code":0,"original_token_count":285,"output":"Warning: truncated output (original token count: 285)\nTotal output lines: 5\n\n\rProcessed prompts:  86%|████████▌ | 72/84 [16:12<01:23,  6.95s/it, est. speed input: 7.51 toks/s, output: 1619.04 toks/s]\rProcessed prompts: 100%|██████████| 84/84 [16:12<00:00,  6.95s/it, est. speed i…165 tokens truncated…███| 96/96 [16:22<00:00, 10.23s/it, est. speed input: 13.32 toks/s, output: 2119.29 toks/s]\n\nFINAL avg@12 accuracy: 54.44% (196/360 solutions correct on 30 problems)\nResults written to /workspace/eval_results/dev_eval_1785745652.json\n"}
#508
narration

The 0.025 clip scored 54.44% (196/360), exactly in the baseline region and well below the 56.11 replicated method. I’m reverting to the default 0.05 clip and locking the mild 1.5→0.5 early-credit schedule. I’ll now run final syntax/numerical checks and verify that only the intended trainer change plus the existing pre-session README edit remain.

#509
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "const patch = \"*** Begin Patch\\n*** Update File: /workspace/repo/opsd_trainer.py\\n@@\\n             lengths = mask.sum(dim=-1, keepdim=True).clamp_min(1)\\n             progress = positions.to(token_divergence.dtype) / (lengths - 1).clamp_min(1)\\n             credit = (1.5 - progress).clamp_min(0.5) * mask\\n+            credit = torch.where(lengths > 1, credit, mask.to(token_divergence.dtype))\\n@@\\n         elif reduction == \\\"mean\\\":\\n-            return (token_divergence * credit).sum() / credit.sum().clamp_min(1) if labels is not None else jsd.mean()\\n+            if labels is not None:\\n+                return (token_divergence * credit).sum() / credit.sum().clamp_min(1)\\n+            return jsd.mean()\\n*** Update File: /workspace/submission/recipe.env\\n@@\\n-jsd_token_clip=0.025\\n+# jsd_token_clip=0.05\\n*** End Patch\";\ntext(await tools.apply_patch(patch));\nconst r = await tools.exec_command({cmd:\"python -m py_compile opsd_train.py opsd_trainer.py data_collator.py && python - <<'PY'\\nimport torch\\nfor length in [0, 1, 2, 3, 17, 1024]:\\n    mask = torch.arange(max(1, length + 3)).unsqueeze(0) < length\\n    token_divergence = torch.zeros_like(mask, dtype=torch.float32)\\n    positions = mask.long().cumsum(dim=-1) - 1\\n    lengths = mask.sum(dim=-1, keepdim=True).clamp_min(1)\\n    progress = positions.to(token_divergence.dtype) / (lengths - 1).clamp_min(1)\\n    credit = (1.5 - progress).clamp_min(0.5) * mask\\n    credit = torch.where(lengths > 1, credit, mask.to(token_divergence.dtype))\\n    print(length, float(credit.sum()), float(mask.sum()), float(credit.min()), float(credit.max()))\\nPY\\nprintf '\\\\nSTATUS\\\\n'\\ngit status --short\\nprintf '\\\\nDIFF CHECK\\\\n'\\ngit diff --check\\nprintf '\\\\nTIMER\\\\n'\\ncat /workspace/.timer/remaining_secs\\nprintf '\\\\nRESULTS\\\\n'\\nfor f in /workspace/eval_results/dev_eval_*.json; do jq -r '[.checkpoint_path,.average_at_n_pct] | @tsv' \\\"$f\\\"; done | tail -12\\nprintf '\\\\nRECIPE ACTIVE LINES\\\\n'\\nsed 's/#.*$//' /workspace/submission/recipe.env | sed '/^[[:space:]]*$/d'\",\"workdir\":\"/workspace/repo\",\"yield_time_ms\":10000,\"max_output_tokens\":10000});\ntext(r.output);\n"
}
exec result
Script completed
Wall time 2.0 seconds
Output:
{}0 0.0 0.0 0.0 0.0
1 1.0 1.0 0.0 1.0
2 2.0 2.0 0.0 1.5
3 3.0 3.0 0.0 1.5
17 17.0 17.0 0.0 1.5
1024 1024.0 1024.0 0.0 1.5

STATUS
 M README.md
 M opsd_trainer.py

DIFF CHECK
README.md:285: trailing whitespace.
+| `--jsd_token_clip` | 0.05 | Clip the JSD loss for each token to a maximum value. This can improve stability. | 

TIMER
6756

RESULTS
/workspace/runs/contest2048/capped_seed42/checkpoint-100	51.94444444444444
/workspace/runs/earlycredit/capped_seed42/checkpoint-100	56.111111111111114
/workspace/runs/earlycredit_linear/capped_seed42/checkpoint-100	54.72222222222222
/workspace/runs/earlycredit_repeat2/capped_seed42/checkpoint-100	56.111111111111114
/workspace/runs/earlycredit_strong/capped_seed42/checkpoint-100	56.94444444444444
/workspace/runs/earlycredit_strong_repeat2/capped_seed42/checkpoint-100	55.27777777777778
/workspace/runs/earlycredit_clip025/capped_seed42/checkpoint-100	54.44444444444444

RECIPE ACTIVE LINES
#510
narration

Final checks passed: the credit weights sum exactly to the original token count for lengths 1–1024, syntax compiles, and the only repo code change is in the loss (the README modification predates my work). One additional paper-consistency issue is worth testing: the paper defines a per-trajectory token average, but the code globally averages all batch tokens, overweighting long/capped rollouts. I’ll test trajectory-balanced early credit; it must clearly improve on the replicated 56.11 to replace the locked method.

#511
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "const patch = \"*** Begin Patch\\n*** Update File: /workspace/repo/opsd_trainer.py\\n@@\\n         if reduction == \\\"batchmean\\\":\\n             if labels is not None:\\n-                return (token_divergence * credit).sum() / mask.sum().clamp_min(1)\\n+                # Match the paper's nested expectation: average tokens within\\n+                # each sampled trajectory first, then average trajectories.  A\\n+                # flat token average silently gives long/capped generations\\n+                # more influence than concise ones.\\n+                token_counts = mask.sum(dim=-1).clamp_min(1)\\n+                per_trajectory = (token_divergence * credit).sum(dim=-1) / token_counts\\n+                valid_trajectories = mask.any(dim=-1)\\n+                return per_trajectory[valid_trajectories].mean()\\n*** End Patch\";\ntext(await tools.apply_patch(patch));\nconst r = await tools.exec_command({cmd:\"SEED=42 OUT_DIR=/workspace/runs/earlycredit_trajbalanced PORT=12957 bash /workspace/train_capped.sh\",\"workdir\":\"/workspace/repo\",\"yield_time_ms\":1000,\"max_output_tokens\":300});\ntext(JSON.stringify(r));\n"
}
exec result
Script completed
Wall time 1.2 seconds
Output:
{}{"chunk_id":"eaee05","wall_time_seconds":1.001403276,"session_id":69361,"original_token_count":0,"output":""}
#512
narration

The trajectory-balanced candidate is still running. I’ll finish its full evaluation, compare it against the replicated 56.11 fallback, and keep only the stronger method.

#513
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "const r = await tools.write_stdin({session_id: 69361, chars: \"\", yield_time_ms: 60000, max_output_tokens: 200}); text(JSON.stringify(r));\n"
}
exec result
Script running with cell ID 251
Wall time 11.0 seconds
Output:
#514
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "251",
  "yield_time_ms": 60000,
  "max_tokens": 200
}
wait result
Script completed
Wall time 46.8 seconds
Output:
Warning: truncated output (original token count: 259)
Total output lines: 1

{"chunk_id":"2ee186","wall_time_seconds":60.000972726,"session_id":69361,"original_token_count":4747,"output":"Warning: truncated output (original token count: 4747)\nTotal output lines: 217\n\n<string>:24: FutureWarning: `torch_dtype` is deprecated and will be removed in version 0.27.0, please use `dtype` instead.\n\n================================================================================…59 tokens truncated…ens: 2975, avg length: 743.8, speed: 911.5 tok/s\nvLLM generation done - elapsed time: 3.28s, prompts: 4, total tokens: 3450, avg length: 862.5, speed: 1051.4 tok/s\nvLLM generation done - elapsed time: 3.29s, prompts: 4, total tokens: 3354, avg length: 838.5, speed: 1020.2 tok/s\nvLLM generation done - elapsed time: 3.33s, prompts: 4, total tokens: 3537, avg length: 884.2, speed: 1062.0 tok/s\n"}
#515
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "const r = await tools.write_stdin({session_id: 69361, chars: \"\", yield_time_ms: 60000, max_output_tokens: 120}); text(JSON.stringify(r));\n"
}
exec result
Script running with cell ID 252
Wall time 11.0 seconds
Output:
#516
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "252",
  "yield_time_ms": 60000,
  "max_tokens": 120
}
wait result
Script completed
Wall time 45.4 seconds
Output:
Warning: truncated output (original token count: 177)
Total output lines: 1

{"chunk_id":"406410","wall_time_seconds":60.001664171,"session_id":69361,"original_token_count":3704,"output":"Warning: truncated output (original token count: 3704)\nTotal output lines: 302\n\nvLLM generation done - elapsed time: 3.18s, pr…57 tokens truncated… tok/s\nvLLM generation done - elapsed time: 3.30s, prompts: 4, total tokens: 2952, avg length: 738.0, speed: 895.4 tok/s\nvLLM generation done - elapsed time: 3.31s, prompts: 4, total tokens: 3044, avg length: 761.0, speed: 920.1 tok/s\n"}
#517
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "const r = await tools.write_stdin({session_id: 69361, chars: \"\", yield_time_ms: 60000, max_output_tokens: 140}); text(JSON.stringify(r));\n"
}
exec result
Script running with cell ID 253
Wall time 11.0 seconds
Output:
#518
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "253",
  "yield_time_ms": 60000,
  "max_tokens": 140
}
wait result
Script completed
Wall time 47.3 seconds
Output:
Warning: truncated output (original token count: 197)
Total output lines: 1

{"chunk_id":"7b6b58","wall_time_seconds":60.001092974,"session_id":69361,"original_token_count":2953,"output":"Warning: truncated output (original token count: 2953)\nTotal output lines: 180\n\nvLLM generation done - elapsed time: 3.28s, prompts: 4, total tokens: 3284, avg length…57 tokens truncated… 3647, avg length: 911.8, speed: 1102.8 tok/s\nvLLM generation done - elapsed time: 3.32s, prompts: 4, total tokens: 3063, avg length: 765.8, speed: 923.5 tok/s\nvLLM generation done - elapsed time: 3.31s, prompts: 4, total tokens: 3714, avg length: 928.5, speed: 1121.8 tok/s\n"}
#519
narration

Training is proceeding normally through the on-policy rollout batches; no numerical or memory failures have appeared. The decisive check remains the full 360-sample evaluation.

#520
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "const r = await tools.write_stdin({session_id: 69361, chars: \"\", yield_time_ms: 60000, max_output_tokens: 1000}); text(r.output.slice(-1800));\n"
}
exec result
Script running with cell ID 254
Wall time 11.0 seconds
Output:
#521
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "254",
  "yield_time_ms": 60000,
  "max_tokens": 1000
}
wait result
Script completed
Wall time 47.1 seconds
Output:
neration done - elapsed time: 3.29s, prompts: 4, total tokens: 3281, avg length: 820.2, speed: 997.4 tok/s

 28%|██▊       | 28/100 [03:42<09:26,  7.87s/it]
                                                
{'loss': -0.0026, 'grad_norm': 0.05131308361887932, 'learning_rate': 5e-06, 'on_policy_loss': -0.0026, 'epoch': 0.03}

 28%|██▊       | 28/100 [03:42<09:26,  7.87s/it]vLLM generation done - elapsed time: 1.92s, prompts: 4, total tokens: 1624, avg length: 406.0, speed: 844.9 tok/s
vLLM generation done - elapsed time: 3.15s, prompts: 4, total tokens: 2455, avg length: 613.8, speed: 780.2 tok/s
vLLM generation done - elapsed time: 3.28s, prompts: 4, total tokens: 3433, avg length: 858.2, speed: 1047.2 tok/s
vLLM generation done - elapsed time: 3.31s, prompts: 4, total tokens: 3864, avg length: 966.0, speed: 1168.4 tok/s
vLLM generation done - elapsed time: 3.16s, prompts: 4, total tokens: 3150, avg length: 787.5, speed: 997.7 tok/s
vLLM generation done - elapsed time: 3.25s, prompts: 4, total tokens: 2945, avg length: 736.2, speed: 905.9 tok/s
vLLM generation done - elapsed time: 3.31s, prompts: 4, total tokens: 3760, avg length: 940.0, speed: 1136.0 tok/s
vLLM generation done - elapsed time: 3.33s, prompts: 4, total tokens: 3917, avg length: 979.2, speed: 1176.0 tok/s

 29%|██▉       | 29/100 [03:50<09:19,  7.88s/it]vLLM generation done - elapsed time: 3.30s, prompts: 4, total tokens: 4096, avg length: 1024.0, speed: 1241.2 tok/s
vLLM generation done - elapsed time: 3.30s, prompts: 4, total tokens: 4096, avg length: 1024.0, speed: 1242.0 tok/s
vLLM generation done - elapsed time: 3.29s, prompts: 4, total tokens: 3517, avg length: 879.2, speed: 1068.3 tok/s
vLLM generation done - elapsed time: 3.34s, prompts: 4, total tokens: 3916, avg length: 979.0, speed: 1172.4 tok/s
#522
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "const r = await tools.write_stdin({session_id: 69361, chars: \"\", yield_time_ms: 60000, max_output_tokens: 300}); text(r.output.slice(-500));\n"
}
exec result
Script running with cell ID 255
Wall time 11.0 seconds
Output:
#523
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "255",
  "yield_time_ms": 60000,
  "max_tokens": 300
}
wait result
Script completed
Wall time 47.1 seconds
Output:
ration done - elapsed time: 3.28s, prompts: 4, total tokens: 3313, avg length: 828.2, speed: 1010.5 tok/s
vLLM generation done - elapsed time: 3.29s, prompts: 4, total tokens: 3639, avg length: 909.8, speed: 1106.3 tok/s
vLLM generation done - elapsed time: 3.31s, prompts: 4, total tokens: 3300, avg length: 825.0, speed: 996.5 tok/s
vLLM generation done - elapsed time: 3.37s, prompts: 4, total tokens: 4096, avg length: 1024.0, speed: 1215.3 tok/s

 37%|███▋      | 37/100 [04:54<08:21,  7.96s/it]
#524
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolexec
args
{
  "input": "const r = await tools.write_stdin({session_id: 69361, chars: \"\", yield_time_ms: 60000, max_output_tokens: 250}); text(r.output.slice(-420));\n"
}
exec result
Script running with cell ID 256
Wall time 11.0 seconds
Output:
#525
reasoning (redacted)

encrypted chain-of-thought — recorded, not exposed

toolwait
args
{
  "cell_id": "256",
  "yield_time_ms": 60000,
  "max_tokens": 250
}
wait result
Script completed
Wall time 47.2 seconds
Output:
46.8, speed: 1030.9 tok/s
vLLM generation done - elapsed time: 3.30s, prompts: 4, total tokens: 3736, avg length: 934.0, speed: 1130.6 tok/s
vLLM generation done - elapsed time: 3.31s, prompts: 4, total tokens: 3919, avg length: 979.8, speed: 1184.6 tok/s
vLLM generation done - elapsed time: 3.33s, prompts: 4, total tokens: 3702, avg length: 925.5, speed: 1111.3 tok/s

 45%|████▌     | 45/100 [05:58<07:22,  8.04s/it]