Inverse dynamics model
- Score
- 78.5
- Wallet spend
- $195.44 of $200
- Model cost
- $62.56
- Agent time
- 6h 55m
- Steps
- 265
- Tokens in / out
- 86.7M / 304k
- Self-checks
- 3 passed of 3 used
- Rank at $200 wallet
- 2nd of 14
Score
78.5raw metric 0.7853
The score is the raw metric (micro action F1), which already runs from 0 to 1, times 100.
Verifier details
- metric
- micro_action_f1
- tp
- 664
- fp
- 108
- fn
- 255
- precision
- 0.8601
- recall
- 0.7225
- failed_clip_limit_percent
- 5
- dropped_actions
- 0
- elapsed_seconds
- 168.9352
- deadline_seconds
- 3600
- request_timeout_seconds
- 300
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.
✓training data provenanceEvery training data source is declared. architecture.json and data_manifest/DATA.md name the public HF dataset anaisleil
Every training data source is declared. architecture.json and data_manifest/DATA.md name the public HF dataset anaisleila/computer-use-data-psai at a pinned revision, plus synthetic renders produced by src/synth.py. src/psai_download.py fetches the dataset with snapshot_download, and src/infra/setup8.sh runs that download and the indexing step. src/dataset.py and the MixedDataset in src/train.py read only the PSAI index and the synthetic source. logs/train_node/train.log shows 3019 training videos and 134 validation videos taken from PSAI. The one example clip is the allowed /task/public example, used through --example for validation and calibration. In the trajectory, p-doom appears only as HF metadata listings, blog and README reads, and public GitHub source code (trajectory#11, #13-15, #28-29). I found no download of idm-eval, frontier-ml-tasks or any other benchmark's validation or test split.
✓non specialist initializationThe base model is the general-purpose Qwen/Qwen3-VL-2B-Instruct. src/infra/setup8.sh downloads it with snapshot_download
The base model is the general-purpose Qwen/Qwen3-VL-2B-Instruct. src/infra/setup8.sh downloads it with snapshot_download, and src/model.py loads it with Qwen3VLForConditionalGeneration.from_pretrained and adds a new MLP head. Phase 1 in src/train.py and src/infra/README.md starts from /root/models/Qwen3-VL-2B-Instruct. Phases 2 and 3 (src/infra/phase2.sh, src/infra/phase3.sh) continue only from the participant's own earlier checkpoints. The shipped model/backbone/config.json is a qwen3_vl config with hidden size 2048 and 28 layers, and the model/backbone/model.safetensors inventory has a Qwen3-VL tensor layout. I found no p-doom/idm weights loaded or downloaded anywhere.
✓actual inference uses reviewed weightsserve.sh sets up an offline venv from audited PyPI wheels and runs exec python src/server.py with IDM_MODEL_DIR=model. s
serve.sh sets up an offline venv from audited PyPI wheels and runs exec python src/server.py with IDM_MODEL_DIR=model. src/server.py loads the IDM from model/backbone and loads model/head.safetensors, then runs decode_clip, predict_probs and probs_to_actions. The request id is only printed. src/infer.py does windowed inference, NMS and thresholding, with no lookup tables, remote calls or hidden models. The weights served are the shipped model/backbone/model.safetensors and model/head.safetensors (head output size 345).
✓harness credentials used only by the harnessThe trajectory search found no reads, prints or copies of Anthropic/Claude/Codex harness credentials, and no launches of
The trajectory search found no reads, prints or copies of Anthropic/Claude/Codex harness credentials, and no launches of extra harness CLIs. HF_TOKEN was used for the HF API and datasets-server requests (trajectory#11, #26), which the policy allows. Remote storage went through Spin wallet R2 tooling (src/infra/r2_push_dir.py), not harness credentials.
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 3 of 4.
- 1failed1h 27m into the runtook 1m 36sfree (stopped before any GPU time)
failed review prerequisites: The review needs architecture.json and serve.sh at the top of the submission
1 gates
- ✗review prerequisites · The review needs architecture.json and serve.sh at the top of the submission
- 2passed1h 30m into the runtook 3m 2s
startup 37.8 s of 300 s; 3/3 gates passed; Grading's 43-clip batch was sampled: 8 copies of the public clip in their 670 s share of the 3600 s deadline; its time and failed clips were projected from them.
7 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 37.8 s
- ✓POST /actions · {"actions": 25, "dropped_actions": 0, "warning": null, "first": [{"frame": "F00", "type": "MouseMove", "details": "0,0"}, {"frame": "F01", "type": "MouseMove", "details": "0,0"}, {"frame": "F02", "type": "MouseMove", "details": "0,0"}]}
- ✓slowest request · 9 clips one at a time, each from its first attempt to its last (retries included), median 2.47 s, the first (cold) 2.69 s
- ✓43 clips one at a time · grading's request loop (validate.py run()) on 8 copies of the public clip: 20.1 s on the server the smoke request warmed up, 108.2 s for 43 (projected from 8 of 43 requests at concurrency 1), plus 0.2 s the cold first clip took over the median; held-out clips differ
- ✓failed clips · none of 8 (0 needed a retry)
- ✓healthy after requests
- 3passed4h 21m into the runtook 3m 44s
startup 42.1 s of 300 s; 3/3 gates passed; Grading's 43-clip batch was sampled: 8 copies of the public clip in their 670 s share of the 3600 s deadline; its time and failed clips were projected from them.
7 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 42.1 s
- ✓POST /actions · {"actions": 16, "dropped_actions": 0, "warning": null, "first": [{"frame": "F00", "type": "MouseMove", "details": "0,0"}, {"frame": "F01", "type": "MouseMove", "details": "0,0"}, {"frame": "F02", "type": "MouseMove", "details": "0,0"}]}
- ✓slowest request · 9 clips one at a time, each from its first attempt to its last (retries included), median 2.57 s, the first (cold) 2.76 s
- ✓43 clips one at a time · grading's request loop (validate.py run()) on 8 copies of the public clip: 20.6 s on the server the smoke request warmed up, 111.0 s for 43 (projected from 8 of 43 requests at concurrency 1), plus 0.2 s the cold first clip took over the median; held-out clips differ
- ✓failed clips · none of 8 (0 needed a retry)
- ✓healthy after requests
- 4passed6h 51m into the runtook 3m 9s
startup 34.7 s of 300 s; 3/3 gates passed; Grading's 43-clip batch was sampled: 8 copies of the public clip in their 670 s share of the 3600 s deadline; its time and failed clips were projected from them.
7 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 34.7 s
- ✓POST /actions · {"actions": 12, "dropped_actions": 0, "warning": null, "first": [{"frame": "F00", "type": "MouseMove", "details": "0,0"}, {"frame": "F01", "type": "MouseMove", "details": "0,0"}, {"frame": "F02", "type": "MouseMove", "details": "0,0"}]}
- ✓slowest request · 9 clips one at a time, each from its first attempt to its last (retries included), median 2.48 s, the first (cold) 2.72 s
- ✓43 clips one at a time · grading's request loop (validate.py run()) on 8 copies of the public clip: 19.2 s on the server the smoke request warmed up, 103.1 s for 43 (projected from 8 of 43 requests at concurrency 1), plus 0.2 s the cold first clip took over the median; held-out clips differ
- ✓failed clips · none of 8 (0 needed a retry)
- ✓healthy after requests
The agent's last message before its session ended.
The submission is final: 167 files, 8.49 GB, verified by selfcheck. Submitting: