@aliou/pi-synthetic 0.4.3 → 0.4.5

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/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @aliou/pi-synthetic
2
2
 
3
+ ## 0.4.5
4
+
5
+ ### Patch Changes
6
+
7
+ - 7489bc0: update model list: add nvidia/Kimi-K2.5-NVFP4, remove 6 discontinued models
8
+
9
+ ## 0.4.4
10
+
11
+ ### Patch Changes
12
+
13
+ - 86a3145: Fix quotas command showing duplicate notification in TUI mode
14
+ - f94cc6b: fix: register search tool at init time so it's available when pi collects tools
15
+
3
16
  ## 0.4.3
4
17
 
5
18
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aliou/pi-synthetic",
3
- "version": "0.4.3",
3
+ "version": "0.4.5",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/aliou/pi-synthetic"
@@ -15,13 +15,13 @@
15
15
  "video": "https://assets.aliou.me/pi-extensions/demos/pi-synthetic.mp4"
16
16
  },
17
17
  "peerDependencies": {
18
- "@mariozechner/pi-coding-agent": ">=0.51.0"
18
+ "@mariozechner/pi-coding-agent": ">=0.52.7"
19
19
  },
20
20
  "devDependencies": {
21
21
  "@biomejs/biome": "^2.3.13",
22
22
  "@changesets/cli": "^2.27.11",
23
- "@mariozechner/pi-coding-agent": "0.51.0",
24
- "@mariozechner/pi-tui": "0.51.0",
23
+ "@mariozechner/pi-coding-agent": "0.52.7",
24
+ "@mariozechner/pi-tui": "0.52.7",
25
25
  "@sinclair/typebox": "^0.34.48",
26
26
  "@types/node": "^25.0.10",
27
27
  "husky": "^9.1.7",
@@ -19,7 +19,7 @@ export function registerQuotasCommand(pi: ExtensionAPI): void {
19
19
  return;
20
20
  }
21
21
 
22
- const result = await ctx.ui.custom<void>((tui, theme, _kb, done) => {
22
+ const result = await ctx.ui.custom<null>((tui, theme, _kb, done) => {
23
23
  let currentComponent: Component = new QuotasLoadingComponent(theme);
24
24
 
25
25
  fetchQuotas()
@@ -46,7 +46,7 @@ export function registerQuotasCommand(pi: ExtensionAPI): void {
46
46
  render: (width: number) => currentComponent.render(width),
47
47
  invalidate: () => currentComponent.invalidate(),
48
48
  handleInput: (_data: string) => {
49
- done();
49
+ done(null);
50
50
  },
51
51
  };
52
52
  });
@@ -100,36 +100,6 @@ export const SYNTHETIC_MODELS: SyntheticModelConfig[] = [
100
100
  contextWindow: 131072,
101
101
  maxTokens: 128000,
102
102
  },
103
- // models.dev: synthetic/hf:deepseek-ai/DeepSeek-V3.1 → ctx=128000, out=128000
104
- {
105
- id: "hf:deepseek-ai/DeepSeek-V3.1",
106
- name: "deepseek-ai/DeepSeek-V3.1",
107
- reasoning: false,
108
- input: ["text"],
109
- cost: {
110
- input: 0.56,
111
- output: 1.68,
112
- cacheRead: 0.56,
113
- cacheWrite: 0,
114
- },
115
- contextWindow: 131072,
116
- maxTokens: 128000,
117
- },
118
- // models.dev: synthetic/hf:deepseek-ai/DeepSeek-V3.1-Terminus → ctx=128000, out=128000
119
- {
120
- id: "hf:deepseek-ai/DeepSeek-V3.1-Terminus",
121
- name: "deepseek-ai/DeepSeek-V3.1-Terminus",
122
- reasoning: false,
123
- input: ["text"],
124
- cost: {
125
- input: 1.2,
126
- output: 1.2,
127
- cacheRead: 1.2,
128
- cacheWrite: 0,
129
- },
130
- contextWindow: 131072,
131
- maxTokens: 128000,
132
- },
133
103
  // models.dev: synthetic/hf:deepseek-ai/DeepSeek-V3.2 → ctx=162816, out=8000
134
104
  {
135
105
  id: "hf:deepseek-ai/DeepSeek-V3.2",
@@ -145,21 +115,6 @@ export const SYNTHETIC_MODELS: SyntheticModelConfig[] = [
145
115
  contextWindow: 162816,
146
116
  maxTokens: 8000,
147
117
  },
148
- // NOTE: not present in models.dev synthetic provider; maxTokens unchanged
149
- {
150
- id: "hf:Qwen/Qwen3-VL-235B-A22B-Instruct",
151
- name: "Qwen/Qwen3-VL-235B-A22B-Instruct",
152
- reasoning: true,
153
- input: ["text", "image"],
154
- cost: {
155
- input: 0.22,
156
- output: 0.88,
157
- cacheRead: 0.22,
158
- cacheWrite: 0,
159
- },
160
- contextWindow: 256000,
161
- maxTokens: 4096,
162
- },
163
118
  // models.dev: synthetic/hf:moonshotai/Kimi-K2-Instruct-0905 → ctx=262144, out=32768
164
119
  {
165
120
  id: "hf:moonshotai/Kimi-K2-Instruct-0905",
@@ -220,61 +175,31 @@ export const SYNTHETIC_MODELS: SyntheticModelConfig[] = [
220
175
  contextWindow: 262144,
221
176
  maxTokens: 32000,
222
177
  },
223
- // models.dev: synthetic/hf:Qwen/Qwen3-235B-A22B-Instruct-2507 → ctx=256000, out=32000
224
- {
225
- id: "hf:Qwen/Qwen3-235B-A22B-Instruct-2507",
226
- name: "Qwen/Qwen3-235B-A22B-Instruct-2507",
227
- reasoning: false,
228
- input: ["text"],
229
- cost: {
230
- input: 0.22,
231
- output: 0.88,
232
- cacheRead: 0.22,
233
- cacheWrite: 0,
234
- },
235
- contextWindow: 262144,
236
- maxTokens: 32000,
237
- },
238
- // models.dev: synthetic/hf:zai-org/GLM-4.6 → ctx=200000, out=64000
239
- {
240
- id: "hf:zai-org/GLM-4.6",
241
- name: "zai-org/GLM-4.6",
242
- reasoning: true,
243
- input: ["text"],
244
- cost: {
245
- input: 0.55,
246
- output: 2.19,
247
- cacheRead: 0.55,
248
- cacheWrite: 0,
249
- },
250
- contextWindow: 202752,
251
- maxTokens: 64000,
252
- },
253
- // models.dev: synthetic/hf:MiniMaxAI/MiniMax-M2 → ctx=196608, out=131000
178
+ // models.dev: synthetic/hf:moonshotai/Kimi-K2.5 → ctx=262144, out=65536
254
179
  {
255
- id: "hf:MiniMaxAI/MiniMax-M2",
256
- name: "MiniMaxAI/MiniMax-M2",
180
+ id: "hf:moonshotai/Kimi-K2.5",
181
+ name: "moonshotai/Kimi-K2.5",
257
182
  reasoning: true,
258
- input: ["text"],
183
+ input: ["text", "image"],
259
184
  cost: {
260
- input: 0.3,
185
+ input: 1.2,
261
186
  output: 1.2,
262
- cacheRead: 0.3,
187
+ cacheRead: 1.2,
263
188
  cacheWrite: 0,
264
189
  },
265
- contextWindow: 196608,
266
- maxTokens: 131000,
190
+ contextWindow: 262144,
191
+ maxTokens: 65536,
267
192
  },
268
- // models.dev: synthetic/hf:moonshotai/Kimi-K2.5 → ctx=262144, out=65536
193
+ // API: hf:nvidia/Kimi-K2.5-NVFP4 → ctx=262144, out=65536 (NVFP4 quantized)
269
194
  {
270
- id: "hf:moonshotai/Kimi-K2.5",
271
- name: "moonshotai/Kimi-K2.5",
195
+ id: "hf:nvidia/Kimi-K2.5-NVFP4",
196
+ name: "nvidia/Kimi-K2.5-NVFP4",
272
197
  reasoning: true,
273
198
  input: ["text", "image"],
274
199
  cost: {
275
- input: 1.2,
276
- output: 1.2,
277
- cacheRead: 1.2,
200
+ input: 0.6,
201
+ output: 3,
202
+ cacheRead: 0.6,
278
203
  cacheWrite: 0,
279
204
  },
280
205
  contextWindow: 262144,
@@ -79,8 +79,15 @@ export function registerSyntheticWebSearchTool(pi: ExtensionAPI) {
79
79
  return;
80
80
  }
81
81
 
82
- // Check subscription on session start, only register tool if access is granted
82
+ // Register tool immediately so it's available when tools are collected
83
+ registerTool(pi, apiKey);
84
+
85
+ // On session start, remove tool from active set, check subscription, re-add if valid
83
86
  pi.on("session_start", async (_event, ctx) => {
87
+ // Disable tool until subscription is verified
88
+ const activeTools = pi.getActiveTools();
89
+ pi.setActiveTools(activeTools.filter((t) => t !== "synthetic_web_search"));
90
+
84
91
  const access = await checkSubscriptionAccess(apiKey);
85
92
  if (!access.ok) {
86
93
  if (ctx.hasUI) {
@@ -92,7 +99,11 @@ export function registerSyntheticWebSearchTool(pi: ExtensionAPI) {
92
99
  return;
93
100
  }
94
101
 
95
- registerTool(pi, apiKey);
102
+ // Add tool back to active tools
103
+ const current = pi.getActiveTools();
104
+ if (!current.includes("synthetic_web_search")) {
105
+ pi.setActiveTools([...current, "synthetic_web_search"]);
106
+ }
96
107
  });
97
108
  }
98
109