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.
|
|
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];
|
package/models/top-models.json
CHANGED
|
@@ -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
|
-
"
|
|
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.
|
|
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": {
|
package/policies/routing.md
CHANGED
|
@@ -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`
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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" },
|