@blockrun/clawrouter 0.12.244 → 0.12.246
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 +28 -21
- package/dist/cli.js +275 -70
- package/dist/index.d.ts +9 -2
- package/dist/index.js +275 -70
- package/dist/router/index.js +48 -34
- package/docs/configuration.md +2 -9
- package/package.json +3 -3
- package/skills/clawrouter/SKILL.md +4 -4
- package/src/top-models.json +0 -1
package/dist/index.js
CHANGED
|
@@ -92,7 +92,6 @@ var init_top_models = __esm({
|
|
|
92
92
|
"deepseek/deepseek-v4-pro",
|
|
93
93
|
"deepseek/deepseek-chat",
|
|
94
94
|
"deepseek/deepseek-reasoner",
|
|
95
|
-
"free/deepseek-v4-flash",
|
|
96
95
|
"free/nemotron-3-nano-omni-30b-a3b-reasoning",
|
|
97
96
|
"free/mistral-nemotron",
|
|
98
97
|
"free/step-3.7-flash",
|
|
@@ -292,6 +291,14 @@ var init_models = __esm({
|
|
|
292
291
|
"gpt-5.6-sol": "openai/gpt-5.6-sol",
|
|
293
292
|
"gpt-5.6-terra": "openai/gpt-5.6-terra",
|
|
294
293
|
"gpt-5.6-luna": "openai/gpt-5.6-luna",
|
|
294
|
+
// Pro reasoning tiers (2026-08-03). Explicit pins only — the generic
|
|
295
|
+
// shorthands above stay on standard Terra.
|
|
296
|
+
"gpt-5.6-sol-pro": "openai/gpt-5.6-sol-pro",
|
|
297
|
+
"gpt-5.6-terra-pro": "openai/gpt-5.6-terra-pro",
|
|
298
|
+
"gpt-5.6-luna-pro": "openai/gpt-5.6-luna-pro",
|
|
299
|
+
"sol-pro": "openai/gpt-5.6-sol-pro",
|
|
300
|
+
"terra-pro": "openai/gpt-5.6-terra-pro",
|
|
301
|
+
"luna-pro": "openai/gpt-5.6-luna-pro",
|
|
295
302
|
"gpt-5.5": "openai/gpt-5.5",
|
|
296
303
|
"gpt-5.5-pro": "openai/gpt-5.5-pro",
|
|
297
304
|
// ChatGPT Instant. `chat-latest` is a rolling upstream id — pinning it means
|
|
@@ -343,6 +350,20 @@ var init_models = __esm({
|
|
|
343
350
|
"qwen3.7-max": "qwen/qwen3.7-max",
|
|
344
351
|
"qwen-3.7-max": "qwen/qwen3.7-max",
|
|
345
352
|
"qwen3-7-max": "qwen/qwen3.7-max",
|
|
353
|
+
// Plus/Flash tiers (2026-08-03) — explicit pins, same rule as Max.
|
|
354
|
+
"qwen3.7-plus": "qwen/qwen3.7-plus",
|
|
355
|
+
"qwen-3.7-plus": "qwen/qwen3.7-plus",
|
|
356
|
+
"qwen3.7-flash": "qwen/qwen3.7-flash",
|
|
357
|
+
"qwen-3.7-flash": "qwen/qwen3.7-flash",
|
|
358
|
+
// Tencent + Xiaomi (2026-07-25) — each maker has exactly one model, so the
|
|
359
|
+
// bare maker names are safe to bind.
|
|
360
|
+
hy3: "tencent/hy3",
|
|
361
|
+
tencent: "tencent/hy3",
|
|
362
|
+
hunyuan: "tencent/hy3",
|
|
363
|
+
mimo: "xiaomi/mimo-v2.5-pro",
|
|
364
|
+
"mimo-v2.5-pro": "xiaomi/mimo-v2.5-pro",
|
|
365
|
+
"mimo-v2.5": "xiaomi/mimo-v2.5-pro",
|
|
366
|
+
xiaomi: "xiaomi/mimo-v2.5-pro",
|
|
346
367
|
// Google
|
|
347
368
|
// gemini-3-pro-preview delisted by Google 2026-06-06 — mirror the gateway
|
|
348
369
|
// redirect to its successor so pinned callers land on 3.1-pro, not an error.
|
|
@@ -358,7 +379,10 @@ var init_models = __esm({
|
|
|
358
379
|
flash: "google/gemini-2.5-flash",
|
|
359
380
|
"gemini-3.1-pro-preview": "google/gemini-3.1-pro",
|
|
360
381
|
"google/gemini-3.1-pro-preview": "google/gemini-3.1-pro",
|
|
382
|
+
"gemini-3.6-flash": "google/gemini-3.6-flash",
|
|
383
|
+
"gemini-3.6": "google/gemini-3.6-flash",
|
|
361
384
|
"gemini-3.5-flash": "google/gemini-3.5-flash",
|
|
385
|
+
"gemini-3.5-flash-lite": "google/gemini-3.5-flash-lite",
|
|
362
386
|
"gemini-3.1-flash-lite": "google/gemini-3.1-flash-lite",
|
|
363
387
|
"gemini-2.5-flash-lite": "google/gemini-2.5-flash-lite",
|
|
364
388
|
// xAI — grok-4.3 is the public flagship since 2026-06-04 (grok-3 and the
|
|
@@ -394,12 +418,17 @@ var init_models = __esm({
|
|
|
394
418
|
"gpt-20b": "free/gpt-oss-20b",
|
|
395
419
|
"nvidia/gpt-oss-120b": "free/gpt-oss-120b",
|
|
396
420
|
"nvidia/gpt-oss-20b": "free/gpt-oss-20b",
|
|
397
|
-
// deepseek family
|
|
398
|
-
//
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
421
|
+
// deepseek free family: v4-flash EOL'd 2026-08-12 (HTTP 410 from NVIDIA on both
|
|
422
|
+
// probe passes; prod gate fired [ALERT][free-model-dead] kind=gone twice that
|
|
423
|
+
// morning). The whole nvidia/deepseek-* family is now dead upstream — blockrun
|
|
424
|
+
// hid flash and retargeted v3.2/v4-pro (whose redirects chained through flash)
|
|
425
|
+
// straight to gpt-oss-120b. Ids naming v4-flash itself keep the real id (the
|
|
426
|
+
// gateway redirects them); the v3.2/v4-pro ids follow blockrun's retarget
|
|
427
|
+
// rather than chaining through a second dead model.
|
|
428
|
+
"nvidia/deepseek-v3.2": "free/gpt-oss-120b",
|
|
429
|
+
"free/deepseek-v3.2": "free/gpt-oss-120b",
|
|
430
|
+
"nvidia/deepseek-v4-pro": "free/gpt-oss-120b",
|
|
431
|
+
"free/deepseek-v4-pro": "free/gpt-oss-120b",
|
|
403
432
|
"nvidia/deepseek-v4-flash": "free/deepseek-v4-flash",
|
|
404
433
|
"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning": "free/nemotron-3-nano-omni-30b-a3b-reasoning",
|
|
405
434
|
// qwen3-coder-480b retired (NVIDIA EOL 2026-06-14). Its server-side redirect used
|
|
@@ -441,13 +470,16 @@ var init_models = __esm({
|
|
|
441
470
|
"mistral-large-3-675b": "free/mistral-large-3-675b",
|
|
442
471
|
"qwen3.5-122b": "free/qwen3.5-122b-a10b",
|
|
443
472
|
"qwen3-122b": "free/qwen3.5-122b-a10b",
|
|
444
|
-
// Free model shorthand aliases
|
|
445
|
-
"
|
|
446
|
-
|
|
447
|
-
//
|
|
473
|
+
// Free model shorthand aliases. v4-flash EOL'd 2026-08-12 — no free DeepSeek
|
|
474
|
+
// is left anywhere, so the generic "a free deepseek" shorthand follows the
|
|
475
|
+
// gateway's retarget (blockrun's /free-deepseek page points at gpt-oss-120b
|
|
476
|
+
// too). Shorthands naming v4-flash itself stay on the real id — the gateway
|
|
477
|
+
// redirects them, same treatment as seed-oss/mistral-large pins.
|
|
478
|
+
"deepseek-free": "free/gpt-oss-120b",
|
|
479
|
+
"deepseek-v4-pro": "free/gpt-oss-120b",
|
|
480
|
+
// free shorthand; pro dead upstream (410)
|
|
448
481
|
"deepseek-v4-flash": "free/deepseek-v4-flash",
|
|
449
|
-
"v4-pro": "free/
|
|
450
|
-
// V4 Pro NVIDIA hung → flash
|
|
482
|
+
"v4-pro": "free/gpt-oss-120b",
|
|
451
483
|
"v4-flash": "free/deepseek-v4-flash",
|
|
452
484
|
"mistral-free": "free/mistral-nemotron",
|
|
453
485
|
// mistral-large-3-675b EOL'd 2026-07-28 → last live free Mistral (blockrun demoted its /free-mistral primary the same way)
|
|
@@ -527,6 +559,10 @@ var init_models = __esm({
|
|
|
527
559
|
banana: "google/nano-banana",
|
|
528
560
|
"banana-pro": "google/nano-banana-pro",
|
|
529
561
|
"nano-banana-pro": "google/nano-banana-pro",
|
|
562
|
+
// Nano Banana 2 (Gemini 3.1 Flash imagegen, 2026-08-03). Explicit pins —
|
|
563
|
+
// bare `nano-banana`/`banana` stay on the original.
|
|
564
|
+
"nano-banana-2": "google/nano-banana-2",
|
|
565
|
+
"banana-2": "google/nano-banana-2",
|
|
530
566
|
seedream: "bytedance/seedream-5-pro",
|
|
531
567
|
"grok-imagine": "xai/grok-imagine-image",
|
|
532
568
|
"grok-imagine-pro": "xai/grok-imagine-image-pro",
|
|
@@ -543,7 +579,12 @@ var init_models = __esm({
|
|
|
543
579
|
"seedance-2-fast": "bytedance/seedance-2.0-fast",
|
|
544
580
|
"seedance-2": "bytedance/seedance-2.0",
|
|
545
581
|
"seedance-2.5": "bytedance/seedance-2.5",
|
|
546
|
-
"seedance-2-5": "bytedance/seedance-2.5"
|
|
582
|
+
"seedance-2-5": "bytedance/seedance-2.5",
|
|
583
|
+
// Seedance 2.0 Mini (2026-08-12): 720p + synced audio at half the flagship
|
|
584
|
+
// rate. Note it is NOT cheaper than 1.5-pro, so bare `seedance` stays put.
|
|
585
|
+
"seedance-2-mini": "bytedance/seedance-2.0-mini",
|
|
586
|
+
"seedance-2.0-mini": "bytedance/seedance-2.0-mini",
|
|
587
|
+
"seedance-mini": "bytedance/seedance-2.0-mini"
|
|
547
588
|
};
|
|
548
589
|
BLOCKRUN_MODELS = [
|
|
549
590
|
// Smart routing meta-models — proxy replaces with actual model
|
|
@@ -651,11 +692,12 @@ var init_models = __esm({
|
|
|
651
692
|
toolCalling: true
|
|
652
693
|
},
|
|
653
694
|
{
|
|
695
|
+
// Terra/Luna repriced 2026-07-30 (OpenAI price cut, blockrun #326).
|
|
654
696
|
id: "openai/gpt-5.6-terra",
|
|
655
697
|
name: "GPT-5.6 Terra",
|
|
656
698
|
version: "5.6",
|
|
657
|
-
inputPrice: 2
|
|
658
|
-
outputPrice:
|
|
699
|
+
inputPrice: 2,
|
|
700
|
+
outputPrice: 12,
|
|
659
701
|
contextWindow: 105e4,
|
|
660
702
|
maxOutput: 128e3,
|
|
661
703
|
reasoning: true,
|
|
@@ -667,10 +709,52 @@ var init_models = __esm({
|
|
|
667
709
|
id: "openai/gpt-5.6-luna",
|
|
668
710
|
name: "GPT-5.6 Luna",
|
|
669
711
|
version: "5.6",
|
|
712
|
+
inputPrice: 0.2,
|
|
713
|
+
outputPrice: 1.2,
|
|
714
|
+
contextWindow: 105e4,
|
|
715
|
+
maxOutput: 128e3,
|
|
716
|
+
vision: true,
|
|
717
|
+
agentic: true,
|
|
718
|
+
toolCalling: true
|
|
719
|
+
},
|
|
720
|
+
// GPT-5.6 Pro tiers (blockrun #329, 2026-08-03): each base tier with pro
|
|
721
|
+
// reasoning mode. Terra Pro lands at half the standard Terra rate; Luna Pro
|
|
722
|
+
// is the budget deep-reasoning tier.
|
|
723
|
+
{
|
|
724
|
+
id: "openai/gpt-5.6-sol-pro",
|
|
725
|
+
name: "GPT-5.6 Sol Pro",
|
|
726
|
+
version: "5.6",
|
|
727
|
+
inputPrice: 5,
|
|
728
|
+
outputPrice: 30,
|
|
729
|
+
contextWindow: 105e4,
|
|
730
|
+
maxOutput: 128e3,
|
|
731
|
+
reasoning: true,
|
|
732
|
+
vision: true,
|
|
733
|
+
agentic: true,
|
|
734
|
+
toolCalling: true
|
|
735
|
+
},
|
|
736
|
+
{
|
|
737
|
+
id: "openai/gpt-5.6-terra-pro",
|
|
738
|
+
name: "GPT-5.6 Terra Pro",
|
|
739
|
+
version: "5.6",
|
|
670
740
|
inputPrice: 1,
|
|
671
741
|
outputPrice: 6,
|
|
672
742
|
contextWindow: 105e4,
|
|
673
743
|
maxOutput: 128e3,
|
|
744
|
+
reasoning: true,
|
|
745
|
+
vision: true,
|
|
746
|
+
agentic: true,
|
|
747
|
+
toolCalling: true
|
|
748
|
+
},
|
|
749
|
+
{
|
|
750
|
+
id: "openai/gpt-5.6-luna-pro",
|
|
751
|
+
name: "GPT-5.6 Luna Pro",
|
|
752
|
+
version: "5.6",
|
|
753
|
+
inputPrice: 0.1,
|
|
754
|
+
outputPrice: 0.6,
|
|
755
|
+
contextWindow: 105e4,
|
|
756
|
+
maxOutput: 128e3,
|
|
757
|
+
reasoning: true,
|
|
674
758
|
vision: true,
|
|
675
759
|
agentic: true,
|
|
676
760
|
toolCalling: true
|
|
@@ -1074,19 +1158,45 @@ var init_models = __esm({
|
|
|
1074
1158
|
toolCalling: true
|
|
1075
1159
|
},
|
|
1076
1160
|
{
|
|
1077
|
-
//
|
|
1078
|
-
// 2026-
|
|
1161
|
+
// Newest-generation Flash with built-in thinking mode (blockrun #329,
|
|
1162
|
+
// 2026-08-03). 17% cheaper output than 3.5 Flash.
|
|
1163
|
+
id: "google/gemini-3.6-flash",
|
|
1164
|
+
name: "Gemini 3.6 Flash",
|
|
1165
|
+
version: "3.6",
|
|
1166
|
+
inputPrice: 1.5,
|
|
1167
|
+
outputPrice: 7.5,
|
|
1168
|
+
contextWindow: 1048576,
|
|
1169
|
+
maxOutput: 65536,
|
|
1170
|
+
reasoning: true,
|
|
1171
|
+
vision: true,
|
|
1172
|
+
toolCalling: true
|
|
1173
|
+
},
|
|
1174
|
+
{
|
|
1175
|
+
// Repriced 0.5/3.0 → 1.5/9.0 (blockrun #304: it was billed at 1/3 of
|
|
1176
|
+
// Google's real rate).
|
|
1079
1177
|
id: "google/gemini-3.5-flash",
|
|
1080
1178
|
name: "Gemini 3.5 Flash",
|
|
1081
1179
|
version: "3.5",
|
|
1082
|
-
inputPrice:
|
|
1083
|
-
outputPrice:
|
|
1180
|
+
inputPrice: 1.5,
|
|
1181
|
+
outputPrice: 9,
|
|
1084
1182
|
contextWindow: 1048576,
|
|
1085
1183
|
maxOutput: 65536,
|
|
1086
1184
|
reasoning: true,
|
|
1087
1185
|
vision: true,
|
|
1088
1186
|
toolCalling: true
|
|
1089
1187
|
},
|
|
1188
|
+
{
|
|
1189
|
+
// Ultra-fast lightweight tier with thinking mode (blockrun #329).
|
|
1190
|
+
id: "google/gemini-3.5-flash-lite",
|
|
1191
|
+
name: "Gemini 3.5 Flash Lite",
|
|
1192
|
+
version: "3.5",
|
|
1193
|
+
inputPrice: 0.3,
|
|
1194
|
+
outputPrice: 2.5,
|
|
1195
|
+
contextWindow: 1048576,
|
|
1196
|
+
maxOutput: 65536,
|
|
1197
|
+
reasoning: true,
|
|
1198
|
+
toolCalling: true
|
|
1199
|
+
},
|
|
1090
1200
|
{
|
|
1091
1201
|
id: "google/gemini-3-flash-preview",
|
|
1092
1202
|
name: "Gemini 3 Flash Preview",
|
|
@@ -1143,12 +1253,14 @@ var init_models = __esm({
|
|
|
1143
1253
|
},
|
|
1144
1254
|
// DeepSeek — V4 family (2026-04-24). The legacy deepseek-chat/reasoner
|
|
1145
1255
|
// aliases are served upstream as V4 Flash non-thinking / thinking modes.
|
|
1256
|
+
// Repriced 0.20/0.40 → 0.14/0.28 (blockrun #354: DeepSeek's published
|
|
1257
|
+
// deepseek-v4-flash rate; the old numbers were 1.43x the real rate).
|
|
1146
1258
|
{
|
|
1147
1259
|
id: "deepseek/deepseek-chat",
|
|
1148
1260
|
name: "DeepSeek V4 Flash Chat",
|
|
1149
1261
|
version: "4-flash",
|
|
1150
|
-
inputPrice: 0.
|
|
1151
|
-
outputPrice: 0.
|
|
1262
|
+
inputPrice: 0.14,
|
|
1263
|
+
outputPrice: 0.28,
|
|
1152
1264
|
contextWindow: 1e6,
|
|
1153
1265
|
maxOutput: 8192,
|
|
1154
1266
|
toolCalling: true
|
|
@@ -1157,8 +1269,8 @@ var init_models = __esm({
|
|
|
1157
1269
|
id: "deepseek/deepseek-reasoner",
|
|
1158
1270
|
name: "DeepSeek V4 Flash Reasoner",
|
|
1159
1271
|
version: "4-flash",
|
|
1160
|
-
inputPrice: 0.
|
|
1161
|
-
outputPrice: 0.
|
|
1272
|
+
inputPrice: 0.14,
|
|
1273
|
+
outputPrice: 0.28,
|
|
1162
1274
|
contextWindow: 1e6,
|
|
1163
1275
|
maxOutput: 8192,
|
|
1164
1276
|
reasoning: true,
|
|
@@ -1237,6 +1349,32 @@ var init_models = __esm({
|
|
|
1237
1349
|
agentic: true,
|
|
1238
1350
|
toolCalling: true
|
|
1239
1351
|
},
|
|
1352
|
+
// Qwen3.7 Plus/Flash (blockrun #329, 2026-08-03): the balanced and
|
|
1353
|
+
// latency tiers under Max. Plus genuinely caps output at 131072 while
|
|
1354
|
+
// Flash and Max cap at 65536 (endpoint-probed upstream).
|
|
1355
|
+
{
|
|
1356
|
+
id: "qwen/qwen3.7-plus",
|
|
1357
|
+
name: "Qwen3.7 Plus",
|
|
1358
|
+
version: "3.7-plus",
|
|
1359
|
+
inputPrice: 0.32,
|
|
1360
|
+
outputPrice: 1.28,
|
|
1361
|
+
contextWindow: 1e6,
|
|
1362
|
+
maxOutput: 131072,
|
|
1363
|
+
reasoning: true,
|
|
1364
|
+
agentic: true,
|
|
1365
|
+
toolCalling: true
|
|
1366
|
+
},
|
|
1367
|
+
{
|
|
1368
|
+
id: "qwen/qwen3.7-flash",
|
|
1369
|
+
name: "Qwen3.7 Flash",
|
|
1370
|
+
version: "3.7-flash",
|
|
1371
|
+
inputPrice: 0.03,
|
|
1372
|
+
outputPrice: 0.13,
|
|
1373
|
+
contextWindow: 1e6,
|
|
1374
|
+
maxOutput: 65536,
|
|
1375
|
+
reasoning: true,
|
|
1376
|
+
toolCalling: true
|
|
1377
|
+
},
|
|
1240
1378
|
// Kimi K2.6 — superseded by K2.7 (2026-06-13), hidden on BlockRun but still routable.
|
|
1241
1379
|
{
|
|
1242
1380
|
id: "moonshot/kimi-k2.6",
|
|
@@ -1448,6 +1586,34 @@ var init_models = __esm({
|
|
|
1448
1586
|
agentic: true,
|
|
1449
1587
|
toolCalling: true
|
|
1450
1588
|
},
|
|
1589
|
+
// Tencent + Xiaomi (blockrun 2026-07-25): the two largest real demand gaps
|
|
1590
|
+
// in the catalog — Hy3 held the #1 usage slot on the biggest public
|
|
1591
|
+
// aggregator for 19 days; MiMo ran ~22% weekly share in April. Both are
|
|
1592
|
+
// reasoning models resold via blockrun's OpenRouter pool. toolCalling
|
|
1593
|
+
// LIVE-VERIFIED 2026-08-12: both returned a structured tool_calls array
|
|
1594
|
+
// (name + valid JSON args, finish_reason "tool_calls") through the gateway.
|
|
1595
|
+
{
|
|
1596
|
+
id: "tencent/hy3",
|
|
1597
|
+
name: "Tencent Hy3",
|
|
1598
|
+
version: "hy3",
|
|
1599
|
+
inputPrice: 0.132,
|
|
1600
|
+
outputPrice: 0.528,
|
|
1601
|
+
contextWindow: 262144,
|
|
1602
|
+
maxOutput: 128e3,
|
|
1603
|
+
reasoning: true,
|
|
1604
|
+
toolCalling: true
|
|
1605
|
+
},
|
|
1606
|
+
{
|
|
1607
|
+
id: "xiaomi/mimo-v2.5-pro",
|
|
1608
|
+
name: "Xiaomi MiMo-V2.5 Pro",
|
|
1609
|
+
version: "v2.5-pro",
|
|
1610
|
+
inputPrice: 0.435,
|
|
1611
|
+
outputPrice: 0.87,
|
|
1612
|
+
contextWindow: 1048576,
|
|
1613
|
+
maxOutput: 131072,
|
|
1614
|
+
reasoning: true,
|
|
1615
|
+
toolCalling: true
|
|
1616
|
+
},
|
|
1451
1617
|
// MiniMax
|
|
1452
1618
|
{
|
|
1453
1619
|
id: "minimax/minimax-m3",
|
|
@@ -1521,11 +1687,13 @@ var init_models = __esm({
|
|
|
1521
1687
|
maxOutput: 16384
|
|
1522
1688
|
},
|
|
1523
1689
|
{
|
|
1524
|
-
// V4 Flash: 284B / 13B active MoE, 1M context.
|
|
1525
|
-
//
|
|
1526
|
-
//
|
|
1527
|
-
//
|
|
1528
|
-
//
|
|
1690
|
+
// V4 Flash: 284B / 13B active MoE, 1M context. EOL'd 2026-08-12 — NVIDIA
|
|
1691
|
+
// published 410 Gone ("has reached its end of life") on both probe passes
|
|
1692
|
+
// and blockrun's prod gate fired [ALERT][free-model-dead] kind=gone twice
|
|
1693
|
+
// that morning. The whole nvidia/deepseek-* family is dead upstream; there
|
|
1694
|
+
// is no free DeepSeek left anywhere. Blockrun hid it and redirects calls to
|
|
1695
|
+
// gpt-oss-120b. Entry kept so explicit pins stay routable; off the picker,
|
|
1696
|
+
// the FREE_MODELS cascade, and the router fallback chains.
|
|
1529
1697
|
id: "free/deepseek-v4-flash",
|
|
1530
1698
|
name: "[Free] DeepSeek V4 Flash",
|
|
1531
1699
|
version: "v4-flash",
|
|
@@ -1609,7 +1777,8 @@ var init_models = __esm({
|
|
|
1609
1777
|
// 2026-06-16: BlockRun's 2026-06-14 free-tier refresh (self-healing health gate
|
|
1610
1778
|
// + probe-verified lineup, blockrun commit 5817ecd) added these live NVIDIA free
|
|
1611
1779
|
// models. Status per blockrun's 2026-07-17 live re-probe: qwen3-coder-480b and
|
|
1612
|
-
// glm-4.7 stay dead (server-redirected); deepseek-v4-flash recovered
|
|
1780
|
+
// glm-4.7 stay dead (server-redirected); deepseek-v4-flash recovered then
|
|
1781
|
+
// EOL'd for good 2026-08-12 (see above).
|
|
1613
1782
|
{
|
|
1614
1783
|
// Qwen3-Next 80B (A3B active MoE): 262K context. DIED in the 2026-07-17
|
|
1615
1784
|
// re-probe (">60s / DEGRADED") — hidden upstream, gateway redirects pinned
|
|
@@ -1714,11 +1883,12 @@ var init_models = __esm({
|
|
|
1714
1883
|
},
|
|
1715
1884
|
{
|
|
1716
1885
|
// Flat-rate launch promo ended 2026-06-06 — backend bills per-token now.
|
|
1886
|
+
// Repriced 0.60/1.92 → 1.00/3.20 (blockrun #354 correction).
|
|
1717
1887
|
id: "zai/glm-5",
|
|
1718
1888
|
name: "GLM-5",
|
|
1719
1889
|
version: "5",
|
|
1720
|
-
inputPrice:
|
|
1721
|
-
outputPrice:
|
|
1890
|
+
inputPrice: 1,
|
|
1891
|
+
outputPrice: 3.2,
|
|
1722
1892
|
contextWindow: 2e5,
|
|
1723
1893
|
maxOutput: 128e3,
|
|
1724
1894
|
reasoning: true,
|
|
@@ -35215,6 +35385,21 @@ function applyPromotions(tierConfigs, promotions, profile, now2 = /* @__PURE__ *
|
|
|
35215
35385
|
}
|
|
35216
35386
|
return result;
|
|
35217
35387
|
}
|
|
35388
|
+
function applyUnavailableModels(tierConfigs, unavailableModels) {
|
|
35389
|
+
if (!unavailableModels || unavailableModels.length === 0) return tierConfigs;
|
|
35390
|
+
const dead = new Set(unavailableModels);
|
|
35391
|
+
let result = tierConfigs;
|
|
35392
|
+
for (const tier of Object.keys(tierConfigs)) {
|
|
35393
|
+
const config = tierConfigs[tier];
|
|
35394
|
+
const alive = [config.primary, ...config.fallback].filter((model) => !dead.has(model));
|
|
35395
|
+
if (alive.length === 0 || alive[0] === config.primary && alive.length === config.fallback.length + 1) {
|
|
35396
|
+
continue;
|
|
35397
|
+
}
|
|
35398
|
+
if (result === tierConfigs) result = { ...tierConfigs };
|
|
35399
|
+
result[tier] = { primary: alive[0], fallback: alive.slice(1) };
|
|
35400
|
+
}
|
|
35401
|
+
return result;
|
|
35402
|
+
}
|
|
35218
35403
|
function getStrategy(name) {
|
|
35219
35404
|
const strategy = registry.get(name);
|
|
35220
35405
|
if (!strategy) {
|
|
@@ -35912,6 +36097,7 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
35912
36097
|
profile = useAgenticTiers ? "agentic" : "auto";
|
|
35913
36098
|
}
|
|
35914
36099
|
tierConfigs = applyPromotions(tierConfigs, config.promotions, profile, options.now);
|
|
36100
|
+
tierConfigs = applyUnavailableModels(tierConfigs, options.unavailableModels);
|
|
35915
36101
|
const agenticScoreValue = ruleResult.agenticScore;
|
|
35916
36102
|
if (estimatedTokens > config.overrides.maxTokensForceComplex) {
|
|
35917
36103
|
const decision2 = selectModel(
|
|
@@ -36040,18 +36226,6 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
36040
36226
|
supportsTools: false,
|
|
36041
36227
|
supportsVision: false
|
|
36042
36228
|
},
|
|
36043
|
-
"free/gpt-oss-120b": {
|
|
36044
|
-
contextWindow: 128e3,
|
|
36045
|
-
maxOutputTokens: 16384,
|
|
36046
|
-
supportsTools: false,
|
|
36047
|
-
supportsVision: false
|
|
36048
|
-
},
|
|
36049
|
-
"free/gpt-oss-20b": {
|
|
36050
|
-
contextWindow: 128e3,
|
|
36051
|
-
maxOutputTokens: 16384,
|
|
36052
|
-
supportsTools: false,
|
|
36053
|
-
supportsVision: false
|
|
36054
|
-
},
|
|
36055
36229
|
"free/seed-oss-36b": {
|
|
36056
36230
|
contextWindow: 131072,
|
|
36057
36231
|
maxOutputTokens: 16384,
|
|
@@ -36124,6 +36298,18 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
36124
36298
|
supportsTools: true,
|
|
36125
36299
|
supportsVision: true
|
|
36126
36300
|
},
|
|
36301
|
+
"nvidia/nemotron-nano-9b-v2": {
|
|
36302
|
+
contextWindow: 131072,
|
|
36303
|
+
maxOutputTokens: 16384,
|
|
36304
|
+
supportsTools: false,
|
|
36305
|
+
supportsVision: false
|
|
36306
|
+
},
|
|
36307
|
+
"nvidia/step-3.7-flash": {
|
|
36308
|
+
contextWindow: 131072,
|
|
36309
|
+
maxOutputTokens: 16384,
|
|
36310
|
+
supportsTools: false,
|
|
36311
|
+
supportsVision: false
|
|
36312
|
+
},
|
|
36127
36313
|
"openai/gpt-4.1": {
|
|
36128
36314
|
contextWindow: 128e3,
|
|
36129
36315
|
maxOutputTokens: 16384,
|
|
@@ -36597,9 +36783,12 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
36597
36783
|
const targetTier = (features.taskType === "reasoning_mcq" || features.taskType === "reasoning_math") && (base3.tier === "SIMPLE" || base3.tier === "MEDIUM") ? "REASONING" : base3.tier;
|
|
36598
36784
|
const tierConfig = tierConfigs[targetTier];
|
|
36599
36785
|
const configuredCandidates = tierConfig ? getFallbackChain(targetTier, tierConfigs) : [];
|
|
36786
|
+
const unavailable = new Set(options.unavailableModels ?? []);
|
|
36600
36787
|
const chain3 = [
|
|
36601
36788
|
.../* @__PURE__ */ new Set([...configuredCandidates, ...evidenceCandidates(features.taskType)])
|
|
36602
|
-
].filter(
|
|
36789
|
+
].filter(
|
|
36790
|
+
(model2) => typeof model2 === "string" && model2.length > 0 && !unavailable.has(model2)
|
|
36791
|
+
);
|
|
36603
36792
|
const eligible = chain3.filter(
|
|
36604
36793
|
(model2) => isEligible(model2, features, maxOutputTokens, options)
|
|
36605
36794
|
);
|
|
@@ -36676,13 +36865,7 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
36676
36865
|
...eligibleCandidates.filter(
|
|
36677
36866
|
(model2) => !scoredModels.includes(model2) && !webResearchFallbackOrder.includes(model2)
|
|
36678
36867
|
)
|
|
36679
|
-
] :
|
|
36680
|
-
...scoredModels,
|
|
36681
|
-
...eligibleCandidates.filter((model2) => !scoredModels.includes(model2))
|
|
36682
|
-
] : [
|
|
36683
|
-
...scoredModels,
|
|
36684
|
-
...eligibleCandidates.filter((model2) => !scoredModels.includes(model2))
|
|
36685
|
-
];
|
|
36868
|
+
] : [...scoredModels, ...eligibleCandidates.filter((model2) => !scoredModels.includes(model2))];
|
|
36686
36869
|
const model = ranked[0] ?? base3.model;
|
|
36687
36870
|
const selectedTierConfigs = {
|
|
36688
36871
|
...tierConfigs,
|
|
@@ -37794,8 +37977,8 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
37794
37977
|
// $0.20/$1.25, 1M context
|
|
37795
37978
|
"xai/grok-4-fast-non-reasoning",
|
|
37796
37979
|
// 1,143ms, $0.20/$0.50 — fast fallback
|
|
37797
|
-
"
|
|
37798
|
-
//
|
|
37980
|
+
"nvidia/step-3.7-flash"
|
|
37981
|
+
// FREE backstop — new NVIDIA free tier (gpt-oss-120b now 400s; probed 2026-08-21)
|
|
37799
37982
|
]
|
|
37800
37983
|
},
|
|
37801
37984
|
MEDIUM: {
|
|
@@ -37868,15 +38051,15 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
37868
38051
|
// Eco tier configs - absolute cheapest (blockrun/eco)
|
|
37869
38052
|
ecoTiers: {
|
|
37870
38053
|
SIMPLE: {
|
|
37871
|
-
primary: "
|
|
37872
|
-
// FREE! $0.00/$0.00 —
|
|
38054
|
+
primary: "nvidia/step-3.7-flash",
|
|
38055
|
+
// FREE! $0.00/$0.00 — new NVIDIA free tier flagship
|
|
37873
38056
|
fallback: [
|
|
37874
|
-
"
|
|
37875
|
-
// FREE —
|
|
37876
|
-
|
|
37877
|
-
//
|
|
37878
|
-
//
|
|
37879
|
-
//
|
|
38057
|
+
"nvidia/nemotron-nano-9b-v2",
|
|
38058
|
+
// FREE — compact + fast (~0.7s), high-volume light tasks
|
|
38059
|
+
// This head keeps rotting with NVIDIA's free hosting: deepseek-v4-flash
|
|
38060
|
+
// (410, 2026-08-12), seed-oss-36b (410, 2026-08-03), then gpt-oss-120b/20b
|
|
38061
|
+
// (400 Unknown model, probed 2026-08-21). Each retirement retargets the
|
|
38062
|
+
// two free rungs to the current free tier; the paid rungs below never move.
|
|
37880
38063
|
"google/gemini-3.1-flash-lite",
|
|
37881
38064
|
// $0.25/$1.50 — newest flash-lite
|
|
37882
38065
|
"openai/gpt-5.4-nano",
|
|
@@ -37993,8 +38176,8 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
37993
38176
|
"openai/gpt-5.3-codex",
|
|
37994
38177
|
"deepseek/deepseek-chat",
|
|
37995
38178
|
// Cheap, reliable
|
|
37996
|
-
"
|
|
37997
|
-
// NVIDIA free ultimate backstop (was
|
|
38179
|
+
"nvidia/step-3.7-flash"
|
|
38180
|
+
// NVIDIA free ultimate backstop (was gpt-oss-120b; 400s since ~2026-08)
|
|
37998
38181
|
]
|
|
37999
38182
|
},
|
|
38000
38183
|
REASONING: {
|
|
@@ -38083,8 +38266,8 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
38083
38266
|
// Previous flagship — 6,213ms, reliable
|
|
38084
38267
|
"deepseek/deepseek-chat",
|
|
38085
38268
|
// 1,431ms — cheap, reliable
|
|
38086
|
-
"
|
|
38087
|
-
// NVIDIA free ultimate backstop (was
|
|
38269
|
+
"nvidia/step-3.7-flash"
|
|
38270
|
+
// NVIDIA free ultimate backstop (was gpt-oss-120b; 400s since ~2026-08)
|
|
38088
38271
|
]
|
|
38089
38272
|
},
|
|
38090
38273
|
REASONING: {
|
|
@@ -57622,6 +57805,14 @@ Then run: npx @blockrun/clawrouter`
|
|
|
57622
57805
|
solanaAddress = await getSolanaAddress(derived.solanaPrivateKeyBytes);
|
|
57623
57806
|
} catch {
|
|
57624
57807
|
}
|
|
57808
|
+
let solanaDefaultSaved = false;
|
|
57809
|
+
if (solanaAddress) {
|
|
57810
|
+
try {
|
|
57811
|
+
await savePaymentChain("solana");
|
|
57812
|
+
solanaDefaultSaved = true;
|
|
57813
|
+
} catch {
|
|
57814
|
+
}
|
|
57815
|
+
}
|
|
57625
57816
|
console.log(`[ClawRouter]`);
|
|
57626
57817
|
console.log(`[ClawRouter] \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550`);
|
|
57627
57818
|
console.log(`[ClawRouter] NEW WALLET GENERATED \u2014 BACK UP YOUR KEY NOW`);
|
|
@@ -57634,6 +57825,12 @@ Then run: npx @blockrun/clawrouter`
|
|
|
57634
57825
|
console.log(`[ClawRouter] Mnemonic : ${MNEMONIC_FILE}`);
|
|
57635
57826
|
console.log(`[ClawRouter]`);
|
|
57636
57827
|
console.log(`[ClawRouter] Both EVM (Base) and Solana wallets are ready.`);
|
|
57828
|
+
if (solanaDefaultSaved) {
|
|
57829
|
+
console.log(
|
|
57830
|
+
`[ClawRouter] Default payment chain: Solana \u2014 fund the Solana address above with USDC.`
|
|
57831
|
+
);
|
|
57832
|
+
console.log(`[ClawRouter] To switch to Base, run in OpenClaw: /wallet base`);
|
|
57833
|
+
}
|
|
57637
57834
|
console.log(`[ClawRouter] To back up, run in OpenClaw:`);
|
|
57638
57835
|
console.log(`[ClawRouter] /wallet export`);
|
|
57639
57836
|
console.log(`[ClawRouter]`);
|
|
@@ -92407,8 +92604,6 @@ var init_proxy = __esm({
|
|
|
92407
92604
|
FREE_MODELS = /* @__PURE__ */ new Set([
|
|
92408
92605
|
"free/gpt-oss-120b",
|
|
92409
92606
|
"free/gpt-oss-20b",
|
|
92410
|
-
"free/deepseek-v4-flash",
|
|
92411
|
-
// 1M ctx; slow (~10 tok/s, 07-28 probe) but completes
|
|
92412
92607
|
"free/mistral-nemotron",
|
|
92413
92608
|
// strong instruction following
|
|
92414
92609
|
"free/step-3.7-flash",
|
|
@@ -92505,6 +92700,8 @@ var init_proxy = __esm({
|
|
|
92505
92700
|
sizes: { "1024x1024": 0.045, "2048x1024": 0.045, "2048x2048": 0.09 }
|
|
92506
92701
|
},
|
|
92507
92702
|
"google/nano-banana": { default: 0.05 },
|
|
92703
|
+
// Nano Banana 2 (Gemini 3.1 Flash imagegen, blockrun #329): $0.09/image at 1K.
|
|
92704
|
+
"google/nano-banana-2": { default: 0.09, sizes: { "1024x1024": 0.09 } },
|
|
92508
92705
|
"google/nano-banana-pro": {
|
|
92509
92706
|
default: 0.1,
|
|
92510
92707
|
sizes: { "1024x1024": 0.1, "2048x2048": 0.1, "4096x4096": 0.15 }
|
|
@@ -92538,6 +92735,13 @@ var init_proxy = __esm({
|
|
|
92538
92735
|
pricePerSecond: 0.227,
|
|
92539
92736
|
defaultDurationSeconds: 5
|
|
92540
92737
|
},
|
|
92738
|
+
// Seedance 2.0 Mini (blockrun #366/#368, 2026-08-12): 720p + synced audio at
|
|
92739
|
+
// half the flagship rate, 480p/720p only, 4–15s. blockrun signs the 3dp-floored
|
|
92740
|
+
// per-second value (0.079, not the raw 0.0797) — mirror the signed number.
|
|
92741
|
+
"bytedance/seedance-2.0-mini": {
|
|
92742
|
+
pricePerSecond: 0.079,
|
|
92743
|
+
defaultDurationSeconds: 5
|
|
92744
|
+
},
|
|
92541
92745
|
// Seedance 2.5: 720p with synced audio, up to 30s. Not a replacement for 2.0
|
|
92542
92746
|
// Pro — that is still the one for 1080p/4K. No OpenRouter failover exists for
|
|
92543
92747
|
// 2.5, so a token360 outage surfaces as an error instead of quietly rendering
|
|
@@ -225819,6 +226023,7 @@ function buildVideoGenerationProvider() {
|
|
|
225819
226023
|
"bytedance/seedance-1.5-pro",
|
|
225820
226024
|
"bytedance/seedance-2.0-fast",
|
|
225821
226025
|
"bytedance/seedance-2.0",
|
|
226026
|
+
"bytedance/seedance-2.0-mini",
|
|
225822
226027
|
"bytedance/seedance-2.5"
|
|
225823
226028
|
],
|
|
225824
226029
|
capabilities: {
|
|
@@ -226319,7 +226524,7 @@ var init_index = __esm({
|
|
|
226319
226524
|
const parsed = parseGenArgs(ctx.args ?? "");
|
|
226320
226525
|
if (!parsed.prompt) {
|
|
226321
226526
|
return {
|
|
226322
|
-
text: "Usage: `/cr-imagegen <prompt> [--model=<alias>] [--size=1024x1024] [--n=1]`\n\nAliases: `nano-banana` (default), `banana-pro`, `dalle`, `gpt-image`, `flux`, `grok-imagine`, `grok-imagine-pro`, `cogview`."
|
|
226527
|
+
text: "Usage: `/cr-imagegen <prompt> [--model=<alias>] [--size=1024x1024] [--n=1]`\n\nAliases: `nano-banana` (default), `banana-2` (Gemini 3.1 Flash quality), `banana-pro`, `dalle`, `gpt-image`, `flux`, `grok-imagine`, `grok-imagine-pro`, `cogview`."
|
|
226323
226528
|
};
|
|
226324
226529
|
}
|
|
226325
226530
|
const model = resolveModelAlias(parsed.model ?? "nano-banana");
|
|
@@ -226371,7 +226576,7 @@ ${errText}`
|
|
|
226371
226576
|
const parsed = parseGenArgs(ctx.args ?? "");
|
|
226372
226577
|
if (!parsed.prompt) {
|
|
226373
226578
|
return {
|
|
226374
|
-
text: "Usage: `/videogen <prompt> [--model=<alias>] [--duration=5|8|10]`\n\nAliases: `seedance` (1.5-pro, default \u2014 cheapest), `seedance-2-fast`, `seedance-2`, `seedance-2.5` (720p + synced audio, long-form), `grok-video`.\n\n\u23F1\uFE0F Generation takes 60\u2013180 seconds. Payment settles only on success."
|
|
226579
|
+
text: "Usage: `/videogen <prompt> [--model=<alias>] [--duration=5|8|10]`\n\nAliases: `seedance` (1.5-pro, default \u2014 cheapest), `seedance-2-fast`, `seedance-2`, `seedance-2-mini` (720p + audio, half the flagship rate), `seedance-2.5` (720p + synced audio, long-form), `grok-video`.\n\n\u23F1\uFE0F Generation takes 60\u2013180 seconds. Payment settles only on success."
|
|
226375
226580
|
};
|
|
226376
226581
|
}
|
|
226377
226582
|
const model = resolveModelAlias(parsed.model ?? "seedance");
|