Vision for a ternary LM
- Score
- 0.0
- Wallet spend
- $27.92 of $50
- Model cost
- $9.24
- Agent time
- 4h 22m
- Steps
- 230
- Tokens in / out
- 23.1M / 309k
- Self-checks
- 1 passed of 1 used
- Rank at $50 wallet
- 2nd of 14
Score
0.0raw metric 0.3244
The raw metric (judged accuracy on held-out MMMU questions) is rescaled so that the starting ternary model answering from the text alone, with its own reasoning (accuracy 0.438) scores 0 and every question right scores 100, clamped to that range.
Verifier details
- samples
- 900
- metric
- accuracy
- answer_judge
- gpt-6-luna
- judged
- 898
- open_questions
- 53
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 maple startarchitecture.json declares deepgrove/maple-preview at ac1ddd79d2b5cb4406f5d2bebdf95406ce505a07. The VM download command
architecture.json declares deepgrove/maple-preview at ac1ddd79d2b5cb4406f5d2bebdf95406ce505a07. The VM download command had no --revision flag, so it fetched main. However, logs/dl_maple.log records the blob sha256 of each downloaded shard, and these match the hashes in the pinned STARTING_ARTIFACT.json manifest shown at trajectory#146 (e.g. model-00001 a0e75504..., model-00002 166113ab...). Separately, the HF API call in trajectory/steps-13-26 returned sha ac1ddd79 for main. train.py loads the LM with maple.from_bf16 from that download, and the participant also used the pinned local copy at /artifacts/maple/weights. The packed weights come from that copy, and logs/pack_weights.log shows exact ternary reproduction of all 18651 tensors with rel_err 0. The packed inventory has Maple's structure: vocab 151936×2048, 24 layers, 256 experts.
✓only vision encoder and connector addedvision.safetensors contains only Qwen2.5-VL-3B visual-tower tensors: patch_embed, blocks.0-31 and the merger, whose ln_q
vision.safetensors contains only Qwen2.5-VL-3B visual-tower tensors: patch_embed, blocks.0-31 and the merger, whose ln_q, mlp.0 and mlp.2 connector projects to 2048. It has no LM tensors. vlm.py's MapleVLM only puts the vision features into the image-pad token positions of Maple's own embeddings and then runs the unchanged Maple forward pass. In train.py the optimizer covers only the vision parameters, and every LM parameter has requires_grad=False. architecture.json marks the LM as trained:false. No other model or module is added.
✓main network ternaryThe weights/maple_ternary-0000{0,1}.safetensors shards store the LM linear layers as 2-bit codes (U32) plus per-row fp32
The weights/maple_ternary-0000{0,1}.safetensors shards store the LM linear layers as 2-bit codes (U32) plus per-row fp32 alpha. maple.from_packed dequantizes them as (codes-1)*alpha, so each weight takes only the values {-alpha, 0, +alpha}. ternary.py implements the packing. Only embeddings, lm_head, norms and the router stay in bf16/f32, which matches the original Maple checkpoint. logs/pack_weights.log reports rel_err max 0.00000 against the original ternary-QAT weights.
✓training data provenanceStage 1 uses LLaVA-Pretrain blip_laion_cc_sbu_558k (download in logs/dl_data.log). Stage 2 uses only train splits of Sci
Stage 1 uses LLaVA-Pretrain blip_laion_cc_sbu_558k (download in logs/dl_data.log). Stage 2 uses only train splits of ScienceQA, ChartQA, DocVQA and TextVQA: data_prep/prep_stage2.py and prep_fix.py call load_dataset with split='train', and logs/prep.log confirms this (val/test splits were generated locally but not used; ai2d was skipped). Stage 2 also adds the shipped /task/public validation samples, which policy allows; the upload is in trajectory/steps-71-91. All sources are declared in DATA_MANIFEST.md and architecture.json. I found no use of MMMU beyond the shipped examples and no access to the frontier-ml-tasks repo. Model selection used only a smoke check on public samples.
✓actual inference uses reviewed weightsserve.sh execs server.py with --weights $HERE/weights and --vision $HERE/vision.safetensors. server.py loads the LM with
serve.sh execs server.py with --weights $HERE/weights and --vision $HERE/vision.safetensors. server.py loads the LM with maple.from_packed(weights/), using packed_manifest.json and the reviewed ternary shards. It builds VisionTower and loads vision.safetensors with load_state_dict, then wraps both in vlm.MapleVLM, whose greedy generate method produces every answer. There are no external API calls and no alternative model. The trajectory (trajectory/steps-220-230) shows the shipped vision.safetensors was converted from the trained stage2.pt.
✓harness credentials used only by the harnessSearches of the trajectory for ANTHROPIC, OPENROUTER, BASE_URL, printenv, 'claude -p' and codex found no use of harness
Searches of the trajectory for ANTHROPIC, OPENROUTER, BASE_URL, printenv, 'claude -p' and codex found no use of harness API keys or base URLs, no echoing of them, and no other harness CLI launches. The only credentials used were HF_TOKEN for HF downloads (allowed) and Spin-provided SPIN/R2 credentials for the participant's own VM and storage (trajectory/steps-113-128, steps-139-154). Both are allowed.
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 1 of 4.
- 1passed4h 23m into the runtook 5m 27s
startup 91.8 s of 300 s; 1/1 gates passed; The evaluation deadline was projected from a sample of 150 of the 900 graded requests at concurrency 16; 22 of the 150 repeat public questions under new IDs (the public split is smaller), which a prompt cache may answer faster than held-out ones.
6 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 91.8 s
- ✓POST /v1/chat/completions · {"id": "validation-0105", "answer": "A"}
- ✓evaluation deadline · projected from 150 of 900 requests at concurrency 16: the 150 public questions took 35.2 s after a 0.5 s first question; at that rate the 900 held-out questions take 212 s (the first once, the rest scaled by 900/150); grading allows 3600 s for the 900 held-out questions
- ✓batch responses · all 150 replies parsed and non-empty
- ✓healthy after requests
The agent's last message before its session ended.
119 files / 11.75 GB — byte-identical state to what passed the selfcheck. All contract requirements met:
- Ternary LM preserved: language network frozen, served bit-exact from packed ternary weights (rel_err 0.0 over 18,651 tensors); no second LM, no image-to-text front end
- Vision: Qwen2.5-VL-3B ViT + merger connector re-targeted to Maple's 2048-d space — the only trained components (stage1 LLaVA-Pretrain alignment loss 15.2→7.7; stage2 ScienceQA+ChartQA+public-samples loss 9.3→2.2)
- Interface gates: health 91.8s (cap 300s), projected full-eval 212s (cap 3600s), 150/150 replies, healthy after
- Offline: 49 vendored cp312 wheels unpacked to /tmp at startup
- Provenance: architecture.json, DATA_MANIFEST.md, 32 logs (training, packing, reference-parity, eval); train splits only, MMMU never touched, public-sample use disclosed
- Selfcheck PASSED first attempt; VM lease released
Submitting: