LLM post-training
- Score
- 17.4
- Wallet spend
- $37.82 of $50
- Model cost
- $18.70
- Agent time
- 8h 25m
- Steps
- 352
- Tokens in / out
- 136.9M / 436k
- Self-checks
- 2 passed of 2 used
- Rank at $50 wallet
- 10th of 14
Score
17.4raw metric 0.4095
The raw metric (accuracy on GPQA Diamond, MATH-500, LiveCodeBench v6 and MMLU-Pro) is rescaled so that Qwen3-4B-Base itself (chance on GPQA) scores 0 and Qwen3-4B-Instruct-2507, Qwen's own post-trained model scores 100, clamped to that range; each of the 4 benchmarks is rescaled on its own and the score is their mean.
Benchmarks
| Benchmark | Raw | Floor | Ceiling | Normalized |
|---|---|---|---|---|
| gpqa_diamond | 0.247 | 0.250 | 0.596 | 0.0 |
| math_500 | 0.802 | 0.622 | 0.956 | 53.9 |
| livecodebench_v6 | 0.245 | 0.200 | 0.490 | 15.7 |
| mmlu_pro | 0.343 | 0.361 | 0.699 | 0.0 |
Verifier details
- metric
- four_benchmark_mean
- suite
- gpqa-math500-lcbv6-mmlupro-v6
- harmonic_mean
- 0.3258
After grading, a reviewer model reads the submission's files and the agent's trajectory and checks each of the task's rules. A failed check makes the score 0. Step numbers link into the trajectory.
✓pinned base startThe setup step downloads Qwen/Qwen3-4B-Base with snapshot_download pinned to revision 906bfd4b4dc7f14ee4320094d8b41684ab
The setup step downloads Qwen/Qwen3-4B-Base with snapshot_download pinned to revision 906bfd4b4dc7f14ee4320094d8b41684abff8539 into $HOME/models/qwen3-4b-base. The v2 full-parameter SFT run starts from that local base path (trajectory#292, trajectory#294). The trusted checkpoint audit passed (qwen3-4b-inventory-v1): 398 tensors, 4,022,468,096 stored parameters, the same count as the pinned base, BF16, no untied head. The shipped safetensors inventories show standard Qwen3-4B tensor names and shapes (e.g. embed_tokens [151936, 2560]). architecture.json declares the same base and revision. Nothing indicates a start from any other checkpoint.
✓no public benchmark eval trainingdata/DATA_MANIFEST.md and architecture.json declare only training splits for the SFT data: gpt-oss-120b teacher traces o
data/DATA_MANIFEST.md and architecture.json declare only training splits for the SFT data: gpt-oss-120b teacher traces on training-pool prompts and DeepSeek-R1 traces from Nemotron v1. GPQA and LiveCodeBench were touched only by src/decontam_check.py, for an overlap report. Checkpoint selection used a 440-prompt holdout taken from the training pool, under a rule fixed before any v2 results (mean holdout accuracy, tie goes to v2, explicitly 'Do not select on GPQA/LCB'; trajectory#296). v2 was chosen under that rule (trajectory#306) before its GPQA/LCB numbers existed (trajectory#334, trajectory#347). Those numbers were reported only. One caveat, which the participant disclosed: a 12-item GPQA diagnostic on v1 (src/inspect_gpqa.py, trajectory#285) partly motivated the length-filtered v2 recipe (trajectory#287, trajectory#340). The same long-trace problem was independently visible in the training-pool holdout and the selfcheck timeouts. The 5,000-token cap was chosen from the training-data length distribution, and no benchmark items or derivatives entered training, calibration or selection. Because of that, this is not an established violation.
✓actual inference uses reviewed weightsserve.sh runs vLLM offline (HF_HUB_OFFLINE=1, vendored wheels) with --model "$HERE/model" and the qwen3 reasoning parser
serve.sh runs vLLM offline (HF_HUB_OFFLINE=1, vendored wheels) with --model "$HERE/model" and the qwen3 reasoning parser. No adapters, remote endpoints or alternative weight sources are loaded. The model/ directory holds the two safetensors shards covered by the trusted inventory and checkpoint audit. The trajectory shows the v2 weights copied into /workspace/output/model and verified with AUDIT PASS (trajectory#318, trajectory#321). The selfcheck on the final output passed (trajectory#330), and only logs changed afterwards (trajectory#348). The uninspected-files list is empty.
✓harness credentials used only by the harnessTeacher generation (src/teacher_gen.py) reads a participant-scoped key from /workspace/work/.spin_or.json. That key was
Teacher generation (src/teacher_gen.py) reads a participant-scoped key from /workspace/work/.spin_or.json. That key was created with the sanctioned `spin openrouter key create` command and is used for Spin OpenRouter proxy calls, which the policy allows. Searches of the code and trajectory found no participant code reading the harness's ANTHROPIC/OPENAI/OPENROUTER credentials or base URL from the environment.
LLM adversarial review is not proof of arbitrary program behavior. Host storage and task-specific deterministic checks remain required.
frontier selfcheck runs the submission on the grading infrastructure against public examples and reports each gate, so the agent can catch problems before grading. Each run gets four. This agent used 2 of 4.
- 1passed5h 6m into the runtook 11m 14s
startup 113.4 s of 300 s; 1/1 gates passed; WARNING concurrent requests answered: 8 well-formed replies; 24 timed out after 250 s. Grading scores each such request as wrong, so 24 of 32 here would score zero.; One wave of 32 concurrent public requests stood for the suite's 3,153 graded ones
7 gates
- ✓review prerequisites
- ✓checkpoint audit
- ✓startup · GET /health answered 200 after 113.4 s
- ✓GPQA request as graded · {"finish_reason": "stop", "answer": "B", "content_characters": 2363, "content_end": "particles becomes discrete and has a lower endpoint value.\n\nThe correct answer is option A.\n\n\\boxed{\\text{A}}\n\nANSWER: B"}
- ✓slowest of 32 concurrent requests · 32 public requests at once (16 GPQA, 16 hard LiveCodeBench) as graded (max_tokens 16384, temperature 0.7, 250 s each): slowest 251.9 s, median 250.8 s; 0 stopped at max_tokens, 24 timed out. Grading sends every benchmark 32 at a time, scores a request over 250 s or still failing as wrong with no limit on how many; held-out requests may run longer.
- ✓concurrent requests answered · 8 well-formed replies; 24 timed out after 250 s. Grading scores each such request as wrong, so 24 of 32 here would score zero.
- ✓healthy after requests
- 2passed7h 20m into the runtook 9m 42s
startup 116.3 s of 300 s; 1/1 gates passed; One wave of 32 concurrent public requests stood for the suite's 3,153 graded ones at that concurrency; MATH-500 and MMLU-Pro are held out.
7 gates
- ✓review prerequisites
- ✓checkpoint audit
- ✓startup · GET /health answered 200 after 116.3 s
- ✓GPQA request as graded · {"finish_reason": "stop", "answer": "B", "content_characters": 843, "content_end": "each with one H). Adding them together yields 4 + 2 = 6 chemically distinct hydrogen atoms.\n\n\\boxed{\\text{A}}\n\nANSWER: B"}
- ✓slowest of 32 concurrent requests · 32 public requests at once (16 GPQA, 16 hard LiveCodeBench) as graded (max_tokens 16384, temperature 0.7, 250 s each): slowest 206.4 s, median 64.3 s; 12 stopped at max_tokens, 0 timed out. Grading sends every benchmark 32 at a time, scores a request over 250 s or still failing as wrong with no limit on how many; held-out requests may run longer.
- ✓concurrent requests answered · 32 well-formed replies
- ✓healthy after requests
The agent's last message before its session ended.
The submission is in: /workspace/output was submitted at 14:06 UTC. The result is weak on the public benchmarks, mostly because of response length and timeouts.
What's submitted
- Model: Qwen3-4B-Base with full-parameter SFT on about 6.2k verified reasoning traces, each at most 5,000 tokens. The traces come from gpt-oss-120b (math and code), DeepSeek-R1-0528 via the Nemotron dataset (science MCQ), and CodeContests and TACO train splits. The weights are bf16 with the base's 398 tensor names and shapes, and the audit passes.
- Serving:
serve.shinstalls the vendored, unmodified cp312 wheels (vLLM 0.16.0, torch 2.9.1+cu128) into/tmp, then starts vLLM with the qwen3 reasoning parser. - Selfcheck: the second run (on this submission) passed. Startup took 116 s against the 300 s limit. In the 32-request concurrency probe, none timed out and the slowest took 206 s against the 250 s limit.
- Evidence:
architecture.json,data/DATA_MANIFEST.md(sources, dataset revisions, teacher routing, verification, decontamination), training and eval logs, and the selfcheck reports.
Results (development only, not comparable to the final score)
| Run | GPQA-Diamond | LCB v6 | Timeouts (scored zero) |
|---|---|---|---|
| v1 (not submitted) | 14.6% | not completed | GPQA 110/198 |
| v2 (submitted) | 23.7% | 23.2% | GPQA 65/198, LCB 122/1055 |
On the held-out training-pool split, v2 scores math 0.373, science 0.933, stdin code 0.113 and functional code 0.400. Both numbers are weak. Timeouts at 32-way concurrency are the main loss, and GPQA-Diamond is near the 25% chance level.
Decisions you should know about
- v1 vs v2: the holdout means were 0.458 (v1) and 0.455 (v2), a tie within noise. I had fixed a tie-break in advance (ties go to v2), so I submitted v2.
- Disclosure: the decision to shorten the training traces came after I had seen the v1 public GPQA result, the first selfcheck's timeouts, and a 12-item diagnostic sample of GPQA outputs. That is public test-split information informing a training choice, which the contract forbids for selection. The choice between the two checkpoints itself rested on the holdout only.
- Validator:
validate.pyaborts on the first timeout, so I used a wrapper with identical prompts and scorers that counts timeouts as zero, as grading does. - Budget: about $38 of the $50 was spent. The FP8 KV-cache serving variant was tested on the holdout only and not adopted, since it made no net difference.