Vision for a ternary LM
- Score
- 0.0
- Wallet spend
- $48.86 of $200
- Model cost
- $8.11
- Agent time
- 3h 53m
- Steps
- 310
- Tokens in / out
- 133.0M / 493k
- Self-checks
- 3 passed of 3 used
- Rank at $200 wallet
- 2nd of 14
Score
0.0raw metric 0.3878
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
- 900
- 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 startdownload_gpu.sh fetches deepgrove/maple-preview at the pinned revision ac1ddd79d2b5cb4406f5d2bebdf95406ce505a07 into /de
download_gpu.sh fetches deepgrove/maple-preview at the pinned revision ac1ddd79d2b5cb4406f5d2bebdf95406ce505a07 into /dev/shm/maple, and logs/dl_maple.log records MAPLE_DONE. train.py build_model calls load_original_lm(MAPLE) on that directory. The packaging step (package_frozen.sh, which runs build_packed.py with no --attn) reloads the original Maple LM, keeps the original attention, overrides only the connector and vision weights, then exports. The lm_ternary and lm_dense tensor inventories match Maple's structure: 256 experts, hidden size 2048 and the original vocabulary. In the trajectory, the stage3f state at step 2500 was packaged with package_frozen.sh, and the shipped weights were copied from that packed output (trajectory#281, trajectory#286).
✓only vision encoder and connector addedThe model has three parts: the Maple LM (embeddings, attention, MoE experts, router and lm_head, all from Maple), a SigL
The model has three parts: the Maple LM (embeddings, attention, MoE experts, router and lm_head, all from Maple), a SigLIP2 so400m/16-384 vision tower and a pixel-shuffle MLP connector (LayerNorm, Linear(4608,2048), GELU, Linear(2048,2048), RMS gain). Connector features are inserted at <|image_pad|> positions via masked_scatter. serving.py loads no other model. The weight inventory holds only lm_ternary, lm_dense, vision and connector files. In the submitted stage 3f run, experts, router, embeddings and attention are frozen (lr_attn 0).
✓main network ternarylm_ternary.safetensors stores every attention (qkv, o) and expert (gate, up, down) matrix as 2-bit packed codes (U8) wit
lm_ternary.safetensors stores every attention (qkv, o) and expert (gate, up, down) matrix as 2-bit packed codes (U8) with a per-row bf16 alpha. loader.load_packed_lm dequantises these exactly into {-alpha, 0, +alpha} via ternary.unpack. The only higher-precision LM tensors are embeddings, lm_head, norms and the router (lm_dense), which are non-ternary in Maple too. The trainable latent-STE attention path was not used for the submitted run.
✓training data provenancedata_manifest.json declares every source with a pinned revision: the_cauldron (train-only), ArxivQA (train), and the tra
data_manifest.json declares every source with a pinned revision: the_cauldron (train-only), ArxivQA (train), and the train splits of ARC, OpenBookQA, SciQ and CommonsenseQA. The prep scripts (run_prep.py, prep_cauldron.py, prep_text_mc.py, prep_arxivqa.py, make_calib.py) and data plans read only train files. The public validation.jsonl is used for monitoring and selection, which is allowed. The trajectory has only a metadata listing of lmms-lab/MMMU (file names and sizes, trajectory#43). Nothing was downloaded or used from it, and there is no access to frontier-ml-tasks or any val/test split. Download logs are retained for the cauldron and ArxivQA prep. The text-MC sources were declared and downloaded through the shipped code.
✓actual inference uses reviewed weightsThe serving chain is serve.sh → serve_main.py → maple_vl.serving.serve. Engine builds a Siglip2VisionTransformer from as
The serving chain is serve.sh → serve_main.py → maple_vl.serving.serve. Engine builds a Siglip2VisionTransformer from assets/ and weights/vision.safetensors, builds MapleVL in frozen mode via load_packed_lm(weights/lm_ternary + lm_dense), and loads weights/connector.safetensors. Generation runs model.embed, then model.lm, then lm_head, with HF_HUB_OFFLINE=1 and no external model calls. In the trajectory, the official validator ran against this packed tree (trajectory#285) and the selfcheck passed on the final tree (trajectory#297).
✓harness credentials used only by the harnessTrajectory searches found no ANTHROPIC/OPENAI API keys, no harness base URL use and no extra claude or codex CLI session
Trajectory searches found no ANTHROPIC/OPENAI API keys, no harness base URL use and no extra claude or codex CLI sessions in participant code or files. The only API_KEY and BASE_URL mentions are in the Spin compute documentation in the task prompt (trajectory#1). The participant used only the provided spin compute and frontier selfcheck tools. No shipped file contains 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 39m into the runtook 1m 37sfree (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 42m into the runtook 4m 28s
startup 71.2 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 71.2 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 10.4 s after a 1.5 s first question; at that rate the 900 held-out questions take 64 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
- 3passed3h 49m into the runtook 7m 13s
startup 70.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 70.8 s
- ✓POST /v1/chat/completions · {"id": "validation-0105", "answer": "C"}
- ✓evaluation deadline · projected from 150 of 900 requests at concurrency 16: the 150 public questions took 43.4 s after a 1.8 s first question; at that rate the 900 held-out questions take 262 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
- 4passed3h 58m into the runtook 5m 4s
startup 69.3 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 69.3 s
- ✓POST /v1/chat/completions · {"id": "validation-0105", "answer": "C"}
- ✓evaluation deadline · projected from 150 of 900 requests at concurrency 16: the 150 public questions took 43.3 s after a 1.8 s first question; at that rate the 900 held-out questions take 261 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.
The submission is in: /workspace/output was graded as it stood at 09:46 UTC, and the session is closed.
What I submitted
- Language network: the released Maple weights, unchanged. Every attention and expert matrix stays ternary (
alpha_row × {-1, 0, +1}), re-packed to 2 bits. Router, embeddings, lm_head and norms are the base bf16 weights. - Vision: SigLIP2 so400m/16 at 384 px, fine-tuned at lr 1e-5, with a pixel-shuffle MLP connector. The connector output is RMS-normalized to the scale of Maple's text embeddings, because the raw output was about 40× larger.
- Serving:
serve.shinstalls the vendored cp312 wheels into/tmp, then serves/v1/chat/completionsand/healthoffline. - Inference: for multiple choice, every rotation of the option list is scored and the scores are summed back to the original options. The final score also adds an image-free pass ("blend"). The blend was chosen by rule before the final comparison.
Checks
- Three
frontier selfcheckruns passed. The last one, on the final tree, took 69 s to start (limit 300 s) and projected 262 s for the 900 held-out requests (limit 3600 s). - The official
validate.pyrun against the served model returned 129 predictions with zero failures. - The language network matches the official
modeling_maple.py(top-1 agreement 1.0 on a short prompt, 0.99 on an 880-token prompt).
Accuracy caveat
On the 120 public multiple-choice items, the submitted model scores 40.0% served. The untouched base model scores 42.5% on the same items with the circular method, and the standard error is about 4.5 points. So on this set, images have not yet added measurable accuracy over the language model's own prior. The model does use images on training-split items: 57.5% with the correct image against 46.7% with none. I did not tune further on the 120 items. This is stated in output/README.md.
Data
Training used only train splits: HuggingFaceM4/the_cauldron, MMInstruction/ArxivQA, ARC, OpenBookQA, SciQ and CommonsenseQA. MMMU was not used. The provided validation file was used only for monitoring and for the inference-mode and checkpoint choices, which the task allows. Revisions, download and prep commands, and logs are in data_manifest.json, architecture.json and logs/.