@blockrun/clawrouter 0.12.257 → 0.12.258
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 -26
- package/dist/cli.js +378 -132
- package/dist/index.js +378 -132
- package/dist/router/index.js +43 -30
- package/docs/9-free-ai-models-zero-cost-blockrun.md +73 -86
- package/docs/anthropic-cost-savings.md +4 -4
- package/docs/anthropic-third-party-harness-changes.md +3 -3
- package/docs/clawrouter-cuts-llm-api-costs-500x.md +1 -1
- package/docs/clawrouter-vs-openrouter-llm-routing-comparison.md +3 -3
- package/docs/features.md +9 -8
- package/docs/routing-profiles.md +24 -22
- package/docs/subscription-failover.md +1 -1
- package/package.json +3 -3
- package/scripts/benchmark.py +2 -2
- package/scripts/reinstall.sh +7 -5
- package/skills/clawrouter/SKILL.md +4 -4
- package/src/top-models.json +8 -4
package/dist/index.js
CHANGED
|
@@ -81,6 +81,8 @@ var init_top_models = __esm({
|
|
|
81
81
|
"xai/grok-4.5",
|
|
82
82
|
"xai/grok-4.3",
|
|
83
83
|
"xai/grok-build-0.1",
|
|
84
|
+
"zai/glm-5.3",
|
|
85
|
+
"zai/glm-5.3-flash",
|
|
84
86
|
"zai/glm-5.2",
|
|
85
87
|
"zai/glm-5.1",
|
|
86
88
|
"zai/glm-5-turbo",
|
|
@@ -92,11 +94,13 @@ var init_top_models = __esm({
|
|
|
92
94
|
"deepseek/deepseek-v4-pro",
|
|
93
95
|
"deepseek/deepseek-chat",
|
|
94
96
|
"deepseek/deepseek-reasoner",
|
|
97
|
+
"free/nemotron-3.5-lightning",
|
|
98
|
+
"free/nemotron-3-nano-30b",
|
|
99
|
+
"free/laguna-xs-2.1",
|
|
100
|
+
"free/north-mini-code",
|
|
95
101
|
"free/nemotron-3-nano-omni-30b-a3b-reasoning",
|
|
96
|
-
"free/
|
|
97
|
-
"free/
|
|
98
|
-
"free/nemotron-nano-9b-v2",
|
|
99
|
-
"free/nemotron-nano-12b-v2-vl"
|
|
102
|
+
"free/nemotron-3-ultra-550b",
|
|
103
|
+
"free/llama-3.2-11b-vision"
|
|
100
104
|
];
|
|
101
105
|
}
|
|
102
106
|
});
|
|
@@ -409,14 +413,20 @@ var init_models = __esm({
|
|
|
409
413
|
"xai/grok-3-fast": "xai/grok-4-fast-reasoning",
|
|
410
414
|
// delisted (too expensive)
|
|
411
415
|
// NVIDIA — backward compat aliases (nvidia/xxx → free/xxx)
|
|
412
|
-
// Default free model is
|
|
413
|
-
// opens the eco SIMPLE tier on. It replaced
|
|
414
|
-
//
|
|
415
|
-
//
|
|
416
|
-
//
|
|
417
|
-
//
|
|
418
|
-
//
|
|
419
|
-
|
|
416
|
+
// Default free model is nemotron-3.5-lightning — the same model
|
|
417
|
+
// @blockrun/router-core opens the eco SIMPLE tier on. It replaced
|
|
418
|
+
// step-3.7-flash on 2026-08-30, when NVIDIA retired FOUR of the five visible
|
|
419
|
+
// free models in a single sweep (blockrun #448): step-3.7-flash,
|
|
420
|
+
// nemotron-nano-9b-v2 and nemotron-nano-12b-v2-vl all published 410 Gone, and
|
|
421
|
+
// mistral-nemotron went the quiet way — still listed, >150s and zero bytes.
|
|
422
|
+
// We follow blockrun's own retarget of step-3.7-flash rather than picking a
|
|
423
|
+
// different survivor, so the proxy and the gateway name the same model.
|
|
424
|
+
//
|
|
425
|
+
// gpt-oss-120b/20b RECOVERED on the same probe run and are reachable again,
|
|
426
|
+
// but they stay withheld from blockrun's public catalog over NVIDIA's
|
|
427
|
+
// prompt-retention terms — so pins that NAME gpt-oss stay routable below and
|
|
428
|
+
// nothing generic may land on it.
|
|
429
|
+
nvidia: "free/nemotron-3.5-lightning",
|
|
420
430
|
"gpt-120b": "free/gpt-oss-120b",
|
|
421
431
|
// names the model itself — gateway redirects
|
|
422
432
|
"gpt-20b": "free/gpt-oss-20b",
|
|
@@ -429,10 +439,10 @@ var init_models = __esm({
|
|
|
429
439
|
// straight to gpt-oss-120b. Ids naming v4-flash itself keep the real id (the
|
|
430
440
|
// gateway redirects them); the v3.2/v4-pro ids follow blockrun's retarget
|
|
431
441
|
// rather than chaining through a second dead model.
|
|
432
|
-
"nvidia/deepseek-v3.2": "free/
|
|
433
|
-
"free/deepseek-v3.2": "free/
|
|
434
|
-
"nvidia/deepseek-v4-pro": "free/
|
|
435
|
-
"free/deepseek-v4-pro": "free/
|
|
442
|
+
"nvidia/deepseek-v3.2": "free/nemotron-3.5-lightning",
|
|
443
|
+
"free/deepseek-v3.2": "free/nemotron-3.5-lightning",
|
|
444
|
+
"nvidia/deepseek-v4-pro": "free/nemotron-3.5-lightning",
|
|
445
|
+
"free/deepseek-v4-pro": "free/nemotron-3.5-lightning",
|
|
436
446
|
"nvidia/deepseek-v4-flash": "free/deepseek-v4-flash",
|
|
437
447
|
"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning": "free/nemotron-3-nano-omni-30b-a3b-reasoning",
|
|
438
448
|
// qwen3-coder-480b retired (NVIDIA EOL 2026-06-14). Its server-side redirect used
|
|
@@ -459,16 +469,16 @@ var init_models = __esm({
|
|
|
459
469
|
// Retired free IDs → successors (mirror blockrun's 2026-07-17 redirect map:
|
|
460
470
|
// ultra-253b redirects to gpt-oss-120b; the two supers have NO server redirect —
|
|
461
471
|
// they stay hidden-but-routable, so their pins pass through to the real ids).
|
|
462
|
-
"nvidia/nemotron-ultra-253b": "free/
|
|
472
|
+
"nvidia/nemotron-ultra-253b": "free/nemotron-3.5-lightning",
|
|
463
473
|
// mistral-large-3-675b un-retired 2026-06-14, then EOL'd for good 2026-07-28:
|
|
464
474
|
// blockrun's re-probe got HTTP 410 Gone from NVIDIA on both passes (baa967b).
|
|
465
475
|
// Pin stays routable — the gateway redirects it to gpt-oss-120b.
|
|
466
476
|
"nvidia/mistral-large-3-675b": "free/mistral-large-3-675b",
|
|
467
477
|
"nvidia/qwen3.5-122b-a10b": "free/qwen3.5-122b-a10b",
|
|
468
478
|
// devstral-2-123b died upstream; blockrun redirects it to gpt-oss-120b (2026-07-17 map)
|
|
469
|
-
"nvidia/devstral-2-123b": "free/
|
|
470
|
-
"free/nemotron-ultra-253b": "free/
|
|
471
|
-
"free/devstral-2-123b": "free/
|
|
479
|
+
"nvidia/devstral-2-123b": "free/nemotron-3.5-lightning",
|
|
480
|
+
"free/nemotron-ultra-253b": "free/nemotron-3.5-lightning",
|
|
481
|
+
"free/devstral-2-123b": "free/nemotron-3.5-lightning",
|
|
472
482
|
// Explicit-ish pins — dead upstream since 2026-07-28, gateway redirects to gpt-oss-120b
|
|
473
483
|
"mistral-large": "free/mistral-large-3-675b",
|
|
474
484
|
"mistral-large-3-675b": "free/mistral-large-3-675b",
|
|
@@ -479,74 +489,124 @@ var init_models = __esm({
|
|
|
479
489
|
// gateway's retarget (blockrun's /free-deepseek page points at gpt-oss-120b
|
|
480
490
|
// too). Shorthands naming v4-flash itself stay on the real id — the gateway
|
|
481
491
|
// redirects them, same treatment as seed-oss/mistral-large pins.
|
|
482
|
-
"deepseek-free": "free/
|
|
483
|
-
"deepseek-v4-pro": "free/
|
|
492
|
+
"deepseek-free": "free/nemotron-3.5-lightning",
|
|
493
|
+
"deepseek-v4-pro": "free/nemotron-3.5-lightning",
|
|
484
494
|
// free shorthand; pro dead upstream (410)
|
|
485
495
|
"deepseek-v4-flash": "free/deepseek-v4-flash",
|
|
486
|
-
"v4-pro": "free/
|
|
496
|
+
"v4-pro": "free/nemotron-3.5-lightning",
|
|
487
497
|
"v4-flash": "free/deepseek-v4-flash",
|
|
488
|
-
|
|
489
|
-
//
|
|
490
|
-
|
|
498
|
+
// mistral-nemotron died 2026-08-30 and it was the LAST free Mistral anywhere —
|
|
499
|
+
// blockrun's own /free-mistral page now says so plainly instead of naming one.
|
|
500
|
+
// Point the generic shorthand at the free default rather than advertise a
|
|
501
|
+
// Mistral we cannot serve.
|
|
502
|
+
"mistral-free": "free/nemotron-3.5-lightning",
|
|
503
|
+
"glm-free": "free/nemotron-3.5-lightning",
|
|
491
504
|
// seed-oss-36b (the prior target) EOL'd 2026-08-03
|
|
492
|
-
|
|
493
|
-
//
|
|
505
|
+
// A free Llama exists again: nemotron-super-49b (Llama-3.3-based) hit 410 on
|
|
506
|
+
// 2026-08-30, and a 12-model sweep of what NVIDIA still serves found Llama 3.2
|
|
507
|
+
// 11B Vision as the only one that finishes a real completion.
|
|
508
|
+
"llama-free": "free/llama-3.2-11b-vision",
|
|
494
509
|
// qwen3-coder-480b retired 2026-06-14 → seed-oss-36b, which then EOL'd 2026-08-03.
|
|
495
510
|
// Follow the gateway's own retarget rather than chaining to a second dead model.
|
|
496
|
-
"qwen-coder": "free/
|
|
511
|
+
"qwen-coder": "free/nemotron-3.5-lightning",
|
|
497
512
|
// no live free Qwen; follows the free default
|
|
498
|
-
"qwen-coder-free": "free/
|
|
499
|
-
"qwen-thinking": "free/
|
|
513
|
+
"qwen-coder-free": "free/nemotron-3.5-lightning",
|
|
514
|
+
"qwen-thinking": "free/nemotron-3.5-lightning",
|
|
500
515
|
// qwen3-next died 2026-07-17; no live free Qwen left
|
|
501
516
|
"qwen3-next": "free/qwen3-next-80b-a3b-instruct",
|
|
502
517
|
// explicit-ish pin — gateway redirects
|
|
503
518
|
"qwen3-next-80b": "free/qwen3-next-80b-a3b-instruct",
|
|
504
|
-
"mistral-small": "free/
|
|
505
|
-
//
|
|
519
|
+
"mistral-small": "free/nemotron-3.5-lightning",
|
|
520
|
+
// no free Mistral left upstream (2026-08-30)
|
|
506
521
|
// New live free models (2026-06-14 BlockRun free-tier refresh)
|
|
507
522
|
// seed-oss pins name the model itself — kept routable, the gateway redirects them.
|
|
508
523
|
"seed-oss": "free/seed-oss-36b",
|
|
509
524
|
"seed-oss-36b": "free/seed-oss-36b",
|
|
510
|
-
|
|
511
|
-
//
|
|
525
|
+
// A free coder exists again — two of them, both sub-second. north-mini-code is
|
|
526
|
+
// the faster (607ms median) and 256K ctx against laguna's 131K.
|
|
527
|
+
"coder-free": "free/north-mini-code",
|
|
512
528
|
"mistral-nemotron": "free/mistral-nemotron",
|
|
513
529
|
"step-flash": "free/step-3.7-flash",
|
|
514
530
|
"step-3.7-flash": "free/step-3.7-flash",
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
"nano-
|
|
531
|
+
// nemotron-nano-9b-v2 hit 410 on 2026-08-30; the generic shorthands follow
|
|
532
|
+
// blockrun's redirect to its replacement, while the 9b-naming pins above stay
|
|
533
|
+
// on the real id (the gateway resolves them).
|
|
534
|
+
"nemotron-nano-9b": "free/nemotron-3-nano-30b",
|
|
535
|
+
"nemotron-nano": "free/nemotron-3-nano-30b",
|
|
536
|
+
// nemotron-nano-12b-v2-vl hit 410 the same day; vision in, vision out — the
|
|
537
|
+
// target is blockrun's own, and nano-omni is the only vision-capable free
|
|
538
|
+
// model left.
|
|
539
|
+
"nemotron-nano-vl": "free/nemotron-3-nano-omni-30b-a3b-reasoning",
|
|
540
|
+
"nano-vl": "free/nemotron-3-nano-omni-30b-a3b-reasoning",
|
|
519
541
|
// Vision-capable free models
|
|
520
542
|
"nemotron-omni": "free/nemotron-3-nano-omni-30b-a3b-reasoning",
|
|
521
543
|
"nano-omni": "free/nemotron-3-nano-omni-30b-a3b-reasoning",
|
|
522
544
|
"vision-free": "free/nemotron-3-nano-omni-30b-a3b-reasoning",
|
|
523
545
|
// Retired shorthand aliases redirect to live successors. The catch-all target
|
|
524
546
|
// moved llama-4-maverick → gpt-oss-120b (2026-07-17) → step-3.7-flash
|
|
525
|
-
// (2026-08-29
|
|
526
|
-
nemotron: "free/nemotron-3-
|
|
547
|
+
// (2026-08-29) → nemotron-3.5-lightning (2026-08-30, blockrun #448).
|
|
548
|
+
nemotron: "free/nemotron-3.5-lightning",
|
|
527
549
|
// strongest live Nemotron
|
|
528
|
-
"nemotron-ultra": "free/
|
|
529
|
-
"nemotron-253b": "free/
|
|
530
|
-
"nemotron-super": "free/
|
|
531
|
-
"nemotron-49b": "free/
|
|
532
|
-
"nemotron-120b": "free/
|
|
533
|
-
devstral: "free/
|
|
550
|
+
"nemotron-ultra": "free/nemotron-3.5-lightning",
|
|
551
|
+
"nemotron-253b": "free/nemotron-3.5-lightning",
|
|
552
|
+
"nemotron-super": "free/nemotron-3.5-lightning",
|
|
553
|
+
"nemotron-49b": "free/nemotron-3.5-lightning",
|
|
554
|
+
"nemotron-120b": "free/nemotron-3.5-lightning",
|
|
555
|
+
devstral: "free/nemotron-3.5-lightning",
|
|
534
556
|
// seed-oss-36b EOL'd 2026-08-03
|
|
535
|
-
"devstral-2": "free/
|
|
557
|
+
"devstral-2": "free/nemotron-3.5-lightning",
|
|
536
558
|
maverick: "free/llama-4-maverick",
|
|
537
559
|
// explicit-ish pin — gateway redirects
|
|
560
|
+
// ── The 2026-08-30 free lineup (blockrun #448) ────────────────────────────
|
|
561
|
+
// nvidia/* bridges for the four NVIDIA-hosted additions.
|
|
562
|
+
"nvidia/nemotron-3.5-lightning": "free/nemotron-3.5-lightning",
|
|
563
|
+
"nvidia/nemotron-3-nano-30b": "free/nemotron-3-nano-30b",
|
|
564
|
+
"nvidia/nemotron-3-ultra-550b": "free/nemotron-3-ultra-550b",
|
|
565
|
+
"nvidia/llama-3.2-11b-vision": "free/llama-3.2-11b-vision",
|
|
566
|
+
// The two non-NVIDIA free models keep the `free/` picker convention; their
|
|
567
|
+
// real upstream ids are accepted as pins and rewritten in toUpstreamModelId
|
|
568
|
+
// (see FREE_UPSTREAM_OVERRIDES in proxy.ts).
|
|
569
|
+
"cohere/north-mini-code": "free/north-mini-code",
|
|
570
|
+
"poolside/laguna-xs-2.1": "free/laguna-xs-2.1",
|
|
571
|
+
// Shorthands.
|
|
572
|
+
lightning: "free/nemotron-3.5-lightning",
|
|
573
|
+
"nemotron-lightning": "free/nemotron-3.5-lightning",
|
|
574
|
+
"nemotron-3.5-lightning": "free/nemotron-3.5-lightning",
|
|
575
|
+
"nano-30b": "free/nemotron-3-nano-30b",
|
|
576
|
+
"nemotron-nano-30b": "free/nemotron-3-nano-30b",
|
|
577
|
+
"ultra-550b": "free/nemotron-3-ultra-550b",
|
|
578
|
+
"nemotron-ultra-550b": "free/nemotron-3-ultra-550b",
|
|
579
|
+
"llama-vision": "free/llama-3.2-11b-vision",
|
|
580
|
+
"llama-3.2-vision": "free/llama-3.2-11b-vision",
|
|
581
|
+
"north-mini": "free/north-mini-code",
|
|
582
|
+
"north-mini-code": "free/north-mini-code",
|
|
583
|
+
laguna: "free/laguna-xs-2.1",
|
|
584
|
+
"laguna-xs": "free/laguna-xs-2.1",
|
|
538
585
|
// `free` = the free-tier default. Must equal router-core's ecoTiers.SIMPLE
|
|
539
586
|
// primary and the head of proxy.ts FREE_MODELS so `/model free`, the eco
|
|
540
587
|
// profile and the budget-cap free fallback all agree on one live model.
|
|
541
|
-
free: "free/
|
|
588
|
+
free: "free/nemotron-3.5-lightning",
|
|
542
589
|
// MiniMax (minimax → current flagship: M3)
|
|
543
590
|
minimax: "minimax/minimax-m3",
|
|
544
591
|
"minimax-m3": "minimax/minimax-m3",
|
|
545
592
|
"minimax-m2.7": "minimax/minimax-m2.7",
|
|
546
593
|
"minimax-m2.5": "minimax/minimax-m2.5",
|
|
547
594
|
// Z.AI GLM-5
|
|
548
|
-
glm
|
|
549
|
-
//
|
|
595
|
+
// Bare `glm` PROMOTED 5.2 → 5.3 (2026-08-30). Same rule as `opus` 4.8 → 5: the
|
|
596
|
+
// cost tradeoff is zero — identical $1.40/$4.40 AND an identical 1M ctx /
|
|
597
|
+
// 131072 maxOutput envelope, so nothing can bill or truncate differently for a
|
|
598
|
+
// caller who never typed a version. blockrun's own copy already names glm-5.3
|
|
599
|
+
// the Z.AI flagship, so leaving `glm` on 5.2 would make the proxy disagree
|
|
600
|
+
// with the gateway it fronts. `glm-5.2` and every other version pin still
|
|
601
|
+
// resolve to their own model.
|
|
602
|
+
glm: "zai/glm-5.3",
|
|
603
|
+
"glm-5.3": "zai/glm-5.3",
|
|
604
|
+
"glm-5-3": "zai/glm-5.3",
|
|
605
|
+
// GLM-5.3 Flash — Z.AI's first natively multimodal GLM-5. Also router-core's
|
|
606
|
+
// eco MEDIUM and COMPLEX primary.
|
|
607
|
+
"glm-5.3-flash": "zai/glm-5.3-flash",
|
|
608
|
+
"glm-5-3-flash": "zai/glm-5.3-flash",
|
|
609
|
+
"glm-flash": "zai/glm-5.3-flash",
|
|
550
610
|
"glm-5.2": "zai/glm-5.2",
|
|
551
611
|
"glm-5": "zai/glm-5",
|
|
552
612
|
"glm-5.1": "zai/glm-5.1",
|
|
@@ -608,10 +668,10 @@ var init_models = __esm({
|
|
|
608
668
|
},
|
|
609
669
|
{
|
|
610
670
|
id: "free",
|
|
611
|
-
name: "Free \u2192
|
|
671
|
+
name: "Free \u2192 Nemotron 3.5 Lightning",
|
|
612
672
|
inputPrice: 0,
|
|
613
673
|
outputPrice: 0,
|
|
614
|
-
contextWindow:
|
|
674
|
+
contextWindow: 1e6,
|
|
615
675
|
maxOutput: 16384,
|
|
616
676
|
reasoning: true
|
|
617
677
|
},
|
|
@@ -652,7 +712,7 @@ var init_models = __esm({
|
|
|
652
712
|
inputPrice: 0.25,
|
|
653
713
|
outputPrice: 2,
|
|
654
714
|
contextWindow: 2e5,
|
|
655
|
-
maxOutput:
|
|
715
|
+
maxOutput: 128e3,
|
|
656
716
|
toolCalling: true
|
|
657
717
|
},
|
|
658
718
|
{
|
|
@@ -662,7 +722,7 @@ var init_models = __esm({
|
|
|
662
722
|
inputPrice: 0.05,
|
|
663
723
|
outputPrice: 0.4,
|
|
664
724
|
contextWindow: 128e3,
|
|
665
|
-
maxOutput:
|
|
725
|
+
maxOutput: 128e3,
|
|
666
726
|
toolCalling: true,
|
|
667
727
|
deprecated: true,
|
|
668
728
|
fallbackModel: "openai/gpt-5.4-nano"
|
|
@@ -823,7 +883,7 @@ var init_models = __esm({
|
|
|
823
883
|
version: "5.4",
|
|
824
884
|
inputPrice: 2.5,
|
|
825
885
|
outputPrice: 15,
|
|
826
|
-
contextWindow:
|
|
886
|
+
contextWindow: 105e4,
|
|
827
887
|
maxOutput: 128e3,
|
|
828
888
|
reasoning: true,
|
|
829
889
|
vision: true,
|
|
@@ -848,7 +908,7 @@ var init_models = __esm({
|
|
|
848
908
|
version: "5.4",
|
|
849
909
|
inputPrice: 30,
|
|
850
910
|
outputPrice: 180,
|
|
851
|
-
contextWindow:
|
|
911
|
+
contextWindow: 105e4,
|
|
852
912
|
maxOutput: 128e3,
|
|
853
913
|
reasoning: true,
|
|
854
914
|
vision: true,
|
|
@@ -861,7 +921,7 @@ var init_models = __esm({
|
|
|
861
921
|
inputPrice: 0.2,
|
|
862
922
|
outputPrice: 1.25,
|
|
863
923
|
contextWindow: 105e4,
|
|
864
|
-
maxOutput:
|
|
924
|
+
maxOutput: 128e3,
|
|
865
925
|
toolCalling: true
|
|
866
926
|
},
|
|
867
927
|
// OpenAI GPT-5.3 Family
|
|
@@ -872,7 +932,7 @@ var init_models = __esm({
|
|
|
872
932
|
inputPrice: 1.75,
|
|
873
933
|
outputPrice: 14,
|
|
874
934
|
contextWindow: 128e3,
|
|
875
|
-
maxOutput:
|
|
935
|
+
maxOutput: 128e3,
|
|
876
936
|
reasoning: true,
|
|
877
937
|
vision: true,
|
|
878
938
|
agentic: true,
|
|
@@ -898,7 +958,7 @@ var init_models = __esm({
|
|
|
898
958
|
inputPrice: 2,
|
|
899
959
|
outputPrice: 8,
|
|
900
960
|
contextWindow: 128e3,
|
|
901
|
-
maxOutput:
|
|
961
|
+
maxOutput: 32768,
|
|
902
962
|
vision: true,
|
|
903
963
|
toolCalling: true
|
|
904
964
|
},
|
|
@@ -909,7 +969,7 @@ var init_models = __esm({
|
|
|
909
969
|
inputPrice: 0.4,
|
|
910
970
|
outputPrice: 1.6,
|
|
911
971
|
contextWindow: 128e3,
|
|
912
|
-
maxOutput:
|
|
972
|
+
maxOutput: 32768,
|
|
913
973
|
toolCalling: true
|
|
914
974
|
},
|
|
915
975
|
{
|
|
@@ -919,7 +979,7 @@ var init_models = __esm({
|
|
|
919
979
|
inputPrice: 0.1,
|
|
920
980
|
outputPrice: 0.4,
|
|
921
981
|
contextWindow: 128e3,
|
|
922
|
-
maxOutput:
|
|
982
|
+
maxOutput: 32768,
|
|
923
983
|
toolCalling: true
|
|
924
984
|
},
|
|
925
985
|
{
|
|
@@ -985,7 +1045,7 @@ var init_models = __esm({
|
|
|
985
1045
|
inputPrice: 1.1,
|
|
986
1046
|
outputPrice: 4.4,
|
|
987
1047
|
contextWindow: 128e3,
|
|
988
|
-
maxOutput:
|
|
1048
|
+
maxOutput: 1e5,
|
|
989
1049
|
reasoning: true,
|
|
990
1050
|
toolCalling: true
|
|
991
1051
|
},
|
|
@@ -996,7 +1056,7 @@ var init_models = __esm({
|
|
|
996
1056
|
inputPrice: 1.1,
|
|
997
1057
|
outputPrice: 4.4,
|
|
998
1058
|
contextWindow: 128e3,
|
|
999
|
-
maxOutput:
|
|
1059
|
+
maxOutput: 1e5,
|
|
1000
1060
|
reasoning: true,
|
|
1001
1061
|
toolCalling: true
|
|
1002
1062
|
},
|
|
@@ -1009,7 +1069,7 @@ var init_models = __esm({
|
|
|
1009
1069
|
inputPrice: 1,
|
|
1010
1070
|
outputPrice: 5,
|
|
1011
1071
|
contextWindow: 2e5,
|
|
1012
|
-
maxOutput:
|
|
1072
|
+
maxOutput: 64e3,
|
|
1013
1073
|
vision: true,
|
|
1014
1074
|
agentic: true,
|
|
1015
1075
|
toolCalling: true
|
|
@@ -1033,8 +1093,8 @@ var init_models = __esm({
|
|
|
1033
1093
|
version: "4.6",
|
|
1034
1094
|
inputPrice: 3,
|
|
1035
1095
|
outputPrice: 15,
|
|
1036
|
-
contextWindow:
|
|
1037
|
-
maxOutput:
|
|
1096
|
+
contextWindow: 1e6,
|
|
1097
|
+
maxOutput: 128e3,
|
|
1038
1098
|
reasoning: true,
|
|
1039
1099
|
vision: true,
|
|
1040
1100
|
agentic: true,
|
|
@@ -1064,7 +1124,7 @@ var init_models = __esm({
|
|
|
1064
1124
|
inputPrice: 5,
|
|
1065
1125
|
outputPrice: 25,
|
|
1066
1126
|
contextWindow: 2e5,
|
|
1067
|
-
maxOutput:
|
|
1127
|
+
maxOutput: 64e3,
|
|
1068
1128
|
reasoning: true,
|
|
1069
1129
|
vision: true,
|
|
1070
1130
|
agentic: true,
|
|
@@ -1148,7 +1208,7 @@ var init_models = __esm({
|
|
|
1148
1208
|
version: "3.1",
|
|
1149
1209
|
inputPrice: 2,
|
|
1150
1210
|
outputPrice: 12,
|
|
1151
|
-
contextWindow:
|
|
1211
|
+
contextWindow: 1048576,
|
|
1152
1212
|
maxOutput: 65536,
|
|
1153
1213
|
reasoning: true,
|
|
1154
1214
|
vision: true,
|
|
@@ -1160,7 +1220,7 @@ var init_models = __esm({
|
|
|
1160
1220
|
version: "3.0",
|
|
1161
1221
|
inputPrice: 2,
|
|
1162
1222
|
outputPrice: 12,
|
|
1163
|
-
contextWindow:
|
|
1223
|
+
contextWindow: 1048576,
|
|
1164
1224
|
maxOutput: 65536,
|
|
1165
1225
|
reasoning: true,
|
|
1166
1226
|
vision: true,
|
|
@@ -1212,7 +1272,7 @@ var init_models = __esm({
|
|
|
1212
1272
|
version: "3.0",
|
|
1213
1273
|
inputPrice: 0.5,
|
|
1214
1274
|
outputPrice: 3,
|
|
1215
|
-
contextWindow:
|
|
1275
|
+
contextWindow: 1048576,
|
|
1216
1276
|
maxOutput: 65536,
|
|
1217
1277
|
reasoning: true,
|
|
1218
1278
|
vision: true
|
|
@@ -1223,7 +1283,7 @@ var init_models = __esm({
|
|
|
1223
1283
|
version: "2.5",
|
|
1224
1284
|
inputPrice: 1.25,
|
|
1225
1285
|
outputPrice: 10,
|
|
1226
|
-
contextWindow:
|
|
1286
|
+
contextWindow: 1048576,
|
|
1227
1287
|
maxOutput: 65536,
|
|
1228
1288
|
reasoning: true,
|
|
1229
1289
|
vision: true,
|
|
@@ -1235,7 +1295,7 @@ var init_models = __esm({
|
|
|
1235
1295
|
version: "2.5",
|
|
1236
1296
|
inputPrice: 0.3,
|
|
1237
1297
|
outputPrice: 2.5,
|
|
1238
|
-
contextWindow:
|
|
1298
|
+
contextWindow: 1048576,
|
|
1239
1299
|
maxOutput: 65536,
|
|
1240
1300
|
vision: true,
|
|
1241
1301
|
toolCalling: true
|
|
@@ -1246,7 +1306,7 @@ var init_models = __esm({
|
|
|
1246
1306
|
version: "2.5",
|
|
1247
1307
|
inputPrice: 0.1,
|
|
1248
1308
|
outputPrice: 0.4,
|
|
1249
|
-
contextWindow:
|
|
1309
|
+
contextWindow: 1048576,
|
|
1250
1310
|
maxOutput: 65536,
|
|
1251
1311
|
toolCalling: true
|
|
1252
1312
|
},
|
|
@@ -1256,8 +1316,8 @@ var init_models = __esm({
|
|
|
1256
1316
|
version: "3.1",
|
|
1257
1317
|
inputPrice: 0.25,
|
|
1258
1318
|
outputPrice: 1.5,
|
|
1259
|
-
contextWindow:
|
|
1260
|
-
maxOutput:
|
|
1319
|
+
contextWindow: 1048576,
|
|
1320
|
+
maxOutput: 65536,
|
|
1261
1321
|
toolCalling: true
|
|
1262
1322
|
},
|
|
1263
1323
|
// DeepSeek — V4 family (2026-04-24). The legacy deepseek-chat/reasoner
|
|
@@ -1270,8 +1330,8 @@ var init_models = __esm({
|
|
|
1270
1330
|
version: "4-flash",
|
|
1271
1331
|
inputPrice: 0.14,
|
|
1272
1332
|
outputPrice: 0.28,
|
|
1273
|
-
contextWindow:
|
|
1274
|
-
maxOutput:
|
|
1333
|
+
contextWindow: 1048576,
|
|
1334
|
+
maxOutput: 65536,
|
|
1275
1335
|
toolCalling: true
|
|
1276
1336
|
},
|
|
1277
1337
|
{
|
|
@@ -1280,8 +1340,8 @@ var init_models = __esm({
|
|
|
1280
1340
|
version: "4-flash",
|
|
1281
1341
|
inputPrice: 0.14,
|
|
1282
1342
|
outputPrice: 0.28,
|
|
1283
|
-
contextWindow:
|
|
1284
|
-
maxOutput:
|
|
1343
|
+
contextWindow: 1048576,
|
|
1344
|
+
maxOutput: 65536,
|
|
1285
1345
|
reasoning: true,
|
|
1286
1346
|
toolCalling: true
|
|
1287
1347
|
},
|
|
@@ -1407,7 +1467,7 @@ var init_models = __esm({
|
|
|
1407
1467
|
inputPrice: 0.6,
|
|
1408
1468
|
outputPrice: 3,
|
|
1409
1469
|
contextWindow: 262144,
|
|
1410
|
-
maxOutput:
|
|
1470
|
+
maxOutput: 65536,
|
|
1411
1471
|
reasoning: true,
|
|
1412
1472
|
vision: true,
|
|
1413
1473
|
agentic: true,
|
|
@@ -1420,7 +1480,7 @@ var init_models = __esm({
|
|
|
1420
1480
|
inputPrice: 0.6,
|
|
1421
1481
|
outputPrice: 3,
|
|
1422
1482
|
contextWindow: 262144,
|
|
1423
|
-
maxOutput:
|
|
1483
|
+
maxOutput: 16384,
|
|
1424
1484
|
reasoning: true,
|
|
1425
1485
|
vision: true,
|
|
1426
1486
|
agentic: true,
|
|
@@ -1458,7 +1518,7 @@ var init_models = __esm({
|
|
|
1458
1518
|
version: "4",
|
|
1459
1519
|
inputPrice: 0.2,
|
|
1460
1520
|
outputPrice: 0.5,
|
|
1461
|
-
contextWindow:
|
|
1521
|
+
contextWindow: 2e6,
|
|
1462
1522
|
maxOutput: 16384,
|
|
1463
1523
|
reasoning: true,
|
|
1464
1524
|
toolCalling: true
|
|
@@ -1469,7 +1529,7 @@ var init_models = __esm({
|
|
|
1469
1529
|
version: "4",
|
|
1470
1530
|
inputPrice: 0.2,
|
|
1471
1531
|
outputPrice: 0.5,
|
|
1472
|
-
contextWindow:
|
|
1532
|
+
contextWindow: 2e6,
|
|
1473
1533
|
maxOutput: 16384,
|
|
1474
1534
|
toolCalling: true
|
|
1475
1535
|
},
|
|
@@ -1479,7 +1539,7 @@ var init_models = __esm({
|
|
|
1479
1539
|
version: "4.1",
|
|
1480
1540
|
inputPrice: 0.2,
|
|
1481
1541
|
outputPrice: 0.5,
|
|
1482
|
-
contextWindow:
|
|
1542
|
+
contextWindow: 2e6,
|
|
1483
1543
|
maxOutput: 16384,
|
|
1484
1544
|
reasoning: true,
|
|
1485
1545
|
toolCalling: true
|
|
@@ -1490,7 +1550,7 @@ var init_models = __esm({
|
|
|
1490
1550
|
version: "4.1",
|
|
1491
1551
|
inputPrice: 0.2,
|
|
1492
1552
|
outputPrice: 0.5,
|
|
1493
|
-
contextWindow:
|
|
1553
|
+
contextWindow: 2e6,
|
|
1494
1554
|
maxOutput: 16384,
|
|
1495
1555
|
toolCalling: true
|
|
1496
1556
|
},
|
|
@@ -1502,7 +1562,7 @@ var init_models = __esm({
|
|
|
1502
1562
|
version: "4-0709",
|
|
1503
1563
|
inputPrice: 3,
|
|
1504
1564
|
outputPrice: 15,
|
|
1505
|
-
contextWindow:
|
|
1565
|
+
contextWindow: 256e3,
|
|
1506
1566
|
maxOutput: 16384,
|
|
1507
1567
|
reasoning: true,
|
|
1508
1568
|
toolCalling: true
|
|
@@ -1513,7 +1573,7 @@ var init_models = __esm({
|
|
|
1513
1573
|
version: "2",
|
|
1514
1574
|
inputPrice: 2,
|
|
1515
1575
|
outputPrice: 10,
|
|
1516
|
-
contextWindow:
|
|
1576
|
+
contextWindow: 32768,
|
|
1517
1577
|
maxOutput: 16384,
|
|
1518
1578
|
vision: true,
|
|
1519
1579
|
toolCalling: true
|
|
@@ -1818,7 +1878,13 @@ var init_models = __esm({
|
|
|
1818
1878
|
maxOutput: 16384
|
|
1819
1879
|
},
|
|
1820
1880
|
{
|
|
1821
|
-
// Mistral × NVIDIA hybrid
|
|
1881
|
+
// Mistral × NVIDIA hybrid, 131K context. DEAD 2026-08-30 — the QUIET kind:
|
|
1882
|
+
// NVIDIA still LISTS it but a completion returns zero bytes after >150s on
|
|
1883
|
+
// both of blockrun's probe passes (blockrun #448, the #391 shape). Upstream
|
|
1884
|
+
// hid it and redirects callers to a live workhorse. Entry kept so explicit
|
|
1885
|
+
// pins stay routable; off the picker and the FREE_MODELS cascade.
|
|
1886
|
+
// There is no free Mistral left on NVIDIA — do not point a generic
|
|
1887
|
+
// "a free mistral" shorthand at one.
|
|
1822
1888
|
id: "free/mistral-nemotron",
|
|
1823
1889
|
name: "[Free] Mistral Nemotron",
|
|
1824
1890
|
version: "nemotron",
|
|
@@ -1828,7 +1894,13 @@ var init_models = __esm({
|
|
|
1828
1894
|
maxOutput: 16384
|
|
1829
1895
|
},
|
|
1830
1896
|
{
|
|
1831
|
-
// StepFun Step 3.7 Flash: reasoning-focused, 131K context.
|
|
1897
|
+
// StepFun Step 3.7 Flash: reasoning-focused, 131K context. EOL'd 2026-08-30
|
|
1898
|
+
// — NVIDIA published 410 Gone on both of blockrun's probe passes (#448), in
|
|
1899
|
+
// the same sweep that took nemotron-nano-9b-v2, nemotron-nano-12b-v2-vl and
|
|
1900
|
+
// (hidden) nemotron-super-49b. It had been ClawRouter's free default since
|
|
1901
|
+
// 2026-08-29; the gateway redirects it to nemotron-3.5-lightning, which is
|
|
1902
|
+
// exactly why nothing looked broken. Entry kept so explicit pins stay
|
|
1903
|
+
// routable; off the picker and the FREE_MODELS cascade.
|
|
1832
1904
|
id: "free/step-3.7-flash",
|
|
1833
1905
|
name: "[Free] StepFun Step 3.7 Flash",
|
|
1834
1906
|
version: "3.7-flash",
|
|
@@ -1840,6 +1912,8 @@ var init_models = __esm({
|
|
|
1840
1912
|
},
|
|
1841
1913
|
{
|
|
1842
1914
|
// NVIDIA Nemotron Nano 9B v2: fast lightweight generalist, 131K context.
|
|
1915
|
+
// EOL'd 2026-08-30 (410 Gone, same sweep). Gateway redirects it to
|
|
1916
|
+
// nemotron-3-nano-30b. Entry kept for pins; off the picker and the cascade.
|
|
1843
1917
|
id: "free/nemotron-nano-9b-v2",
|
|
1844
1918
|
name: "[Free] Nemotron Nano 9B v2",
|
|
1845
1919
|
version: "nano-9b-v2",
|
|
@@ -1851,6 +1925,9 @@ var init_models = __esm({
|
|
|
1851
1925
|
},
|
|
1852
1926
|
{
|
|
1853
1927
|
// NVIDIA Nemotron Nano 12B v2 VL: vision-language (text + image), 131K context.
|
|
1928
|
+
// EOL'd 2026-08-30 (410 Gone, same sweep). Gateway redirects it to
|
|
1929
|
+
// nemotron-3-nano-omni, the only vision-capable free model left. Entry kept
|
|
1930
|
+
// for pins; off the picker and the cascade.
|
|
1854
1931
|
id: "free/nemotron-nano-12b-v2-vl",
|
|
1855
1932
|
name: "[Free] Nemotron Nano 12B v2 VL",
|
|
1856
1933
|
version: "nano-12b-v2-vl",
|
|
@@ -1861,9 +1938,155 @@ var init_models = __esm({
|
|
|
1861
1938
|
reasoning: true,
|
|
1862
1939
|
vision: true
|
|
1863
1940
|
},
|
|
1941
|
+
// ── 2026-08-30 free-tier rebuild (blockrun #448) ─────────────────────────
|
|
1942
|
+
// NVIDIA retired FOUR of the five VISIBLE free models in one sweep. blockrun
|
|
1943
|
+
// replaced them and moved two survivors onto OpenRouter's $0 ":free" pool,
|
|
1944
|
+
// taking the visible free set from 5 to 7 and spanning three hosts for the
|
|
1945
|
+
// first time (NVIDIA, OpenRouter, and two non-NVIDIA makers).
|
|
1946
|
+
//
|
|
1947
|
+
// All seven live free models were tool-probed through the gateway on
|
|
1948
|
+
// 2026-08-30 and every one returned a structured `tool_calls` array with
|
|
1949
|
+
// valid JSON args and finish_reason: "tool_calls" (nemotron-3-nano-30b looked
|
|
1950
|
+
// like a textual leak at max_tokens:120 — that was truncation; at 300 it is
|
|
1951
|
+
// structured). The evidence is recorded here on purpose, but `toolCalling` is
|
|
1952
|
+
// deliberately NOT set: no free entry has ever carried it, filterByToolCalling
|
|
1953
|
+
// keeps the free tier out of tool-bearing requests, and the budget pre-check
|
|
1954
|
+
// at proxy.ts:5217 is written on the same assumption. Flipping the tier into
|
|
1955
|
+
// agentic eligibility is its own change with its own evidence bar.
|
|
1956
|
+
{
|
|
1957
|
+
// Nemotron 3.5 Lightning 30B-A3B — the new free default. blockrun's own
|
|
1958
|
+
// redirect target for the retired step-3.7-flash, so following it keeps the
|
|
1959
|
+
// proxy and the gateway naming the same model. Served from OpenRouter's $0
|
|
1960
|
+
// pool (4.9s median vs 16.3s direct) which also publishes a 1M window
|
|
1961
|
+
// against the 131K the NVIDIA NIM path gives; blockrun carries a hidden
|
|
1962
|
+
// "-nim" twin as its fallback. Probed 1.3s with tools.
|
|
1963
|
+
id: "free/nemotron-3.5-lightning",
|
|
1964
|
+
name: "[Free] Nemotron 3.5 Lightning",
|
|
1965
|
+
version: "3.5-lightning",
|
|
1966
|
+
inputPrice: 0,
|
|
1967
|
+
outputPrice: 0,
|
|
1968
|
+
contextWindow: 1e6,
|
|
1969
|
+
maxOutput: 16384,
|
|
1970
|
+
reasoning: true
|
|
1971
|
+
},
|
|
1972
|
+
{
|
|
1973
|
+
// Nemotron 3 Nano 30B-A3B — the fastest free model in the catalog
|
|
1974
|
+
// (~121 tok/s on a realistic workload, not a 16-token ping). Returns
|
|
1975
|
+
// reasoning_content. Also the tertiary rung of blockrun's own free cascade.
|
|
1976
|
+
id: "free/nemotron-3-nano-30b",
|
|
1977
|
+
name: "[Free] Nemotron 3 Nano 30B",
|
|
1978
|
+
version: "3-nano-30b",
|
|
1979
|
+
inputPrice: 0,
|
|
1980
|
+
outputPrice: 0,
|
|
1981
|
+
contextWindow: 131072,
|
|
1982
|
+
maxOutput: 16384,
|
|
1983
|
+
reasoning: true
|
|
1984
|
+
},
|
|
1985
|
+
{
|
|
1986
|
+
// Nemotron 3 Ultra 550B-A55B — the largest free model ever listed, 1M ctx,
|
|
1987
|
+
// reachable ONLY through OpenRouter's $0 pool (build.nvidia.com answers 503).
|
|
1988
|
+
// Deliberately LOW in the cascade: 16.8s on the tools probe, and blockrun
|
|
1989
|
+
// measured 3 of 15 calls coming back as an HTTP 200 carrying an upstream
|
|
1990
|
+
// 502/503 error object instead of choices.
|
|
1991
|
+
id: "free/nemotron-3-ultra-550b",
|
|
1992
|
+
name: "[Free] Nemotron 3 Ultra 550B",
|
|
1993
|
+
version: "3-ultra-550b",
|
|
1994
|
+
inputPrice: 0,
|
|
1995
|
+
outputPrice: 0,
|
|
1996
|
+
contextWindow: 1e6,
|
|
1997
|
+
maxOutput: 16384,
|
|
1998
|
+
reasoning: true
|
|
1999
|
+
},
|
|
2000
|
+
{
|
|
2001
|
+
// Meta Llama 3.2 11B Vision — restores a free Llama after nemotron-super-49b
|
|
2002
|
+
// (Llama-3.3-based) hit NVIDIA's 410 EOL. A 12-model sweep found exactly two
|
|
2003
|
+
// survivors and only the 11B finishes a real completion. Older than the rest
|
|
2004
|
+
// of the tier and deliberately so: it is a real Llama that actually answers.
|
|
2005
|
+
// Slowest in the tier (~18 tok/s) — last rung of the cascade.
|
|
2006
|
+
id: "free/llama-3.2-11b-vision",
|
|
2007
|
+
name: "[Free] Llama 3.2 11B Vision",
|
|
2008
|
+
version: "3.2-11b-vision",
|
|
2009
|
+
inputPrice: 0,
|
|
2010
|
+
outputPrice: 0,
|
|
2011
|
+
contextWindow: 128e3,
|
|
2012
|
+
maxOutput: 16384,
|
|
2013
|
+
vision: true
|
|
2014
|
+
},
|
|
2015
|
+
{
|
|
2016
|
+
// Cohere North Mini Code, on OpenRouter's $0 pool — 607ms median, the
|
|
2017
|
+
// fastest thing in the tier. Emits reasoning_content (content is clean once
|
|
2018
|
+
// the budget is large enough to finish, verified live).
|
|
2019
|
+
// NOTE: NOT an nvidia/* id upstream — see FREE_UPSTREAM_OVERRIDES in proxy.ts.
|
|
2020
|
+
id: "free/north-mini-code",
|
|
2021
|
+
name: "[Free] Cohere North Mini Code",
|
|
2022
|
+
version: "north-mini-code",
|
|
2023
|
+
inputPrice: 0,
|
|
2024
|
+
outputPrice: 0,
|
|
2025
|
+
contextWindow: 256e3,
|
|
2026
|
+
maxOutput: 16384,
|
|
2027
|
+
reasoning: true
|
|
2028
|
+
},
|
|
2029
|
+
{
|
|
2030
|
+
// Poolside Laguna XS 2.1 on OUR NVIDIA key (~161 tok/s). Deliberately not
|
|
2031
|
+
// the OpenRouter twin, which 429s on every attempt — so this rung and
|
|
2032
|
+
// north-mini-code sit on DIFFERENT capacity pools, which is why they are
|
|
2033
|
+
// adjacent in the cascade.
|
|
2034
|
+
// NOTE: NOT an nvidia/* id upstream — see FREE_UPSTREAM_OVERRIDES in proxy.ts.
|
|
2035
|
+
id: "free/laguna-xs-2.1",
|
|
2036
|
+
name: "[Free] Poolside Laguna XS 2.1",
|
|
2037
|
+
version: "xs-2.1",
|
|
2038
|
+
inputPrice: 0,
|
|
2039
|
+
outputPrice: 0,
|
|
2040
|
+
contextWindow: 131072,
|
|
2041
|
+
maxOutput: 16384
|
|
2042
|
+
},
|
|
1864
2043
|
// Z.AI GLM-5 Models
|
|
1865
2044
|
{
|
|
1866
|
-
//
|
|
2045
|
+
// Z.AI's flagship, live-probed by blockrun 2026-08-19 against api.z.ai
|
|
2046
|
+
// (real completion in 2s, content alongside reasoning tokens). $1.40/$4.40,
|
|
2047
|
+
// cached input $0.26, off the international USD price list.
|
|
2048
|
+
// maxOutput is 131072, NOT the 1M context: that is the hard ceiling the API
|
|
2049
|
+
// enforces (error 1210 above it), the same on every GLM-5 SKU.
|
|
2050
|
+
// Thinking is ALWAYS ON here and cannot be disabled.
|
|
2051
|
+
id: "zai/glm-5.3",
|
|
2052
|
+
name: "GLM-5.3",
|
|
2053
|
+
version: "5.3",
|
|
2054
|
+
inputPrice: 1.4,
|
|
2055
|
+
outputPrice: 4.4,
|
|
2056
|
+
contextWindow: 1e6,
|
|
2057
|
+
maxOutput: 131072,
|
|
2058
|
+
reasoning: true,
|
|
2059
|
+
toolCalling: true
|
|
2060
|
+
},
|
|
2061
|
+
{
|
|
2062
|
+
// Z.AI's first natively multimodal GLM-5 — 320B/18B MoE. blockrun probed
|
|
2063
|
+
// text, vision (base64 data URL → correct answer), tools
|
|
2064
|
+
// (finish_reason=tool_calls with well-formed arguments) and streaming live
|
|
2065
|
+
// on 2026-08-27 before listing it.
|
|
2066
|
+
//
|
|
2067
|
+
// MUST be in this catalog, not just router-core's: it is router-core's eco
|
|
2068
|
+
// MEDIUM and COMPLEX primary, and estimateAmount() returns undefined for an
|
|
2069
|
+
// id we do not carry — which makes the request skip the maxCostPerRun filter
|
|
2070
|
+
// AND never accumulate into session cost. An uncatalogued routing target is
|
|
2071
|
+
// a cost-cap hole, not a logging gap.
|
|
2072
|
+
//
|
|
2073
|
+
// Price is the LIST rate. Z.AI is running a 50% launch promo ($0.075/$0.25)
|
|
2074
|
+
// that ENDS 2026-09-09; listing the promo rate would put us under COGS the
|
|
2075
|
+
// morning it lapses. Thinking is always on, as on glm-5.3.
|
|
2076
|
+
id: "zai/glm-5.3-flash",
|
|
2077
|
+
name: "GLM-5.3 Flash",
|
|
2078
|
+
version: "5.3-flash",
|
|
2079
|
+
inputPrice: 0.15,
|
|
2080
|
+
outputPrice: 0.5,
|
|
2081
|
+
contextWindow: 1e6,
|
|
2082
|
+
maxOutput: 131072,
|
|
2083
|
+
reasoning: true,
|
|
2084
|
+
vision: true,
|
|
2085
|
+
toolCalling: true
|
|
2086
|
+
},
|
|
2087
|
+
{
|
|
2088
|
+
// Launched 2026-06-16. Was Z.AI's flagship until glm-5.3 (above) took the
|
|
2089
|
+
// slot on 2026-08-19. 1M-token context,
|
|
1867
2090
|
// beats GPT-5.5 on long-horizon coding at a fraction of the cost.
|
|
1868
2091
|
// Paid per-token at $1.40/$4.40 (same as glm-5.1, cached $0.26).
|
|
1869
2092
|
id: "zai/glm-5.2",
|
|
@@ -1872,7 +2095,7 @@ var init_models = __esm({
|
|
|
1872
2095
|
inputPrice: 1.4,
|
|
1873
2096
|
outputPrice: 4.4,
|
|
1874
2097
|
contextWindow: 1e6,
|
|
1875
|
-
maxOutput:
|
|
2098
|
+
maxOutput: 131072,
|
|
1876
2099
|
reasoning: true,
|
|
1877
2100
|
toolCalling: true
|
|
1878
2101
|
},
|
|
@@ -36833,6 +37056,13 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
36833
37056
|
supportsTools: true,
|
|
36834
37057
|
supportsVision: true
|
|
36835
37058
|
},
|
|
37059
|
+
"cohere/north-mini-code": {
|
|
37060
|
+
// supportsTools: not probed — fails closed
|
|
37061
|
+
contextWindow: 256e3,
|
|
37062
|
+
maxOutputTokens: 16384,
|
|
37063
|
+
supportsTools: false,
|
|
37064
|
+
supportsVision: false
|
|
37065
|
+
},
|
|
36836
37066
|
"deepseek/deepseek-chat": {
|
|
36837
37067
|
contextWindow: 1048576,
|
|
36838
37068
|
maxOutputTokens: 65536,
|
|
@@ -36923,8 +37153,15 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
36923
37153
|
supportsTools: true,
|
|
36924
37154
|
supportsVision: true
|
|
36925
37155
|
},
|
|
36926
|
-
"nvidia/
|
|
36927
|
-
// supportsTools:
|
|
37156
|
+
"nvidia/llama-3.2-11b-vision": {
|
|
37157
|
+
// supportsTools: not probed — fails closed
|
|
37158
|
+
contextWindow: 128e3,
|
|
37159
|
+
maxOutputTokens: 16384,
|
|
37160
|
+
supportsTools: false,
|
|
37161
|
+
supportsVision: true
|
|
37162
|
+
},
|
|
37163
|
+
"nvidia/nemotron-3-nano-30b": {
|
|
37164
|
+
// supportsTools: not probed — fails closed
|
|
36928
37165
|
contextWindow: 131072,
|
|
36929
37166
|
maxOutputTokens: 16384,
|
|
36930
37167
|
supportsTools: false,
|
|
@@ -36936,21 +37173,16 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
36936
37173
|
supportsTools: false,
|
|
36937
37174
|
supportsVision: true
|
|
36938
37175
|
},
|
|
36939
|
-
"nvidia/nemotron-
|
|
36940
|
-
// supportsTools:
|
|
36941
|
-
contextWindow:
|
|
36942
|
-
maxOutputTokens: 16384,
|
|
36943
|
-
supportsTools: false,
|
|
36944
|
-
supportsVision: true
|
|
36945
|
-
},
|
|
36946
|
-
"nvidia/nemotron-nano-9b-v2": {
|
|
36947
|
-
contextWindow: 131072,
|
|
37176
|
+
"nvidia/nemotron-3-ultra-550b": {
|
|
37177
|
+
// supportsTools: not probed — fails closed
|
|
37178
|
+
contextWindow: 1e6,
|
|
36948
37179
|
maxOutputTokens: 16384,
|
|
36949
37180
|
supportsTools: false,
|
|
36950
37181
|
supportsVision: false
|
|
36951
37182
|
},
|
|
36952
|
-
"nvidia/
|
|
36953
|
-
|
|
37183
|
+
"nvidia/nemotron-3.5-lightning": {
|
|
37184
|
+
// supportsTools: not probed — fails closed
|
|
37185
|
+
contextWindow: 1e6,
|
|
36954
37186
|
maxOutputTokens: 16384,
|
|
36955
37187
|
supportsTools: false,
|
|
36956
37188
|
supportsVision: false
|
|
@@ -37010,13 +37242,6 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
37010
37242
|
supportsTools: false,
|
|
37011
37243
|
supportsVision: true
|
|
37012
37244
|
},
|
|
37013
|
-
"openai/gpt-5.3": {
|
|
37014
|
-
// supportsTools: gateway unavailable at probe time — fails closed
|
|
37015
|
-
contextWindow: 128e3,
|
|
37016
|
-
maxOutputTokens: 128e3,
|
|
37017
|
-
supportsTools: false,
|
|
37018
|
-
supportsVision: true
|
|
37019
|
-
},
|
|
37020
37245
|
"openai/gpt-5.3-codex": {
|
|
37021
37246
|
// supportsTools: gateway unavailable at probe time — fails closed; override: 2026-08-29 probe: every request (6 plain + 3 tool attempts) returned a gateway 500, so the probe measured an incident, not the model. Codex's function calling is established by the 2026-07 Terminal-Bench / tau2 calibration trajectories in portfolio.ts. Hosts observing the 500s should drop it with RouterOptions.unavailableModels rather than this snapshot claiming the model cannot call tools.
|
|
37022
37247
|
contextWindow: 4e5,
|
|
@@ -37122,6 +37347,13 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
37122
37347
|
supportsTools: true,
|
|
37123
37348
|
supportsVision: false
|
|
37124
37349
|
},
|
|
37350
|
+
"poolside/laguna-xs-2.1": {
|
|
37351
|
+
// supportsTools: not probed — fails closed
|
|
37352
|
+
contextWindow: 131072,
|
|
37353
|
+
maxOutputTokens: 16384,
|
|
37354
|
+
supportsTools: false,
|
|
37355
|
+
supportsVision: false
|
|
37356
|
+
},
|
|
37125
37357
|
"qwen/qwen3.7-flash": {
|
|
37126
37358
|
contextWindow: 1e6,
|
|
37127
37359
|
maxOutputTokens: 65536,
|
|
@@ -39037,8 +39269,8 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
39037
39269
|
// $0.20/$1.25, 1M ctx
|
|
39038
39270
|
"google/gemini-2.5-flash-lite",
|
|
39039
39271
|
// $0.10/$0.40
|
|
39040
|
-
"nvidia/
|
|
39041
|
-
// FREE backstop — NVIDIA free tier (probed 2026-08-
|
|
39272
|
+
"nvidia/nemotron-3.5-lightning"
|
|
39273
|
+
// FREE backstop — NVIDIA free tier (probed 2026-08-30)
|
|
39042
39274
|
]
|
|
39043
39275
|
},
|
|
39044
39276
|
MEDIUM: {
|
|
@@ -39127,15 +39359,19 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
39127
39359
|
// Eco tier configs - absolute cheapest (blockrun/eco)
|
|
39128
39360
|
ecoTiers: {
|
|
39129
39361
|
SIMPLE: {
|
|
39130
|
-
primary: "nvidia/
|
|
39131
|
-
// FREE — NVIDIA free tier flagship
|
|
39362
|
+
primary: "nvidia/nemotron-3.5-lightning",
|
|
39363
|
+
// FREE — NVIDIA free tier flagship, 1M ctx
|
|
39132
39364
|
fallback: [
|
|
39133
|
-
"nvidia/nemotron-nano-
|
|
39134
|
-
// FREE —
|
|
39365
|
+
"nvidia/nemotron-3-nano-30b",
|
|
39366
|
+
// FREE — fastest free model (~121 tok/s)
|
|
39135
39367
|
// The free head keeps rotting with NVIDIA's hosting (deepseek-v4-flash
|
|
39136
39368
|
// 410 2026-08-12, seed-oss-36b 410 2026-08-03, gpt-oss-120b/20b 400
|
|
39137
|
-
// 2026-08-21
|
|
39138
|
-
//
|
|
39369
|
+
// 2026-08-21, and on 2026-08-30 FOUR of the five visible free models at
|
|
39370
|
+
// once — step-3.7-flash, nemotron-nano-9b-v2 and nemotron-nano-12b-v2-vl
|
|
39371
|
+
// all 410, mistral-nemotron hung). Each retirement retargets the two
|
|
39372
|
+
// free rungs to the current free tier; the paid rungs below never move.
|
|
39373
|
+
// The head follows blockrun's own redirect of the model it replaces, so
|
|
39374
|
+
// the router and the gateway never name different models.
|
|
39139
39375
|
"google/gemini-2.5-flash-lite",
|
|
39140
39376
|
// $0.10/$0.40 — cheapest paid rung
|
|
39141
39377
|
"zai/glm-5.3-flash",
|
|
@@ -39279,7 +39515,7 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
39279
39515
|
// strongest open-weight reasoner
|
|
39280
39516
|
"deepseek/deepseek-chat",
|
|
39281
39517
|
// Cheap, reliable
|
|
39282
|
-
"nvidia/
|
|
39518
|
+
"nvidia/nemotron-3.5-lightning"
|
|
39283
39519
|
// NVIDIA free ultimate backstop
|
|
39284
39520
|
]
|
|
39285
39521
|
},
|
|
@@ -39383,7 +39619,7 @@ ${value.slice(-(scanLimit - prefixLength))}`;
|
|
|
39383
39619
|
// retail high-risk 3/3
|
|
39384
39620
|
"deepseek/deepseek-chat",
|
|
39385
39621
|
// cheap, reliable
|
|
39386
|
-
"nvidia/
|
|
39622
|
+
"nvidia/nemotron-3.5-lightning"
|
|
39387
39623
|
// NVIDIA free ultimate backstop
|
|
39388
39624
|
]
|
|
39389
39625
|
},
|
|
@@ -89514,6 +89750,8 @@ function pickFreeModel(excludeList) {
|
|
|
89514
89750
|
return void 0;
|
|
89515
89751
|
}
|
|
89516
89752
|
function toUpstreamModelId(modelId) {
|
|
89753
|
+
const override = FREE_UPSTREAM_OVERRIDES[modelId];
|
|
89754
|
+
if (override) return override;
|
|
89517
89755
|
if (modelId.startsWith("free/")) {
|
|
89518
89756
|
return "nvidia/" + modelId.slice("free/".length);
|
|
89519
89757
|
}
|
|
@@ -93748,7 +93986,7 @@ data: [DONE]
|
|
|
93748
93986
|
});
|
|
93749
93987
|
}
|
|
93750
93988
|
}
|
|
93751
|
-
var paymentStore, BLOCKRUN_API, BLOCKRUN_SOLANA_API, IMAGE_DIR, AUDIO_DIR, VIDEO_DIR, AUTO_MODEL, ROUTING_PROFILES, FREE_MODELS, FREE_MODEL, MAX_MESSAGES, CONTEXT_LIMIT_KB, HEARTBEAT_INTERVAL_MS, BALANCE_CHECK_TIMEOUT_MS, DEFAULT_REQUEST_TIMEOUT_MS, PER_MODEL_TIMEOUT_MS, REASONING_MODEL_TIMEOUT_MS, REASONING_MODEL_IDS, MAX_FALLBACK_ATTEMPTS, HEALTH_CHECK_TIMEOUT_MS, RATE_LIMIT_COOLDOWN_MS, OVERLOAD_COOLDOWN_MS, PORT_RETRY_ATTEMPTS, PORT_RETRY_DELAY_MS, MODEL_BODY_READ_TIMEOUT_MS, ERROR_BODY_READ_TIMEOUT_MS, ClientDisconnectedError, rateLimitedModels, overloadedModels, perProviderErrors, BALANCE_CHECK_BUFFER, BALANCE_PREFLIGHT_OUTPUT_TOKEN_CAP, PROVIDER_ERROR_PATTERNS, DEGRADED_RESPONSE_PATTERNS, DEGRADED_LOOP_PATTERNS, VALID_ROLES, ROLE_MAPPINGS, VALID_TOOL_ID_PATTERN, KIMI_BLOCK_RE, KIMI_TOKEN_RE, THINKING_TAG_RE, THINKING_BLOCK_RE, BLOCKRUN_MODEL_BY_ID, IMAGE_PRICING, IMAGE_MODEL_IDS, IMAGE_MODEL_SIZES, IMAGE_MODEL_ALIASES, VIDEO_PRICING, PHONE_PRICING;
|
|
93989
|
+
var paymentStore, BLOCKRUN_API, BLOCKRUN_SOLANA_API, IMAGE_DIR, AUDIO_DIR, VIDEO_DIR, AUTO_MODEL, ROUTING_PROFILES, FREE_MODELS, FREE_MODEL, FREE_UPSTREAM_OVERRIDES, MAX_MESSAGES, CONTEXT_LIMIT_KB, HEARTBEAT_INTERVAL_MS, BALANCE_CHECK_TIMEOUT_MS, DEFAULT_REQUEST_TIMEOUT_MS, PER_MODEL_TIMEOUT_MS, REASONING_MODEL_TIMEOUT_MS, REASONING_MODEL_IDS, MAX_FALLBACK_ATTEMPTS, HEALTH_CHECK_TIMEOUT_MS, RATE_LIMIT_COOLDOWN_MS, OVERLOAD_COOLDOWN_MS, PORT_RETRY_ATTEMPTS, PORT_RETRY_DELAY_MS, MODEL_BODY_READ_TIMEOUT_MS, ERROR_BODY_READ_TIMEOUT_MS, ClientDisconnectedError, rateLimitedModels, overloadedModels, perProviderErrors, BALANCE_CHECK_BUFFER, BALANCE_PREFLIGHT_OUTPUT_TOKEN_CAP, PROVIDER_ERROR_PATTERNS, DEGRADED_RESPONSE_PATTERNS, DEGRADED_LOOP_PATTERNS, VALID_ROLES, ROLE_MAPPINGS, VALID_TOOL_ID_PATTERN, KIMI_BLOCK_RE, KIMI_TOKEN_RE, THINKING_TAG_RE, THINKING_BLOCK_RE, BLOCKRUN_MODEL_BY_ID, IMAGE_PRICING, IMAGE_MODEL_IDS, IMAGE_MODEL_SIZES, IMAGE_MODEL_ALIASES, VIDEO_PRICING, PHONE_PRICING;
|
|
93752
93990
|
var init_proxy = __esm({
|
|
93753
93991
|
"src/proxy.ts"() {
|
|
93754
93992
|
"use strict";
|
|
@@ -93799,18 +94037,26 @@ var init_proxy = __esm({
|
|
|
93799
94037
|
"premium"
|
|
93800
94038
|
]);
|
|
93801
94039
|
FREE_MODELS = /* @__PURE__ */ new Set([
|
|
93802
|
-
"free/
|
|
93803
|
-
//
|
|
93804
|
-
"free/nemotron-nano-
|
|
93805
|
-
//
|
|
93806
|
-
"free/
|
|
93807
|
-
//
|
|
94040
|
+
"free/nemotron-3.5-lightning",
|
|
94041
|
+
// free-tier default — 1M ctx, thinking mode
|
|
94042
|
+
"free/nemotron-3-nano-30b",
|
|
94043
|
+
// fastest free model (~121 tok/s)
|
|
94044
|
+
"free/laguna-xs-2.1",
|
|
94045
|
+
// coding, ~161 tok/s — on our NVIDIA key
|
|
94046
|
+
"free/north-mini-code",
|
|
94047
|
+
// coding, 607ms median — OpenRouter $0 pool
|
|
93808
94048
|
"free/nemotron-3-nano-omni-30b-a3b-reasoning",
|
|
93809
94049
|
// vision (text/image/video/audio)
|
|
93810
|
-
"free/nemotron-
|
|
93811
|
-
//
|
|
94050
|
+
"free/nemotron-3-ultra-550b",
|
|
94051
|
+
// largest free model, 1M ctx — but slow + flaky
|
|
94052
|
+
"free/llama-3.2-11b-vision"
|
|
94053
|
+
// only free Llama left; slowest, so last
|
|
93812
94054
|
]);
|
|
93813
|
-
FREE_MODEL = "free/
|
|
94055
|
+
FREE_MODEL = "free/nemotron-3.5-lightning";
|
|
94056
|
+
FREE_UPSTREAM_OVERRIDES = {
|
|
94057
|
+
"free/north-mini-code": "cohere/north-mini-code",
|
|
94058
|
+
"free/laguna-xs-2.1": "poolside/laguna-xs-2.1"
|
|
94059
|
+
};
|
|
93814
94060
|
MAX_MESSAGES = 200;
|
|
93815
94061
|
CONTEXT_LIMIT_KB = 5120;
|
|
93816
94062
|
HEARTBEAT_INTERVAL_MS = 2e3;
|