Skip to content

Commit 776baef

Browse files
MaxGhenisclaude
andauthored
Add Grok 4.5 to PolicyBench (#120)
* Add Grok 4.5: model card, thinking budget, app metadata Onboarding gauntlet passed the forced tool contract 3/3 and 16/16 with 14,225 tokens on the full-scenario probe, so grok-4.5 gets an explicit card with the thinking-class budget and grok-4.3's 420s timeout. Harness fix uncovered by the first run round: litellm rejects max_completion_tokens for xai models, so the thinking-budget branch sends the same 16,384 budget as max_tokens for xai/ ids; grok-4.3 keeps the flat family budget (no card). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Publish 24-model board with Grok 4.5 (dashboard-data-20260710) 100-scenario supervised run: 1,984/1,984 rows, zero errors, $7.27. Grok 4.5 debuts at 80.9% within $1 (#5 of 24). 304 audit cases re-judged under the decisive-diagnosis contract (0 hedged, 0 reference-suspect); all 23 incumbent modelStats byte-identical to dashboard-data-20260709b. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Promote Grok 4.5 to xAI's frontier flagship The scenario explorer's frontier filter takes one flagship per provider with fallbacks; Grok 4.5 leads with 4.3 retained for older frozen bundles, mirroring the Sol/5.5 pattern. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent cca8ce3 commit 776baef

12 files changed

Lines changed: 4730 additions & 4516 deletions

File tree

annotations/us_full_run_20260612_policyengine_4_16_1_populace/us_audit_row_annotations.csv

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

app/src/components/Hero.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { DEFAULT_VERSION_ID } from "../lib/dataVersionsRuntime";
22
import type { BenchData, CountryCode } from "../types";
33
import SiteHeader, { type HeaderNavItem } from "./SiteHeader";
44

5-
const SNAPSHOT_DATE_LABEL = "Snapshot 2026-07-09";
5+
const SNAPSHOT_DATE_LABEL = "Snapshot 2026-07-10";
66

77
export default function Hero({
88
selectedView,

app/src/data.artifact.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
22
"version": 1,
33
"repo": "PolicyEngine/policybench",
4-
"tag": "dashboard-data-20260709b",
4+
"tag": "dashboard-data-20260710",
55
"asset": "dashboard-data.json",
6-
"url": "https://github.com/PolicyEngine/policybench/releases/download/dashboard-data-20260709b/dashboard-data.json",
7-
"sha256": "cdb99bfb3e5181803b2dd4229cfcf23e9bb31a4208d7130bcf7e73f939edc0e5",
8-
"bytes": 64159293
6+
"url": "https://github.com/PolicyEngine/policybench/releases/download/dashboard-data-20260710/dashboard-data.json",
7+
"sha256": "fd77509de2011c6c81e2dc3e7d2c62db3b076c1ee00e248c9008ac3ab0f40482",
8+
"bytes": 66366891
99
}

app/src/data.versions.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
{
66
"id": "1.1",
77
"label": "1.1",
8-
"description": "Corrected ground truth (policyengine-us 1.755.4); every model at unconfigured provider defaults - 23 models",
8+
"description": "Corrected ground truth (policyengine-us 1.755.4); every model at unconfigured provider defaults - 24 models",
99
"snapshotLabel": null,
1010
"artifact": {
1111
"pointer": "live"

app/src/modelMeta.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export const MODEL_ORDER = [
1111
"claude-sonnet-4.6",
1212
"claude-haiku-4.5",
1313
"grok-4.3",
14+
"grok-4.5",
1415
"grok-build-0.1",
1516
"gpt-5.6-sol",
1617
"gpt-5.6-terra",
@@ -38,6 +39,7 @@ export const MODEL_LABELS: Record<string, string> = {
3839
"claude-sonnet-5": "Claude Sonnet 5",
3940
"claude-sonnet-4.6": "Claude Sonnet 4.6",
4041
"grok-4.3": "Grok 4.3",
42+
"grok-4.5": "Grok 4.5",
4143
"grok-build-0.1": "Grok Build 0.1",
4244
"gpt-5.6-sol": "GPT-5.6 Sol",
4345
"gpt-5.6-terra": "GPT-5.6 Terra",
@@ -111,7 +113,7 @@ export function orderModels(models: Iterable<string>): string[] {
111113
const FRONTIER_MODEL_GROUPS = [
112114
["claude-fable-5", "claude-opus-4.8"],
113115
["gpt-5.6-sol", "gpt-5.5"],
114-
["grok-4.3"],
116+
["grok-4.5", "grok-4.3"],
115117
["gemini-3.1-pro-preview"],
116118
["deepseek-v4-pro"],
117119
["kimi-k2.6"],

app/tests/modelMeta.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ describe("model metadata", () => {
7676
const models = [
7777
"claude-fable-5",
7878
"gpt-5.6-sol",
79-
"grok-4.3",
79+
"grok-4.5",
8080
"gemini-3.1-pro-preview",
8181
"deepseek-v4-pro",
8282
"kimi-k2.6",

docs/runbook.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ The current default non-Claude model set is:
177177

178178
```bash
179179
grok-4.3
180+
grok-4.5
180181
grok-build-0.1
181182
gpt-5.6-sol
182183
gpt-5.6-terra

paper/snapshot/20260501/manifest.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
],
2121
"live_dashboard_artifact": {
2222
"asset": "dashboard-data.json",
23-
"bytes": 64159293,
24-
"derivation": "Additive fold of complete GPT-5.6 Sol, Terra, and Luna runs into the 20-model v1.1 board: 45,632 prediction rows across 23 models and 1,984 canonical outputs. All 489 wrong rows across 239 new model-output cases were independently audited; verdict validation found 0 missing, hedged, or reference-suspect cases after adjudication. The live annotation file preserves all 5,351 incumbent row annotations and adds the 489 GPT-5.6 annotations. Incumbent predictions, metrics, and audit annotations are unchanged. The pre-existing scenario_109 SNAP reference explanation now describes the January-September and October-December parameter periods correctly; its reference value and every score are unchanged.",
23+
"bytes": 66366891,
24+
"derivation": "Adds xAI Grok 4.5 to the 23-model v1.1 board (24 models, 47,616 prediction rows). Onboarded via the probe gauntlet (tool contract, thinking-class budget); 100-scenario supervised sync run, 1,984/1,984 rows, $7.27. 304 audit cases re-judged under the decisive-diagnosis contract (0 hedged, 0 reference-suspect; 6,031 row annotations). All 23 incumbent modelStats are byte-identical to dashboard-data-20260709b.",
2525
"notes": "Dataset version remains v1.1 with the corrected PolicyEngine references. GPT-5.6 usage and exact reconstructed cost include cache-write prompt tokens; claude-fable-5 retains its prior artifact-level usage values.",
2626
"population_weights": {
2727
"sha256": "0b3b96b8247477631510371b9c3b021a18a535e8ebbf8c73a8aa67cff3110cd4",
@@ -32,9 +32,9 @@
3232
"policyengine_us_version": "1.755.4",
3333
"policyengine_version": "4.16.1"
3434
},
35-
"sha256": "cdb99bfb3e5181803b2dd4229cfcf23e9bb31a4208d7130bcf7e73f939edc0e5",
36-
"tag": "dashboard-data-20260709b",
37-
"url": "https://github.com/PolicyEngine/policybench/releases/download/dashboard-data-20260709b/dashboard-data.json"
35+
"sha256": "fd77509de2011c6c81e2dc3e7d2c62db3b076c1ee00e248c9008ac3ab0f40482",
36+
"tag": "dashboard-data-20260710",
37+
"url": "https://github.com/PolicyEngine/policybench/releases/download/dashboard-data-20260710/dashboard-data.json"
3838
},
3939
"live_dashboard_note": "Two artifacts are tracked. published_dashboard_artifact pins the manuscript's frozen record: it equals the combined export of the source run data.json files listed under source_run_artifacts, byte for byte. live_dashboard_artifact is the release asset the committed pointer app/src/data.artifact.json references; it starts from the frozen export and may gain additive updates (injected metrics, newly benchmarked models) without changing the frozen models' scores. Every publish-dashboard run must update live_dashboard_artifact (tag, sha256, bytes, derivation) in the same commit as the pointer.",
4040
"model_response_date": "2026-06-12 to 2026-06-13",

policybench/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
"claude-sonnet-4.6": "claude-sonnet-4-6",
4242
"claude-haiku-4.5": "claude-haiku-4-5-20251001",
4343
"grok-4.3": "xai/grok-4.3",
44+
"grok-4.5": "xai/grok-4.5",
4445
"grok-build-0.1": "xai/grok-build-0.1",
4546
**GPT_56_MODELS,
4647
"gpt-5.5": "gpt-5.5",

policybench/eval_no_tools.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,11 @@ def _completion_controls(
521521
cap=GEMINI_MAX_COMPLETION_TOKENS_CAP,
522522
)
523523
}
524-
if model_id.startswith("xai/"):
524+
card = card_for(model_id)
525+
# A thinking-budget card outranks the legacy xai/ family branch:
526+
# grok-4.5 reasons by default (14k tokens on the 16-variable probe),
527+
# while grok-4.3 has no card and keeps the flat family budget.
528+
if model_id.startswith("xai/") and not (card is not None and card.thinking_budget):
525529
if include_explanations:
526530
base_tokens = EXPLANATION_MAX_COMPLETION_TOKENS
527531
else:
@@ -531,7 +535,6 @@ def _completion_controls(
531535
base_tokens, variables, include_explanations
532536
)
533537
}
534-
card = card_for(model_id)
535538
if card is not None and card.thinking_budget:
536539
# Reasoning-by-default models bill reasoning against the same
537540
# completion budget as the answer, and the reasoning spend does not
@@ -540,15 +543,17 @@ def _completion_controls(
540543
# explanation path got in #101, or default-effort reasoning exhausts
541544
# the small dynamic budget before any output. Unused headroom is
542545
# free.
543-
base_tokens = THINKING_CLAUDE_MAX_COMPLETION_TOKENS_CAP
544-
return {
545-
"max_completion_tokens": _completion_token_budget(
546-
base_tokens,
547-
variables,
548-
include_explanations,
549-
cap=THINKING_CLAUDE_MAX_COMPLETION_TOKENS_CAP,
550-
)
551-
}
546+
budget = _completion_token_budget(
547+
THINKING_CLAUDE_MAX_COMPLETION_TOKENS_CAP,
548+
variables,
549+
include_explanations,
550+
cap=THINKING_CLAUDE_MAX_COMPLETION_TOKENS_CAP,
551+
)
552+
# xAI rejects max_completion_tokens outright (litellm
553+
# UnsupportedParamsError); it takes the same budget as max_tokens.
554+
if model_id.startswith("xai/"):
555+
return {"max_tokens": budget}
556+
return {"max_completion_tokens": budget}
552557
if model_id.startswith("gpt-5"):
553558
if include_explanations:
554559
base_tokens = EXPLANATION_MAX_COMPLETION_TOKENS

0 commit comments

Comments
 (0)