llm-orchestrator 1.0.7 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +2 -1
- package/bin/model-thinking-report.mjs +4 -1
- package/lib/router.mjs +44 -1
- package/models/model-thinking-data.json +17 -0
- package/models/model-thinking-matrix.md +4 -0
- package/models/top-models.json +60 -2
- package/package.json +1 -1
- package/policies/routing.md +9 -4
- package/registries/routing-matrix.json +7 -6
- package/schemas/routing-matrix.schema.json +10 -1
- package/schemas/top-models.schema.json +10 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "llm-orchestrator",
|
|
3
3
|
"description": "Write /task once — it plans the work, shards it across parallel subagents, gates every phase and verifies before claiming done. Claude Code, Codex, OpenCode, Kilo.",
|
|
4
|
-
"version": "1.0
|
|
4
|
+
"version": "1.1.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Bogdan-Gabriel Torcescu",
|
|
7
7
|
"url": "https://www.linkedin.com/in/bogdantorcescu/"
|
package/README.md
CHANGED
|
@@ -388,7 +388,8 @@ Incumbents hold a seat on a provider ladder. Candidates are measured but unseate
|
|
|
388
388
|
| GPT-6 Astra | openai | codex | incumbent | F | low, medium, high, xhigh, max (reasoning_effort) | $10 / $50 |
|
|
389
389
|
| Claude Haiku 4.5 | anthropic | claude | incumbent | W | disabled, enabled (budget_tokens) | $1 / $5 |
|
|
390
390
|
| Claude Sonnet 5 | anthropic | claude | incumbent | S | low, medium, high, xhigh, max (effort) | $2 / $10 |
|
|
391
|
-
| Claude Opus 5 | anthropic | claude | incumbent | X | low, medium, high, xhigh, max (effort) | $5 / $25 |
|
|
391
|
+
| Claude Opus 5 | anthropic | claude | incumbent (fallback for Opus 5.5) | X | low, medium, high, xhigh, max (effort) | $5 / $25 |
|
|
392
|
+
| Claude Opus 5.5 | anthropic | claude | incumbent | X | max measured; low–xhigh supported, unmeasured (effort) | $4 / $20 |
|
|
392
393
|
| Claude Fable 5 | anthropic | claude | incumbent | F | low, medium, high, xhigh, max (effort) | $10 / $50 |
|
|
393
394
|
| Claude Fable 5.1 | anthropic | claude | incumbent | F | low, medium, high, xhigh, max (effort) | $10 / $50 |
|
|
394
395
|
| Grok 4.7 | xai | — | incumbent | — (unrated) | low, medium, high, xhigh (reasoning_effort) | $2 / $6 |
|
|
@@ -158,7 +158,10 @@ if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
|
158
158
|
process.stdout.write(buildAvailableReport(data, inventory));
|
|
159
159
|
} else if (process.argv.includes('--check')) {
|
|
160
160
|
const report = buildReport(data);
|
|
161
|
-
if (readFileSync(reportPath, 'utf8') !== report)
|
|
161
|
+
if (readFileSync(reportPath, 'utf8') !== report) {
|
|
162
|
+
process.stderr.write(`${reportPath} is stale; regenerate it with: llm-orchestrator models report\n`);
|
|
163
|
+
process.exitCode = 1;
|
|
164
|
+
}
|
|
162
165
|
} else {
|
|
163
166
|
writeFileSync(reportPath, buildReport(data));
|
|
164
167
|
}
|
package/lib/router.mjs
CHANGED
|
@@ -414,7 +414,50 @@ export function rankModels({
|
|
|
414
414
|
return byCost(a, b);
|
|
415
415
|
});
|
|
416
416
|
|
|
417
|
-
return ranked;
|
|
417
|
+
return applySuccession(ranked, modelsByKey);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
* Every per-token price the two models publish, successor at or below predecessor.
|
|
422
|
+
* A missing price on either side is not evidence, so it fails the check.
|
|
423
|
+
*/
|
|
424
|
+
function pricesAtOrBelow(successor, predecessor) {
|
|
425
|
+
const fields = ['input_usd_per_mtok', 'output_usd_per_mtok', 'cache_read_usd_per_mtok'];
|
|
426
|
+
return fields.every((field) => {
|
|
427
|
+
const next = successor?.price?.[field];
|
|
428
|
+
const prev = predecessor?.price?.[field];
|
|
429
|
+
return typeof next === 'number' && typeof prev === 'number' && next <= prev;
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* A successor (`supersedes`) is often launched before the benchmark has measured it
|
|
435
|
+
* at every effort, so cost ranking alone would keep dispatching the model it
|
|
436
|
+
* replaces. When both are admitted for the same pair and the successor's per-token
|
|
437
|
+
* prices are at or below the predecessor's on every published component, move the
|
|
438
|
+
* successor directly ahead of it; the predecessor stays in the list as its fallback.
|
|
439
|
+
* Nothing is estimated: the successor's est_usd_per_task stays null where unmeasured.
|
|
440
|
+
*/
|
|
441
|
+
function applySuccession(ranked, modelsByKey) {
|
|
442
|
+
const rows = [...ranked];
|
|
443
|
+
for (const row of ranked) {
|
|
444
|
+
if (row.excluded_reason) continue;
|
|
445
|
+
const model = modelsByKey.get(row.model);
|
|
446
|
+
const predecessorKey = model?.supersedes;
|
|
447
|
+
if (!predecessorKey) continue;
|
|
448
|
+
const predecessor = modelsByKey.get(predecessorKey);
|
|
449
|
+
if (!pricesAtOrBelow(model, predecessor)) continue;
|
|
450
|
+
const at = rows.indexOf(row);
|
|
451
|
+
const prevAt = rows.findIndex((entry) => entry.model === predecessorKey && !entry.excluded_reason);
|
|
452
|
+
if (prevAt === -1) continue;
|
|
453
|
+
if (at > prevAt) {
|
|
454
|
+
rows.splice(at, 1);
|
|
455
|
+
rows.splice(prevAt, 0, row);
|
|
456
|
+
}
|
|
457
|
+
row.cap_notes.push(`succeeds ${predecessorKey}: per-token prices at or below it on every component; ${predecessorKey} is the fallback`);
|
|
458
|
+
if (row.est_usd_per_task === null) row.cap_notes.push(`no measured \`${row.effort}\` $/task yet — ranked on price succession, not on an estimate`);
|
|
459
|
+
}
|
|
460
|
+
return rows;
|
|
418
461
|
}
|
|
419
462
|
|
|
420
463
|
/** Rows a caller may actually dispatch: admitted, in cost order. */
|
|
@@ -234,6 +234,23 @@
|
|
|
234
234
|
]
|
|
235
235
|
]
|
|
236
236
|
},
|
|
237
|
+
{
|
|
238
|
+
"key": "claude-opus-5-5",
|
|
239
|
+
"display_name": "Claude Opus 5.5",
|
|
240
|
+
"provider": "Anthropic",
|
|
241
|
+
"api_id": "claude-opus-5-5",
|
|
242
|
+
"input_usd_per_mtok": 4,
|
|
243
|
+
"output_usd_per_mtok": 20,
|
|
244
|
+
"source": "https://artificialanalysis.ai/models/claude-opus-5-5",
|
|
245
|
+
"measurement_note": "Only the max-effort configuration is published (Adaptive Reasoning, Max Effort, Default Fallback); low–xhigh are not measured. The score includes the benchmark default fallback.",
|
|
246
|
+
"measurements": [
|
|
247
|
+
[
|
|
248
|
+
"max",
|
|
249
|
+
58,
|
|
250
|
+
5.98
|
|
251
|
+
]
|
|
252
|
+
]
|
|
253
|
+
},
|
|
237
254
|
{
|
|
238
255
|
"key": "claude-fable-5-1",
|
|
239
256
|
"display_name": "Claude Fable 5.1",
|
|
@@ -43,6 +43,7 @@ Benchmark cost index: `100 × observed benchmark cost / $0.50`; GPT-5.6 Sol medi
|
|
|
43
43
|
| claude-opus-5 | Claude Opus 5 | high | 48 | $3.61 | 722 | 125 | +$1.42 (1.65×); +3 score | Compare only with adjacent measured effort; higher effort raises observed cost. |
|
|
44
44
|
| claude-opus-5 | Claude Opus 5 | xhigh | 50 | $4.88 | 976 | 125 | +$1.27 (1.35×); +2 score | Compare only with adjacent measured effort; higher effort raises observed cost. |
|
|
45
45
|
| claude-opus-5 | Claude Opus 5 | max | 51 | $5.86 | 1172 | 125 | +$0.98 (1.20×); +1 score | Compare only with adjacent measured effort; higher effort raises observed cost. |
|
|
46
|
+
| claude-opus-5-5 | Claude Opus 5.5 | max | 58 | $5.98 | 1196 | 100 | — | Segregate from standalone cross-model comparisons. |
|
|
46
47
|
| claude-fable-5-1 | Claude Fable 5.1 | low | 47 | $2.37 | 474 | 250 | — | Segregate from standalone cross-model comparisons. |
|
|
47
48
|
| claude-fable-5-1 | Claude Fable 5.1 | medium | 49 | $2.98 | 596 | 250 | +$0.61 (1.26×); +2 score | Segregate from standalone cross-model comparisons. |
|
|
48
49
|
| claude-fable-5-1 | Claude Fable 5.1 | high | 51 | $3.91 | 782 | 250 | +$0.93 (1.31×); +2 score | Segregate from standalone cross-model comparisons. |
|
|
@@ -88,6 +89,7 @@ Benchmark cost index: `100 × observed benchmark cost / $0.50`; GPT-5.6 Sol medi
|
|
|
88
89
|
| GPT-6 Astra | $10.000 | $50.000 | AA-observed price; not a live account tariff. |
|
|
89
90
|
| Claude Sonnet 5 | $2.000 | $10.000 | AA-observed price; not a live account tariff. |
|
|
90
91
|
| Claude Opus 5 | $5.000 | $25.000 | AA-observed price; not a live account tariff. |
|
|
92
|
+
| Claude Opus 5.5 | $4.000 | $20.000 | AA-observed price; not a live account tariff. |
|
|
91
93
|
| Claude Fable 5.1 | $10.000 | $50.000 | AA-observed price; not a live account tariff. |
|
|
92
94
|
| Claude Fable 5 | $10.000 | $50.000 | AA-observed price; not a live account tariff. |
|
|
93
95
|
| Claude Haiku 4.5 | $1.000 | $5.000 | AA-observed price; not a live account tariff. |
|
|
@@ -114,6 +116,7 @@ Benchmark cost index: `100 × observed benchmark cost / $0.50`; GPT-5.6 Sol medi
|
|
|
114
116
|
| GPT-6 Astra | `gpt-6-astra` | Canonical ID recorded in this dataset; exposure in a specific harness remains unverified. |
|
|
115
117
|
| Claude Sonnet 5 | `claude-sonnet-5` | Canonical ID recorded in this dataset; exposure in a specific harness remains unverified. |
|
|
116
118
|
| Claude Opus 5 | `claude-opus-5` | Canonical ID recorded in this dataset; exposure in a specific harness remains unverified. |
|
|
119
|
+
| Claude Opus 5.5 | `claude-opus-5-5` | Canonical ID recorded in this dataset; exposure in a specific harness remains unverified. |
|
|
117
120
|
| Claude Fable 5.1 | `claude-fable-5-1` | Canonical ID recorded in this dataset; exposure in a specific harness remains unverified. |
|
|
118
121
|
| Claude Fable 5 | `claude-fable-5` | Canonical ID recorded in this dataset; exposure in a specific harness remains unverified. |
|
|
119
122
|
| Claude Haiku 4.5 | `claude-haiku-4-5` | Canonical ID recorded in this dataset; exposure in a specific harness remains unverified. |
|
|
@@ -138,6 +141,7 @@ Benchmark cost index: `100 × observed benchmark cost / $0.50`; GPT-5.6 Sol medi
|
|
|
138
141
|
- [GPT-6 Astra](https://artificialanalysis.ai/models/gpt-6-astra)
|
|
139
142
|
- [Claude Sonnet 5](https://artificialanalysis.ai/models/claude-sonnet-5)
|
|
140
143
|
- [Claude Opus 5](https://artificialanalysis.ai/models/claude-opus-5)
|
|
144
|
+
- [Claude Opus 5.5](https://artificialanalysis.ai/models/claude-opus-5-5) — Only the max-effort configuration is published (Adaptive Reasoning, Max Effort, Default Fallback); low–xhigh are not measured. The score includes the benchmark default fallback.
|
|
141
145
|
- [Claude Fable 5.1](https://artificialanalysis.ai/models/claude-fable-5-1) — All displayed scores include the benchmark default fallback and are not standalone scores.
|
|
142
146
|
- [Claude Fable 5](https://artificialanalysis.ai/models/claude-fable-5) — AA v4.3.2 max result uses Opus 4.8 default fallback. This legacy catalog model is not in the current leaderboard filter; segregate it from standalone cross-model comparisons.
|
|
143
147
|
- [Claude Haiku 4.5](https://artificialanalysis.ai/models/claude-4-5-haiku) — Its API thinking budget is not an effort enum. The disabled score 15 is incomplete and intentionally excluded.
|
package/models/top-models.json
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"X": {"min": 45, "max": 50},
|
|
24
24
|
"F": {"min": 51, "max": null}
|
|
25
25
|
},
|
|
26
|
-
"note": "Bands are calibrated on the incumbents' measured range: Luna tops W at 37; Terra spans 38–42 in S; Sol 33–47 and Opus 39–50 straddle into X, whose seats sit at 45–50; Astra 46–53 and Fable 5.1 47–53 cover F from 51 up. They place *candidates*, which sit on no provider ladder. An incumbent's `tier` is its ladder seat and is never re-derived from a score — which is why two incumbent points fall outside their own band: Opus 5 `max` (51, above its `xhigh` policy cap) and Fable 5 `max` (50, its only measured point and above the unmeasured `high` that is the actual F default)."
|
|
26
|
+
"note": "Bands are calibrated on the incumbents' measured range: Luna tops W at 37; Terra spans 38–42 in S; Sol 33–47 and Opus 5 39–50 straddle into X, whose seats sit at 45–50; Astra 46–53 and Fable 5.1 47–53 cover F from 51 up. They place *candidates*, which sit on no provider ladder. An incumbent's `tier` is its ladder seat and is never re-derived from a score — which is why two incumbent points fall outside their own band: Opus 5 `max` (51, above its `xhigh` policy cap) and Fable 5 `max` (50, its only measured point and above the unmeasured `high` that is the actual F default)."
|
|
27
27
|
},
|
|
28
28
|
"indices_note": "`indices.thinking_cost_index` is 100 × measured $/task ÷ $0.50, the dataset's benchmark cost baseline (`index_baselines.benchmark_cost_usd`). GPT-5.6 Sol `medium` costs exactly $0.50/task, so it is index 100 by construction. `indices.marginal_thinking` holds, for each adjacent pair of fully measured efforts, the displayed-score delta and the cost multiplier of the step — the price of one more notch of thinking. Efforts with no published cost carry a null index and open no marginal pair; nothing is interpolated.",
|
|
29
29
|
"models": [
|
|
@@ -491,7 +491,7 @@
|
|
|
491
491
|
"share_max": null
|
|
492
492
|
},
|
|
493
493
|
"notes": [
|
|
494
|
-
"Opus 4.8/4.7/4.6 share the $5/$25 price and are fallback-only.",
|
|
494
|
+
"Fallback for Claude Opus 5.5 on the Claude X seat: dispatched when Opus 5.5 is not exposed, refuses (it runs without Opus 5.5 thinking blocks), or is rolled back. Opus 4.8/4.7/4.6 share the $5/$25 price and are fallback-only below it.",
|
|
495
495
|
"Every measured Opus config is dominated on $/task by a Sol or Astra config; it stays the Claude X seat for single-provider flows and retention-constrained work."
|
|
496
496
|
],
|
|
497
497
|
"sources": [
|
|
@@ -499,6 +499,64 @@
|
|
|
499
499
|
],
|
|
500
500
|
"observed_at": "2026-09-22"
|
|
501
501
|
},
|
|
502
|
+
{
|
|
503
|
+
"key": "claude-opus-5-5",
|
|
504
|
+
"display_name": "Claude Opus 5.5",
|
|
505
|
+
"provider": "anthropic",
|
|
506
|
+
"ladder": "claude",
|
|
507
|
+
"admission": "incumbent",
|
|
508
|
+
"tier": "X",
|
|
509
|
+
"eligible_tiers": ["X"],
|
|
510
|
+
"supersedes": "claude-opus-5",
|
|
511
|
+
"api_ids": {
|
|
512
|
+
"codex": null,
|
|
513
|
+
"claude": "claude-opus-5-5",
|
|
514
|
+
"opencode": null,
|
|
515
|
+
"kilo": null
|
|
516
|
+
},
|
|
517
|
+
"context_window": 1000000,
|
|
518
|
+
"max_output_tokens": 128000,
|
|
519
|
+
"thinking": {
|
|
520
|
+
"control": "effort",
|
|
521
|
+
"levels": ["low", "medium", "high", "xhigh", "max"],
|
|
522
|
+
"unmeasured_levels": ["low", "medium", "high", "xhigh"],
|
|
523
|
+
"always_on": true,
|
|
524
|
+
"default_for_tier": "high",
|
|
525
|
+
"note": "Thinking is always on: omit `thinking` or send `adaptive`; `disabled` and `budget_tokens` return 400 at every effort. The API default effort is `medium` (one below Opus 5), so X always sets effort explicitly — `high` for T3, `xhigh` for T4. Forced `tool_choice` any/tool returns 400 — use `auto` + instruction, `strict: true`, or structured outputs. Thinking blocks are model-bound; keep transcripts append-only. Computer use only via `computer_toolset_20260801`."
|
|
526
|
+
},
|
|
527
|
+
"price": {
|
|
528
|
+
"input_usd_per_mtok": 4,
|
|
529
|
+
"output_usd_per_mtok": 20,
|
|
530
|
+
"cache_read_usd_per_mtok": 0.2,
|
|
531
|
+
"cache_write_multiplier": 1.25,
|
|
532
|
+
"fast_mode_note": "`speed: \"fast\"` reprices Opus 5.5 to $8/$40 (Claude API only). Off by default; it never replaces an F dispatch."
|
|
533
|
+
},
|
|
534
|
+
"long_context_surcharge": null,
|
|
535
|
+
"measured": {
|
|
536
|
+
"max": {"score": 58, "usd_per_task": 5.98}
|
|
537
|
+
},
|
|
538
|
+
"measurement_note": "Only `max` is published (Adaptive Reasoning, Max Effort, Default Fallback); the score includes the benchmark default fallback. low–xhigh are unmeasured, so a dispatch at them carries no $/task estimate until Artificial Analysis publishes them.",
|
|
539
|
+
"indices": {
|
|
540
|
+
"thinking_cost_index": {
|
|
541
|
+
"max": 1196
|
|
542
|
+
},
|
|
543
|
+
"marginal_thinking": {}
|
|
544
|
+
},
|
|
545
|
+
"caps": {
|
|
546
|
+
"max_effort": "xhigh",
|
|
547
|
+
"share_max": null
|
|
548
|
+
},
|
|
549
|
+
"notes": [
|
|
550
|
+
"Successor to Claude Opus 5 on the Claude X seat. Every per-token price is lower (Anthropic list: input $4 vs $5, output $20 vs $25, cache read $0.20 vs $0.50, cache write $5 vs $6.25), with the same 1M context, 128K output and tokenizer, so the router ranks it ahead of Opus 5 at the same effort; Opus 5 stays routable as its fallback.",
|
|
551
|
+
"Only `max` is independently measured (Artificial Analysis 58 @ $5.98, above every other shortlisted config). Anthropic's launch table puts it above Opus 5 on every published benchmark (Terminal-Bench 4.0 66.4 vs 52.3, FrontierCode v1.1 54.4 vs 48.0, CursorBench 4.0 57.8 vs 46.6) and claims ~40% lower cost on typical workloads — vendor figures, kept as notes and never used as $/task estimates.",
|
|
552
|
+
"Seat stays X: an incumbent tier is never re-derived from a score."
|
|
553
|
+
],
|
|
554
|
+
"sources": [
|
|
555
|
+
"https://artificialanalysis.ai/models/claude-opus-5-5",
|
|
556
|
+
"https://www.anthropic.com/claude-opus-5-5"
|
|
557
|
+
],
|
|
558
|
+
"observed_at": "2026-09-22"
|
|
559
|
+
},
|
|
502
560
|
{
|
|
503
561
|
"key": "claude-fable-5",
|
|
504
562
|
"display_name": "Claude Fable 5",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "llm-orchestrator",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Write /task once — it plans the work, shards it across parallel subagents, gates every phase and verifies before claiming done. Claude Code, Codex, OpenCode, Kilo.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
package/policies/routing.md
CHANGED
|
@@ -76,7 +76,7 @@ the incumbents below are role mappings, not guarantees of availability.
|
|
|
76
76
|
| --- | --- | --- | --- |
|
|
77
77
|
| **W** worker | local, mechanical, repetitive, well-defined: code search, classification, extraction, small edits, boilerplate, simple tests, consistency checks, scoped transforms | Haiku 4.5 (`claude-haiku-4-5`) | `gpt-5.6-luna` |
|
|
78
78
|
| **S** standard | default software-engineering model: normal implementation, frontend/backend, moderate debugging, tests, reasonable multi-file refactors, codebase analysis, tool use | Sonnet 5 (`claude-sonnet-5`) | `gpt-5.6-terra` |
|
|
79
|
-
| **X** senior | hard debugging, architecture, concurrency, migrations, security, auth, payments, billing, backwards compatibility, critical code review, many invariants | Opus 5 (`claude-opus-5`) | `gpt-5.6-sol` |
|
|
79
|
+
| **X** senior | hard debugging, architecture, concurrency, migrations, security, auth, payments, billing, backwards compatibility, critical code review, many invariants | Opus 5.5 (`claude-opus-5-5`), falling back to Opus 5 (`claude-opus-5`) | `gpt-5.6-sol` |
|
|
80
80
|
| **F** frontier | exceptional escalation: very ambiguous, long-horizon, cross-system, major architecture, very large codebase, planning under heavy constraints, or when X fails to produce a solid solution | Fable 5 (`claude-fable-5`) — default F. Fable 5.1 (`claude-fable-5-1`) is a hard-capped exception: **≤2% of all dispatches**, explicit request or documented F-T4 failure on Fable 5 only | GPT-6 Astra (`gpt-6-astra`) — a real single-agent frontier tier, no decomposition workaround needed |
|
|
81
81
|
|
|
82
82
|
Escalation order within a provider: **W → S → X → F**.
|
|
@@ -87,15 +87,20 @@ Verified prices (Sep 2026, provider pricing pages), USD in/out per MTok:
|
|
|
87
87
|
| --- | --- | --- | --- | --- |
|
|
88
88
|
| W | Haiku 4.5 (200K ctx) | $1 / $5 | `gpt-5.6-luna` (1.05M ctx) | $0.20 / $1.20 |
|
|
89
89
|
| S | Sonnet 5 (1M ctx) | $2 / $10 | `gpt-5.6-terra` (1.05M ctx) | $2 / $12 |
|
|
90
|
-
| X | Opus 5 (1M ctx)
|
|
90
|
+
| X | Opus 5.5 (1M ctx); fallback Opus 5 $5 / $25 | $4 / $20 | `gpt-5.6-sol` (1.05M ctx) | $4 / $20 |
|
|
91
91
|
| F | Fable 5 (1M ctx) | $10 / $50 | `gpt-6-astra` (1.05M ctx) | $10 / $50 list — **but the cheapest F per completed task of any model here** |
|
|
92
92
|
| F+ (≤2%) | Fable 5.1 (1M ctx) | $10 / $50 list — **effective cost significantly higher** (always-on thinking, longer turns, more output tokens per task) | — (Astra covers F) | — |
|
|
93
93
|
|
|
94
94
|
Claude notes: Fable 5.1 shares Fable 5's list price but costs significantly more per completed task
|
|
95
95
|
— judge it on cost per task, not per token. **When F is needed, use Fable 5; Fable 5.1 is capped at
|
|
96
96
|
≤2% of dispatches.** Fable 5.1 cache reads bill at $0.25/MTok; Fable 5 uses the standard
|
|
97
|
-
10%-of-input cache-read rate. Opus 5
|
|
98
|
-
|
|
97
|
+
10%-of-input cache-read rate. Opus 5.5 is at or below Opus 5 on every per-token price (input $4 vs $5,
|
|
98
|
+
output $20 vs $25, cache read $0.20 vs $0.50, cache write $5 vs $6.25); only its `max` effort is
|
|
99
|
+
independently measured so far, so the router ranks it ahead of Opus 5 by `supersedes` price
|
|
100
|
+
succession — never by an estimated $/task — and keeps Opus 5 as the fallback when 5.5 is not exposed
|
|
101
|
+
or refuses. Opus 5.5's API default effort is `medium`, one below Opus 5, so X always sets effort
|
|
102
|
+
explicitly. Fast mode (`speed: "fast"`) reprices Opus 5.5 to $8 / $40 and Opus 5 to $10 / $50 —
|
|
103
|
+
never a replacement for an F dispatch, off by default.
|
|
99
104
|
Legacy fallbacks: Opus 4.8 / 4.7 / 4.6 $5 / $25, Sonnet 4.6 $3 / $15 (more expensive than Sonnet 5 —
|
|
100
105
|
never pick it for cost).
|
|
101
106
|
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
"X": {
|
|
19
19
|
"name": "senior",
|
|
20
20
|
"responsibility": "Hard debugging, architecture, concurrency, migrations, security, auth, payments, billing, backwards compatibility, critical code review, many invariants.",
|
|
21
|
-
"incumbents": {"claude": "claude-opus-5", "codex": "gpt-5.6-sol"}
|
|
21
|
+
"incumbents": {"claude": "claude-opus-5-5", "codex": "gpt-5.6-sol"},
|
|
22
|
+
"fallbacks": {"claude": ["claude-opus-5"]}
|
|
22
23
|
},
|
|
23
24
|
"F": {
|
|
24
25
|
"name": "frontier",
|
|
@@ -97,15 +98,15 @@
|
|
|
97
98
|
"codex": {"model": "gpt-5.6-terra", "effort": "high"}
|
|
98
99
|
},
|
|
99
100
|
"X T2": {
|
|
100
|
-
"claude": {"model": "claude-opus-5", "effort": "medium"},
|
|
101
|
+
"claude": {"model": "claude-opus-5-5", "effort": "medium"},
|
|
101
102
|
"codex": {"model": "gpt-5.6-sol", "effort": "medium"}
|
|
102
103
|
},
|
|
103
104
|
"X T3": {
|
|
104
|
-
"claude": {"model": "claude-opus-5", "effort": "high"},
|
|
105
|
+
"claude": {"model": "claude-opus-5-5", "effort": "high"},
|
|
105
106
|
"codex": {"model": "gpt-5.6-sol", "effort": "high"}
|
|
106
107
|
},
|
|
107
108
|
"X T4": {
|
|
108
|
-
"claude": {"model": "claude-opus-5", "effort": "xhigh"},
|
|
109
|
+
"claude": {"model": "claude-opus-5-5", "effort": "xhigh"},
|
|
109
110
|
"codex": {"model": "gpt-5.6-sol", "effort": "high", "independent_second_reviewer": {"model": "gpt-5.6-sol", "effort": "high"}}
|
|
110
111
|
},
|
|
111
112
|
"F T3": {
|
|
@@ -279,8 +280,8 @@
|
|
|
279
280
|
{"model": "claude-sonnet-5", "effort": "low"},
|
|
280
281
|
{"model": "claude-sonnet-5", "effort": "medium"},
|
|
281
282
|
{"model": "claude-sonnet-5", "effort": "high"},
|
|
282
|
-
{"model": "claude-opus-5", "effort": "high"},
|
|
283
|
-
{"model": "claude-opus-5", "effort": "xhigh"},
|
|
283
|
+
{"model": "claude-opus-5-5", "effort": "high"},
|
|
284
|
+
{"model": "claude-opus-5-5", "effort": "xhigh"},
|
|
284
285
|
{"model": "claude-fable-5", "effort": "high"},
|
|
285
286
|
{"model": "claude-fable-5", "effort": "xhigh"},
|
|
286
287
|
{"model": "claude-fable-5", "effort": "max"},
|
|
@@ -51,7 +51,16 @@
|
|
|
51
51
|
"codex": { "type": "string" }
|
|
52
52
|
}
|
|
53
53
|
},
|
|
54
|
-
"capped_exception": { "type": "object" }
|
|
54
|
+
"capped_exception": { "type": "object" },
|
|
55
|
+
"fallbacks": {
|
|
56
|
+
"type": "object",
|
|
57
|
+
"description": "Per-ladder models dispatched when the incumbent is not exposed, refuses, or is rolled back.",
|
|
58
|
+
"properties": {
|
|
59
|
+
"claude": { "type": "array", "items": { "type": "string" } },
|
|
60
|
+
"codex": { "type": "array", "items": { "type": "string" } }
|
|
61
|
+
},
|
|
62
|
+
"additionalProperties": false
|
|
63
|
+
}
|
|
55
64
|
},
|
|
56
65
|
"additionalProperties": false
|
|
57
66
|
}
|
|
@@ -105,7 +105,12 @@
|
|
|
105
105
|
"levels": { "type": "array", "minItems": 1, "items": { "type": "string" } },
|
|
106
106
|
"always_on": { "type": ["boolean", "null"] },
|
|
107
107
|
"default_for_tier": { "type": ["string", "null"] },
|
|
108
|
-
"note": { "type": "string" }
|
|
108
|
+
"note": { "type": "string" },
|
|
109
|
+
"unmeasured_levels": {
|
|
110
|
+
"type": "array",
|
|
111
|
+
"items": { "type": "string" },
|
|
112
|
+
"description": "Efforts the API supports that the benchmark has not measured. Declared explicitly so a dispatch at one of them carries est_usd_per_task null instead of borrowing a measured point."
|
|
113
|
+
}
|
|
109
114
|
},
|
|
110
115
|
"additionalProperties": false
|
|
111
116
|
},
|
|
@@ -149,6 +154,10 @@
|
|
|
149
154
|
}
|
|
150
155
|
},
|
|
151
156
|
"measurement_note": { "type": "string" },
|
|
157
|
+
"supersedes": {
|
|
158
|
+
"type": ["string", "null"],
|
|
159
|
+
"description": "Key of the same-ladder, same-tier model this one succeeds. The router ranks the successor directly ahead of it only while every per-token price (input, output, cache read) is at or below the predecessor's; the predecessor stays routable as the fallback."
|
|
160
|
+
},
|
|
152
161
|
"indices": {
|
|
153
162
|
"type": "object",
|
|
154
163
|
"required": ["thinking_cost_index", "marginal_thinking"],
|