pi-makora-provider 1.12.2 → 1.12.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -23,12 +23,7 @@ _DeepSeek V4, Kimi K2.7 Code, GLM 5.2, Qwen 3.6 for [pi](https://github.com/eare
23
23
  | Gemma 4 26B A4B | `google/gemma-4-26B-A4B` | No | |
24
24
  | GLM 5.2 FP8 | `zai-org/GLM-5.2-FP8` | Yes | off via top-level `reasoning_effort: "none"` (only lever GLM responds to; `enable_thinking`/`thinking`/chat_template_kwargs toggles are ignored); effort `high`/`max` only (minimal/low/medium clamp to `high`); multi-turn continuity via `clear_thinking` (false when thinking on = preserve, true when off = clear; `preserve_thinking` is inert for GLM) injected via onPayload; returns `reasoning` field |
25
25
  | GLM 5.2 NVFP4 | `zai-org/GLM-5.2-NVFP4` | Yes | off via top-level `reasoning_effort: "none"` (only lever GLM responds to; `enable_thinking`/`thinking`/chat_template_kwargs toggles are ignored); effort `high`/`max` only (minimal/low/medium clamp to `high`); multi-turn continuity via `clear_thinking` (false when thinking on = preserve, true when off = clear; `preserve_thinking` is inert for GLM) injected via onPayload; returns `reasoning` field |
26
- | GPT-OSS 120B | `openai/gpt-oss-120b` | No | |
27
- | Kimi K2.7 Code | `moonshotai/Kimi-K2.7-Code` | Yes | on/off via namespaced `chat_template_kwargs.thinking` (toggled with thinking switch); `preserve_thinking` (toggled) for multi-turn continuity; onPayload aliases each assistant message's `reasoning` → `reasoning_content` (Kimi's template reads `reasoning_content` but pi-ai sends `reasoning`); returns `reasoning` field. `reasoning_effort` is not emitted (Kimi's template reads namespaced `thinking`, not `reasoning_effort`) |
28
26
  | Llama 3.3 70B FP8 | `amd/Llama-3.3-70B-Instruct-FP8-KV` | No | |
29
- | Llama 3.3 70B Instruct | `meta-llama/Llama-3.3-70B-Instruct` | No | |
30
- | Qwen 3.6 27B NVFP4 | `unsloth/Qwen3.6-27B-NVFP4` | Yes | off via top-level `reasoning_effort: "none"`; `preserve_thinking` (toggled with thinking switch) injected via onPayload for multi-turn continuity; returns `reasoning` field |
31
- | Qwen 3.6 35B A3B NVFP4 | `unsloth/Qwen3.6-35B-A3B-NVFP4` | Yes | off via top-level `reasoning_effort: "none"`; `preserve_thinking` (toggled with thinking switch) injected via onPayload for multi-turn continuity; returns `reasoning` field |
32
27
  <!-- MODELS_TABLE_END -->
33
28
 
34
29
  ## Installation
@@ -0,0 +1 @@
1
+ {}
package/index.ts CHANGED
@@ -52,6 +52,7 @@ import { clampThinkingLevel, streamOpenAICompletions } from "@earendil-works/pi-
52
52
  import modelsData from "./models.json" with { type: "json" };
53
53
  import customModelsData from "./custom-models.json" with { type: "json" };
54
54
  import patchData from "./patch.json" with { type: "json" };
55
+ import deprecatedData from "./deprecated-models.json" with { type: "json" };
55
56
  import { registerNanCollapseGuard, nanCanary, canaryEnabled, isGuardedModel } from "./nan-collapse-guard.js";
56
57
  import fs from "fs";
57
58
  import path from "path";
@@ -326,7 +327,10 @@ function buildModels(
326
327
  ): JsonModel[] {
327
328
  const modelMap = new Map<string, JsonModel>();
328
329
 
329
- for (const model of base) {
330
+ // Seed with the base list plus grace-period deprecated models so patch.json
331
+ // entries apply to deprecated models exactly as while the model was live
332
+ // (withDeprecated keeps live data on id conflicts).
333
+ for (const model of withDeprecated(base)) {
330
334
  modelMap.set(model.id, model);
331
335
  }
332
336
 
@@ -549,6 +553,35 @@ export function streamMakora(
549
553
  });
550
554
  }
551
555
 
556
+ // Grace period for delisted models. When the provider API stops listing a
557
+ // model, update-models.js moves its last-known definition into
558
+ // deprecated-models.json (stamped with deprecatedAt) instead of dropping it.
559
+ // For 14 days the model keeps working here so in-flight sessions and saved
560
+ // model settings do not break; afterwards it is evicted permanently.
561
+ const DEPRECATED_MODEL_TTL_MS = 14 * 24 * 60 * 60 * 1000;
562
+
563
+ // Grace-period deprecated models with deprecation metadata stripped.
564
+ function activeDeprecatedModels(): JsonModel[] {
565
+ const now = Date.now();
566
+ const result: JsonModel[] = [];
567
+ for (const entry of Object.values(deprecatedData as Record<string, JsonModel & { deprecatedAt?: string }>)) {
568
+ if (!entry?.id) continue;
569
+ const removedAt = Date.parse(entry.deprecatedAt ?? "");
570
+ if (Number.isNaN(removedAt) || now - removedAt > DEPRECATED_MODEL_TTL_MS) continue;
571
+ const model = { ...entry } as JsonModel & { deprecatedAt?: string };
572
+ delete model.deprecatedAt;
573
+ result.push(model);
574
+ }
575
+ return result;
576
+ }
577
+
578
+ // Append grace-period deprecated models the list does not already have (live data wins).
579
+ function withDeprecated(models: JsonModel[]): JsonModel[] {
580
+ const seen = new Set(models.map((m) => m.id));
581
+ const extras = activeDeprecatedModels().filter((m) => !seen.has(m.id));
582
+ return extras.length > 0 ? [...models, ...extras] : models;
583
+ }
584
+
552
585
  // Extension Entry Point
553
586
 
554
587
  const PROVIDER_ID = "makora";
package/models.json CHANGED
@@ -62,111 +62,6 @@
62
62
  "maxTokensField": "max_completion_tokens"
63
63
  }
