@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/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/mistral-nemotron",
97
- "free/step-3.7-flash",
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 step-3.7-flash — the same model @blockrun/router-core
413
- // opens the eco SIMPLE tier on. It replaced gpt-oss-120b on 2026-08-29:
414
- // gpt-oss-120b went dead upstream on 2026-08-16 (NVIDIA still LISTS it, but a
415
- // completion hangs until the client gives up — blockrun #391 retargeted its
416
- // whole free cascade off it, and the gateway now answers 400 Unknown model
417
- // for the `free/` id). Pins that NAME gpt-oss stay routable below — the
418
- // gateway server-redirects them — but nothing generic may land on it.
419
- nvidia: "free/step-3.7-flash",
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/gpt-oss-120b",
433
- "free/deepseek-v3.2": "free/gpt-oss-120b",
434
- "nvidia/deepseek-v4-pro": "free/gpt-oss-120b",
435
- "free/deepseek-v4-pro": "free/gpt-oss-120b",
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/gpt-oss-120b",
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/gpt-oss-120b",
470
- "free/nemotron-ultra-253b": "free/gpt-oss-120b",
471
- "free/devstral-2-123b": "free/gpt-oss-120b",
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/gpt-oss-120b",
483
- "deepseek-v4-pro": "free/gpt-oss-120b",
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/gpt-oss-120b",
496
+ "v4-pro": "free/nemotron-3.5-lightning",
487
497
  "v4-flash": "free/deepseek-v4-flash",
488
- "mistral-free": "free/mistral-nemotron",
489
- // mistral-large-3-675b EOL'd 2026-07-28 → last live free Mistral (blockrun demoted its /free-mistral primary the same way)
490
- "glm-free": "free/gpt-oss-120b",
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
- "llama-free": "free/gpt-oss-120b",
493
- // no live free Llama left (maverick died 2026-07)
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/step-3.7-flash",
511
+ "qwen-coder": "free/nemotron-3.5-lightning",
497
512
  // no live free Qwen; follows the free default
498
- "qwen-coder-free": "free/step-3.7-flash",
499
- "qwen-thinking": "free/step-3.7-flash",
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/mistral-nemotron",
505
- // closest live Mistral-family free model
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
- "coder-free": "free/step-3.7-flash",
511
- // generic "a free coder" → follows the free default
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
- "nemotron-nano-9b": "free/nemotron-nano-9b-v2",
516
- "nemotron-nano": "free/nemotron-nano-9b-v2",
517
- "nemotron-nano-vl": "free/nemotron-nano-12b-v2-vl",
518
- "nano-vl": "free/nemotron-nano-12b-v2-vl",
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, gpt-oss-120b hung upstream; see the NVIDIA block above).
526
- nemotron: "free/nemotron-3-nano-omni-30b-a3b-reasoning",
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/step-3.7-flash",
529
- "nemotron-253b": "free/step-3.7-flash",
530
- "nemotron-super": "free/step-3.7-flash",
531
- "nemotron-49b": "free/step-3.7-flash",
532
- "nemotron-120b": "free/step-3.7-flash",
533
- devstral: "free/step-3.7-flash",
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/step-3.7-flash",
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/step-3.7-flash",
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: "zai/glm-5.2",
549
- // bare alias tracks newest flagship (launched 2026-06-16)
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 Step 3.7 Flash",
671
+ name: "Free \u2192 Nemotron 3.5 Lightning",
612
672
  inputPrice: 0,
613
673
  outputPrice: 0,
614
- contextWindow: 131072,
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: 65536,
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: 32768,
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: 4e5,
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: 4e5,
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: 32768,
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: 16e3,
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: 16384,
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: 16384,
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: 16384,
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: 65536,
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: 65536,
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: 8192,
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: 2e5,
1037
- maxOutput: 64e3,
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: 32e3,
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: 105e4,
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: 105e4,
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: 1e6,
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: 105e4,
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: 1e6,
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: 1e6,
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: 1e6,
1260
- maxOutput: 8192,
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: 1e6,
1274
- maxOutput: 8192,
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: 1e6,
1284
- maxOutput: 8192,
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: 16384,
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: 8192,
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: 131072,
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: 131072,
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: 131072,
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: 131072,
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: 131072,
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: 131072,
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: strong instruction following, 131K context.
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
- // Launched 2026-06-16 — Z.AI's newest flagship. 1M-token context,
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: 262144,
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/mistral-nemotron": {
36927
- // supportsTools: gateway unavailable at probe time — fails closed
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-nano-12b-v2-vl": {
36940
- // supportsTools: gateway unavailable at probe time — fails closed
36941
- contextWindow: 131072,
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/step-3.7-flash": {
36953
- contextWindow: 131072,
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/step-3.7-flash"
39041
- // FREE backstop — NVIDIA free tier (probed 2026-08-21)
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/step-3.7-flash",
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-9b-v2",
39134
- // FREE — compact + fast, high-volume light tasks
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). Each retirement retargets the two free rungs to the
39138
- // current free tier; the paid rungs below never move.
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/step-3.7-flash"
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/step-3.7-flash"
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/step-3.7-flash",
93803
- // reasoning-focused — free-tier flagship
93804
- "free/nemotron-nano-9b-v2",
93805
- // fast lightweight generalist (~0.7s)
93806
- "free/mistral-nemotron",
93807
- // strong instruction following
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-nano-12b-v2-vl"
93811
- // vision-language (text + image)
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/step-3.7-flash";
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;