Inverse dynamics model
- Score
- 57.3
- Wallet spend
- $172.18 of $200
- Model cost
- $12.30
- Agent time
- 5h 37m
- Steps
- 208
- Tokens in / out
- 20.5M / 221k
- Self-checks
- 1 passed of 2 used
- Rank at $200 wallet
- 5th of 14
Score
57.3raw metric 0.5727
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
- 506
- fp
- 342
- fn
- 413
- precision
- 0.5967
- recall
- 0.5506
- failed_clip_limit_percent
- 5
- dropped_actions
- 0
- elapsed_seconds
- 751.1384
- 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 provenanceTraining data comes from declared public corpora pinned to revisions in architecture.json and evidence/data_manifest.jso
Training data comes from declared public corpora pinned to revisions in architecture.json and evidence/data_manifest.json: p-doom/AGI-CAST-0.6k (CC0) and p-doom/AGI-CAST-idm-actions. The second is a set of public weak-label parquets produced by the p-doom/idm teacher, used only as training targets. evidence/download_data.sh keeps the download commands. The selection corpus is a declared held-out slice of 3 AGI-CAST training videos. In the trajectory, p-doom/idm-eval appears only as a name in a dataset listing (step 8) and in the README text of the cloned code (steps 11-18). It was never downloaded. The only eval-set material used was the one allowed example clip, as a sanity check. No val/test splits or private inductionlabs data were found.
✓non specialist initializationarchitecture.json and the manifest name Qwen/Qwen3-VL-8B-Instruct (pinned revision) as the base model, with a LoRA merge
architecture.json and the manifest name Qwen/Qwen3-VL-8B-Instruct (pinned revision) as the base model, with a LoRA merged into it. Qwen3-VL-8B is a general VLM, not a specialist IDM. The shipped safetensors inventory matches the Qwen3-VL-8B layout: model.language_model layers up to 35, hidden size 4096, intermediate size 12288, lm_head with a 151936 vocab. download_data.sh fetches only the Qwen3-VL-4B/8B-Instruct base models and the datasets, never p-doom/idm weights. The trajectory notes record that the teacher weights are off limits, and no download of them appears. The teacher's outputs were used only as label data, which does not count as initialization.
✓actual inference uses reviewed weightsserve.sh installs the vendored, audited wheels offline, sets MODEL_DIR=$HERE/model and starts server.py. server.py loads
serve.sh installs the vendored, audited wheels offline, sets MODEL_DIR=$HERE/model and starts server.py. server.py loads ActionModel(MODEL_DIR). infer_core.py calls AutoProcessor and AutoModelForImageTextToText.from_pretrained(model_dir) on the shipped model/ directory, and every prediction comes from batched greedy generate on decoded video windows. The clip id is only printed in a log line. There are no stored labels, no hash lookup tables and no remote API calls in the serving path.
✓harness credentials used only by the harnessTrajectory searches for ANTHROPIC, API_KEY, BASE_URL and 'claude -p' found only spin documentation text, with no use, co
Trajectory searches for ANTHROPIC, API_KEY, BASE_URL and 'claude -p' found only spin documentation text, with no use, copying or echoing of harness credentials. The one environment dump (step 7) filtered for HF variables and showed HF_TOKEN, which was then used only for read-only HF API listings and downloads (steps 9-11, download_data.sh). No uploads with HF_TOKEN were found, and the shipped code reads no 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 2 of 4.
- 1failed4h 59m into the runtook 9m 11s
failed startup: Server did not become healthy in 300s (last /health probe: HTTP 503 b'{"status":"loading","error":"Traceback (most recent call last):\\n File \\"/submission/server.py\\", line 48, in _startup\\n load_model()\\n File \\"/submission/server.py\\", line 29, in load_model\\n
2 gates
- ✓review prerequisites
- ✗startup · Server did not become healthy in 300s (last /health probe: HTTP 503 b'{"status":"loading","error":"Traceback (most recent call last):\\n File \\"/submission/server.py\\", line 48, in _startup\\n load_model()\\n File \\"/submission/server.py\\", line 29, in load_model\\n '); end of its log: - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:25303 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:27257 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:48240 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:37217 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:48159 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:61536 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:26881 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:37940 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:21826 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:53087 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:36989 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:23831 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:25291 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:38890 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:36848 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:60934 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:37213 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:54098 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:18943 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:31439 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:16832 - "GET /health HTTP/1.1" 503 Service Unavailable INFO: 127.0.0.1:60111 - "GET /health HTTP/1.1" 503 Service ...[clipped]
- 2passed5h 27m into the runtook 8m 35s
startup 83.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 83.7 s
- ✓POST /actions · {"actions": 20, "dropped_actions": 0, "warning": null, "first": [{"frame": "F00", "type": "MouseMove", "details": "-1,0"}, {"frame": "F01", "type": "MouseMove", "details": "-1,0"}, {"frame": "F02", "type": "MouseMove", "details": "-1,0"}]}
- ✓slowest request · 9 clips one at a time, each from its first attempt to its last (retries included), median 15.48 s, the first (cold) 16.20 s
- ✓43 clips one at a time · grading's request loop (validate.py run()) on 8 copies of the public clip: 123.8 s on the server the smoke request warmed up, 665.4 s for 43 (projected from 8 of 43 requests at concurrency 1), plus 0.7 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.
Selfcheck #2 PASSED — startup 83.7s/300s, 3/3 gates, 43-clip batch projected within budget. Reading the full report: