Skip to content

Commit 4fcdc0e

Browse files
barretodavidclaude
andcommitted
GLM 5.3 enters 20th, starred until Z.ai ships the weights
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent bd0f6b7 commit 4fcdc0e

7 files changed

Lines changed: 450 additions & 26 deletions

File tree

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
How good is each frontier LLM at writing Starknet smart contracts on its own, and which
44
models get better when you hand them a Cairo documentation tool?
55

6-
This repository is the benchmark behind both answers: 26 models from 13 labs, **8,032
6+
This repository is the benchmark behind both answers: 27 models from 13 labs, **8,199
77
agentic runs** on 13 hand-written contract tasks, graded by 106 hidden `snforge` tests.
88
Every model ran the suite both ways, alone and with the
99
[Cairo Coder](https://www.cairo-coder.com/) MCP documentation tool.
@@ -39,7 +39,7 @@ Gemini 3.7 Flash is the one to look at on price. It reaches fourth at about a ce
3939
task, on the fastest median answer in the field at 6.2 seconds, while solving every
4040
task in every rep; its predecessor sat 15 points lower for three times the money.
4141

42-
All 26 models, the difficulty breakdown and the documentation-tool deltas are in the
42+
All 27 models, the difficulty breakdown and the documentation-tool deltas are in the
4343
report. To print the full leaderboard yourself:
4444

4545
```bash
@@ -109,7 +109,7 @@ version of it. Per-model deltas are charted in the report.
109109

110110
## Published data
111111

112-
`results/runs/main.jsonl` holds 9,650 records: the 8,032 analysed runs, 51 that hit a
112+
`results/runs/main.jsonl` holds 9,827 records: the 8,199 analysed runs, 61 that hit a
113113
transport error and are dropped at load, and 1,567 belonging to models since retired from
114114
the study, which the report excludes from every figure including its run count. It is
115115
the only input the report and the audit need:

bench/html_report.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -694,16 +694,21 @@ def build(all_runs):
694694
starred = lambda rows: [
695695
dict(r, label=r["label"] + "*") if r.get("weights_pending") else r for r in rows
696696
]
697-
# The ONE place the report explains the star, by request: the legend of the
698-
# leaderboard chart, where a pending model first appears. Every later star
699-
# (the Behind-the-score charts, the MCP chart, the head-to-head paragraph,
700-
# the models table's `open*` cell) wears the mark unexplained on purpose.
701-
# If a pending model ever ranks below the chart cut this renders nothing
702-
# while the table still prints `open*`; the audit's exactly-once count then
703-
# fails loudly rather than shipping an unexplained star.
704-
pending_note = (
705-
'<span>* weights promised but not yet released</span>'
706-
if any(r.get("weights_pending") for r in chart_rows) else ""
697+
# The ONE place the report explains the star, by request: where a pending
698+
# model FIRST APPEARS. That is the leaderboard chart legend when the model
699+
# ranks inside the cut, and the models-table caption when it does not;
700+
# GLM 5.3 (20th at entry, 2026-08-25) was the first to need the second
701+
# site, which used to render nothing and fail the audit by design. The
702+
# audit still holds the count at exactly one either way, so both sites
703+
# rendering (or neither) fails loudly rather than shipping an unexplained
704+
# star. Every later star wears the mark unexplained on purpose.
705+
PENDING_NOTE_TEXT = "* weights promised but not yet released"
706+
pending_in_charts = any(r.get("weights_pending") for r in chart_rows)
707+
pending_note = f"<span>{PENDING_NOTE_TEXT}</span>" if pending_in_charts else ""
708+
pending_table_note = (
709+
f" <b>{PENDING_NOTE_TEXT}.</b>"
710+
if any(r.get("weights_pending") for r in sci_rows) and not pending_in_charts
711+
else ""
707712
)
708713

709714
# Chart 2: best-without vs best-with the MCP, per model. Each condition
@@ -1344,7 +1349,7 @@ def h2h_stats(spec):
13441349
models_html = f"""
13451350
<section>
13461351
<h2>The models</h2>
1347-
<p class="takeaway" style="margin:0 0 10px">Every model tested, including the {word(len(sci_rows) - CHART_TOP_N)} below the chart cut. Use it to <b>shortlist by the constraint you actually have</b>: the index <b>with and without the documentation tool</b>, <b>price</b> (per million tokens, as listed on OpenRouter, {meta["snapshot_date"]}, or at first listing for models published since), <b>speed</b>, and <b>whether the weights are open</b>. Click a header to sort.</p>
1352+
<p class="takeaway" style="margin:0 0 10px">Every model tested, including the {word(len(sci_rows) - CHART_TOP_N)} below the chart cut. Use it to <b>shortlist by the constraint you actually have</b>: the index <b>with and without the documentation tool</b>, <b>price</b> (per million tokens, as listed on OpenRouter, {meta["snapshot_date"]}, or at first listing for models published since), <b>speed</b>, and <b>whether the weights are open</b>.{pending_table_note} Click a header to sort.</p>
13481353
<div class="tablewrap"><table id="modeltable" class="sortable">
13491354
<tr><th>Model</th><th class="r desc" data-num aria-sort="descending">SCI</th><th class="r" data-num>SCI (MCP)</th><th class="r" data-num>Δ</th><th>Lab</th><th>Weights</th><th class="r" data-num>Context</th><th class="r" data-num>$/M in</th><th class="r" data-num>$/M out</th><th class="r" data-num>Tok/s</th></tr>
13501355
{"".join(model_rows)}

bench/sci.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,30 @@ def run_cost(run):
424424
"z-ai/glm-5.2@medium", "z-ai/glm-5.2@low", "z-ai/glm-5.2@minimal",
425425
"z-ai/glm-5.2@disabled"],
426426
"label": "GLM 5.2", "lab": "Z.ai", "open_weight": True},
427+
# Benchmarked 2026-08-25, nine days after the 20260816 checkpoint. One
428+
# first-party endpoint (Z.AI, fp8, 1M context), status 0 and uptime
429+
# 100/100/99.99 across the 5m/30m/1d windows at probe time; pinned
430+
# --provider-order z-ai anyway, per the 0813 precedent, so a third party
431+
# appearing mid-sweep cannot split the serving stack unrecorded.
432+
#
433+
# weights_pending: Z.ai launched 5.3 API-first and said in the announcement
434+
# it would publish weights about two weeks after launch (~2026-08-28), once
435+
# a cybersecurity safety review closes. zai-org has no 5.3 repo as of
436+
# 2026-08-25 and OpenRouter's hugging_face_id is null, so the star stays on
437+
# until a repo exists. Z.ai describes it as the 5.2 base unchanged with the
438+
# gains from post-training alone, which would put the total near 5.2's
439+
# measured 753B; params stay null in model_meta until a repo makes them
440+
# checkable (press circulates "743B", which matches nothing verifiable).
441+
#
442+
# Probe 2026-08-25 (one-line function, 3 reps/tier): @disabled REJECTED
443+
# ("Reasoning is mandatory for this endpoint"), so @low is the floor. The
444+
# advertised ladder is low/high/max with default max, and the unadvertised
445+
# tiers are coerced: @medium lands on @low (28 vs 28 median first-call
446+
# tokens) and @xhigh inside @high's band (114 vs 76, ranges overlapping).
447+
# Three real levels, all swept.
448+
{"specs": ["z-ai/glm-5.3@low", "z-ai/glm-5.3@high", "z-ai/glm-5.3@max"],
449+
"label": "GLM 5.3", "lab": "Z.ai", "open_weight": True,
450+
"weights_pending": True},
427451
{"specs": ["minimax/minimax-m3@max", "minimax/minimax-m3@xhigh", "minimax/minimax-m3@high",
428452
"minimax/minimax-m3@medium", "minimax/minimax-m3@low",
429453
"minimax/minimax-m3@minimal"],

results/model_meta.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -976,6 +976,21 @@
976976
"BF16": 54.7
977977
}
978978
}
979+
},
980+
"z-ai/glm-5.3": {
981+
"name": "Z.ai: GLM 5.3",
982+
"context_length": 1048576,
983+
"hugging_face_id": null,
984+
"price_per_m": {
985+
"input": 1.4,
986+
"output": 4.4,
987+
"cache_read": 0.26,
988+
"cache_write": null
989+
},
990+
"pricing_note": "as listed 2026-08-25, the week the model appeared; it did not exist at the snapshot date. Weights promised ~2026-08-28 after a safety review; params stay null until a repo makes them checkable",
991+
"type": null,
992+
"params_total": null,
993+
"params_active": null
979994
}
980995
},
981996
"params_sources": "Lab model cards / HF repo metadata, fetched 2026-07-24: MiMo 1.02T/42B and MiniMax 428B/23B from HF READMEs; DeepSeek 1.6T/49B from HF README (safetensors shows 862B due to FP4/FP8 mixed packing); GLM total 753B from HF safetensors, active ~40B third-party consensus (no lab statement); K3 2.8T/104B lab-stated on the model card, published 2026-07-27 as moonshotai/Kimi-K3; Hy3 295B/21B and Qwen 27B dense lab-stated; V4 Flash 0731 304B from its own card and safetensors tensor count, 13B active from the preview card for the identical architecture (43 layers, 256 experts, 6 routed + 1 shared per token). Muse Glimmer 30B 29.78B dense from the HF safetensors index on meta-models/Muse-Glimmer-30B (29,776,626,688 params, no expert keys in config.json), fetched 2026-08-11. DeepSeek V4 Pro 0813 has no published weights repo and DeepSeek's own docs are unreachable from here, so its parameter counts are left null rather than copied from the preview checkpoint."

results/report.html

Lines changed: 12 additions & 12 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)