@gtrabanco/pi-nan-provider 0.5.1 → 0.5.2

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/AGENTS.md CHANGED
@@ -89,9 +89,21 @@ Every PR that changes code MUST bump `package.json` version in the same PR; CI p
89
89
  - Capability values that diverge from models.dev are recorded as build-time
90
90
  `MANUAL_OVERRIDES` (mandatory provenance note) in `scripts/manual-overrides.ts`,
91
91
  applied by `scripts/generate-models.ts` — never hand-edited into
92
- `scripts/models.generated.ts` and never invented. e.g. qwen3.8-flash
93
- contextWindow 1,000,000 (maintainer-confirmed 2026-09-05; models.dev and NaN
94
- docs still listed 262,144 that day).
92
+ `scripts/models.generated.ts` and never invented. e.g. deepseek-v4-flash
93
+ image input (Vision-Exp variant; models.dev lists text only). Re-verify
94
+ overrides when the sources update: the qwen3.8-flash contextWindow 1,000,000
95
+ override (maintainer-confirmed 2026-09-05) was withdrawn 2026-09-07 — the
96
+ updated NaN docs still say 262K "the model's native window" and models.dev
97
+ agrees at 262,144.
98
+ - NaN's official chat model list (https://nan.builders/openapi.json `model`
99
+ param description + https://nan.builders/docs/models, checked 2026-09-07):
100
+ community `deepseek-v4-flash`, `mimo-v2.5`, `qwen3.8-flash`, `glm5.3-flash`,
101
+ `qwen3.6`, `gemma4` (all text+image vision) + premium-tier `glm5.3`
102
+ (~753B MoE, text-only input, 1M context, 400M tokens/rolling 4h window).
103
+ `glm5.2` was removed by the provider (2026-09-05); models.dev may still list
104
+ it — the generator excludes it via `PROVIDER_REMOVED_MODEL_IDS`. Non-chat
105
+ endpoints: qwen3-embedding, rerank, kokoro (TTS), whisper (STT),
106
+ flux-2-klein (images) — MCP-bridge territory, not chat catalog models.
95
107
  - Relative imports inside this package use `.ts` extensions (pi's official
96
108
  extension examples do the same; pi transpiles extension sources).
97
109
  - pi intentionally has NO built-in MCP client (docs/usage.md). MCP integration
package/README.es.md CHANGED
@@ -105,7 +105,7 @@ Variables de entorno:
105
105
 
106
106
  ## Modelos
107
107
 