64
64
  },
65
- {
66
- "id": "meta-llama/Llama-3.3-70B-Instruct",
67
- "name": "Llama 3.3 70B Instruct",
68
- "reasoning": false,
69
- "input": [
70
- "text"
71
- ],
72
- "cost": {
73
- "input": 0,
74
- "output": 0,
75
- "cacheRead": 0,
76
- "cacheWrite": 0
77
- },
78
- "contextWindow": 4096,
79
- "maxTokens": 0,
80
- "compat": {
81
- "supportsDeveloperRole": false,
82
- "supportsStore": false,
83
- "maxTokensField": "max_completion_tokens"
84
- }
85
- },
86
- {
87
- "id": "moonshotai/Kimi-K2.7-Code",
88
- "name": "Kimi K2.7 Code",
89
- "reasoning": false,
90
- "input": [
91
- "text"
92
- ],
93
- "cost": {
94
- "input": 0,
95
- "output": 0,
96
- "cacheRead": 0,
97
- "cacheWrite": 0
98
- },
99
- "contextWindow": 262144,
100
- "maxTokens": 0,
101
- "compat": {
102
- "supportsDeveloperRole": false,
103
- "supportsStore": false,
104
- "maxTokensField": "max_completion_tokens"
105
- }
106
- },
107
- {
108
- "id": "openai/gpt-oss-120b",
109
- "name": "GPT-OSS 120B",
110
- "reasoning": false,
111
- "input": [
112
- "text"
113
- ],
114
- "cost": {
115
- "input": 0,
116
- "output": 0,
117
- "cacheRead": 0,
118
- "cacheWrite": 0
119
- },
120
- "contextWindow": 131072,
121
- "maxTokens": 0,
122
- "compat": {
123
- "supportsDeveloperRole": false,
124
- "supportsStore": false,
125
- "maxTokensField": "max_completion_tokens"
126
- }
127
- },
128
- {
129
- "id": "unsloth/Qwen3.6-27B-NVFP4",
130
- "name": "Qwen 3.6 27B NVFP4",
131
- "reasoning": false,
132
- "input": [
133
- "text"
134
- ],
135
- "cost": {
136
- "input": 0,
137
- "output": 0,
138
- "cacheRead": 0,
139
- "cacheWrite": 0
140
- },
141
- "contextWindow": 262144,
142
- "maxTokens": 0,
143
- "compat": {
144
- "supportsDeveloperRole": false,
145
- "supportsStore": false,
146
- "maxTokensField": "max_completion_tokens"
147
- }
148
- },
149
- {
150
- "id": "unsloth/Qwen3.6-35B-A3B-NVFP4",
151
- "name": "Qwen 3.6 35B A3B NVFP4",
152
- "reasoning": false,
153
- "input": [
154
- "text"
155
- ],
156
- "cost": {
157
- "input": 0,
158
- "output": 0,
159
- "cacheRead": 0,
160
- "cacheWrite": 0
161
- },
162
- "contextWindow": 262144,
163
- "maxTokens": 0,
164
- "compat": {
165
- "supportsDeveloperRole": false,
166
- "supportsStore": false,
167
- "maxTokensField": "max_completion_tokens"
168
- }
169
- },
170
65
  {
171
66
  "id": "zai-org/GLM-5.2-FP8",
172
67
  "name": "GLM 5.2 FP8",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-makora-provider",
3
- "version": "1.12.2",
3
+ "version": "1.12.4",
4
4
  "description": "Makora provider extension for pi - Access DeepSeek V4, GLM 5.2, Kimi K2.7 Code, Llama 3.3, Qwen 3.6, and more through the Makora inference API",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -23,6 +23,7 @@
23
23
  "index.ts",
24
24
  "nan-collapse-guard.ts",
25
25
  "models.json",
26
+ "deprecated-models.json",
26
27
  "custom-models.json",
27
28
  "patch.json",
28
29
  "README.md",
@@ -34,8 +35,8 @@
34
35
  ]
35
36
  },
36
37
  "devDependencies": {
37
- "@earendil-works/pi-agent-core": "^0.80.2",
38
- "@earendil-works/pi-coding-agent": "^0.80.2",
38
+ "@earendil-works/pi-agent-core": "^0.83.0",
39
+ "@earendil-works/pi-coding-agent": "^0.83.0",
39
40
  "vitest": "^4.1.9"
40
41
  },
41
42
  "scripts": {