@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/cli.js CHANGED
@@ -35033,6 +35033,13 @@ ${value.slice(-(scanLimit - prefixLength))}`;
35033
35033
  supportsTools: true,
35034
35034
  supportsVision: true
35035
35035
  },
35036
+ "cohere/north-mini-code": {
35037
+ // supportsTools: not probed — fails closed
35038
+ contextWindow: 256e3,
35039
+ maxOutputTokens: 16384,
35040
+ supportsTools: false,
35041
+ supportsVision: false
35042
+ },
35036
35043
  "deepseek/deepseek-chat": {
35037
35044
  contextWindow: 1048576,
35038
35045
  maxOutputTokens: 65536,
@@ -35123,8 +35130,15 @@ ${value.slice(-(scanLimit - prefixLength))}`;
35123
35130
  supportsTools: true,
35124
35131
  supportsVision: true
35125
35132
  },
35126
- "nvidia/mistral-nemotron": {
35127
- // supportsTools: gateway unavailable at probe time — fails closed
35133
+ "nvidia/llama-3.2-11b-vision": {
35134
+ // supportsTools: not probed — fails closed
35135
+ contextWindow: 128e3,
35136
+ maxOutputTokens: 16384,
35137
+ supportsTools: false,
35138
+ supportsVision: true
35139
+ },
35140
+ "nvidia/nemotron-3-nano-30b": {
35141
+ // supportsTools: not probed — fails closed
35128
35142
  contextWindow: 131072,
35129
35143
  maxOutputTokens: 16384,
35130
35144
  supportsTools: false,
@@ -35136,21 +35150,16 @@ ${value.slice(-(scanLimit - prefixLength))}`;
35136
35150
  supportsTools: false,
35137
35151
  supportsVision: true
35138
35152
  },
35139
- "nvidia/nemotron-nano-12b-v2-vl": {
35140
- // supportsTools: gateway unavailable at probe time — fails closed
35141
- contextWindow: 131072,
35142
- maxOutputTokens: 16384,
35143
- supportsTools: false,
35144
- supportsVision: true
35145
- },
35146
- "nvidia/nemotron-nano-9b-v2": {
35147
- contextWindow: 131072,
35153
+ "nvidia/nemotron-3-ultra-550b": {
35154
+ // supportsTools: not probed — fails closed
35155
+ contextWindow: 1e6,
35148
35156
  maxOutputTokens: 16384,
35149
35157
  supportsTools: false,
35150
35158
  supportsVision: false
35151
35159
  },
35152
- "nvidia/step-3.7-flash": {
35153
- contextWindow: 131072,
35160
+ "nvidia/nemotron-3.5-lightning": {
35161
+ // supportsTools: not probed — fails closed
35162
+ contextWindow: 1e6,
35154
35163
  maxOutputTokens: 16384,
35155
35164
  supportsTools: false,
35156
35165
  supportsVision: false
@@ -35210,13 +35219,6 @@ ${value.slice(-(scanLimit - prefixLength))}`;
35210
35219
  supportsTools: false,
35211
35220
  supportsVision: true
35212
35221
  },
35213
- "openai/gpt-5.3": {
35214
- // supportsTools: gateway unavailable at probe time — fails closed
35215
- contextWindow: 128e3,
35216
- maxOutputTokens: 128e3,
35217
- supportsTools: false,
35218
- supportsVision: true
35219
- },
35220
35222
  "openai/gpt-5.3-codex": {
35221
35223
  // 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.
35222
35224
  contextWindow: 4e5,
@@ -35322,6 +35324,13 @@ ${value.slice(-(scanLimit - prefixLength))}`;
35322
35324
  supportsTools: true,
35323
35325
  supportsVision: false
35324
35326
  },
35327
+ "poolside/laguna-xs-2.1": {
35328
+ // supportsTools: not probed — fails closed
35329
+ contextWindow: 131072,
35330
+ maxOutputTokens: 16384,
35331
+ supportsTools: false,
35332
+ supportsVision: false
35333
+ },
35325
35334
  "qwen/qwen3.7-flash": {
35326
35335
  contextWindow: 1e6,
35327
35336
  maxOutputTokens: 65536,
@@ -37237,8 +37246,8 @@ ${value.slice(-(scanLimit - prefixLength))}`;
37237
37246
  // $0.20/$1.25, 1M ctx
37238
37247
  "google/gemini-2.5-flash-lite",
37239
37248
  // $0.10/$0.40
37240
- "nvidia/step-3.7-flash"
37241
- // FREE backstop — NVIDIA free tier (probed 2026-08-21)
37249
+ "nvidia/nemotron-3.5-lightning"
37250
+ // FREE backstop — NVIDIA free tier (probed 2026-08-30)
37242
37251
  ]
37243
37252
  },
37244
37253
  MEDIUM: {
@@ -37327,15 +37336,19 @@ ${value.slice(-(scanLimit - prefixLength))}`;
37327
37336
  // Eco tier configs - absolute cheapest (blockrun/eco)
37328
37337
  ecoTiers: {
37329
37338
  SIMPLE: {
37330
- primary: "nvidia/step-3.7-flash",
37331
- // FREE — NVIDIA free tier flagship
37339
+ primary: "nvidia/nemotron-3.5-lightning",
37340
+ // FREE — NVIDIA free tier flagship, 1M ctx
37332
37341
  fallback: [
37333
- "nvidia/nemotron-nano-9b-v2",
37334
- // FREE — compact + fast, high-volume light tasks
37342
+ "nvidia/nemotron-3-nano-30b",
37343
+ // FREE — fastest free model (~121 tok/s)
37335
37344
  // The free head keeps rotting with NVIDIA's hosting (deepseek-v4-flash
37336
37345
  // 410 2026-08-12, seed-oss-36b 410 2026-08-03, gpt-oss-120b/20b 400
37337
- // 2026-08-21). Each retirement retargets the two free rungs to the
37338
- // current free tier; the paid rungs below never move.
37346
+ // 2026-08-21, and on 2026-08-30 FOUR of the five visible free models at
37347
+ // once — step-3.7-flash, nemotron-nano-9b-v2 and nemotron-nano-12b-v2-vl
37348
+ // all 410, mistral-nemotron hung). Each retirement retargets the two
37349
+ // free rungs to the current free tier; the paid rungs below never move.
37350
+ // The head follows blockrun's own redirect of the model it replaces, so
37351
+ // the router and the gateway never name different models.
37339
37352
  "google/gemini-2.5-flash-lite",
37340
37353
  // $0.10/$0.40 — cheapest paid rung
37341
37354
  "zai/glm-5.3-flash",
@@ -37479,7 +37492,7 @@ ${value.slice(-(scanLimit - prefixLength))}`;
37479
37492
  // strongest open-weight reasoner
37480
37493
  "deepseek/deepseek-chat",
37481
37494
  // Cheap, reliable
37482
- "nvidia/step-3.7-flash"
37495
+ "nvidia/nemotron-3.5-lightning"
37483
37496
  // NVIDIA free ultimate backstop
37484
37497
  ]