108
- Catálogo base (de models.dev, proveedor `nan`, obtenido 2026-09-04 — límites *servidos* por NaN, no máximos teóricos):
108
+ Catálogo base (de models.dev, proveedor `nan`, obtenido 2026-09-07 y corregido contra [los docs de NaN](https://nan.builders/docs/models) y [openapi.json](https://nan.builders/openapi.json) — límites *servidos* por NaN, no máximos teóricos):
109
109
 
110
110
  | Modelo | Contexto | Máx. salida | Entrada | Razonamiento |
111
111
  |---|---|---|---|---|
@@ -113,19 +113,18 @@ Catálogo base (de models.dev, proveedor `nan`, obtenido 2026-09-04 — límites
113
113
  | `gemma4` | 262,144 | 32,768 | texto, imagen | sí |
114
114
  | `deepseek-v4-flash` | 1,000,000 | 384,000 | texto, imagen | sí |
115
115
  | `mimo-v2.5` | 1,048,576 | 131,072 | texto, imagen | sí |
116
- | `glm5.2` | 500,000 | 131,072 | texto | sí |
117
116
  | `glm5.3-flash` | 1,000,000 | 131,072 | texto, imagen | sí |
118
- | `qwen3.8-flash` | 1,000,000 | 131,072 | texto, imagen | sí |
117
+ | `qwen3.8-flash` | 262,144 | 131,072 | texto, imagen | sí |
119
118
 
120
119
  Notas (grabadas por entrada en `scripts/models.generated.ts`):
121
120
 
122
- - La ventana de contexto de `qwen3.8-flash` está confirmada por el mantenedor en 1M (2026-09-05); models.dev y los docs de NaN aún listaban 262,144 en esa fecha. Este tipo de divergencias se registran como `MANUAL_OVERRIDES` en tiempo de build (con procedencia) en `scripts/manual-overrides.ts` — añade una ahí en vez de editar el fichero generado.
123
-
124
- - `deepseek-v4-flash` incluye entrada de imagen porque NaN sirve la variante Vision-Exp ([docs de NaN](https://nan.builders/docs/models)); models.dev la lista como solo texto.
121
+ - `qwen3.8-flash` sirve 262K tokens, «la ventana nativa del modelo» ([docs de NaN](https://nan.builders/docs/models), 2026-09-07). Un override previo de 1M (confirmado por el mantenedor el 2026-09-05) se retiró cuando los docs actualizados siguieron diciendo 262K; models.dev coincide en 262,144. Este tipo de divergencias se registran como `MANUAL_OVERRIDES` en tiempo de build (con procedencia) en `scripts/manual-overrides.ts` — añade una ahí en vez de editar el fichero generado.
122
+ - `deepseek-v4-flash` incluye entrada de imagen porque NaN sirve la variante Vision-Exp ([docs de NaN](https://nan.builders/docs/models), confirmado por los content-parts de visión en [openapi.json](https://nan.builders/openapi.json)); models.dev la lista como solo texto.
123
+ - `glm5.2` fue eliminado por NaN (2026-09-05). models.dev aún lo listaba el 2026-09-07, así que el generador lo excluye vía `PROVIDER_REMOVED_MODEL_IDS` con la razón registrada — una regeneración no debe resucitar modelos retirados por el proveedor.
125
124
  - `mimo-v2.5` es omnimodal (texto/imagen/audio) en NaN, pero el tipo de modelo de pi solo representa entrada texto/imagen, así que el audio se omite en `input`.
126
125
  - NaN factura por cuota de membresía, que models.dev reporta como coste cero por token — el coste mostrado por pi será $0.
127
126
  - Compat (`supportsDeveloperRole: false`, `supportsReasoningEffort: true`, `supportsUsageInStreaming: true`, `maxTokensField: "max_tokens"`) coincide con la config LiteLLM probada en batalla que este paquete reemplaza; el ejemplo de los docs de NaN (`supportsDeveloperRole: true`) no está probado.
128
- - **Tier/cuota**: qué modelos puedes llamar lo decide tu membresía de NaN. Con clave, el fetch en vivo refleja exactamente eso (ver *Cómo funciona* — detección de tier). El GLM 5.3 de tier premium no está en el proveedor `nan` de models.dev; solo está `glm5.3-flash`.
127
+ - **Tier/cuota**: qué modelos puedes llamar lo decide tu membresía de NaN. Con clave, el fetch en vivo refleja exactamente eso (ver *Cómo funciona* — detección de tier). El `glm5.3` de tier premium no está en el proveedor `nan` de models.dev y ninguna fuente documenta su límite de salida, así que no entra en el catálogo estático (marcado como no emitible en los metadatos); las claves premium lo reciben en vivo vía el refresh de `/models`, con límites conservadores (128K contexto / 4K salida). Solo está `glm5.3-flash` en el catálogo estático.
129
128
 
130
129
  ### Relación con `~/.pi/agent/models.json`
131
130
 
package/README.md CHANGED
@@ -105,7 +105,7 @@ Environment variables:
105
105
 
106
106
  ## Models
107
107
 
108
- Baseline catalog (from models.dev, provider `nan`, fetched 2026-09-04 — NaN's *served* limits, not raw model maxima):
108
+ Baseline catalog (from models.dev, provider `nan`, fetched 2026-09-07 and corrected against [NaN's docs](https://nan.builders/docs/models) and [openapi.json](https://nan.builders/openapi.json) — NaN's *served* limits, not raw model maxima):
109
109
 
110
110
  | Model | Context | Max output | Input | Reasoning |
111
111
  |---|---|---|---|---|
@@ -113,18 +113,18 @@ Baseline catalog (from models.dev, provider `nan`, fetched 2026-09-04 — NaN's
113
113
  | `gemma4` | 262,144 | 32,768 | text, image | yes |
114
114
  | `deepseek-v4-flash` | 1,000,000 | 384,000 | text, image | yes |
115
115
  | `mimo-v2.5` | 1,048,576 | 131,072 | text, image | yes |
116
- | `glm5.2` | 500,000 | 131,072 | text | yes |
117
116
  | `glm5.3-flash` | 1,000,000 | 131,072 | text, image | yes |
118
- | `qwen3.8-flash` | 1,000,000 | 131,072 | text, image | yes |
117
+ | `qwen3.8-flash` | 262,144 | 131,072 | text, image | yes |
119
118
 
120
119
  Notes (recorded per entry in `scripts/models.generated.ts`):
121
120
 
122
- - `qwen3.8-flash` context window is maintainer-confirmed at 1M (2026-09-05); models.dev and NaN's docs still listed 262,144 at that date. Divergences like this are recorded as build-time `MANUAL_OVERRIDES` (with provenance) in `scripts/manual-overrides.ts` — apply one instead of editing the generated file.
123
- - `deepseek-v4-flash` includes image input because NaN serves the Vision-Exp variant ([NaN docs](https://nan.builders/docs/models)); models.dev lists text only.
121
+ - `qwen3.8-flash` serves 262K tokens, "the model's native window" ([NaN docs](https://nan.builders/docs/models), 2026-09-07). An earlier 1M override (maintainer-confirmed 2026-09-05) was withdrawn once the updated docs still said 262K; models.dev agrees at 262,144. Divergences like this are recorded as build-time `MANUAL_OVERRIDES` (with provenance) in `scripts/manual-overrides.ts` — apply one instead of editing the generated file.
122
+ - `deepseek-v4-flash` includes image input because NaN serves the Vision-Exp variant ([NaN docs](https://nan.builders/docs/models), confirmed by the vision content-parts in [openapi.json](https://nan.builders/openapi.json)); models.dev lists text only.
123
+ - `glm5.2` was removed by NaN (2026-09-05). models.dev still listed it on 2026-09-07, so the generator excludes it via `PROVIDER_REMOVED_MODEL_IDS` with a recorded reason — a regeneration must not resurrect provider-removed models.
124
124
  - `mimo-v2.5` is omnimodal (text/image/audio) on NaN, but pi's model type only represents text/image input, so audio is dropped from `input`.
125
125
  - NaN bills via membership quota, which models.dev reports as zero per-token cost — pi's cost display will read $0.
126
126
  - Compat (`supportsDeveloperRole: false`, `supportsReasoningEffort: true`, `supportsUsageInStreaming: true`, `maxTokensField: "max_tokens"`) matches the battle-tested LiteLLM config this package replaces; NaN's docs example (`supportsDeveloperRole: true`) is not battle-tested.
127
- - **Tier/quota**: which models you can call is decided by your NaN membership. With a key, the live fetch reflects exactly that (see *How it works* — tier detection). The premium-tier GLM 5.3 is not in the models.dev `nan` provider at all; only `glm5.3-flash` is.
127
+ - **Tier/quota**: which models you can call is decided by your NaN membership. With a key, the live fetch reflects exactly that (see *How it works* — tier detection). The premium-tier `glm5.3` is absent from the models.dev `nan` provider and no source documents its max output tokens, so it is not in the static catalog (flagged as unemittable in the catalog metadata); premium keys still get it live via the `/models` refresh with conservative placeholder limits (128K context / 4K output). Only `glm5.3-flash` is in the static catalog.
128
128
 
129
129
  ### Relationship to `~/.pi/agent/models.json`
130
130
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gtrabanco/pi-nan-provider",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "description": "NaN Builders (api.nan.builders) model provider for pi - OpenAI-compatible registration with a models.dev-generated fallback, tier-aware live catalog, and MCP bridges (official web search + optional community media server)",
5
5
  "keywords": [
6
6
  "pi",
@@ -37,9 +37,35 @@ const PI_SUPPORTED_INPUT = new Set(["text", "image"]);
37
37
  * Manual corrections over models.dev live in scripts/manual-overrides.ts
38
38
  * (shared with test/generated-catalog.test.ts, which pins that every
39
39
  * override lands on the generated entry with its provenance note).
40
- * Capabilities diverging from models.dev are recorded there, never here.
40
+ * Capability divergences from models.dev are recorded there, never here.
41
+ * MANUAL_NOTES adds provenance-only notes to otherwise-untouched entries.
41
42
  */
42
- const MANUAL_NOTES: Record<string, string> = {};
43
+ const MANUAL_NOTES: Record<string, string> = {
44
+ "qwen3.8-flash":
45
+ "contextWindow 262,144: the earlier 1,000,000 override (maintainer-confirmed 2026-09-05) was withdrawn 2026-09-07 — the updated https://nan.builders/docs/models still states '262K token context, the model's native window' and models.dev agrees at 262,144; NaN docs are treated as the most reliable source (maintainer instruction, 2026-09-07).",
46
+ };
47
+
48
+ /**
49
+ * Models the provider has removed but that models.dev may still list.
50
+ * Excluded at generation time with the recorded reason — a regeneration must
51
+ * never resurrect an entry the gateway no longer serves (this happened with
52
+ * glm5.2: hand-removed 2026-09-05, models.dev re-listed it by 2026-09-07).
53
+ */
54
+ const PROVIDER_REMOVED_MODEL_IDS: Record<string, string> = {
55
+ "glm5.2":
56
+ "removed by NaN (2026-09-05); absent from the official chat model list in https://nan.builders/openapi.json and https://nan.builders/docs/models (checked 2026-09-07) while models.dev provider nan still listed it — excluded so regeneration does not resurrect it",
57
+ };
58
+
59
+ /**
60
+ * Models the provider documents and serves but that cannot be emitted yet:
61
+ * absent from models.dev, or missing a limit no source documents. Flagged in
62
+ * the catalog metadata instead of invented (no-fabrication rule); keys with
63
+ * access still receive them live via the /models refresh with conservative
64
+ * placeholder limits (UNKNOWN_MODEL_LIMITS).
65
+ */
66
+ const KNOWN_UNEMITTABLE_MODEL_NOTES: readonly string[] = [
67
+ "glm5.3: served by NaN on the GLM 5.3 premium tier (https://nan.builders/docs/models + https://nan.builders/openapi.json, checked 2026-09-07) but absent from models.dev, and no source documents its max output tokens — no entry is generated (no-fabrication rule); premium keys still get it live via the /models refresh with conservative placeholder limits",
68
+ ];
43
69
 
44
70
  /**
45
71
  * LiteLLM compat confirmed against the live api.nan.builders gateway by the
@@ -113,6 +139,10 @@ function normalizeInput(modalitiesInput: string[] | undefined, modelId: string):
113
139
  }
114
140
 
115
141
  function convertModel(modelId: string, m: ModelsDevModel): GeneratedModel | { skip: string } {
142
+ const removedReason = PROVIDER_REMOVED_MODEL_IDS[modelId];
143
+ if (removedReason) {
144
+ return { skip: `provider-removed: "${modelId}" excluded from the catalog (${removedReason})` };
145
+ }
116
146
  const contextWindow = m.limit?.context;
117
147
  const maxTokens = m.limit?.output;
118
148
  if (typeof contextWindow !== "number" || contextWindow <= 0) {
@@ -195,6 +225,7 @@ async function main(): Promise<void> {
195
225
  const fetchedAt = new Date().toISOString();
196
226
  const allNotes = [
197
227
  ...skipped,
228
+ ...KNOWN_UNEMITTABLE_MODEL_NOTES,
198
229
  ...new Set(entries.flatMap((entry) => entry.notes ?? [])),
199
230
  ];
200
231
 
@@ -38,10 +38,6 @@ export interface ManualModelOverride {
38
38
  export const MANUAL_OVERRIDES: Record<string, ManualModelOverride> = {
39
39
  "deepseek-v4-flash": {
40
40
  input: ["text", "image"],
41
- note: "input includes image: NaN serves the Vision-Exp variant (confirmed at https://nan.builders/docs/models, 'takes images as input'); models.dev provider nan lists text only.",
42
- },
43
- "qwen3.8-flash": {
44
- contextWindow: 1_000_000,
45
- note: "contextWindow 1,000,000: maintainer-confirmed against api.nan.builders (2026-09-05); both models.dev and https://nan.builders/docs/models still listed 262,144 ('262K token context, the model's native window') as of 2026-09-05 — re-verify against the gateway/docs when they update.",
41
+ note: "input includes image: NaN serves the Vision-Exp variant ('takes images as input', https://nan.builders/docs/models, checked 2026-09-07; the image_url content-parts in https://nan.builders/openapi.json list deepseek-v4-flash among the vision models); models.dev provider nan lists text only.",
46
42
  },
47
43
  };
@@ -1,7 +1,7 @@
1
1
  // This file is auto-generated by scripts/generate-models.ts
2
2
  // Do not edit manually — run `bun run generate-models` to update.
3
3
  //
4
- // Source: https://models.dev/api.json (provider "nan"), fetched 2026-09-05T11:34:28.187Z
4
+ // Source: https://models.dev/api.json (provider "nan"), fetched 2026-09-07T12:31:36.901Z
5
5
  // Provenance: every contextWindow/maxTokens/input/cost value traces to
6
6
  // models.dev or to the per-entry notes below. Nothing is invented; entries
7
7
  // models.dev documents incompletely are omitted and flagged instead.
@@ -36,7 +36,7 @@ export const NAN_GENERATED_MODELS: readonly GeneratedModelEntry[] = [
36
36
  },
37
37
  "notes": [
38
38
  "compat matches the maintainer's working ~/.pi/agent/models.json LiteLLM config for api.nan.builders (2026-09-04): supportsDeveloperRole false, supportsReasoningEffort true, supportsUsageInStreaming true, maxTokensField max_tokens. NaN's docs example sets only supportsDeveloperRole: true and is not battle-tested.",
39
- "input includes image: NaN serves the Vision-Exp variant (confirmed at https://nan.builders/docs/models, 'takes images as input'); models.dev provider nan lists text only."
39
+ "input includes image: NaN serves the Vision-Exp variant ('takes images as input', https://nan.builders/docs/models, checked 2026-09-07; the image_url content-parts in https://nan.builders/openapi.json list deepseek-v4-flash among the vision models); models.dev provider nan lists text only."
40
40
  ],
41
41
  "extras": {
42
42
  "id": "deepseek-v4-flash",
@@ -133,62 +133,6 @@ export const NAN_GENERATED_MODELS: readonly GeneratedModelEntry[] = [
133
133
  }
134
134
  }
135
135
  },
136
- {
137
- "id": "glm5.2",
138
- "name": "GLM-5.2",
139
- "reasoning": true,
140
- "input": [
141
- "text"
142
- ],
143
- "cost": {
144
- "input": 0,
145
- "output": 0,
146
- "cacheRead": 0,
147
- "cacheWrite": 0
148
- },
149
- "contextWindow": 500000,
150
- "maxTokens": 131072,
151
- "compat": {
152
- "supportsDeveloperRole": false,
153
- "supportsReasoningEffort": true,
154
- "supportsUsageInStreaming": true,
155
- "maxTokensField": "max_tokens"
156
- },
157
- "notes": [
158
- "compat matches the maintainer's working ~/.pi/agent/models.json LiteLLM config for api.nan.builders (2026-09-04): supportsDeveloperRole false, supportsReasoningEffort true, supportsUsageInStreaming true, maxTokensField max_tokens. NaN's docs example sets only supportsDeveloperRole: true and is not battle-tested."
159
- ],
160
- "extras": {
161
- "id": "glm5.2",
162
- "name": "GLM-5.2",
163
- "description": "Open flagship GLM for long-horizon coding agents, served at 500K context on the NaN premium tier",
164
- "family": "glm",
165
- "attachment": false,
166
- "reasoning": true,
167
- "reasoning_options": [],
168
- "tool_call": true,
169
- "structured_output": true,
170
- "temperature": true,
171
- "release_date": "2026-06-13",
172
- "last_updated": "2026-06-13",
173
- "modalities": {
174
- "input": [
175
- "text"
176
- ],
177
- "output": [
178
- "text"
179
- ]
180
- },
181
- "open_weights": true,
182
- "limit": {
183
- "context": 500000,
184
- "output": 131072
185
- },
186
- "cost": {
187
- "input": 0,
188
- "output": 0
189
- }
190
- }
191
- },
192
136
  {
193
137
  "id": "glm5.3-flash",
194
138
  "name": "GLM-5.3-Flash",
@@ -382,7 +326,7 @@ export const NAN_GENERATED_MODELS: readonly GeneratedModelEntry[] = [
382
326
  "cacheRead": 0,
383
327
  "cacheWrite": 0
384
328
  },
385
- "contextWindow": 1000000,
329
+ "contextWindow": 262144,
386
330
  "maxTokens": 131072,
387
331
  "compat": {
388
332
  "supportsDeveloperRole": false,
@@ -392,7 +336,7 @@ export const NAN_GENERATED_MODELS: readonly GeneratedModelEntry[] = [
392
336
  },
393
337
  "notes": [
394
338
  "compat matches the maintainer's working ~/.pi/agent/models.json LiteLLM config for api.nan.builders (2026-09-04): supportsDeveloperRole false, supportsReasoningEffort true, supportsUsageInStreaming true, maxTokensField max_tokens. NaN's docs example sets only supportsDeveloperRole: true and is not battle-tested.",
395
- "contextWindow 1,000,000: maintainer-confirmed against api.nan.builders (2026-09-05); both models.dev and https://nan.builders/docs/models still listed 262,144 ('262K token context, the model's native window') as of 2026-09-05 — re-verify against the gateway/docs when they update."
339
+ "contextWindow 262,144: the earlier 1,000,000 override (maintainer-confirmed 2026-09-05) was withdrawn 2026-09-07 — the updated https://nan.builders/docs/models still states '262K token context, the model's native window' and models.dev agrees at 262,144; NaN docs are treated as the most reliable source (maintainer instruction, 2026-09-07)."
396
340
  ],
397
341
  "extras": {
398
342
  "id": "qwen3.8-flash",
@@ -431,12 +375,14 @@ export const NAN_GENERATED_MODELS: readonly GeneratedModelEntry[] = [
431
375
  export const GENERATED_CATALOG_META = {
432
376
  source: "https://models.dev/api.json",
433
377
  modelsDevProvider: "nan",
434
- fetchedAt: "2026-09-05T11:34:28.187Z",
435
- modelCount: 7,
436
- models: ["deepseek-v4-flash","gemma4","glm5.2","glm5.3-flash","mimo-v2.5","qwen3.6","qwen3.8-flash"],
378
+ fetchedAt: "2026-09-07T12:31:36.901Z",
379
+ modelCount: 6,
380
+ models: ["deepseek-v4-flash","gemma4","glm5.3-flash","mimo-v2.5","qwen3.6","qwen3.8-flash"],
437
381
  notes: [
382
+ "provider-removed: \"glm5.2\" excluded from the catalog (removed by NaN (2026-09-05); absent from the official chat model list in https://nan.builders/openapi.json and https://nan.builders/docs/models (checked 2026-09-07) while models.dev provider nan still listed it — excluded so regeneration does not resurrect it)",
383
+ "glm5.3: served by NaN on the GLM 5.3 premium tier (https://nan.builders/docs/models + https://nan.builders/openapi.json, checked 2026-09-07) but absent from models.dev, and no source documents its max output tokens — no entry is generated (no-fabrication rule); premium keys still get it live via the /models refresh with conservative placeholder limits",
438
384
  "compat matches the maintainer's working ~/.pi/agent/models.json LiteLLM config for api.nan.builders (2026-09-04): supportsDeveloperRole false, supportsReasoningEffort true, supportsUsageInStreaming true, maxTokensField max_tokens. NaN's docs example sets only supportsDeveloperRole: true and is not battle-tested.",
439
- "input includes image: NaN serves the Vision-Exp variant (confirmed at https://nan.builders/docs/models, 'takes images as input'); models.dev provider nan lists text only.",
440
- "contextWindow 1,000,000: maintainer-confirmed against api.nan.builders (2026-09-05); both models.dev and https://nan.builders/docs/models still listed 262,144 ('262K token context, the model's native window') as of 2026-09-05 — re-verify against the gateway/docs when they update."
385
+ "input includes image: NaN serves the Vision-Exp variant ('takes images as input', https://nan.builders/docs/models, checked 2026-09-07; the image_url content-parts in https://nan.builders/openapi.json list deepseek-v4-flash among the vision models); models.dev provider nan lists text only.",
386
+ "contextWindow 262,144: the earlier 1,000,000 override (maintainer-confirmed 2026-09-05) was withdrawn 2026-09-07 — the updated https://nan.builders/docs/models still states '262K token context, the model's native window' and models.dev agrees at 262,144; NaN docs are treated as the most reliable source (maintainer instruction, 2026-09-07)."
441
387
  ],
442
388
  } as const;