Ternary quantization
- Score
- 0.0
- Wallet spend
- $3.49 of $50
- Model cost
- $0.33
- Agent time
- 58m
- Steps
- 162
- Tokens in / out
- 24.8M / 109k
- Self-checks
- 3 passed of 4 used
- Rank at $50 wallet
- 11th of 14
Score
0.0raw metric 0
The raw metric (accuracy on GPQA Diamond, MATH-500, LiveCodeBench v6 and MMLU-Pro) is rescaled so that chance on each benchmark scores 0 and the original bf16 Qwen3.5-4B 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 | 0.250 | 0.571 | 0.0 |
| math_500 | 0 | 0 | 0.866 | 0.0 |
| livecodebench_v6 | 0 | 0 | 0.425 | 0.0 |
| mmlu_pro | 0 | 0.111 | 0.716 | 0.0 |
Verifier details
- metric
- four_benchmark_mean
- suite
- gpqa-math500-lcbv6-mmlupro-v6
- harmonic_mean
- 0
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 qwen startThe base model is Qwen/Qwen3.5-4B at revision 851bf6e806efd8d0a36b00ddf55e13ccb7b8cd0a, and the session log confirms it.
The base model is Qwen/Qwen3.5-4B at revision 851bf6e806efd8d0a36b00ddf55e13ccb7b8cd0a, and the session log confirms it. At step 7, STARTING_ARTIFACT.json identifies the local artifact as this model and revision. At step 13 the shards of that local artifact were uploaded to Spin storage. At step 21 the participant ran `hf download Qwen/Qwen3.5-4B --revision 851bf6e8...` on the H100 into /workspace/base. The shipped quantize_ternary.py loads that directory and does post-training quantization with no weight updates (quantization.log). The trusted audit's tensor coverage matches the language_model tensors of that base model. I found no other checkpoint being substituted.
✓text only inferenceserve.sh runs only source/serve_model.py, with no network access. serve_model.py builds Qwen3_5ForCausalLM from Qwen3_5T
serve.sh runs only source/serve_model.py, with no network access. serve_model.py builds Qwen3_5ForCausalLM from Qwen3_5TextConfig (the text decoder only) and serves a text /v1/chat/completions endpoint through model.generate. The vision tower and MTP weights are not shipped: the trusted audit lists only model.visual.* and mtp.* as omitted.
✓no public benchmark eval trainingNo benchmark or evaluation data was used for calibration, selection or training. The only calibration data is WikiText-2
No benchmark or evaluation data was used for calibration, selection or training. The only calibration data is WikiText-2 (Salesforce/wikitext, wikitext-2-raw-v1), train split, at the pinned revision b08601e0..., using 48×512 tokens. This is loaded by load_dataset in quantize_ternary.py and recorded in data_provenance.json, dataset_download.log and quantization.log. No training was done. In the trajectory, /task/public/benchmarks (GPQA and LiveCodeBench) appears only in the task prompt and a file listing (step 6). No step reads those files or any validation or test split.
✓actual inference uses reviewed weightsThe served weights are the audited ternary files. serve_model.py reads quantization_manifest.json and loads every tensor
The served weights are the audited ternary files. serve_model.py reads quantization_manifest.json and loads every tensor from weights/ternary-01.safetensors and weights/ternary-02.safetensors. It unpacks the packed_2bit codes and applies the scales, checks shapes, and assigns the result into the meta-initialized model. It does not load the original checkpoint. The trusted audit storage lists these same f/p/s tensors and reports 0 unreferenced parameters. The trajectory (steps 47-50) shows these shards were produced by the quantization run on the H100 and copied into the output.
✓ternary executionEvery language-model linear matrix is stored as 2-bit ternary codes {-1,0,+1} with one fp16 scale per row per group of 3
Every language-model linear matrix is stored as 2-bit ternary codes {-1,0,+1} with one fp16 scale per row per group of 32 inputs. serve_model.py turns these into ternary×scale for execution. The trusted ternary audit passed: ternary fraction 0.969, stored size within the limit. Only embed_tokens (tied to lm_head) is excluded and kept in float, which the conventions allow. The manifest has no other 'literal' full-precision weight matrices.
✓harness credentials used only by the harnessNo misuse of harness credentials appears in the trajectory. The environment check at step 6 showed only HF_TOKEN and the
No misuse of harness credentials appears in the trajectory. The environment check at step 6 showed only HF_TOKEN and the Spin broker variables. The participant used the Spin CLI and s5cmd for compute and storage (steps 13, 19 and 47-50), which is allowed. Searches for OPENAI, BASE_URL, api_key, curl, claude and gemini found no use of harness API keys or base URLs and no launch of other agent CLIs.
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 4 of 4.
- 1failed16m 11s into the runtook 6m 33s
startup 95.8 s of 300 s; failed GPQA request as graded: the response was rejected: ValueError: response lacks exactly one choice; got {"error": {"message": "'tokenizers.Encoding' object has no attribute 'numel'", "type": "invalid_request_error"}}
6 gates
- ✓review prerequisites
- ✓ternary fraction · 3,569,090,560 of 3,681,586,176 audited parameters (text-model weights outside the input embedding and output head, and their scales) are ternary codes: 0.969444, which must exceed 0.95
- ✓stored parameters · 3,681,586,176 stored (codes, scales, retained floats and 0 in tensors outside the manifest, uint8/int8 counting four each) against 1.1 x 3,570,052,096 original parameters
- ✓weight audit · inspect_ternary passed, as verify requires before scoring
- ✓startup · GET /health answered 200 after 95.8 s
- ✗GPQA request as graded · the response was rejected: ValueError: response lacks exactly one choice; got {"error": {"message": "'tokenizers.Encoding' object has no attribute 'numel'", "type": "invalid_request_error"}}
- 2passed23m 10s into the runtook 13m 5s
startup 90.4 s of 300 s; 1/1 gates passed; WARNING concurrent requests answered: 0 well-formed replies; 16 timed out after 300 s. Grading scores each such request as wrong, so 16 of 16 here would score zero.; One wave of 16 concurrent public requests stood for the suite's 3,153 graded ones a
9 gates
- ✓review prerequisites
- ✓ternary fraction · 3,569,090,560 of 3,681,586,176 audited parameters (text-model weights outside the input embedding and output head, and their scales) are ternary codes: 0.969444, which must exceed 0.95
- ✓stored parameters · 3,681,586,176 stored (codes, scales, retained floats and 0 in tensors outside the manifest, uint8/int8 counting four each) against 1.1 x 3,570,052,096 original parameters
- ✓weight audit · inspect_ternary passed, as verify requires before scoring
- ✓startup · GET /health answered 200 after 90.4 s
- ✓GPQA request as graded · {"note": "no reply within 300 s: grading scores a timed-out request as wrong (with no limit on how many)", "attempts": 1, "error": "RuntimeError: Submission HTTP request failed: TimeoutError: timed out"}
- ✓slowest of 16 concurrent requests · 16 public requests at once (8 GPQA, 8 hard LiveCodeBench) as graded (max_tokens 4096, temperature 0, 300 s each): slowest 300.2 s, median 300.2 s; 0 stopped at max_tokens, 16 timed out. Grading sends every benchmark 16 at a time, scores a request over 300 s or still failing as wrong with no limit on how many; held-out requests may run longer.
- ✓concurrent requests answered · 0 well-formed replies; 16 timed out after 300 s. Grading scores each such request as wrong, so 16 of 16 here would score zero.
- ✓healthy after requests
- 3passed37m 24s into the runtook 12m 9s
startup 80.9 s of 300 s; 1/1 gates passed; WARNING concurrent requests answered: 1 well-formed replies; 15 timed out after 300 s. Grading scores each such request as wrong, so 15 of 16 here would score zero.; One wave of 16 concurrent public requests stood for the suite's 3,153 graded ones a
9 gates
- ✓review prerequisites
- ✓ternary fraction · 3,569,090,560 of 3,681,586,176 audited parameters (text-model weights outside the input embedding and output head, and their scales) are ternary codes: 0.969444, which must exceed 0.95
- ✓stored parameters · 3,681,586,176 stored (codes, scales, retained floats and 0 in tensors outside the manifest, uint8/int8 counting four each) against 1.1 x 3,570,052,096 original parameters
- ✓weight audit · inspect_ternary passed, as verify requires before scoring
- ✓startup · GET /health answered 200 after 80.9 s
- ✓GPQA request as graded · {"finish_reason": "stop", "answer": null, "note": "no answer letter found (ANSWER: X on its own line): grading scores it wrong", "content_characters": 1071, "content_end": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n ...[clipped]
- ✓slowest of 16 concurrent requests · 16 public requests at once (8 GPQA, 8 hard LiveCodeBench) as graded (max_tokens 4096, temperature 0, 300 s each): slowest 301.2 s, median 300.2 s; 0 stopped at max_tokens, 15 timed out. Grading sends every benchmark 16 at a time, scores a request over 300 s or still failing as wrong with no limit on how many; held-out requests may run longer.
- ✓concurrent requests answered · 1 well-formed replies; 15 timed out after 300 s. Grading scores each such request as wrong, so 15 of 16 here would score zero.
- ✓healthy after requests
- 4passed51m 9s into the runtook 9m 4s
startup 94.6 s of 300 s; 1/1 gates passed; One wave of 16 concurrent public requests stood for the suite's 3,153 graded ones at that concurrency; MATH-500 and MMLU-Pro are held out.
9 gates
- ✓review prerequisites
- ✓ternary fraction · 3,569,090,560 of 3,681,586,176 audited parameters (text-model weights outside the input embedding and output head, and their scales) are ternary codes: 0.969444, which must exceed 0.95
- ✓stored parameters · 3,681,586,176 stored (codes, scales, retained floats and 0 in tensors outside the manifest, uint8/int8 counting four each) against 1.1 x 3,570,052,096 original parameters
- ✓weight audit · inspect_ternary passed, as verify requires before scoring
- ✓startup · GET /health answered 200 after 94.6 s
- ✓GPQA request as graded · {"finish_reason": "stop", "answer": null, "note": "no answer letter found (ANSWER: X on its own line): grading scores it wrong", "content_characters": 676, "content_end": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ ...[clipped]
- ✓slowest of 16 concurrent requests · 16 public requests at once (8 GPQA, 8 hard LiveCodeBench) as graded (max_tokens 4096, temperature 0, 300 s each): slowest 181.7 s, median 181.6 s; 0 stopped at max_tokens, 0 timed out. Grading sends every benchmark 16 at a time, scores a request over 300 s or still failing as wrong with no limit on how many; held-out requests may run longer.
- ✓concurrent requests answered · 16 well-formed replies
- ✓healthy after requests
The agent's last message before its session ended.
Submitted at 2026-10-03 06:34:38 UTC.
The final self-check passed the ternary and storage audits: 96.94% ternary, with stored body parameters at 103.12% of the original count. Startup was 94.6 seconds, and all 16 concurrent requests returned within 181.7 seconds.
One limitation: the GPQA smoke answer did not contain the expected ANSWER: X line, so that item would score wrong. The self-check did not produce an overall score or run the architecture review. I did not run /task/validate.py separately.
Key files: quantization_manifest.json, serve.sh, quantize_ternary.py, and serve_model.py.