pi-io-provider 1.1.44 → 1.1.46
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 +6 -0
- package/README.md +14 -14
- package/bun.lock +27 -10
- package/models.json +46 -45
- package/package.json +11 -4
- package/scripts/test-pi-compat.mjs +76 -0
- package/tsconfig.json +14 -0
package/CHANGELOG.md
ADDED
package/README.md
CHANGED
|
@@ -16,29 +16,29 @@ A [pi](https://github.com/badlogic/pi-mono) extension that adds [IO Intelligence
|
|
|
16
16
|
|
|
17
17
|
| Model | ID | Context | Max Output | Vision | Reasoning | Cache | Input $/M | Output $/M |
|
|
18
18
|
|-------|----|---------|------------|--------|-----------|-------|-----------|------------|
|
|
19
|
-
|
|
|
19
|
+
| DeepSeek V4.1 Flash | `deepseek-ai/DeepSeek-V4.1-Flash` | 1.0M | 131K | ✅ | ✅ | ✅ | $0.33 | $1.32 |
|
|
20
|
+
| Gemma 4 26B A4B | `google/gemma-4-26b-a4b-it` | 262K | 262K | ✅ | ✅ | ✅ | $0.08 | $0.30 |
|
|
20
21
|
| Gemma 4 31B Instruct | `google/gemma-4-31b-it` | 262K | 16K | ✅ | ✅ | ✅ | $0.38 | $1.15 |
|
|
21
22
|
| Kimi K2.5 | `moonshotai/Kimi-K2.5` | 262K | 262K | ✅ | ✅ | ✅ | $0.53 | $2.79 |
|
|
22
|
-
| Kimi K2.6 | `moonshotai/Kimi-K2.6` | 262K | 262K | ✅ | ✅ | ✅ | $0.
|
|
23
|
-
| Kimi K2.7 Code | `moonshotai/Kimi-K2.7-Code` | 262K | 262K | ✅ | ✅ | ✅ | $
|
|
24
|
-
| Kimi K3 | `moonshotai/Kimi-K3` | 1.0M | 1.0M | ✅ | ✅ | ✅ | $3.
|
|
23
|
+
| Kimi K2.6 | `moonshotai/Kimi-K2.6` | 262K | 262K | ✅ | ✅ | ✅ | $0.67 | $3.17 |
|
|
24
|
+
| Kimi K2.7 Code | `moonshotai/Kimi-K2.7-Code` | 262K | 262K | ✅ | ✅ | ✅ | $0.95 | $4.26 |
|
|
25
|
+
| Kimi K3 | `moonshotai/Kimi-K3` | 1.0M | 1.0M | ✅ | ✅ | ✅ | $3.06 | $15.30 |
|
|
25
26
|
| Qwen3.6 27B | `Qwen/Qwen3.6-27B` | 33K | 33K | ✅ | ✅ | ✅ | $0.34 | $3.01 |
|
|
26
|
-
| Qwen3.6 35B A3B | `Qwen/Qwen3.6-35B-A3B` | 262K | 262K | ✅ | ✅ | ✅ | $0.17 | $1.
|
|
27
|
+
| Qwen3.6 35B A3B | `Qwen/Qwen3.6-35B-A3B` | 262K | 262K | ✅ | ✅ | ✅ | $0.17 | $1.11 |
|
|
27
28
|
| Qwen3.8 27B | `Qwen/Qwen3.8-27B` | 66K | 66K | ✅ | ✅ | ✅ | $0.34 | $2.69 |
|
|
28
29
|
| GLM 5.3 Flash | `zai-org/GLM-5.3-Flash` | 262K | 131K | ✅ | ✅ | ✅ | $0.21 | $0.70 |
|
|
29
30
|
| DeepSeek R1 0528 | `deepseek-ai/DeepSeek-R1-0528` | 128K | 128K | ❌ | ✅ | ✅ | $0.57 | $2.28 |
|
|
30
31
|
| DeepSeek V3.2 | `deepseek-ai/DeepSeek-V3.2` | 164K | 164K | ❌ | ✅ | ✅ | $1.42 | $2.38 |
|
|
31
32
|
| DeepSeek V4 Flash | `deepseek-ai/DeepSeek-V4-Flash` | 33K | 33K | ❌ | ✅ | ✅ | $0.13 | $0.52 |
|
|
32
33
|
| DeepSeek V4 Flash 0731 | `deepseek-ai/DeepSeek-V4-Flash-0731` | 262K | 66K | ❌ | ✅ | ✅ | $0.23 | $0.74 |
|
|
33
|
-
| DeepSeek V4 Pro | `deepseek-ai/DeepSeek-V4-Pro` | 1.0M | 600K | ❌ | ✅ | ✅ | $1.
|
|
34
|
-
| DeepSeek V4 Pro 0813 | `deepseek-ai/DeepSeek-V4-Pro-0813` | 1.0M | 393K | ❌ | ✅ | ✅ | $1.
|
|
35
|
-
|
|
|
36
|
-
| MiniMax M2.
|
|
37
|
-
| MiniMax M2.7 | `MiniMaxAI/MiniMax-M2.7` | 262K | 66K | ❌ | ✅ | ✅ | $0.47 | $1.78 |
|
|
34
|
+
| DeepSeek V4 Pro | `deepseek-ai/DeepSeek-V4-Pro` | 1.0M | 600K | ❌ | ✅ | ✅ | $1.54 | $3.09 |
|
|
35
|
+
| DeepSeek V4 Pro 0813 | `deepseek-ai/DeepSeek-V4-Pro-0813` | 1.0M | 393K | ❌ | ✅ | ✅ | $1.13 | $4.01 |
|
|
36
|
+
| MiniMax M2.5 | `MiniMaxAI/MiniMax-M2.5` | 197K | 197K | ❌ | ✅ | ✅ | $0.35 | $1.42 |
|
|
37
|
+
| MiniMax M2.7 | `MiniMaxAI/MiniMax-M2.7` | 262K | 66K | ❌ | ✅ | ✅ | $0.40 | $1.49 |
|
|
38
38
|
| Kimi K2 Thinking | `moonshotai/Kimi-K2-Thinking` | 262K | 262K | ❌ | ✅ | ✅ | $0.60 | $2.50 |
|
|
39
|
-
| Nemotron 3.5 Lightning | `nvidia/nemotron-3.5-lightning` | 262K | 131K | ❌ | ✅ | ✅ | $0.06 | $0.
|
|
40
|
-
| gpt-oss-120b | `openai/gpt-oss-120b` | 131K | 131K | ❌ | ✅ | ✅ | $0.
|
|
41
|
-
| gpt-oss-20b | `openai/gpt-oss-20b` | 64K | 64K | ❌ | ✅ | ✅ | $0.06 | $0.
|
|
39
|
+
| Nemotron 3.5 Lightning | `nvidia/nemotron-3.5-lightning` | 262K | 131K | ❌ | ✅ | ✅ | $0.06 | $0.18 |
|
|
40
|
+
| gpt-oss-120b | `openai/gpt-oss-120b` | 131K | 131K | ❌ | ✅ | ✅ | $0.19 | $0.73 |
|
|
41
|
+
| gpt-oss-20b | `openai/gpt-oss-20b` | 64K | 64K | ❌ | ✅ | ✅ | $0.06 | $0.19 |
|
|
42
42
|
| MiMo-V2.5 | `XiaomiMiMo/MiMo-V2.5` | 1.0M | 1.0M | ❌ | ✅ | ✅ | $0.20 | $0.64 |
|
|
43
43
|
| GLM-4.5-Air | `zai-org/GLM-4.5-Air` | 131K | 131K | ❌ | ✅ | ✅ | $0.16 | $0.94 |
|
|
44
44
|
| GLM 4.6 | `zai-org/GLM-4.6` | 131K | 131K | ❌ | ✅ | ✅ | $0.52 | $2.04 |
|
|
@@ -46,7 +46,7 @@ A [pi](https://github.com/badlogic/pi-mono) extension that adds [IO Intelligence
|
|
|
46
46
|
| GLM 4.7 Flash | `zai-org/GLM-4.7-Flash` | 200K | 200K | ❌ | ✅ | ✅ | $0.06 | $0.40 |
|
|
47
47
|
| GLM 5 | `zai-org/GLM-5` | 203K | 203K | ❌ | ✅ | ✅ | $0.86 | $2.75 |
|
|
48
48
|
| GLM 5.1 | `zai-org/GLM-5.1` | 203K | 33K | ❌ | ✅ | ✅ | $1.30 | $4.13 |
|
|
49
|
-
| GLM 5.2 | `zai-org/GLM-5.2` | 262K | 131K | ❌ | ✅ | ✅ | $1.
|
|
49
|
+
| GLM 5.2 | `zai-org/GLM-5.2` | 262K | 131K | ❌ | ✅ | ✅ | $1.85 | $6.00 |
|
|
50
50
|
| GLM 5.3 | `zai-org/GLM-5.3` | 262K | 131K | ❌ | ✅ | ✅ | $1.65 | $5.19 |
|
|
51
51
|
| Llama 4 Maverick 17B 128E Instruct FP8 | `meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8` | 430K | 430K | ✅ | ❌ | ✅ | $0.25 | $0.83 |
|
|
52
52
|
| Qwen3 Coder 480B A35B Instruct INT4 Mixed AR | `Intel/Qwen3-Coder-480B-A35B-Instruct-int4-mixed-ar` | 106K | 106K | ❌ | ❌ | ✅ | $0.45 | $2.15 |
|
package/bun.lock
CHANGED
|
@@ -5,7 +5,12 @@
|
|
|
5
5
|
"": {
|
|
6
6
|
"name": "pi-io-provider",
|
|
7
7
|
"devDependencies": {
|
|
8
|
-
"@earendil-works/pi-coding-agent": "0.
|
|
8
|
+
"@earendil-works/pi-coding-agent": "0.99.0",
|
|
9
|
+
"@types/node": "^25.9.1",
|
|
10
|
+
"typescript": "6.0.3",
|
|
11
|
+
},
|
|
12
|
+
"peerDependencies": {
|
|
13
|
+
"@earendil-works/pi-coding-agent": "*",
|
|
9
14
|
},
|
|
10
15
|
},
|
|
11
16
|
},
|
|
@@ -52,17 +57,21 @@
|
|
|
52
57
|
|
|
53
58
|
"@babel/runtime": ["@babel/runtime@7.29.7", "", {}, "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw=="],
|
|
54
59
|
|
|
55
|
-
"@earendil-works/chord": ["@earendil-works/chord@0.
|
|
60
|
+
"@earendil-works/chord": ["@earendil-works/chord@0.99.0", "", { "dependencies": { "esbuild": "0.28.2" } }, "sha512-xGMjZqlbYOIs9hrKvTaW/rcwbjbrogBK2VU+z+YSR0v7G6WHMy6AivC4Sk0lMJjNaMsELFxG47X3BCkd6EqG4g=="],
|
|
61
|
+
|
|
62
|
+
"@earendil-works/pi-agent-core": ["@earendil-works/pi-agent-core@0.99.0", "", { "dependencies": { "@earendil-works/chord": "^0.99.0", "@earendil-works/pi-ai": "^0.99.0", "@earendil-works/pi-telemetry": "^0.99.0", "diff": "8.0.4", "ignore": "7.0.8", "typebox": "1.3.27", "yaml": "2.9.0" } }, "sha512-3ZFAZ6GnR+r41VVcI47svtvHJ01T/RGDcm3fL8l25VeJ3RwDxnzZ7/XSD56ldE/EOoLA7riwiqc7UEOLyoib1g=="],
|
|
56
63
|
|
|
57
|
-
"@earendil-works/pi-
|
|
64
|
+
"@earendil-works/pi-ai": ["@earendil-works/pi-ai@0.99.0", "", { "dependencies": { "@anthropic-ai/sdk": "0.124.0", "@aws-sdk/client-bedrock-runtime": "3.1127.0", "@earendil-works/pi-telemetry": "^0.99.0", "@google/genai": "2.21.0", "@smithy/node-http-handler": "4.12.1", "http-proxy-agent": "9.1.0", "https-proxy-agent": "9.1.0", "openai": "7.19.0", "partial-json": "0.1.7", "typebox": "1.3.27" }, "bin": { "pi-ai": "dist/cli.js" } }, "sha512-pJVG2aytD6x1xckiM4co7DlK6xXwfH7LKcMoI6SFDuJ4OvVqedUUAYFFekX4WkeqOoRNCIjUwka/l7mWb/mjsQ=="],
|
|
58
65
|
|
|
59
|
-
"@earendil-works/pi-
|
|
66
|
+
"@earendil-works/pi-codemode": ["@earendil-works/pi-codemode@0.99.0", "", { "dependencies": { "quickjs-wasi": "3.6.2" } }, "sha512-zPbNpvVEtO3x++isZosWLuDhs+Xb0F3Pux6BsgIPg+aDmzwKnMruJNDuny2C3ig4HdQQfJ0hmfRsXV3ZmCWrWg=="],
|
|
60
67
|
|
|
61
|
-
"@earendil-works/pi-coding-agent": ["@earendil-works/pi-coding-agent@0.
|
|
68
|
+
"@earendil-works/pi-coding-agent": ["@earendil-works/pi-coding-agent@0.99.0", "", { "dependencies": { "@earendil-works/chord": "^0.99.0", "@earendil-works/pi-agent-core": "^0.99.0", "@earendil-works/pi-ai": "^0.99.0", "@earendil-works/pi-codemode": "^0.99.0", "@earendil-works/pi-mcp": "^0.99.0", "@earendil-works/pi-tui": "^0.99.0", "@silvia-odwyer/photon-node": "0.3.4", "chalk": "6.0.0", "cross-spawn": "7.0.6", "diff": "8.0.4", "grok-mermaid": "0.2.3", "highlight.js": "10.7.3", "hosted-git-info": "9.0.3", "ignore": "7.0.8", "jiti": "2.7.0", "minimatch": "10.2.6", "proper-lockfile": "4.1.2", "quickjs-wasi": "3.6.2", "semver": "7.8.5", "typebox": "1.3.27", "undici": "8.10.2", "yaml": "2.9.0" }, "bin": { "pi": "dist/bundle/cli.js" } }, "sha512-rZ8lLzqhrXrlZSt9VffVmVOcPBzbnK53UilkwEpDqU/WfE1RKCRqzYfGll/Xsk5XumjpeBT8IWzKNP6CyiEtrg=="],
|
|
62
69
|
|
|
63
|
-
"@earendil-works/pi-
|
|
70
|
+
"@earendil-works/pi-mcp": ["@earendil-works/pi-mcp@0.99.0", "", { "dependencies": { "cross-spawn": "7.0.6" } }, "sha512-9bt7QOZHMczU+bxO1VJdYMPeX54QdTSxE5Q+KbAi06GwOh+RUH2FTJCD7PZ1Av+oOJcTGTqr9CkvHtEUIFSuYg=="],
|
|
64
71
|
|
|
65
|
-
"@earendil-works/pi-
|
|
72
|
+
"@earendil-works/pi-telemetry": ["@earendil-works/pi-telemetry@0.99.0", "", {}, "sha512-WH/sYgk7gY5OlunzPdtFPfPUr/M95F3GV+0yva3nHkcw2h463fWrJxn6hWuEC6vGktBMV41sA6QLB/ejllv1mw=="],
|
|
73
|
+
|
|
74
|
+
"@earendil-works/pi-tui": ["@earendil-works/pi-tui@0.99.0", "", { "dependencies": { "get-east-asian-width": "1.6.0", "marked": "18.0.11" } }, "sha512-6S8VIb0RnD2xHlssyL8XsLXmM9LC7pjL2e9+UVkh5FCgNxslb35bl3glhDyJZzovBUrGnUM872CbBGiSiMRbGw=="],
|
|
66
75
|
|
|
67
76
|
"@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ=="],
|
|
68
77
|
|
|
@@ -152,7 +161,7 @@
|
|
|
152
161
|
|
|
153
162
|
"@stablelib/base64": ["@stablelib/base64@1.0.1", "", {}, "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ=="],
|
|
154
163
|
|
|
155
|
-
"@types/node": ["@types/node@
|
|
164
|
+
"@types/node": ["@types/node@25.9.8", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-VfMrScDmMhUJQmd5hArdQnFvK0OIeD36uN2Va1FcpYaLB/BgkgM8Ulc50XtYISPMz7APJ30+N0T5EM0jlcdfRw=="],
|
|
156
165
|
|
|
157
166
|
"@types/retry": ["@types/retry@0.12.0", "", {}, "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA=="],
|
|
158
167
|
|
|
@@ -242,7 +251,7 @@
|
|
|
242
251
|
|
|
243
252
|
"node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="],
|
|
244
253
|
|
|
245
|
-
"openai": ["openai@
|
|
254
|
+
"openai": ["openai@7.19.0", "", { "peerDependencies": { "@aws-sdk/credential-provider-node": ">=3.972.0 <4", "@smithy/hash-node": ">=4.3.0 <5", "@smithy/signature-v4": ">=5.4.0 <6", "undici": ">=5 <9", "ws": "^8.21.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["@aws-sdk/credential-provider-node", "@smithy/hash-node", "@smithy/signature-v4", "undici", "ws", "zod"] }, "sha512-MX2s3u2L5racTO0CC/SWpCOasJQBCJrqLKXK+l82cAhdeF8mPMBEe/gxMm0ZFa2xpKpOFLRjxv5afYEZbBXmbQ=="],
|
|
246
255
|
|
|
247
256
|
"p-retry": ["p-retry@4.6.2", "", { "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" } }, "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ=="],
|
|
248
257
|
|
|
@@ -256,6 +265,8 @@
|
|
|
256
265
|
|
|
257
266
|
"proxy-agent-negotiate": ["proxy-agent-negotiate@1.1.0", "", { "peerDependencies": { "kerberos": "^2.0.0" }, "optionalPeers": ["kerberos"] }, "sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ=="],
|
|
258
267
|
|
|
268
|
+
"quickjs-wasi": ["quickjs-wasi@3.6.2", "", {}, "sha512-FCqGtGOrMgzUiIrMNMA2YnsOxCNwo31dzqXvclXUC6xeT35NJLKXQJsvbeCTjvoFAwZgEAPg8U6+KAPDGXn8Mg=="],
|
|
269
|
+
|
|
259
270
|
"retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="],
|
|
260
271
|
|
|
261
272
|
"safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
|
|
@@ -276,9 +287,11 @@
|
|
|
276
287
|
|
|
277
288
|
"typebox": ["typebox@1.3.27", "", {}, "sha512-zu+jc1pcy4UiNThxikUr36f0Rybk9PEeCg/NE6adeWr/SKsdNO4EzZHYRDlv2YCVAfj3Odq3dESSo/jNyoBXzA=="],
|
|
278
289
|
|
|
290
|
+
"typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="],
|
|
291
|
+
|
|
279
292
|
"undici": ["undici@8.10.2", "", {}, "sha512-/y4/bH9YNU5hi9NIrpOuvGXFcxrj3CMrV+/AYpowAYTpHn8gX/XPFjNy766FPoYY0miQhdW977JFWKGNhBdwyQ=="],
|
|
280
293
|
|
|
281
|
-
"undici-types": ["undici-types@
|
|
294
|
+
"undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="],
|
|
282
295
|
|
|
283
296
|
"web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="],
|
|
284
297
|
|
|
@@ -294,6 +307,10 @@
|
|
|
294
307
|
|
|
295
308
|
"p-retry/retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="],
|
|
296
309
|
|
|
310
|
+
"protobufjs/@types/node": ["@types/node@26.4.1", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-k97ENvZWtvA6yqz5/FS6a7duDgOPEeOQOc2iKS/nY6mX6qJUKtLnWzQS+Xj6tXweyj6ZcTAK2Qecetnvi9nCLA=="],
|
|
311
|
+
|
|
297
312
|
"gaxios/https-proxy-agent/agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="],
|
|
313
|
+
|
|
314
|
+
"protobufjs/@types/node/undici-types": ["undici-types@8.3.0", "", {}, "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ=="],
|
|
298
315
|
}
|
|
299
316
|
}
|
package/models.json
CHANGED
|
@@ -4,15 +4,16 @@
|
|
|
4
4
|
"name": "DeepSeek V4.1 Flash",
|
|
5
5
|
"reasoning": true,
|
|
6
6
|
"input": [
|
|
7
|
-
"text"
|
|
7
|
+
"text",
|
|
8
|
+
"image"
|
|
8
9
|
],
|
|
9
10
|
"cost": {
|
|
10
|
-
"input": 0.
|
|
11
|
-
"output": 1.
|
|
12
|
-
"cacheRead": 0.
|
|
11
|
+
"input": 0.33,
|
|
12
|
+
"output": 1.32,
|
|
13
|
+
"cacheRead": 0.165,
|
|
13
14
|
"cacheWrite": 0
|
|
14
15
|
},
|
|
15
|
-
"contextWindow":
|
|
16
|
+
"contextWindow": 1048320,
|
|
16
17
|
"maxTokens": 131072,
|
|
17
18
|
"compat": {
|
|
18
19
|
"supportsStore": false,
|
|
@@ -120,9 +121,9 @@
|
|
|
120
121
|
"image"
|
|
121
122
|
],
|
|
122
123
|
"cost": {
|
|
123
|
-
"input": 3.
|
|
124
|
-
"output":
|
|
125
|
-
"cacheRead": 1.
|
|
124
|
+
"input": 3.06,
|
|
125
|
+
"output": 15.3,
|
|
126
|
+
"cacheRead": 1.53,
|
|
126
127
|
"cacheWrite": 0
|
|
127
128
|
},
|
|
128
129
|
"contextWindow": 1048576,
|
|
@@ -142,9 +143,9 @@
|
|
|
142
143
|
"text"
|
|
143
144
|
],
|
|
144
145
|
"cost": {
|
|
145
|
-
"input": 0.
|
|
146
|
-
"output": 0.
|
|
147
|
-
"cacheRead": 0.
|
|
146
|
+
"input": 0.2018,
|
|
147
|
+
"output": 0.6436,
|
|
148
|
+
"cacheRead": 0.1009,
|
|
148
149
|
"cacheWrite": 0
|
|
149
150
|
},
|
|
150
151
|
"contextWindow": 1048576,
|
|
@@ -164,9 +165,9 @@
|
|
|
164
165
|
"text"
|
|
165
166
|
],
|
|
166
167
|
"cost": {
|
|
167
|
-
"input": 1.
|
|
168
|
-
"output": 6
|
|
169
|
-
"cacheRead": 0.
|
|
168
|
+
"input": 1.85,
|
|
169
|
+
"output": 6,
|
|
170
|
+
"cacheRead": 0.925,
|
|
170
171
|
"cacheWrite": 0
|
|
171
172
|
},
|
|
172
173
|
"contextWindow": 262144,
|
|
@@ -187,9 +188,9 @@
|
|
|
187
188
|
"image"
|
|
188
189
|
],
|
|
189
190
|
"cost": {
|
|
190
|
-
"input":
|
|
191
|
-
"output": 4.
|
|
192
|
-
"cacheRead": 0.
|
|
191
|
+
"input": 0.94574,
|
|
192
|
+
"output": 4.26,
|
|
193
|
+
"cacheRead": 0.47287,
|
|
193
194
|
"cacheWrite": 0
|
|
194
195
|
},
|
|
195
196
|
"contextWindow": 262144,
|
|
@@ -211,7 +212,7 @@
|
|
|
211
212
|
],
|
|
212
213
|
"cost": {
|
|
213
214
|
"input": 0.1672,
|
|
214
|
-
"output": 1.
|
|
215
|
+
"output": 1.10675,
|
|
215
216
|
"cacheRead": 0.0836,
|
|
216
217
|
"cacheWrite": 0
|
|
217
218
|
},
|
|
@@ -255,9 +256,9 @@
|
|
|
255
256
|
"text"
|
|
256
257
|
],
|
|
257
258
|
"cost": {
|
|
258
|
-
"input": 0.
|
|
259
|
-
"output": 1.
|
|
260
|
-
"cacheRead": 0.
|
|
259
|
+
"input": 0.402,
|
|
260
|
+
"output": 1.488,
|
|
261
|
+
"cacheRead": 0.201,
|
|
261
262
|
"cacheWrite": 0
|
|
262
263
|
},
|
|
263
264
|
"contextWindow": 262100,
|
|
@@ -299,9 +300,9 @@
|
|
|
299
300
|
"text"
|
|
300
301
|
],
|
|
301
302
|
"cost": {
|
|
302
|
-
"input": 1.
|
|
303
|
-
"output": 3.
|
|
304
|
-
"cacheRead": 0.
|
|
303
|
+
"input": 1.542,
|
|
304
|
+
"output": 3.086,
|
|
305
|
+
"cacheRead": 0.771,
|
|
305
306
|
"cacheWrite": 0
|
|
306
307
|
},
|
|
307
308
|
"contextWindow": 1048576,
|
|
@@ -322,9 +323,9 @@
|
|
|
322
323
|
"image"
|
|
323
324
|
],
|
|
324
325
|
"cost": {
|
|
325
|
-
"input": 0.
|
|
326
|
-
"output": 3.
|
|
327
|
-
"cacheRead": 0.
|
|
326
|
+
"input": 0.6723,
|
|
327
|
+
"output": 3.16592,
|
|
328
|
+
"cacheRead": 0.33615,
|
|
328
329
|
"cacheWrite": 0
|
|
329
330
|
},
|
|
330
331
|
"contextWindow": 262142,
|
|
@@ -366,9 +367,9 @@
|
|
|
366
367
|
"text"
|
|
367
368
|
],
|
|
368
369
|
"cost": {
|
|
369
|
-
"input": 0.
|
|
370
|
-
"output": 1.
|
|
371
|
-
"cacheRead": 0.
|
|
370
|
+
"input": 0.354,
|
|
371
|
+
"output": 1.416,
|
|
372
|
+
"cacheRead": 0.177,
|
|
372
373
|
"cacheWrite": 0
|
|
373
374
|
},
|
|
374
375
|
"contextWindow": 196600,
|
|
@@ -500,9 +501,9 @@
|
|
|
500
501
|
"image"
|
|
501
502
|
],
|
|
502
503
|
"cost": {
|
|
503
|
-
"input": 0.
|
|
504
|
-
"output": 0.
|
|
505
|
-
"cacheRead": 0.
|
|
504
|
+
"input": 0.0833,
|
|
505
|
+
"output": 0.301,
|
|
506
|
+
"cacheRead": 0.04165,
|
|
506
507
|
"cacheWrite": 0
|
|
507
508
|
},
|
|
508
509
|
"contextWindow": 262142,
|
|
@@ -587,9 +588,9 @@
|
|
|
587
588
|
"text"
|
|
588
589
|
],
|
|
589
590
|
"cost": {
|
|
590
|
-
"input": 0.
|
|
591
|
-
"output": 0.
|
|
592
|
-
"cacheRead": 0.
|
|
591
|
+
"input": 0.188,
|
|
592
|
+
"output": 0.73,
|
|
593
|
+
"cacheRead": 0.094,
|
|
593
594
|
"cacheWrite": 0.04
|
|
594
595
|
},
|
|
595
596
|
"contextWindow": 131072,
|
|
@@ -738,9 +739,9 @@
|
|
|
738
739
|
"text"
|
|
739
740
|
],
|
|
740
741
|
"cost": {
|
|
741
|
-
"input": 0.
|
|
742
|
-
"output": 0.
|
|
743
|
-
"cacheRead": 0.
|
|
742
|
+
"input": 0.055,
|
|
743
|
+
"output": 0.194,
|
|
744
|
+
"cacheRead": 0.0275,
|
|
744
745
|
"cacheWrite": 0.03
|
|
745
746
|
},
|
|
746
747
|
"contextWindow": 64000,
|
|
@@ -781,9 +782,9 @@
|
|
|
781
782
|
"text"
|
|
782
783
|
],
|
|
783
784
|
"cost": {
|
|
784
|
-
"input": 1.
|
|
785
|
-
"output":
|
|
786
|
-
"cacheRead": 0.
|
|
785
|
+
"input": 1.13298,
|
|
786
|
+
"output": 4.008,
|
|
787
|
+
"cacheRead": 0.56649,
|
|
787
788
|
"cacheWrite": 0
|
|
788
789
|
},
|
|
789
790
|
"contextWindow": 1048576,
|
|
@@ -826,9 +827,9 @@
|
|
|
826
827
|
"text"
|
|
827
828
|
],
|
|
828
829
|
"cost": {
|
|
829
|
-
"input": 0.
|
|
830
|
-
"output": 0.
|
|
831
|
-
"cacheRead": 0.
|
|
830
|
+
"input": 0.05975,
|
|
831
|
+
"output": 0.185,
|
|
832
|
+
"cacheRead": 0.029875,
|
|
832
833
|
"cacheWrite": 0
|
|
833
834
|
},
|
|
834
835
|
"contextWindow": 262144,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-io-provider",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.46",
|
|
4
4
|
"description": "IO Intelligence provider extension for pi - Access DeepSeek, Kimi, GLM, Llama, Qwen, Mistral, and more through the IO Intelligence API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.ts",
|
|
@@ -27,12 +27,19 @@
|
|
|
27
27
|
]
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@earendil-works/pi-coding-agent": "0.
|
|
30
|
+
"@earendil-works/pi-coding-agent": "0.99.0",
|
|
31
|
+
"typescript": "6.0.3",
|
|
32
|
+
"@types/node": "^25.9.1"
|
|
33
|
+
},
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"@earendil-works/pi-coding-agent": "*"
|
|
31
36
|
},
|
|
32
37
|
"scripts": {
|
|
33
38
|
"clean": "echo 'nothing to clean'",
|
|
34
39
|
"build": "echo 'nothing to build'",
|
|
35
|
-
"check": "
|
|
36
|
-
"update-models": "node scripts/update-models.js"
|
|
40
|
+
"check": "tsc --noEmit && node scripts/test-pi-compat.mjs",
|
|
41
|
+
"update-models": "node scripts/update-models.js",
|
|
42
|
+
"test:pi": "node scripts/test-pi-compat.mjs",
|
|
43
|
+
"typecheck": "tsc --noEmit"
|
|
37
44
|
}
|
|
38
45
|
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { mkdtemp, readFile, rm } from 'node:fs/promises';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { dirname, join, resolve } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
|
|
7
|
+
// Import Pi only after selecting a disposable agent directory. Never read user auth/cache.
|
|
8
|
+
const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
9
|
+
const home = await mkdtemp(join(tmpdir(), 'pi-provider-compat-'));
|
|
10
|
+
const previousHome = process.env.PI_CODING_AGENT_DIR;
|
|
11
|
+
const previousFetch = globalThis.fetch;
|
|
12
|
+
process.env.PI_CODING_AGENT_DIR = home;
|
|
13
|
+
globalThis.fetch = async () => new Response('', { status: 503 });
|
|
14
|
+
let session;
|
|
15
|
+
try {
|
|
16
|
+
const { createAgentSession, DefaultResourceLoader, ModelRuntime, SessionManager, SettingsManager, VERSION } = await import('@earendil-works/pi-coding-agent');
|
|
17
|
+
assert.equal(VERSION, '0.99.0', 'run compatibility checks against the pinned host');
|
|
18
|
+
const manifest = JSON.parse(await readFile(join(root, 'package.json'), 'utf8'));
|
|
19
|
+
const hostPackages = ['@earendil-works/pi-ai', '@earendil-works/pi-agent-core', '@earendil-works/pi-coding-agent', '@earendil-works/pi-tui', 'typebox'];
|
|
20
|
+
for (const name of hostPackages) {
|
|
21
|
+
assert.equal(manifest.dependencies?.[name], undefined, `${name} must not be installed as a runtime dependency`);
|
|
22
|
+
if (manifest.peerDependencies?.[name] !== undefined) assert.equal(manifest.peerDependencies[name], '*');
|
|
23
|
+
}
|
|
24
|
+
const settingsManager = SettingsManager.inMemory({ compaction: { enabled: false }, retry: { enabled: false } });
|
|
25
|
+
const resourceLoader = new DefaultResourceLoader({
|
|
26
|
+
cwd: home, agentDir: home, settingsManager,
|
|
27
|
+
additionalExtensionPaths: [join(root, 'index.ts')],
|
|
28
|
+
noSkills: true, noPromptTemplates: true, noThemes: true, noContextFiles: true,
|
|
29
|
+
});
|
|
30
|
+
await resourceLoader.reload();
|
|
31
|
+
const loaded = resourceLoader.getExtensions();
|
|
32
|
+
assert.deepEqual(loaded.errors, [], 'extension must load in the real Pi loader');
|
|
33
|
+
assert.deepEqual(loaded.warnings ?? [], [], 'extension must not produce host-dependency warnings');
|
|
34
|
+
assert.equal(loaded.extensions.length, 1, 'load only this provider');
|
|
35
|
+
const registrations = [...loaded.runtime.pendingProviderRegistrations];
|
|
36
|
+
assert.ok(registrations.length > 0, 'factory must register a provider before session startup');
|
|
37
|
+
const modelRuntime = await ModelRuntime.create({ authPath: join(home, 'auth.json'), modelsPath: null, modelsStorePath: join(home, 'models-cache'), allowModelNetwork: false });
|
|
38
|
+
({ session } = await createAgentSession({ cwd: home, agentDir: home, resourceLoader, modelRuntime, settingsManager, sessionManager: SessionManager.inMemory(home), noTools: true }));
|
|
39
|
+
const errors = [];
|
|
40
|
+
await session.bindExtensions({ mode: 'print', onError: (error) => errors.push(error) });
|
|
41
|
+
await new Promise((done) => setImmediate(done));
|
|
42
|
+
let modelCount = 0;
|
|
43
|
+
for (const { name, config } of registrations) {
|
|
44
|
+
const models = modelRuntime.getAllModels(name);
|
|
45
|
+
assert.equal(models.length, config.models.length, `${name}: all configured models must survive host registration`);
|
|
46
|
+
assert.ok(models.length > 0, `${name}: nonempty catalog`);
|
|
47
|
+
assert.equal(new Set(models.map((model) => model.id)).size, models.length, `${name}: unique model IDs`);
|
|
48
|
+
for (const model of models) {
|
|
49
|
+
assert.equal(model.provider, name);
|
|
50
|
+
assert.ok(model.api && model.baseUrl && model.id && model.name);
|
|
51
|
+
if (model.type === 'image') assert.ok(model.output.includes('image'));
|
|
52
|
+
else assert.ok(model.contextWindow > 0, `${name}/${model.id}: positive context limit`);
|
|
53
|
+
if (model.type === 'chat') assert.ok(model.maxTokens > 0, `${name}/${model.id}: positive output limit`);
|
|
54
|
+
assert.ok(model.input.includes('text'));
|
|
55
|
+
for (const cost of Object.values(model.cost)) assert.ok(Number.isFinite(cost) && cost >= 0);
|
|
56
|
+
}
|
|
57
|
+
if (name === 'opencode') {
|
|
58
|
+
const { getAllBuiltinModels } = await import('@earendil-works/pi-ai/providers/all');
|
|
59
|
+
for (const native of getAllBuiltinModels(name).filter(model => model.type !== 'chat')) {
|
|
60
|
+
assert.ok(models.some(model => model.id === native.id && model.type === native.type), `${native.id}: preserve native operation`);
|
|
61
|
+
assert.ok(!modelRuntime.getModels(name).some(model => model.id === native.id), `${native.id}: must not become a chat model`);
|
|
62
|
+
}
|
|
63
|
+
assert.equal(typeof modelRuntime.getProvider(name).classify, 'function');
|
|
64
|
+
}
|
|
65
|
+
modelCount += models.length;
|
|
66
|
+
}
|
|
67
|
+
await session.extensionRunner.emit({ type: 'session_shutdown' });
|
|
68
|
+
assert.deepEqual(errors, [], 'startup and shutdown handlers must work with Pi 0.99 contexts');
|
|
69
|
+
console.log(`${manifest.name}: Pi ${VERSION} loader, manifest, session startup, and ${modelCount} models OK`);
|
|
70
|
+
} finally {
|
|
71
|
+
session?.dispose();
|
|
72
|
+
globalThis.fetch = previousFetch;
|
|
73
|
+
if (previousHome === undefined) delete process.env.PI_CODING_AGENT_DIR;
|
|
74
|
+
else process.env.PI_CODING_AGENT_DIR = previousHome;
|
|
75
|
+
await rm(home, { recursive: true, force: true });
|
|
76
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ESNext",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "bundler",
|
|
6
|
+
"esModuleInterop": true,
|
|
7
|
+
"strict": true,
|
|
8
|
+
"noEmit": true,
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
"resolveJsonModule": true,
|
|
11
|
+
"types": ["node"]
|
|
12
|
+
},
|
|
13
|
+
"files": ["index.ts"]
|
|
14
|
+
}
|