@gtrabanco/pi-nan-provider 0.6.11 → 0.8.0

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.
@@ -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-22T08:55:04.775Z
4
+ // Source: https://models.dev/api.json (provider "nan"), fetched 2026-09-27T21:25:24.946Z
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.
@@ -28,6 +28,7 @@ export const NAN_GENERATED_MODELS: readonly GeneratedModelEntry[] = [
28
28
  },
29
29
  "contextWindow": 1000000,
30
30
  "maxTokens": 384000,
31
+ "reasoningEffortValues": [],
31
32
  "compat": {
32
33
  "supportsDeveloperRole": false,
33
34
  "supportsReasoningEffort": true,
@@ -37,7 +38,7 @@ export const NAN_GENERATED_MODELS: readonly GeneratedModelEntry[] = [
37
38
  },
38
39
  "notes": [
39
40
  "compat matches the maintainer's working ~/.pi/agent/models.json LiteLLM config for api.nan.builders (2026-09-04): supportsDeveloperRole false, supportsReasoningEffort true, maxTokensField max_tokens. NaN's docs example sets only supportsDeveloperRole: true and is not battle-tested. supportsFinishReason true (2026-09-13, issue #2): the LiteLLM gateway intermittently closes SSE streams before emitting finish_reason; with true pi-ai raises 'Stream ended without finish_reason', which matches pi-ai's retryable-provider pattern ('ended without') and is retried automatically, whereas false silently synthesized stop/toolUse and stalled the turn mid-answer. supportsUsageInStreaming true (2026-09-16, issue #7): NaN's published schema is silent about stream_options, but the live gateway honors it — two identical streaming calls per model, differing only in stream_options: { include_usage: true }, returned 0 usage chunks without it and exactly 1 with it (prompt/completion/reasoning/cached token counts) on deepseek-v4-flash, glm5.3-flash, qwen3.6, mimo-v2.5 and gemma4, and a real pi session then recorded token counts where it recorded zeros. pi-ai only sends stream_options when this is not false, and the sanitizer forwards it when the model declares true, so chat models opt in by default and usage is reported (issue #4). A model that does not report streaming usage can still opt out per model with a models.json compat override (supportsUsageInStreaming: false); the sanitizer then strips stream_options and the payload stays strict.",
40
- "input includes image: NaN serves the Vision-Exp variant ('takes images as input', https://nan.builders/docs/models; the image_url content-parts in https://nan.builders/openapi.json list deepseek-v4-flash among the vision models). models.dev provider nan also lists text+image now (DeepSeek V4.1 Flash entry, checked 2026-09-13; its 2026-09-07 snapshot listed text only), so this override is kept as a pin for the vision capability rather than as a divergence."
41
+ "input includes image: NaN serves the Vision-Exp variant ('takes images as input', https://nan.builders/docs/models; the image_url content-parts in https://nan.builders/openapi.json list deepseek-v4-flash among the vision models). models.dev provider nan also lists text+image now (DeepSeek V4.1 Flash entry, checked 2026-09-13; its 2026-09-07 snapshot listed text only), so this override is kept as a pin for the vision capability rather than as a divergence. reasoning_effort_values=[]: the model decides per-request how much to reason (https://nan.builders/docs/models, checked 2026-09-25)."
41
42
  ],
42
43
  "extras": {
43
44
  "id": "deepseek-v4-flash",
@@ -89,6 +90,14 @@ export const NAN_GENERATED_MODELS: readonly GeneratedModelEntry[] = [
89
90
  },
90
91
  "contextWindow": 262144,
91
92
  "maxTokens": 32768,
93
+ "reasoningEffortValues": [
94
+ "none",
95
+ "minimal",
96
+ "low",
97
+ "medium",
98
+ "high",
99
+ "max"
100
+ ],
92
101
  "compat": {
93
102
  "supportsDeveloperRole": false,
94
103
  "supportsReasoningEffort": true,
@@ -152,6 +161,12 @@ export const NAN_GENERATED_MODELS: readonly GeneratedModelEntry[] = [
152
161
  },
153
162
  "contextWindow": 1000000,
154
163
  "maxTokens": 131072,
164
+ "reasoningEffortValues": [
165
+ "low",
166
+ "medium",
167
+ "high",
168
+ "max"
169
+ ],
155
170
  "compat": {
156
171
  "supportsDeveloperRole": false,
157
172
  "supportsReasoningEffort": true,
@@ -211,6 +226,7 @@ export const NAN_GENERATED_MODELS: readonly GeneratedModelEntry[] = [
211
226
  },
212
227
  "contextWindow": 1048576,
213
228
  "maxTokens": 131072,
229
+ "reasoningEffortValues": [],
214
230
  "compat": {
215
231
  "supportsDeveloperRole": false,
216
232
  "supportsReasoningEffort": true,
@@ -255,6 +271,35 @@ export const NAN_GENERATED_MODELS: readonly GeneratedModelEntry[] = [
255
271
  }
256
272
  }
257
273
  },
274
+ {
275
+ "id": "mimo-v2.6-flash",
276
+ "name": "mimo-v2.6-flash",
277
+ "reasoning": true,
278
+ "input": [
279
+ "text",
280
+ "image"
281
+ ],
282
+ "cost": {
283
+ "input": 0,
284
+ "output": 0,
285
+ "cacheRead": 0,
286
+ "cacheWrite": 0
287
+ },
288
+ "contextWindow": 1048576,
289
+ "maxTokens": 131072,
290
+ "compat": {
291
+ "supportsDeveloperRole": false,
292
+ "supportsReasoningEffort": true,
293
+ "supportsUsageInStreaming": true,
294
+ "supportsFinishReason": true,
295
+ "maxTokensField": "max_tokens"
296
+ },
297
+ "notes": [
298
+ "compat matches the maintainer's working ~/.pi/agent/models.json LiteLLM config for api.nan.builders (2026-09-04): supportsDeveloperRole false, supportsReasoningEffort true, maxTokensField max_tokens. NaN's docs example sets only supportsDeveloperRole: true and is not battle-tested. supportsFinishReason true (2026-09-13, issue #2): the LiteLLM gateway intermittently closes SSE streams before emitting finish_reason; with true pi-ai raises 'Stream ended without finish_reason', which matches pi-ai's retryable-provider pattern ('ended without') and is retried automatically, whereas false silently synthesized stop/toolUse and stalled the turn mid-answer. supportsUsageInStreaming true (2026-09-16, issue #7): NaN's published schema is silent about stream_options, but the live gateway honors it — two identical streaming calls per model, differing only in stream_options: { include_usage: true }, returned 0 usage chunks without it and exactly 1 with it (prompt/completion/reasoning/cached token counts) on deepseek-v4-flash, glm5.3-flash, qwen3.6, mimo-v2.5 and gemma4, and a real pi session then recorded token counts where it recorded zeros. pi-ai only sends stream_options when this is not false, and the sanitizer forwards it when the model declares true, so chat models opt in by default and usage is reported (issue #4). A model that does not report streaming usage can still opt out per model with a models.json compat override (supportsUsageInStreaming: false); the sanitizer then strips stream_options and the payload stays strict.",
299
+ "manual-only: \"mimo-v2.6-flash\" not yet on models.dev provider nan (omnimodal model (text, image, audio input) served by NaN, not yet listed on models.dev provider nan (checked 2026-09-25); included so the live /models refresh does not hand it UNKNOWN_MODEL_LIMITS. Same limits as mimo-v2.5: 1,048,576 / 131,072 / 1.0B monthly quota per member. Reasoning: accepted, depth not adjustable. Tool calling: yes. Streaming: yes. Input modalities (pi-representable): text, image (audio not representable in pi's Model type).)."
300
+ ],
301
+ "extras": {}
302
+ },
258
303
  {
259
304
  "id": "qwen3.6",
260
305
  "name": "Qwen3.6 35B-A3B",
@@ -271,6 +316,14 @@ export const NAN_GENERATED_MODELS: readonly GeneratedModelEntry[] = [
271
316
  },
272
317
  "contextWindow": 262144,
273
318
  "maxTokens": 65536,
319
+ "reasoningEffortValues": [
320
+ "none",
321
+ "minimal",
322
+ "low",
323
+ "medium",
324
+ "high",
325
+ "max"
326
+ ],
274
327
  "compat": {
275
328
  "supportsDeveloperRole": false,
276
329
  "supportsReasoningEffort": true,
@@ -334,6 +387,7 @@ export const NAN_GENERATED_MODELS: readonly GeneratedModelEntry[] = [
334
387
  },
335
388
  "contextWindow": 262144,
336
389
  "maxTokens": 131072,
390
+ "reasoningEffortValues": [],
337
391
  "compat": {
338
392
  "supportsDeveloperRole": false,
339
393
  "supportsReasoningEffort": true,
@@ -382,14 +436,15 @@ export const NAN_GENERATED_MODELS: readonly GeneratedModelEntry[] = [
382
436
  export const GENERATED_CATALOG_META = {
383
437
  source: "https://models.dev/api.json",
384
438
  modelsDevProvider: "nan",
385
- fetchedAt: "2026-09-22T08:55:04.775Z",
386
- modelCount: 6,
387
- models: ["deepseek-v4-flash","gemma4","glm5.3-flash","mimo-v2.5","qwen3.6","qwen3.8-flash"],
439
+ fetchedAt: "2026-09-27T21:25:24.946Z",
440
+ modelCount: 7,
441
+ models: ["deepseek-v4-flash","gemma4","glm5.3-flash","mimo-v2.5","mimo-v2.6-flash","qwen3.6","qwen3.8-flash"],
388
442
  notes: [
389
443
  "live-only: \"glm5.3\" kept out of the static catalog (premium-tier model (models.dev now documents it with 1M context / 131,072 max output; NaN docs https://nan.builders/docs/models + https://nan.builders/openapi.json, checked 2026-09-13) kept live-only so a non-premium key never sees a model it cannot call when the live /models fetch is unavailable; premium keys still get it via the /models refresh with conservative placeholder limits)",
390
444
  "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)",
391
445
  "compat matches the maintainer's working ~/.pi/agent/models.json LiteLLM config for api.nan.builders (2026-09-04): supportsDeveloperRole false, supportsReasoningEffort true, maxTokensField max_tokens. NaN's docs example sets only supportsDeveloperRole: true and is not battle-tested. supportsFinishReason true (2026-09-13, issue #2): the LiteLLM gateway intermittently closes SSE streams before emitting finish_reason; with true pi-ai raises 'Stream ended without finish_reason', which matches pi-ai's retryable-provider pattern ('ended without') and is retried automatically, whereas false silently synthesized stop/toolUse and stalled the turn mid-answer. supportsUsageInStreaming true (2026-09-16, issue #7): NaN's published schema is silent about stream_options, but the live gateway honors it — two identical streaming calls per model, differing only in stream_options: { include_usage: true }, returned 0 usage chunks without it and exactly 1 with it (prompt/completion/reasoning/cached token counts) on deepseek-v4-flash, glm5.3-flash, qwen3.6, mimo-v2.5 and gemma4, and a real pi session then recorded token counts where it recorded zeros. pi-ai only sends stream_options when this is not false, and the sanitizer forwards it when the model declares true, so chat models opt in by default and usage is reported (issue #4). A model that does not report streaming usage can still opt out per model with a models.json compat override (supportsUsageInStreaming: false); the sanitizer then strips stream_options and the payload stays strict.",
392
- "input includes image: NaN serves the Vision-Exp variant ('takes images as input', https://nan.builders/docs/models; the image_url content-parts in https://nan.builders/openapi.json list deepseek-v4-flash among the vision models). models.dev provider nan also lists text+image now (DeepSeek V4.1 Flash entry, checked 2026-09-13; its 2026-09-07 snapshot listed text only), so this override is kept as a pin for the vision capability rather than as a divergence.",
446
+ "input includes image: NaN serves the Vision-Exp variant ('takes images as input', https://nan.builders/docs/models; the image_url content-parts in https://nan.builders/openapi.json list deepseek-v4-flash among the vision models). models.dev provider nan also lists text+image now (DeepSeek V4.1 Flash entry, checked 2026-09-13; its 2026-09-07 snapshot listed text only), so this override is kept as a pin for the vision capability rather than as a divergence. reasoning_effort_values=[]: the model decides per-request how much to reason (https://nan.builders/docs/models, checked 2026-09-25).",
447
+ "manual-only: \"mimo-v2.6-flash\" not yet on models.dev provider nan (omnimodal model (text, image, audio input) served by NaN, not yet listed on models.dev provider nan (checked 2026-09-25); included so the live /models refresh does not hand it UNKNOWN_MODEL_LIMITS. Same limits as mimo-v2.5: 1,048,576 / 131,072 / 1.0B monthly quota per member. Reasoning: accepted, depth not adjustable. Tool calling: yes. Streaming: yes. Input modalities (pi-representable): text, image (audio not representable in pi's Model type).).",
393
448
  "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)."
394
449
  ],
395
450
  } as const;
@@ -39,6 +39,13 @@ export interface GeneratedModelEntry {
39
39
  cost: { input: number; output: number; cacheRead: number; cacheWrite: number };
40
40
  contextWindow: number;
41
41
  maxTokens: number;
42
+ /**
43
+ * Reasoning effort values as declared by NaN docs.
44
+ * An empty array means the parameter is accepted but depth is not
45
+ * adjustable by the user — the model manages its own reasoning depth.
46
+ * An undefined array means the field was not set (legacy / uncatalogued).
47
+ */
48
+ reasoningEffortValues?: string[];
42
49
  /** Compat applied to every NaN-compatible model (LiteLLM-confirmed, see scripts/generate-models.ts). */
43
50
  compat?: OpenAICompletionsCompat;
44
51
  /** Provenance notes for values overriding models.dev or needing manual confirmation. */