37485
37498
  },
@@ -37583,7 +37596,7 @@ ${value.slice(-(scanLimit - prefixLength))}`;
37583
37596
  // retail high-risk 3/3
37584
37597
  "deepseek/deepseek-chat",
37585
37598
  // cheap, reliable
37586
- "nvidia/step-3.7-flash"
37599
+ "nvidia/nemotron-3.5-lightning"
37587
37600
  // NVIDIA free ultimate backstop
37588
37601
  ]
37589
37602
  },
@@ -37665,6 +37678,8 @@ var init_top_models = __esm({
37665
37678
  "xai/grok-4.5",
37666
37679
  "xai/grok-4.3",
37667
37680
  "xai/grok-build-0.1",
37681
+ "zai/glm-5.3",
37682
+ "zai/glm-5.3-flash",
37668
37683
  "zai/glm-5.2",
37669
37684
  "zai/glm-5.1",
37670
37685
  "zai/glm-5-turbo",
@@ -37676,11 +37691,13 @@ var init_top_models = __esm({
37676
37691
  "deepseek/deepseek-v4-pro",
37677
37692
  "deepseek/deepseek-chat",
37678
37693
  "deepseek/deepseek-reasoner",
37694
+ "free/nemotron-3.5-lightning",
37695
+ "free/nemotron-3-nano-30b",
37696
+ "free/laguna-xs-2.1",
37697
+ "free/north-mini-code",
37679
37698
  "free/nemotron-3-nano-omni-30b-a3b-reasoning",
37680
- "free/mistral-nemotron",
37681
- "free/step-3.7-flash",
37682
- "free/nemotron-nano-9b-v2",
37683
- "free/nemotron-nano-12b-v2-vl"
37699
+ "free/nemotron-3-ultra-550b",
37700
+ "free/llama-3.2-11b-vision"
37684
37701
  ];
37685
37702
  }
37686
37703
  });
@@ -37993,14 +38010,20 @@ var init_models = __esm({
37993
38010
  "xai/grok-3-fast": "xai/grok-4-fast-reasoning",
37994
38011
  // delisted (too expensive)
37995
38012
  // NVIDIA — backward compat aliases (nvidia/xxx → free/xxx)
37996
- // Default free model is step-3.7-flash — the same model @blockrun/router-core
37997
- // opens the eco SIMPLE tier on. It replaced gpt-oss-120b on 2026-08-29:
37998
- // gpt-oss-120b went dead upstream on 2026-08-16 (NVIDIA still LISTS it, but a
37999
- // completion hangs until the client gives up — blockrun #391 retargeted its
38000
- // whole free cascade off it, and the gateway now answers 400 Unknown model
38001
- // for the `free/` id). Pins that NAME gpt-oss stay routable below — the
38002
- // gateway server-redirects them — but nothing generic may land on it.
38003
- nvidia: "free/step-3.7-flash",
38013
+ // Default free model is nemotron-3.5-lightning — the same model
38014
+ // @blockrun/router-core opens the eco SIMPLE tier on. It replaced
38015
+ // step-3.7-flash on 2026-08-30, when NVIDIA retired FOUR of the five visible
38016
+ // free models in a single sweep (blockrun #448): step-3.7-flash,
38017
+ // nemotron-nano-9b-v2 and nemotron-nano-12b-v2-vl all published 410 Gone, and
38018
+ // mistral-nemotron went the quiet way — still listed, >150s and zero bytes.
38019
+ // We follow blockrun's own retarget of step-3.7-flash rather than picking a
38020
+ // different survivor, so the proxy and the gateway name the same model.
38021
+ //
38022
+ // gpt-oss-120b/20b RECOVERED on the same probe run and are reachable again,
38023
+ // but they stay withheld from blockrun's public catalog over NVIDIA's
38024
+ // prompt-retention terms — so pins that NAME gpt-oss stay routable below and
38025
+ // nothing generic may land on it.
38026
+ nvidia: "free/nemotron-3.5-lightning",
38004
38027
  "gpt-120b": "free/gpt-oss-120b",
38005
38028
  // names the model itself — gateway redirects
38006
38029
  "gpt-20b": "free/gpt-oss-20b",
@@ -38013,10 +38036,10 @@ var init_models = __esm({
38013
38036
  // straight to gpt-oss-120b. Ids naming v4-flash itself keep the real id (the
38014
38037
  // gateway redirects them); the v3.2/v4-pro ids follow blockrun's retarget
38015
38038
  // rather than chaining through a second dead model.
38016
- "nvidia/deepseek-v3.2": "free/gpt-oss-120b",
38017
- "free/deepseek-v3.2": "free/gpt-oss-120b",
38018
- "nvidia/deepseek-v4-pro": "free/gpt-oss-120b",
38019
- "free/deepseek-v4-pro": "free/gpt-oss-120b",
38039
+ "nvidia/deepseek-v3.2": "free/nemotron-3.5-lightning",
38040
+ "free/deepseek-v3.2": "free/nemotron-3.5-lightning",
38041
+ "nvidia/deepseek-v4-pro": "free/nemotron-3.5-lightning",
38042
+ "free/deepseek-v4-pro": "free/nemotron-3.5-lightning",
38020
38043
  "nvidia/deepseek-v4-flash": "free/deepseek-v4-flash",
38021
38044
  "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning": "free/nemotron-3-nano-omni-30b-a3b-reasoning",
38022
38045
  // qwen3-coder-480b retired (NVIDIA EOL 2026-06-14). Its server-side redirect used
@@ -38043,16 +38066,16 @@ var init_models = __esm({
38043
38066
  // Retired free IDs → successors (mirror blockrun's 2026-07-17 redirect map:
38044
38067
  // ultra-253b redirects to gpt-oss-120b; the two supers have NO server redirect —
38045
38068
  // they stay hidden-but-routable, so their pins pass through to the real ids).
38046
- "nvidia/nemotron-ultra-253b": "free/gpt-oss-120b",
38069
+ "nvidia/nemotron-ultra-253b": "free/nemotron-3.5-lightning",
38047
38070
  // mistral-large-3-675b un-retired 2026-06-14, then EOL'd for good 2026-07-28:
38048
38071
  // blockrun's re-probe got HTTP 410 Gone from NVIDIA on both passes (baa967b).
38049
38072
  // Pin stays routable — the gateway redirects it to gpt-oss-120b.
38050
38073
  "nvidia/mistral-large-3-675b": "free/mistral-large-3-675b",
38051
38074
  "nvidia/qwen3.5-122b-a10b": "free/qwen3.5-122b-a10b",
38052
38075
  // devstral-2-123b died upstream; blockrun redirects it to gpt-oss-120b (2026-07-17 map)
38053
- "nvidia/devstral-2-123b": "free/gpt-oss-120b",
38054
- "free/nemotron-ultra-253b": "free/gpt-oss-120b",
38055
- "free/devstral-2-123b": "free/gpt-oss-120b",
38076
+ "nvidia/devstral-2-123b": "free/nemotron-3.5-lightning",
38077
+ "free/nemotron-ultra-253b": "free/nemotron-3.5-lightning",
38078
+ "free/devstral-2-123b": "free/nemotron-3.5-lightning",
38056
38079
  // Explicit-ish pins — dead upstream since 2026-07-28, gateway redirects to gpt-oss-120b
38057
38080
  "mistral-large": "free/mistral-large-3-675b",
38058
38081
  "mistral-large-3-675b": "free/mistral-large-3-675b",
@@ -38063,74 +38086,124 @@ var init_models = __esm({
38063
38086
  // gateway's retarget (blockrun's /free-deepseek page points at gpt-oss-120b
38064
38087
  // too). Shorthands naming v4-flash itself stay on the real id — the gateway
38065
38088
  // redirects them, same treatment as seed-oss/mistral-large pins.
38066
- "deepseek-free": "free/gpt-oss-120b",
38067
- "deepseek-v4-pro": "free/gpt-oss-120b",
38089
+ "deepseek-free": "free/nemotron-3.5-lightning",
38090
+ "deepseek-v4-pro": "free/nemotron-3.5-lightning",
38068
38091
  // free shorthand; pro dead upstream (410)
38069
38092
  "deepseek-v4-flash": "free/deepseek-v4-flash",
38070
- "v4-pro": "free/gpt-oss-120b",
38093
+ "v4-pro": "free/nemotron-3.5-lightning",
38071
38094
  "v4-flash": "free/deepseek-v4-flash",
38072
- "mistral-free": "free/mistral-nemotron",
38073
- // mistral-large-3-675b EOL'd 2026-07-28 → last live free Mistral (blockrun demoted its /free-mistral primary the same way)
38074
- "glm-free": "free/gpt-oss-120b",
38095
+ // mistral-nemotron died 2026-08-30 and it was the LAST free Mistral anywhere —
38096
+ // blockrun's own /free-mistral page now says so plainly instead of naming one.
38097
+ // Point the generic shorthand at the free default rather than advertise a
38098
+ // Mistral we cannot serve.
38099
+ "mistral-free": "free/nemotron-3.5-lightning",
38100
+ "glm-free": "free/nemotron-3.5-lightning",
38075
38101
  // seed-oss-36b (the prior target) EOL'd 2026-08-03
38076
- "llama-free": "free/gpt-oss-120b",
38077
- // no live free Llama left (maverick died 2026-07)
38102
+ // A free Llama exists again: nemotron-super-49b (Llama-3.3-based) hit 410 on
38103
+ // 2026-08-30, and a 12-model sweep of what NVIDIA still serves found Llama 3.2
38104
+ // 11B Vision as the only one that finishes a real completion.
38105
+ "llama-free": "free/llama-3.2-11b-vision",
38078
38106
  // qwen3-coder-480b retired 2026-06-14 → seed-oss-36b, which then EOL'd 2026-08-03.
38079
38107
  // Follow the gateway's own retarget rather than chaining to a second dead model.
38080
- "qwen-coder": "free/step-3.7-flash",
38108
+ "qwen-coder": "free/nemotron-3.5-lightning",
38081
38109
  // no live free Qwen; follows the free default
38082
- "qwen-coder-free": "free/step-3.7-flash",
38083
- "qwen-thinking": "free/step-3.7-flash",
38110
+ "qwen-coder-free": "free/nemotron-3.5-lightning",
38111
+ "qwen-thinking": "free/nemotron-3.5-lightning",
38084
38112
  // qwen3-next died 2026-07-17; no live free Qwen left
38085
38113
  "qwen3-next": "free/qwen3-next-80b-a3b-instruct",
38086
38114
  // explicit-ish pin — gateway redirects
38087
38115
  "qwen3-next-80b": "free/qwen3-next-80b-a3b-instruct",
38088
- "mistral-small": "free/mistral-nemotron",
38089
- // closest live Mistral-family free model
38116
+ "mistral-small": "free/nemotron-3.5-lightning",
38117
+ // no free Mistral left upstream (2026-08-30)
38090
38118
  // New live free models (2026-06-14 BlockRun free-tier refresh)
38091
38119
  // seed-oss pins name the model itself — kept routable, the gateway redirects them.
38092
38120
  "seed-oss": "free/seed-oss-36b",
38093
38121
  "seed-oss-36b": "free/seed-oss-36b",
38094
- "coder-free": "free/step-3.7-flash",
38095
- // generic "a free coder" → follows the free default
38122
+ // A free coder exists again — two of them, both sub-second. north-mini-code is
38123
+ // the faster (607ms median) and 256K ctx against laguna's 131K.
38124
+ "coder-free": "free/north-mini-code",
38096
38125
  "mistral-nemotron": "free/mistral-nemotron",
38097
38126
  "step-flash": "free/step-3.7-flash",
38098
38127
  "step-3.7-flash": "free/step-3.7-flash",
38099
- "nemotron-nano-9b": "free/nemotron-nano-9b-v2",
38100
- "nemotron-nano": "free/nemotron-nano-9b-v2",
38101
- "nemotron-nano-vl": "free/nemotron-nano-12b-v2-vl",
38102
- "nano-vl": "free/nemotron-nano-12b-v2-vl",
38128
+ // nemotron-nano-9b-v2 hit 410 on 2026-08-30; the generic shorthands follow
38129
+ // blockrun's redirect to its replacement, while the 9b-naming pins above stay
38130
+ // on the real id (the gateway resolves them).
38131
+ "nemotron-nano-9b": "free/nemotron-3-nano-30b",
38132
+ "nemotron-nano": "free/nemotron-3-nano-30b",
38133
+ // nemotron-nano-12b-v2-vl hit 410 the same day; vision in, vision out — the
38134
+ // target is blockrun's own, and nano-omni is the only vision-capable free
38135
+ // model left.
38136
+ "nemotron-nano-vl": "free/nemotron-3-nano-omni-30b-a3b-reasoning",
38137
+ "nano-vl": "free/nemotron-3-nano-omni-30b-a3b-reasoning",
38103
38138
  // Vision-capable free models
38104
38139
  "nemotron-omni": "free/nemotron-3-nano-omni-30b-a3b-reasoning",
38105
38140
  "nano-omni": "free/nemotron-3-nano-omni-30b-a3b-reasoning",
38106
38141
  "vision-free": "free/nemotron-3-nano-omni-30b-a3b-reasoning",
38107
38142
  // Retired shorthand aliases redirect to live successors. The catch-all target
38108
38143
  // moved llama-4-maverick → gpt-oss-120b (2026-07-17) → step-3.7-flash
38109
- // (2026-08-29, gpt-oss-120b hung upstream; see the NVIDIA block above).
38110
- nemotron: "free/nemotron-3-nano-omni-30b-a3b-reasoning",
38144
+ // (2026-08-29) → nemotron-3.5-lightning (2026-08-30, blockrun #448).
38145
+ nemotron: "free/nemotron-3.5-lightning",
38111
38146
  // strongest live Nemotron
38112
- "nemotron-ultra": "free/step-3.7-flash",
38113
- "nemotron-253b": "free/step-3.7-flash",
38114
- "nemotron-super": "free/step-3.7-flash",
38115
- "nemotron-49b": "free/step-3.7-flash",
38116
- "nemotron-120b": "free/step-3.7-flash",
38117
- devstral: "free/step-3.7-flash",
38147
+ "nemotron-ultra": "free/nemotron-3.5-lightning",
38148
+ "nemotron-253b": "free/nemotron-3.5-lightning",
38149
+ "nemotron-super": "free/nemotron-3.5-lightning",
38150
+ "nemotron-49b": "free/nemotron-3.5-lightning",
38151
+ "nemotron-120b": "free/nemotron-3.5-lightning",
38152
+ devstral: "free/nemotron-3.5-lightning",
38118
38153
  // seed-oss-36b EOL'd 2026-08-03
38119
- "devstral-2": "free/step-3.7-flash",
38154
+ "devstral-2": "free/nemotron-3.5-lightning",
38120
38155
  maverick: "free/llama-4-maverick",
38121
38156
  // explicit-ish pin — gateway redirects
38157
+ // ── The 2026-08-30 free lineup (blockrun #448) ────────────────────────────
38158
+ // nvidia/* bridges for the four NVIDIA-hosted additions.
38159
+ "nvidia/nemotron-3.5-lightning": "free/nemotron-3.5-lightning",
38160
+ "nvidia/nemotron-3-nano-30b": "free/nemotron-3-nano-30b",
38161
+ "nvidia/nemotron-3-ultra-550b": "free/nemotron-3-ultra-550b",
38162
+ "nvidia/llama-3.2-11b-vision": "free/llama-3.2-11b-vision",
38163
+ // The two non-NVIDIA free models keep the `free/` picker convention; their
38164
+ // real upstream ids are accepted as pins and rewritten in toUpstreamModelId
38165
+ // (see FREE_UPSTREAM_OVERRIDES in proxy.ts).
38166
+ "cohere/north-mini-code": "free/north-mini-code",
38167
+ "poolside/laguna-xs-2.1": "free/laguna-xs-2.1",
38168
+ // Shorthands.
38169
+ lightning: "free/nemotron-3.5-lightning",
38170
+ "nemotron-lightning": "free/nemotron-3.5-lightning",
38171
+ "nemotron-3.5-lightning": "free/nemotron-3.5-lightning",
38172
+ "nano-30b": "free/nemotron-3-nano-30b",
38173
+ "nemotron-nano-30b": "free/nemotron-3-nano-30b",
38174
+ "ultra-550b": "free/nemotron-3-ultra-550b",
38175
+ "nemotron-ultra-550b": "free/nemotron-3-ultra-550b",
38176
+ "llama-vision": "free/llama-3.2-11b-vision",
38177
+ "llama-3.2-vision": "free/llama-3.2-11b-vision",
38178
+ "north-mini": "free/north-mini-code",
38179
+ "north-mini-code": "free/north-mini-code",
38180
+ laguna: "free/laguna-xs-2.1",
38181
+ "laguna-xs": "free/laguna-xs-2.1",
38122
38182
  // `free` = the free-tier default. Must equal router-core's ecoTiers.SIMPLE
38123
38183
  // primary and the head of proxy.ts FREE_MODELS so `/model free`, the eco
38124
38184
  // profile and the budget-cap free fallback all agree on one live model.
38125
- free: "free/step-3.7-flash",
38185
+ free: "free/nemotron-3.5-lightning",
38126
38186
  // MiniMax (minimax → current flagship: M3)
38127
38187
  minimax: "minimax/minimax-m3",
38128
38188
  "minimax-m3": "minimax/minimax-m3",
38129
38189
  "minimax-m2.7": "minimax/minimax-m2.7",
38130
38190
  "minimax-m2.5": "minimax/minimax-m2.5",
38131
38191
  // Z.AI GLM-5
38132
- glm: "zai/glm-5.2",
38133
- // bare alias tracks newest flagship (launched 2026-06-16)
38192
+ // Bare `glm` PROMOTED 5.2 → 5.3 (2026-08-30). Same rule as `opus` 4.8 → 5: the
38193
+ // cost tradeoff is zero — identical $1.40/$4.40 AND an identical 1M ctx /
38194
+ // 131072 maxOutput envelope, so nothing can bill or truncate differently for a
38195
+ // caller who never typed a version. blockrun's own copy already names glm-5.3
38196
+ // the Z.AI flagship, so leaving `glm` on 5.2 would make the proxy disagree
38197
+ // with the gateway it fronts. `glm-5.2` and every other version pin still
38198
+ // resolve to their own model.
38199
+ glm: "zai/glm-5.3",
38200
+ "glm-5.3": "zai/glm-5.3",
38201
+ "glm-5-3": "zai/glm-5.3",
38202
+ // GLM-5.3 Flash — Z.AI's first natively multimodal GLM-5. Also router-core's
38203
+ // eco MEDIUM and COMPLEX primary.
38204
+ "glm-5.3-flash": "zai/glm-5.3-flash",
38205
+ "glm-5-3-flash": "zai/glm-5.3-flash",
38206
+ "glm-flash": "zai/glm-5.3-flash",
38134
38207
  "glm-5.2": "zai/glm-5.2",
38135
38208
  "glm-5": "zai/glm-5",
38136
38209
  "glm-5.1": "zai/glm-5.1",
@@ -38192,10 +38265,10 @@ var init_models = __esm({
38192
38265
  },
38193
38266
  {
38194
38267
  id: "free",
38195
- name: "Free \u2192 Step 3.7 Flash",
38268
+ name: "Free \u2192 Nemotron 3.5 Lightning",
38196
38269
  inputPrice: 0,
38197
38270
  outputPrice: 0,
38198
- contextWindow: 131072,
38271
+ contextWindow: 1e6,
38199
38272
  maxOutput: 16384,
38200
38273
  reasoning: true
38201
38274
  },
@@ -38236,7 +38309,7 @@ var init_models = __esm({
38236
38309
  inputPrice: 0.25,
38237
38310
  outputPrice: 2,
38238
38311
  contextWindow: 2e5,
38239
- maxOutput: 65536,
38312
+ maxOutput: 128e3,
38240
38313
  toolCalling: true
38241
38314
  },
38242
38315
  {
@@ -38246,7 +38319,7 @@ var init_models = __esm({
38246
38319
  inputPrice: 0.05,
38247
38320
  outputPrice: 0.4,
38248
38321
  contextWindow: 128e3,
38249
- maxOutput: 32768,
38322
+ maxOutput: 128e3,
38250
38323
  toolCalling: true,
38251
38324
  deprecated: true,
38252
38325
  fallbackModel: "openai/gpt-5.4-nano"
@@ -38407,7 +38480,7 @@ var init_models = __esm({
38407
38480
  version: "5.4",
38408
38481
  inputPrice: 2.5,
38409
38482
  outputPrice: 15,
38410
- contextWindow: 4e5,
38483
+ contextWindow: 105e4,
38411
38484
  maxOutput: 128e3,
38412
38485
  reasoning: true,
38413
38486
  vision: true,
@@ -38432,7 +38505,7 @@ var init_models = __esm({
38432
38505
  version: "5.4",
38433
38506
  inputPrice: 30,
38434
38507
  outputPrice: 180,
38435
- contextWindow: 4e5,
38508
+ contextWindow: 105e4,
38436
38509
  maxOutput: 128e3,
38437
38510
  reasoning: true,
38438
38511
  vision: true,
@@ -38445,7 +38518,7 @@ var init_models = __esm({
38445
38518
  inputPrice: 0.2,
38446
38519
  outputPrice: 1.25,
38447
38520
  contextWindow: 105e4,
38448
- maxOutput: 32768,
38521
+ maxOutput: 128e3,
38449
38522
  toolCalling: true
38450
38523
  },
38451
38524
  // OpenAI GPT-5.3 Family
@@ -38456,7 +38529,7 @@ var init_models = __esm({
38456
38529
  inputPrice: 1.75,
38457
38530
  outputPrice: 14,
38458
38531
  contextWindow: 128e3,
38459
- maxOutput: 16e3,
38532
+ maxOutput: 128e3,
38460
38533
  reasoning: true,
38461
38534
  vision: true,
38462
38535
  agentic: true,
@@ -38482,7 +38555,7 @@ var init_models = __esm({
38482
38555
  inputPrice: 2,
38483
38556
  outputPrice: 8,
38484
38557
  contextWindow: 128e3,
38485
- maxOutput: 16384,
38558
+ maxOutput: 32768,
38486
38559
  vision: true,
38487
38560
  toolCalling: true
38488
38561
  },
@@ -38493,7 +38566,7 @@ var init_models = __esm({
38493
38566
  inputPrice: 0.4,
38494
38567
  outputPrice: 1.6,
38495
38568
  contextWindow: 128e3,
38496
- maxOutput: 16384,
38569
+ maxOutput: 32768,
38497
38570
  toolCalling: true
38498
38571
  },
38499
38572
  {
@@ -38503,7 +38576,7 @@ var init_models = __esm({
38503
38576
  inputPrice: 0.1,
38504
38577
  outputPrice: 0.4,
38505
38578
  contextWindow: 128e3,
38506
- maxOutput: 16384,
38579
+ maxOutput: 32768,
38507
38580
  toolCalling: true
38508
38581
  },
38509
38582
  {
@@ -38569,7 +38642,7 @@ var init_models = __esm({
38569
38642
  inputPrice: 1.1,
38570
38643
  outputPrice: 4.4,
38571
38644
  contextWindow: 128e3,
38572
- maxOutput: 65536,
38645
+ maxOutput: 1e5,
38573
38646
  reasoning: true,
38574
38647
  toolCalling: true
38575
38648
  },
@@ -38580,7 +38653,7 @@ var init_models = __esm({
38580
38653
  inputPrice: 1.1,
38581
38654
  outputPrice: 4.4,
38582
38655
  contextWindow: 128e3,
38583
- maxOutput: 65536,
38656
+ maxOutput: 1e5,
38584
38657
  reasoning: true,
38585
38658
  toolCalling: true
38586
38659
  },
@@ -38593,7 +38666,7 @@ var init_models = __esm({
38593
38666
  inputPrice: 1,
38594
38667
  outputPrice: 5,
38595
38668
  contextWindow: 2e5,
38596
- maxOutput: 8192,
38669
+ maxOutput: 64e3,
38597
38670
  vision: true,
38598
38671
  agentic: true,
38599
38672
  toolCalling: true
@@ -38617,8 +38690,8 @@ var init_models = __esm({
38617
38690
  version: "4.6",
38618
38691
  inputPrice: 3,
38619
38692
  outputPrice: 15,
38620
- contextWindow: 2e5,
38621
- maxOutput: 64e3,
38693
+ contextWindow: 1e6,
38694
+ maxOutput: 128e3,
38622
38695
  reasoning: true,
38623
38696
  vision: true,
38624
38697
  agentic: true,
@@ -38648,7 +38721,7 @@ var init_models = __esm({
38648
38721
  inputPrice: 5,
38649
38722
  outputPrice: 25,
38650
38723
  contextWindow: 2e5,
38651
- maxOutput: 32e3,
38724
+ maxOutput: 64e3,
38652
38725
  reasoning: true,
38653
38726
  vision: true,
38654
38727
  agentic: true,
@@ -38732,7 +38805,7 @@ var init_models = __esm({
38732
38805
  version: "3.1",
38733
38806
  inputPrice: 2,
38734
38807
  outputPrice: 12,
38735
- contextWindow: 105e4,
38808
+ contextWindow: 1048576,
38736
38809
  maxOutput: 65536,
38737
38810
  reasoning: true,
38738
38811
  vision: true,
@@ -38744,7 +38817,7 @@ var init_models = __esm({
38744
38817
  version: "3.0",
38745
38818
  inputPrice: 2,
38746
38819
  outputPrice: 12,
38747
- contextWindow: 105e4,
38820
+ contextWindow: 1048576,
38748
38821
  maxOutput: 65536,
38749
38822
  reasoning: true,
38750
38823
  vision: true,
@@ -38796,7 +38869,7 @@ var init_models = __esm({
38796
38869
  version: "3.0",
38797
38870
  inputPrice: 0.5,
38798
38871
  outputPrice: 3,
38799
- contextWindow: 1e6,
38872
+ contextWindow: 1048576,
38800
38873
  maxOutput: 65536,
38801
38874
  reasoning: true,
38802
38875
  vision: true
@@ -38807,7 +38880,7 @@ var init_models = __esm({
38807
38880
  version: "2.5",
38808
38881
  inputPrice: 1.25,
38809
38882
  outputPrice: 10,
38810
- contextWindow: 105e4,
38883
+ contextWindow: 1048576,
38811
38884
  maxOutput: 65536,
38812
38885
  reasoning: true,
38813
38886
  vision: true,
@@ -38819,7 +38892,7 @@ var init_models = __esm({
38819
38892
  version: "2.5",
38820
38893
  inputPrice: 0.3,
38821
38894
  outputPrice: 2.5,
38822
- contextWindow: 1e6,
38895
+ contextWindow: 1048576,
38823
38896
  maxOutput: 65536,
38824
38897
  vision: true,
38825
38898
  toolCalling: true
@@ -38830,7 +38903,7 @@ var init_models = __esm({
38830
38903
  version: "2.5",
38831
38904
  inputPrice: 0.1,
38832
38905
  outputPrice: 0.4,
38833
- contextWindow: 1e6,
38906
+ contextWindow: 1048576,
38834
38907
  maxOutput: 65536,
38835
38908
  toolCalling: true
38836
38909
  },
@@ -38840,8 +38913,8 @@ var init_models = __esm({
38840
38913
  version: "3.1",
38841
38914
  inputPrice: 0.25,
38842
38915
  outputPrice: 1.5,
38843
- contextWindow: 1e6,
38844
- maxOutput: 8192,
38916
+ contextWindow: 1048576,
38917
+ maxOutput: 65536,
38845
38918
  toolCalling: true
38846
38919
  },
38847
38920
  // DeepSeek — V4 family (2026-04-24). The legacy deepseek-chat/reasoner
@@ -38854,8 +38927,8 @@ var init_models = __esm({
38854
38927
  version: "4-flash",
38855
38928
  inputPrice: 0.14,
38856
38929
  outputPrice: 0.28,
38857
- contextWindow: 1e6,
38858
- maxOutput: 8192,
38930
+ contextWindow: 1048576,
38931
+ maxOutput: 65536,
38859
38932
  toolCalling: true
38860
38933
  },
38861
38934
  {
@@ -38864,8 +38937,8 @@ var init_models = __esm({
38864
38937
  version: "4-flash",
38865
38938
  inputPrice: 0.14,
38866
38939
  outputPrice: 0.28,
38867
- contextWindow: 1e6,
38868
- maxOutput: 8192,
38940
+ contextWindow: 1048576,
38941
+ maxOutput: 65536,
38869
38942
  reasoning: true,
38870
38943
  toolCalling: true
38871
38944
  },
@@ -38991,7 +39064,7 @@ var init_models = __esm({
38991
39064
  inputPrice: 0.6,
38992
39065
  outputPrice: 3,
38993
39066
  contextWindow: 262144,
38994
- maxOutput: 16384,
39067
+ maxOutput: 65536,
38995
39068
  reasoning: true,
38996
39069
  vision: true,
38997
39070
  agentic: true,
@@ -39004,7 +39077,7 @@ var init_models = __esm({
39004
39077
  inputPrice: 0.6,
39005
39078
  outputPrice: 3,
39006
39079
  contextWindow: 262144,
39007
- maxOutput: 8192,
39080
+ maxOutput: 16384,
39008
39081
  reasoning: true,
39009
39082
  vision: true,
39010
39083
  agentic: true,
@@ -39042,7 +39115,7 @@ var init_models = __esm({
39042
39115
  version: "4",
39043
39116
  inputPrice: 0.2,
39044
39117
  outputPrice: 0.5,
39045
- contextWindow: 131072,
39118
+ contextWindow: 2e6,
39046
39119
  maxOutput: 16384,
39047
39120
  reasoning: true,
39048
39121
  toolCalling: true
@@ -39053,7 +39126,7 @@ var init_models = __esm({
39053
39126
  version: "4",
39054
39127
  inputPrice: 0.2,
39055
39128
  outputPrice: 0.5,
39056
- contextWindow: 131072,
39129
+ contextWindow: 2e6,
39057
39130
  maxOutput: 16384,
39058
39131
  toolCalling: true
39059
39132
  },
@@ -39063,7 +39136,7 @@ var init_models = __esm({
39063
39136
  version: "4.1",
39064
39137
  inputPrice: 0.2,
39065
39138
  outputPrice: 0.5,
39066
- contextWindow: 131072,
39139
+ contextWindow: 2e6,
39067
39140
  maxOutput: 16384,
39068
39141
  reasoning: true,
39069
39142
  toolCalling: true
@@ -39074,7 +39147,7 @@ var init_models = __esm({
39074
39147
  version: "4.1",
39075
39148
  inputPrice: 0.2,
39076
39149
  outputPrice: 0.5,
39077
- contextWindow: 131072,
39150
+ contextWindow: 2e6,
39078
39151
  maxOutput: 16384,
39079
39152
  toolCalling: true
39080
39153
  },
@@ -39086,7 +39159,7 @@ var init_models = __esm({
39086
39159
  version: "4-0709",
39087
39160
  inputPrice: 3,
39088
39161
  outputPrice: 15,
39089
- contextWindow: 131072,
39162
+ contextWindow: 256e3,
39090
39163
  maxOutput: 16384,
39091
39164
  reasoning: true,
39092
39165
  toolCalling: true
@@ -39097,7 +39170,7 @@ var init_models = __esm({
39097
39170
  version: "2",
39098
39171
  inputPrice: 2,
39099
39172
  outputPrice: 10,
39100
- contextWindow: 131072,
39173
+ contextWindow: 32768,
39101
39174
  maxOutput: 16384,
39102
39175
  vision: true,
39103
39176
  toolCalling: true
@@ -39402,7 +39475,13 @@ var init_models = __esm({
39402
39475
  maxOutput: 16384
39403
39476
  },
39404
39477
  {
39405
- // Mistral × NVIDIA hybrid: strong instruction following, 131K context.
39478
+ // Mistral × NVIDIA hybrid, 131K context. DEAD 2026-08-30 — the QUIET kind:
39479
+ // NVIDIA still LISTS it but a completion returns zero bytes after >150s on
39480
+ // both of blockrun's probe passes (blockrun #448, the #391 shape). Upstream
39481
+ // hid it and redirects callers to a live workhorse. Entry kept so explicit
39482
+ // pins stay routable; off the picker and the FREE_MODELS cascade.
39483
+ // There is no free Mistral left on NVIDIA — do not point a generic
39484
+ // "a free mistral" shorthand at one.
39406
39485
  id: "free/mistral-nemotron",
39407
39486
  name: "[Free] Mistral Nemotron",
39408
39487
  version: "nemotron",
@@ -39412,7 +39491,13 @@ var init_models = __esm({
39412
39491
  maxOutput: 16384
39413
39492
  },
39414
39493
  {
39415
- // StepFun Step 3.7 Flash: reasoning-focused, 131K context.
39494
+ // StepFun Step 3.7 Flash: reasoning-focused, 131K context. EOL'd 2026-08-30
39495
+ // — NVIDIA published 410 Gone on both of blockrun's probe passes (#448), in
39496
+ // the same sweep that took nemotron-nano-9b-v2, nemotron-nano-12b-v2-vl and
39497
+ // (hidden) nemotron-super-49b. It had been ClawRouter's free default since
39498
+ // 2026-08-29; the gateway redirects it to nemotron-3.5-lightning, which is
39499
+ // exactly why nothing looked broken. Entry kept so explicit pins stay
39500
+ // routable; off the picker and the FREE_MODELS cascade.
39416
39501
  id: "free/step-3.7-flash",
39417
39502
  name: "[Free] StepFun Step 3.7 Flash",
39418
39503
  version: "3.7-flash",
@@ -39424,6 +39509,8 @@ var init_models = __esm({
39424
39509
  },
39425
39510
  {
39426
39511
  // NVIDIA Nemotron Nano 9B v2: fast lightweight generalist, 131K context.
39512
+ // EOL'd 2026-08-30 (410 Gone, same sweep). Gateway redirects it to
39513
+ // nemotron-3-nano-30b. Entry kept for pins; off the picker and the cascade.
39427
39514
  id: "free/nemotron-nano-9b-v2",
39428
39515
  name: "[Free] Nemotron Nano 9B v2",
39429
39516
  version: "nano-9b-v2",
@@ -39435,6 +39522,9 @@ var init_models = __esm({
39435
39522
  },
39436
39523
  {
39437
39524
  // NVIDIA Nemotron Nano 12B v2 VL: vision-language (text + image), 131K context.
39525
+ // EOL'd 2026-08-30 (410 Gone, same sweep). Gateway redirects it to
39526
+ // nemotron-3-nano-omni, the only vision-capable free model left. Entry kept
39527
+ // for pins; off the picker and the cascade.
39438
39528
  id: "free/nemotron-nano-12b-v2-vl",
39439
39529
  name: "[Free] Nemotron Nano 12B v2 VL",
39440
39530
  version: "nano-12b-v2-vl",
@@ -39445,9 +39535,155 @@ var init_models = __esm({
39445
39535
  reasoning: true,
39446
39536
  vision: true
39447
39537
  },
39538
+ // ── 2026-08-30 free-tier rebuild (blockrun #448) ─────────────────────────
39539
+ // NVIDIA retired FOUR of the five VISIBLE free models in one sweep. blockrun
39540
+ // replaced them and moved two survivors onto OpenRouter's $0 ":free" pool,
39541
+ // taking the visible free set from 5 to 7 and spanning three hosts for the
39542
+ // first time (NVIDIA, OpenRouter, and two non-NVIDIA makers).
39543
+ //
39544
+ // All seven live free models were tool-probed through the gateway on
39545
+ // 2026-08-30 and every one returned a structured `tool_calls` array with
39546
+ // valid JSON args and finish_reason: "tool_calls" (nemotron-3-nano-30b looked
39547
+ // like a textual leak at max_tokens:120 — that was truncation; at 300 it is
39548
+ // structured). The evidence is recorded here on purpose, but `toolCalling` is
39549
+ // deliberately NOT set: no free entry has ever carried it, filterByToolCalling
39550
+ // keeps the free tier out of tool-bearing requests, and the budget pre-check
39551
+ // at proxy.ts:5217 is written on the same assumption. Flipping the tier into
39552
+ // agentic eligibility is its own change with its own evidence bar.
39553
+ {
39554
+ // Nemotron 3.5 Lightning 30B-A3B — the new free default. blockrun's own
39555
+ // redirect target for the retired step-3.7-flash, so following it keeps the
39556
+ // proxy and the gateway naming the same model. Served from OpenRouter's $0
39557
+ // pool (4.9s median vs 16.3s direct) which also publishes a 1M window
39558
+ // against the 131K the NVIDIA NIM path gives; blockrun carries a hidden
39559
+ // "-nim" twin as its fallback. Probed 1.3s with tools.
39560
+ id: "free/nemotron-3.5-lightning",
39561
+ name: "[Free] Nemotron 3.5 Lightning",
39562
+ version: "3.5-lightning",
39563
+ inputPrice: 0,
39564
+ outputPrice: 0,
39565
+ contextWindow: 1e6,
39566
+ maxOutput: 16384,
39567
+ reasoning: true
39568
+ },
39569
+ {
39570
+ // Nemotron 3 Nano 30B-A3B — the fastest free model in the catalog
39571
+ // (~121 tok/s on a realistic workload, not a 16-token ping). Returns
39572
+ // reasoning_content. Also the tertiary rung of blockrun's own free cascade.
39573
+ id: "free/nemotron-3-nano-30b",
39574
+ name: "[Free] Nemotron 3 Nano 30B",
39575
+ version: "3-nano-30b",
39576
+ inputPrice: 0,
39577
+ outputPrice: 0,
39578
+ contextWindow: 131072,
39579
+ maxOutput: 16384,
39580
+ reasoning: true
39581
+ },
39582
+ {
39583
+ // Nemotron 3 Ultra 550B-A55B — the largest free model ever listed, 1M ctx,
39584
+ // reachable ONLY through OpenRouter's $0 pool (build.nvidia.com answers 503).
39585
+ // Deliberately LOW in the cascade: 16.8s on the tools probe, and blockrun
39586
+ // measured 3 of 15 calls coming back as an HTTP 200 carrying an upstream
39587
+ // 502/503 error object instead of choices.
39588
+ id: "free/nemotron-3-ultra-550b",
39589
+ name: "[Free] Nemotron 3 Ultra 550B",
39590
+ version: "3-ultra-550b",
39591
+ inputPrice: 0,
39592
+ outputPrice: 0,
39593
+ contextWindow: 1e6,
39594
+ maxOutput: 16384,
39595
+ reasoning: true
39596
+ },
39597
+ {
39598
+ // Meta Llama 3.2 11B Vision — restores a free Llama after nemotron-super-49b
39599
+ // (Llama-3.3-based) hit NVIDIA's 410 EOL. A 12-model sweep found exactly two
39600
+ // survivors and only the 11B finishes a real completion. Older than the rest
39601
+ // of the tier and deliberately so: it is a real Llama that actually answers.
39602
+ // Slowest in the tier (~18 tok/s) — last rung of the cascade.
39603
+ id: "free/llama-3.2-11b-vision",
39604
+ name: "[Free] Llama 3.2 11B Vision",
39605
+ version: "3.2-11b-vision",
39606
+ inputPrice: 0,
39607
+ outputPrice: 0,
39608
+ contextWindow: 128e3,
39609
+ maxOutput: 16384,
39610
+ vision: true
39611
+ },
39612
+ {
39613
+ // Cohere North Mini Code, on OpenRouter's $0 pool — 607ms median, the
39614
+ // fastest thing in the tier. Emits reasoning_content (content is clean once
39615
+ // the budget is large enough to finish, verified live).
39616
+ // NOTE: NOT an nvidia/* id upstream — see FREE_UPSTREAM_OVERRIDES in proxy.ts.
39617
+ id: "free/north-mini-code",
39618
+ name: "[Free] Cohere North Mini Code",
39619
+ version: "north-mini-code",
39620
+ inputPrice: 0,
39621
+ outputPrice: 0,
39622
+ contextWindow: 256e3,
39623
+ maxOutput: 16384,
39624
+ reasoning: true
39625
+ },
39626
+ {
39627
+ // Poolside Laguna XS 2.1 on OUR NVIDIA key (~161 tok/s). Deliberately not
39628
+ // the OpenRouter twin, which 429s on every attempt — so this rung and
39629
+ // north-mini-code sit on DIFFERENT capacity pools, which is why they are
39630
+ // adjacent in the cascade.
39631
+ // NOTE: NOT an nvidia/* id upstream — see FREE_UPSTREAM_OVERRIDES in proxy.ts.
39632
+ id: "free/laguna-xs-2.1",
39633
+ name: "[Free] Poolside Laguna XS 2.1",
39634
+ version: "xs-2.1",
39635
+ inputPrice: 0,
39636
+ outputPrice: 0,
39637
+ contextWindow: 131072,
39638
+ maxOutput: 16384
39639
+ },
39448
39640
  // Z.AI GLM-5 Models
39449
39641
  {
39450
- // Launched 2026-06-16 — Z.AI's newest flagship. 1M-token context,
39642
+ // Z.AI's flagship, live-probed by blockrun 2026-08-19 against api.z.ai
39643
+ // (real completion in 2s, content alongside reasoning tokens). $1.40/$4.40,
39644
+ // cached input $0.26, off the international USD price list.
39645
+ // maxOutput is 131072, NOT the 1M context: that is the hard ceiling the API
39646
+ // enforces (error 1210 above it), the same on every GLM-5 SKU.
39647
+ // Thinking is ALWAYS ON here and cannot be disabled.
39648
+ id: "zai/glm-5.3",
39649
+ name: "GLM-5.3",
39650
+ version: "5.3",
39651
+ inputPrice: 1.4,
39652
+ outputPrice: 4.4,
39653
+ contextWindow: 1e6,
39654
+ maxOutput: 131072,
39655
+ reasoning: true,
39656
+ toolCalling: true
39657
+ },
39658
+ {
39659
+ // Z.AI's first natively multimodal GLM-5 — 320B/18B MoE. blockrun probed
39660
+ // text, vision (base64 data URL → correct answer), tools
39661
+ // (finish_reason=tool_calls with well-formed arguments) and streaming live
39662
+ // on 2026-08-27 before listing it.
39663
+ //
39664
+ // MUST be in this catalog, not just router-core's: it is router-core's eco
39665
+ // MEDIUM and COMPLEX primary, and estimateAmount() returns undefined for an
39666
+ // id we do not carry — which makes the request skip the maxCostPerRun filter
39667
+ // AND never accumulate into session cost. An uncatalogued routing target is
39668
+ // a cost-cap hole, not a logging gap.
39669
+ //
39670
+ // Price is the LIST rate. Z.AI is running a 50% launch promo ($0.075/$0.25)
39671
+ // that ENDS 2026-09-09; listing the promo rate would put us under COGS the
39672
+ // morning it lapses. Thinking is always on, as on glm-5.3.
39673
+ id: "zai/glm-5.3-flash",
39674
+ name: "GLM-5.3 Flash",
39675
+ version: "5.3-flash",
39676
+ inputPrice: 0.15,
39677
+ outputPrice: 0.5,
39678
+ contextWindow: 1e6,
39679
+ maxOutput: 131072,
39680
+ reasoning: true,
39681
+ vision: true,
39682
+ toolCalling: true
39683
+ },
39684
+ {
39685
+ // Launched 2026-06-16. Was Z.AI's flagship until glm-5.3 (above) took the
39686
+ // slot on 2026-08-19. 1M-token context,
39451
39687
  // beats GPT-5.5 on long-horizon coding at a fraction of the cost.
39452
39688
  // Paid per-token at $1.40/$4.40 (same as glm-5.1, cached $0.26).
39453
39689
  id: "zai/glm-5.2",
@@ -39456,7 +39692,7 @@ var init_models = __esm({
39456
39692
  inputPrice: 1.4,
39457
39693
  outputPrice: 4.4,
39458
39694
  contextWindow: 1e6,
39459
- maxOutput: 262144,
39695
+ maxOutput: 131072,
39460
39696
  reasoning: true,
39461
39697
  toolCalling: true
39462
39698
  },
@@ -89694,6 +89930,8 @@ function pickFreeModel(excludeList) {
89694
89930
  return void 0;
89695
89931
  }
89696
89932
  function toUpstreamModelId(modelId) {
89933
+ const override = FREE_UPSTREAM_OVERRIDES[modelId];
89934
+ if (override) return override;
89697
89935
  if (modelId.startsWith("free/")) {
89698
89936
  return "nvidia/" + modelId.slice("free/".length);
89699
89937
  }
@@ -93928,7 +94166,7 @@ data: [DONE]
93928
94166
  });
93929
94167
  }
93930
94168
  }
93931
- 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;
94169
+ 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;
93932
94170
  var init_proxy = __esm({
93933
94171
  "src/proxy.ts"() {
93934
94172
  "use strict";
@@ -93979,18 +94217,26 @@ var init_proxy = __esm({
93979
94217
  "premium"
93980
94218
  ]);
93981
94219
  FREE_MODELS = /* @__PURE__ */ new Set([
93982
- "free/step-3.7-flash",
93983
- // reasoning-focused — free-tier flagship
93984
- "free/nemotron-nano-9b-v2",
93985
- // fast lightweight generalist (~0.7s)
93986
- "free/mistral-nemotron",
93987
- // strong instruction following
94220
+ "free/nemotron-3.5-lightning",
94221
+ // free-tier default — 1M ctx, thinking mode
94222
+ "free/nemotron-3-nano-30b",
94223
+ // fastest free model (~121 tok/s)
94224
+ "free/laguna-xs-2.1",
94225
+ // coding, ~161 tok/s — on our NVIDIA key
94226
+ "free/north-mini-code",
94227
+ // coding, 607ms median — OpenRouter $0 pool
93988
94228
  "free/nemotron-3-nano-omni-30b-a3b-reasoning",
93989
94229
  // vision (text/image/video/audio)
93990
- "free/nemotron-nano-12b-v2-vl"
93991
- // vision-language (text + image)
94230
+ "free/nemotron-3-ultra-550b",
94231
+ // largest free model, 1M ctx — but slow + flaky
94232
+ "free/llama-3.2-11b-vision"
94233
+ // only free Llama left; slowest, so last
93992
94234
  ]);
93993
- FREE_MODEL = "free/step-3.7-flash";
94235
+ FREE_MODEL = "free/nemotron-3.5-lightning";
94236
+ FREE_UPSTREAM_OVERRIDES = {
94237
+ "free/north-mini-code": "cohere/north-mini-code",
94238
+ "free/laguna-xs-2.1": "poolside/laguna-xs-2.1"
94239
+ };
93994
94240
  MAX_MESSAGES = 200;
93995
94241
  CONTEXT_LIMIT_KB = 5120;
93996
94242
  HEARTBEAT_INTERVAL_MS = 2e3;