@blockrun/clawrouter 0.8.23 → 0.8.25
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/README.md +36 -6
- package/dist/cli.js +64 -84
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +78 -89
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -478,7 +478,8 @@ declare function getSessionId(headers: Record<string, string | string[] | undefi
|
|
|
478
478
|
*/
|
|
479
479
|
|
|
480
480
|
/**
|
|
481
|
-
* Get the proxy port from
|
|
481
|
+
* Get the proxy port from pre-loaded configuration.
|
|
482
|
+
* Port is validated at module load time, this just returns the cached value.
|
|
482
483
|
*/
|
|
483
484
|
declare function getProxyPort(): number;
|
|
484
485
|
/** Callback info for low balance warning */
|
package/dist/index.js
CHANGED
|
@@ -25,8 +25,7 @@ var MODEL_ALIASES = {
|
|
|
25
25
|
"grok-code": "xai/grok-code-fast-1",
|
|
26
26
|
// NVIDIA
|
|
27
27
|
nvidia: "nvidia/gpt-oss-120b",
|
|
28
|
-
"gpt-120b": "nvidia/gpt-oss-120b"
|
|
29
|
-
"gpt-20b": "nvidia/gpt-oss-20b"
|
|
28
|
+
"gpt-120b": "nvidia/gpt-oss-120b"
|
|
30
29
|
// Note: auto, free, eco, premium are virtual routing profiles registered in BLOCKRUN_MODELS
|
|
31
30
|
// They don't need aliases since they're already top-level model IDs
|
|
32
31
|
};
|
|
@@ -131,14 +130,7 @@ var BLOCKRUN_MODELS = [
|
|
|
131
130
|
contextWindow: 128e3,
|
|
132
131
|
maxOutput: 16384
|
|
133
132
|
},
|
|
134
|
-
|
|
135
|
-
id: "openai/gpt-4.1-nano",
|
|
136
|
-
name: "GPT-4.1 Nano",
|
|
137
|
-
inputPrice: 0.1,
|
|
138
|
-
outputPrice: 0.4,
|
|
139
|
-
contextWindow: 128e3,
|
|
140
|
-
maxOutput: 16384
|
|
141
|
-
},
|
|
133
|
+
// gpt-4.1-nano removed - replaced by gpt-5-nano
|
|
142
134
|
{
|
|
143
135
|
id: "openai/gpt-4o",
|
|
144
136
|
name: "GPT-4o",
|
|
@@ -157,25 +149,7 @@ var BLOCKRUN_MODELS = [
|
|
|
157
149
|
contextWindow: 128e3,
|
|
158
150
|
maxOutput: 16384
|
|
159
151
|
},
|
|
160
|
-
// OpenAI O-series (Reasoning)
|
|
161
|
-
{
|
|
162
|
-
id: "openai/o1",
|
|
163
|
-
name: "o1",
|
|
164
|
-
inputPrice: 15,
|
|
165
|
-
outputPrice: 60,
|
|
166
|
-
contextWindow: 2e5,
|
|
167
|
-
maxOutput: 1e5,
|
|
168
|
-
reasoning: true
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
id: "openai/o1-mini",
|
|
172
|
-
name: "o1-mini",
|
|
173
|
-
inputPrice: 1.1,
|
|
174
|
-
outputPrice: 4.4,
|
|
175
|
-
contextWindow: 128e3,
|
|
176
|
-
maxOutput: 65536,
|
|
177
|
-
reasoning: true
|
|
178
|
-
},
|
|
152
|
+
// OpenAI O-series (Reasoning) - o1/o1-mini removed, replaced by o3/o4
|
|
179
153
|
{
|
|
180
154
|
id: "openai/o3",
|
|
181
155
|
name: "o3",
|
|
@@ -312,15 +286,7 @@ var BLOCKRUN_MODELS = [
|
|
|
312
286
|
maxOutput: 16384,
|
|
313
287
|
reasoning: true
|
|
314
288
|
},
|
|
315
|
-
|
|
316
|
-
id: "xai/grok-3-fast",
|
|
317
|
-
name: "Grok 3 Fast",
|
|
318
|
-
inputPrice: 5,
|
|
319
|
-
outputPrice: 25,
|
|
320
|
-
contextWindow: 131072,
|
|
321
|
-
maxOutput: 16384,
|
|
322
|
-
reasoning: true
|
|
323
|
-
},
|
|
289
|
+
// grok-3-fast removed - too expensive ($5/$25), use grok-4-fast instead
|
|
324
290
|
{
|
|
325
291
|
id: "xai/grok-3-mini",
|
|
326
292
|
name: "Grok 3 Mini",
|
|
@@ -383,15 +349,7 @@ var BLOCKRUN_MODELS = [
|
|
|
383
349
|
maxOutput: 16384,
|
|
384
350
|
reasoning: true
|
|
385
351
|
},
|
|
386
|
-
|
|
387
|
-
id: "xai/grok-2-vision",
|
|
388
|
-
name: "Grok 2 Vision",
|
|
389
|
-
inputPrice: 2,
|
|
390
|
-
outputPrice: 10,
|
|
391
|
-
contextWindow: 131072,
|
|
392
|
-
maxOutput: 16384,
|
|
393
|
-
vision: true
|
|
394
|
-
},
|
|
352
|
+
// grok-2-vision removed - old, 0 transactions
|
|
395
353
|
// NVIDIA - Free/cheap models
|
|
396
354
|
{
|
|
397
355
|
id: "nvidia/gpt-oss-120b",
|
|
@@ -401,19 +359,11 @@ var BLOCKRUN_MODELS = [
|
|
|
401
359
|
contextWindow: 128e3,
|
|
402
360
|
maxOutput: 16384
|
|
403
361
|
},
|
|
404
|
-
{
|
|
405
|
-
id: "nvidia/gpt-oss-20b",
|
|
406
|
-
name: "NVIDIA GPT-OSS 20B",
|
|
407
|
-
inputPrice: 0,
|
|
408
|
-
outputPrice: 0,
|
|
409
|
-
contextWindow: 128e3,
|
|
410
|
-
maxOutput: 16384
|
|
411
|
-
},
|
|
412
362
|
{
|
|
413
363
|
id: "nvidia/kimi-k2.5",
|
|
414
364
|
name: "NVIDIA Kimi K2.5",
|
|
415
|
-
inputPrice:
|
|
416
|
-
outputPrice:
|
|
365
|
+
inputPrice: 0.55,
|
|
366
|
+
outputPrice: 2.5,
|
|
417
367
|
contextWindow: 262144,
|
|
418
368
|
maxOutput: 16384
|
|
419
369
|
}
|
|
@@ -1621,14 +1571,12 @@ var DEFAULT_ROUTING_CONFIG = {
|
|
|
1621
1571
|
tiers: {
|
|
1622
1572
|
SIMPLE: {
|
|
1623
1573
|
primary: "nvidia/kimi-k2.5",
|
|
1624
|
-
//
|
|
1574
|
+
// $0.55/$2.5 - best quality/price for simple tasks
|
|
1625
1575
|
fallback: [
|
|
1626
|
-
"google/gemini-2.5-flash",
|
|
1627
1576
|
"nvidia/gpt-oss-120b",
|
|
1628
|
-
|
|
1629
|
-
"
|
|
1630
|
-
"
|
|
1631
|
-
// Added for better quality fallback
|
|
1577
|
+
// FREE fallback
|
|
1578
|
+
"google/gemini-2.5-flash",
|
|
1579
|
+
"deepseek/deepseek-chat"
|
|
1632
1580
|
]
|
|
1633
1581
|
},
|
|
1634
1582
|
MEDIUM: {
|
|
@@ -1642,9 +1590,15 @@ var DEFAULT_ROUTING_CONFIG = {
|
|
|
1642
1590
|
]
|
|
1643
1591
|
},
|
|
1644
1592
|
COMPLEX: {
|
|
1645
|
-
primary: "google/gemini-
|
|
1646
|
-
|
|
1647
|
-
|
|
1593
|
+
primary: "google/gemini-3-pro-preview",
|
|
1594
|
+
// Latest Gemini - upgraded from 2.5
|
|
1595
|
+
fallback: [
|
|
1596
|
+
"google/gemini-2.5-pro",
|
|
1597
|
+
"xai/grok-4-0709",
|
|
1598
|
+
"openai/gpt-4o",
|
|
1599
|
+
"openai/gpt-5.2",
|
|
1600
|
+
"anthropic/claude-sonnet-4"
|
|
1601
|
+
]
|
|
1648
1602
|
},
|
|
1649
1603
|
REASONING: {
|
|
1650
1604
|
primary: "xai/grok-4-1-fast-reasoning",
|
|
@@ -1652,7 +1606,8 @@ var DEFAULT_ROUTING_CONFIG = {
|
|
|
1652
1606
|
fallback: [
|
|
1653
1607
|
"xai/grok-4-fast-reasoning",
|
|
1654
1608
|
"openai/o3",
|
|
1655
|
-
|
|
1609
|
+
"openai/o4-mini",
|
|
1610
|
+
// Latest o-series mini
|
|
1656
1611
|
"deepseek/deepseek-reasoner",
|
|
1657
1612
|
"moonshot/kimi-k2.5"
|
|
1658
1613
|
]
|
|
@@ -1662,8 +1617,8 @@ var DEFAULT_ROUTING_CONFIG = {
|
|
|
1662
1617
|
ecoTiers: {
|
|
1663
1618
|
SIMPLE: {
|
|
1664
1619
|
primary: "nvidia/kimi-k2.5",
|
|
1665
|
-
// $0.
|
|
1666
|
-
fallback: ["
|
|
1620
|
+
// $0.55/$2.5
|
|
1621
|
+
fallback: ["nvidia/gpt-oss-120b", "deepseek/deepseek-chat", "google/gemini-2.5-flash"]
|
|
1667
1622
|
},
|
|
1668
1623
|
MEDIUM: {
|
|
1669
1624
|
primary: "deepseek/deepseek-chat",
|
|
@@ -1695,13 +1650,25 @@ var DEFAULT_ROUTING_CONFIG = {
|
|
|
1695
1650
|
},
|
|
1696
1651
|
COMPLEX: {
|
|
1697
1652
|
primary: "anthropic/claude-opus-4.5",
|
|
1698
|
-
// $
|
|
1699
|
-
fallback: [
|
|
1653
|
+
// $5/$25 - Latest Opus
|
|
1654
|
+
fallback: [
|
|
1655
|
+
"openai/gpt-5.2-pro",
|
|
1656
|
+
// $21/$168 - Latest GPT pro
|
|
1657
|
+
"google/gemini-3-pro-preview",
|
|
1658
|
+
// Latest Gemini
|
|
1659
|
+
"openai/gpt-5.2",
|
|
1660
|
+
"anthropic/claude-sonnet-4"
|
|
1661
|
+
]
|
|
1700
1662
|
},
|
|
1701
1663
|
REASONING: {
|
|
1702
1664
|
primary: "openai/o3",
|
|
1703
|
-
// $
|
|
1704
|
-
fallback: [
|
|
1665
|
+
// $2/$8 - Best value reasoning
|
|
1666
|
+
fallback: [
|
|
1667
|
+
"openai/o4-mini",
|
|
1668
|
+
// Latest o-series
|
|
1669
|
+
"anthropic/claude-opus-4.5",
|
|
1670
|
+
"google/gemini-3-pro-preview"
|
|
1671
|
+
]
|
|
1705
1672
|
}
|
|
1706
1673
|
},
|
|
1707
1674
|
// Agentic tier configs - models that excel at multi-step autonomous tasks
|
|
@@ -1722,13 +1689,23 @@ var DEFAULT_ROUTING_CONFIG = {
|
|
|
1722
1689
|
},
|
|
1723
1690
|
COMPLEX: {
|
|
1724
1691
|
primary: "anthropic/claude-sonnet-4",
|
|
1725
|
-
fallback: [
|
|
1726
|
-
|
|
1692
|
+
fallback: [
|
|
1693
|
+
"anthropic/claude-opus-4.5",
|
|
1694
|
+
// Latest Opus - best agentic
|
|
1695
|
+
"openai/gpt-5.2",
|
|
1696
|
+
"google/gemini-3-pro-preview",
|
|
1697
|
+
"xai/grok-4-0709"
|
|
1698
|
+
]
|
|
1727
1699
|
},
|
|
1728
1700
|
REASONING: {
|
|
1729
1701
|
primary: "anthropic/claude-sonnet-4",
|
|
1730
1702
|
// Strong tool use + reasoning for agentic tasks
|
|
1731
|
-
fallback: [
|
|
1703
|
+
fallback: [
|
|
1704
|
+
"anthropic/claude-opus-4.5",
|
|
1705
|
+
"xai/grok-4-fast-reasoning",
|
|
1706
|
+
"moonshot/kimi-k2.5",
|
|
1707
|
+
"deepseek/deepseek-reasoner"
|
|
1708
|
+
]
|
|
1732
1709
|
}
|
|
1733
1710
|
},
|
|
1734
1711
|
overrides: {
|
|
@@ -2512,6 +2489,16 @@ var FREE_MODEL = "nvidia/gpt-oss-120b";
|
|
|
2512
2489
|
var HEARTBEAT_INTERVAL_MS = 2e3;
|
|
2513
2490
|
var DEFAULT_REQUEST_TIMEOUT_MS = 18e4;
|
|
2514
2491
|
var DEFAULT_PORT = 8402;
|
|
2492
|
+
var PROXY_PORT = (() => {
|
|
2493
|
+
const envPort = process.env.BLOCKRUN_PROXY_PORT;
|
|
2494
|
+
if (envPort) {
|
|
2495
|
+
const parsed = parseInt(envPort, 10);
|
|
2496
|
+
if (!isNaN(parsed) && parsed > 0 && parsed < 65536) {
|
|
2497
|
+
return parsed;
|
|
2498
|
+
}
|
|
2499
|
+
}
|
|
2500
|
+
return DEFAULT_PORT;
|
|
2501
|
+
})();
|
|
2515
2502
|
var MAX_FALLBACK_ATTEMPTS = 3;
|
|
2516
2503
|
var HEALTH_CHECK_TIMEOUT_MS = 2e3;
|
|
2517
2504
|
var RATE_LIMIT_COOLDOWN_MS = 6e4;
|
|
@@ -2611,14 +2598,7 @@ function safeWrite(res, data) {
|
|
|
2611
2598
|
}
|
|
2612
2599
|
var BALANCE_CHECK_BUFFER = 1.5;
|
|
2613
2600
|
function getProxyPort() {
|
|
2614
|
-
|
|
2615
|
-
if (envPort) {
|
|
2616
|
-
const parsed = parseInt(envPort, 10);
|
|
2617
|
-
if (!isNaN(parsed) && parsed > 0 && parsed < 65536) {
|
|
2618
|
-
return parsed;
|
|
2619
|
-
}
|
|
2620
|
-
}
|
|
2621
|
-
return DEFAULT_PORT;
|
|
2601
|
+
return PROXY_PORT;
|
|
2622
2602
|
}
|
|
2623
2603
|
async function checkExistingProxy(port) {
|
|
2624
2604
|
const controller = new AbortController();
|
|
@@ -3926,25 +3906,34 @@ function injectModelsConfig(logger) {
|
|
|
3926
3906
|
{ id: "sonnet", alias: "sonnet" },
|
|
3927
3907
|
{ id: "opus", alias: "opus" },
|
|
3928
3908
|
{ id: "haiku", alias: "haiku" },
|
|
3929
|
-
{ id: "gpt", alias: "gpt" },
|
|
3930
3909
|
{ id: "gpt5", alias: "gpt5" },
|
|
3931
3910
|
{ id: "mini", alias: "mini" },
|
|
3932
|
-
{ id: "o3", alias: "o3" },
|
|
3933
|
-
{ id: "grok", alias: "grok" },
|
|
3934
3911
|
{ id: "grok-fast", alias: "grok-fast" },
|
|
3935
3912
|
{ id: "grok-code", alias: "grok-code" },
|
|
3936
3913
|
{ id: "deepseek", alias: "deepseek" },
|
|
3937
3914
|
{ id: "reasoner", alias: "reasoner" },
|
|
3938
3915
|
{ id: "kimi", alias: "kimi" },
|
|
3939
3916
|
{ id: "gemini", alias: "gemini" },
|
|
3940
|
-
{ id: "flash", alias: "flash" }
|
|
3941
|
-
|
|
3917
|
+
{ id: "flash", alias: "flash" }
|
|
3918
|
+
];
|
|
3919
|
+
const DEPRECATED_ALIASES = [
|
|
3920
|
+
"blockrun/nvidia",
|
|
3921
|
+
"blockrun/gpt",
|
|
3922
|
+
"blockrun/o3",
|
|
3923
|
+
"blockrun/grok"
|
|
3942
3924
|
];
|
|
3943
3925
|
if (!defaults.models) {
|
|
3944
3926
|
defaults.models = {};
|
|
3945
3927
|
needsWrite = true;
|
|
3946
3928
|
}
|
|
3947
3929
|
const allowlist = defaults.models;
|
|
3930
|
+
for (const deprecated of DEPRECATED_ALIASES) {
|
|
3931
|
+
if (allowlist[deprecated]) {
|
|
3932
|
+
delete allowlist[deprecated];
|
|
3933
|
+
logger.info(`Removed deprecated model alias: ${deprecated}`);
|
|
3934
|
+
needsWrite = true;
|
|
3935
|
+
}
|
|
3936
|
+
}
|
|
3948
3937
|
for (const m of KEY_MODEL_ALIASES) {
|
|
3949
3938
|
const fullId = `blockrun/${m.id}`;
|
|
3950
3939
|
if (!allowlist[fullId]) {
|