llm-orchestrator 1.3.0 → 1.3.1

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.
@@ -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.3.0",
4
+ "version": "1.3.1",
5
5
  "author": {
6
6
  "name": "Bogdan-Gabriel Torcescu",
7
7
  "url": "https://www.linkedin.com/in/bogdantorcescu/"
package/README.md CHANGED
@@ -456,7 +456,7 @@ Incumbents hold a seat on a provider ladder. Candidates are measured but unseate
456
456
  |---|---|---|---|---|---|---|
457
457
  | GPT-6 Luna | openai | codex | incumbent | W | low, medium, high, xhigh, max (reasoning_effort) | $0.1 / $0.5 |
458
458
  | GPT-5.6 Luna | openai | codex | incumbent (fallback for GPT-6 Luna) | W | low, medium, high, xhigh, max (reasoning_effort) | $0.2 / $1.2 |
459
- | GPT-5.6 Terra | openai | codex | incumbent | S | low, medium, high, xhigh, max (reasoning_effort) | $2 / $12 |
459
+ | GPT-5.6 Terra | openai | codex | incumbent (S fallback; GPT-6 Sol holds the S seat one notch down) | S | low, medium, high, xhigh, max (reasoning_effort) | $2 / $12 |
460
460
  | GPT-6 Sol | openai | codex | incumbent | X | low, medium, high, xhigh, max (reasoning_effort) | $2 / $10 |
461
461
  | GPT-5.6 Sol | openai | codex | incumbent (fallback for GPT-6 Sol) | X | low, medium, high, xhigh, max (reasoning_effort) | $4 / $20 |
462
462
  | GPT-6 Astra | openai | codex | incumbent | F | low, medium, high, xhigh, max (reasoning_effort) | $10 / $50 |
package/lib/router.mjs CHANGED
@@ -209,10 +209,14 @@ function effortScale(model) {
209
209
  return model.thinking?.control === 'budget_tokens' ? BUDGET_ORDER : EFFORT_ORDER;
210
210
  }
211
211
 
212
- function desiredEffort(model, level) {
212
+ function desiredEffort(model, level, tier = null) {
213
213
  const matrix = loadMatrix();
214
214
  const row = matrix.thinking_levels[level];
215
215
  if (!row) return null;
216
+ // A model seated on a tier below its home runs a declared, lower effort there so it
217
+ // is score-matched to that tier's model rather than over-provisioned.
218
+ const override = tier ? model.thinking?.tier_effort?.[tier]?.[level] : undefined;
219
+ if (override) return override;
216
220
  if (model.thinking?.control === 'budget_tokens') {
217
221
  if (['T0', 'T1'].includes(level)) return 'disabled';
218
222
  if (['T2', 'T3'].includes(level)) return 'enabled';
@@ -228,8 +232,8 @@ function desiredEffort(model, level) {
228
232
  * about the evidence, not licence to invent an enum: we take the model's cheapest
229
233
  * published setting that is at least as deep as the request, or nothing.
230
234
  */
231
- function resolveEffort(model, level) {
232
- const desired = desiredEffort(model, level);
235
+ function resolveEffort(model, level, tier = null) {
236
+ const desired = desiredEffort(model, level, tier);
233
237
  if (desired === null) return { effort: null, substituted: false };
234
238
  const levels = Array.isArray(model.thinking?.levels) ? model.thinking.levels : [];
235
239
  if (levels.length === 0 || levels.includes(desired)) return { effort: desired, substituted: false };
@@ -341,10 +345,10 @@ export function rankModels({
341
345
  if (model.caps?.requires_explicit_flag && !explicitFable51) continue;
342
346
  if (model.caps?.requires_explicit_flag) cap_notes.push(`capped exception: ≤${Math.round((model.caps.share_max ?? 0) * 100)}% of dispatches, explicit request only`);
343
347
 
344
- const resolved = resolveEffort(model, parsed.level);
348
+ const resolved = resolveEffort(model, parsed.level, parsed.tier);
345
349
  let effort = resolved.effort;
346
350
  if (effort === null) continue; // no expression for this thinking level on this control
347
- if (resolved.substituted) cap_notes.push(`no measured \`${desiredEffort(model, parsed.level)}\` point; nearest published setting is \`${effort}\``);
351
+ if (resolved.substituted) cap_notes.push(`no measured \`${desiredEffort(model, parsed.level, parsed.tier)}\` point; nearest published setting is \`${effort}\``);
348
352
 
349
353
  const scale = effortScale(model);
350
354
  const cap = model.caps?.max_effort ?? scale[scale.length - 1];
@@ -366,6 +366,7 @@
366
366
  "admission": "incumbent",
367
367
  "tier": "X",
368
368
  "eligible_tiers": [
369
+ "S",
369
370
  "X"
370
371
  ],
371
372
  "supersedes": "gpt-5-6-sol",
@@ -388,7 +389,10 @@
388
389
  ],
389
390
  "always_on": false,
390
391
  "default_for_tier": "high",
391
- "note": "Same Codex policy as GPT-5.6 Sol: ceiling `high`; T4 is `high` plus an independent second Sol `high` reviewer with no shared history. The API also accepts `none`, which is not measured and never routed."
392
+ "note": "Same Codex policy as GPT-5.6 Sol: ceiling `high`; T4 is `high` plus an independent second Sol `high` reviewer with no shared history. The API also accepts `none`, which is not measured and never routed. On the S seat it runs one notch down (tier_effort), score-matched to Terra.",
393
+ "tier_effort": {
394
+ "S": {"T1": "low", "T2": "low", "T3": "medium"}
395
+ }
392
396
  },
393
397
  "price": {
394
398
  "input_usd_per_mtok": 2,
@@ -463,7 +467,7 @@
463
467
  },
464
468
  "notes": [
465
469
  "Successor to GPT-5.6 Sol on the Codex X seat at half the per-token price ($2/$10 vs $4/$20, permanent pricing). It is cheaper per completed task at every measured effort and scores equal or higher at each (high 43 @ $0.37 vs 42 @ $0.81); GPT-5.6 Sol stays routable as its fallback.",
466
- "Its `medium` (40 @ $0.25) also dominates GPT-5.6 Terra `xhigh` (38 @ $0.63); the S seat stays Terra because an incumbent's tier is its ladder seat, not a score see the routing note."
470
+ "Also holds the Codex S seat: at every S pair it is cheaper and stronger than GPT-5.6 Terra (S T2: `low` 34 @ $0.13 vs Terra `medium` 30 @ $0.18; S T3: `medium` 40 @ $0.25 vs Terra `high` 34 @ $0.34). Terra stays routable as the S fallback."
467
471
  ],
468
472
  "sources": [
469
473
  "https://artificialanalysis.ai/models/gpt-6-sol",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "llm-orchestrator",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
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": {
@@ -75,7 +75,7 @@ the incumbents below are role mappings, not guarantees of availability.
75
75
  | Tier | Role | Claude incumbent | Codex incumbent |
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-6-luna`, falling back to `gpt-5.6-luna` |
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` |
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-6-sol` one notch down, falling back to `gpt-5.6-terra` |
79
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-6-sol`, falling back to `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
 
@@ -86,7 +86,7 @@ Verified prices (Sep 2026, provider pricing pages), USD in/out per MTok:
86
86
  | Tier | Claude model | Claude $ in/out | Codex model | Codex $ in/out |
87
87
  | --- | --- | --- | --- | --- |
88
88
  | W | Haiku 4.5 (200K ctx) | $1 / $5 | `gpt-6-luna` (1.05M ctx); fallback `gpt-5.6-luna` $0.20 / $1.20 | $0.10 / $0.50 |
89
- | S | Sonnet 5 (1M ctx) | $2 / $10 | `gpt-5.6-terra` (1.05M ctx) | $2 / $12 |
89
+ | S | Sonnet 5 (1M ctx) | $2 / $10 | `gpt-6-sol` one effort notch down (T1/T2 `low`, T3 `medium`); fallback `gpt-5.6-terra` $2 / $12 | $2 / $10 |
90
90
  | X | Opus 5.5 (1M ctx); fallback Opus 5 $5 / $25 | $4 / $20 | `gpt-6-sol` (1.05M ctx); fallback `gpt-5.6-sol` $4 / $20 | $2 / $10 |
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) | — |
@@ -14,7 +14,8 @@
14
14
  "S": {
15
15
  "name": "standard",
16
16
  "responsibility": "Default software-engineering model: normal implementation, frontend/backend, moderate debugging, tests, reasonable multi-file refactors, codebase analysis, tool use.",
17
- "incumbents": {"claude": "claude-sonnet-5", "codex": "gpt-5.6-terra"}
17
+ "incumbents": {"claude": "claude-sonnet-5", "codex": "gpt-6-sol"},
18
+ "fallbacks": {"codex": ["gpt-5.6-terra"]}
18
19
  },
19
20
  "X": {
20
21
  "name": "senior",
@@ -88,15 +89,15 @@
88
89
  },
89
90
  "S T1": {
90
91
  "claude": {"model": "claude-sonnet-5", "effort": "low"},
91
- "codex": {"model": "gpt-5.6-terra", "effort": "low"}
92
+ "codex": {"model": "gpt-6-sol", "effort": "low"}
92
93
  },
93
94
  "S T2": {
94
95
  "claude": {"model": "claude-sonnet-5", "effort": "medium"},
95
- "codex": {"model": "gpt-5.6-terra", "effort": "medium"}
96
+ "codex": {"model": "gpt-6-sol", "effort": "low"}
96
97
  },
97
98
  "S T3": {
98
99
  "claude": {"model": "claude-sonnet-5", "effort": "high"},
99
- "codex": {"model": "gpt-5.6-terra", "effort": "high"}
100
+ "codex": {"model": "gpt-6-sol", "effort": "medium"}
100
101
  },
101
102
  "X T2": {
102
103
  "claude": {"model": "claude-opus-5-5", "effort": "medium"},
@@ -293,8 +294,7 @@
293
294
  {"model": "gpt-6-luna", "effort": "medium"},
294
295
  {"model": "gpt-6-luna", "effort": "xhigh"},
295
296
  {"model": "gpt-6-luna", "effort": "max"},
296
- {"model": "gpt-5.6-terra", "effort": "medium"},
297
- {"model": "gpt-5.6-terra", "effort": "high"},
297
+ {"model": "gpt-6-sol", "effort": "low"},
298
298
  {"model": "gpt-6-sol", "effort": "medium"},
299
299
  {"model": "gpt-6-sol", "effort": "high"},
300
300
  {"model": "gpt-6-sol", "effort": "high", "independent_second_reviewer": true},
@@ -106,6 +106,11 @@
106
106
  "always_on": { "type": ["boolean", "null"] },
107
107
  "default_for_tier": { "type": ["string", "null"] },
108
108
  "note": { "type": "string" },
109
+ "tier_effort": {
110
+ "type": "object",
111
+ "description": "Per seat below the model's home tier: thinking level → effort to run there, so the model is score-matched to that tier instead of over-provisioned.",
112
+ "additionalProperties": { "type": "object", "additionalProperties": { "type": "string" } }
113
+ },
109
114
  "unmeasured_levels": {
110
115
  "type": "array",
111
116
  "items": { "type": "string" },