@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 +13 -0
- package/package.json +4 -4
- package/src/commands/quotas.ts +2 -2
- package/src/providers/models.ts +14 -89
- package/src/tools/search.ts +13 -2
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
|
+
"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.
|
|
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.
|
|
24
|
-
"@mariozechner/pi-tui": "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",
|
package/src/commands/quotas.ts
CHANGED
|
@@ -19,7 +19,7 @@ export function registerQuotasCommand(pi: ExtensionAPI): void {
|
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
const result = await ctx.ui.custom<
|
|
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
|
});
|
package/src/providers/models.ts
CHANGED
|
@@ -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:
|
|
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:
|
|
256
|
-
name: "
|
|
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:
|
|
185
|
+
input: 1.2,
|
|
261
186
|
output: 1.2,
|
|
262
|
-
cacheRead:
|
|
187
|
+
cacheRead: 1.2,
|
|
263
188
|
cacheWrite: 0,
|
|
264
189
|
},
|
|
265
|
-
contextWindow:
|
|
266
|
-
maxTokens:
|
|
190
|
+
contextWindow: 262144,
|
|
191
|
+
maxTokens: 65536,
|
|
267
192
|
},
|
|
268
|
-
//
|
|
193
|
+
// API: hf:nvidia/Kimi-K2.5-NVFP4 → ctx=262144, out=65536 (NVFP4 quantized)
|
|
269
194
|
{
|
|
270
|
-
id: "hf:
|
|
271
|
-
name: "
|
|
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:
|
|
276
|
-
output:
|
|
277
|
-
cacheRead:
|
|
200
|
+
input: 0.6,
|
|
201
|
+
output: 3,
|
|
202
|
+
cacheRead: 0.6,
|
|
278
203
|
cacheWrite: 0,
|
|
279
204
|
},
|
|
280
205
|
contextWindow: 262144,
|
package/src/tools/search.ts
CHANGED
|
@@ -79,8 +79,15 @@ export function registerSyntheticWebSearchTool(pi: ExtensionAPI) {
|
|
|
79
79
|
return;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
//
|
|
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
|
-
|
|
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
|
|