pi-runinfra-provider 1.0.0 → 1.2.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.
package/README.md CHANGED
@@ -15,7 +15,7 @@ _A [pi](https://github.com/earendil-works/pi-coding-agent) provider extension fo
15
15
 
16
16
  ## Features
17
17
 
18
- - **5 AI Models** including DeepSeek V4 Flash, DeepSeek V4 Pro, Nemotron 3.5 Lightning 30B, Qwen3.8 2.4T A95B, and Qwen3.8 27B
18
+ - **10 AI Models** covering the full RunInfra lineup: DeepSeek V4 Flash, DeepSeek V4 Pro, Nemotron 3.5 Lightning 30B, Ornith 1.5 35B, Qwen3.8 2.4T A95B, Qwen3.8 27B, Parakeet TDT 0.6B v3, and the Qwen3 embedding/reranker models
19
19
  - **OpenAI-Compatible API** — Just change the base URL and API key
20
20
  - **Cost Tracking** — Per-model pricing for budget management
21
21
  - **Reasoning Models** — Extended thinking via `reasoning_content` field
@@ -71,7 +71,13 @@ pi
71
71
  |-------|---------|--------|-----------|-----------|-----------------|------------|
72
72
  | DeepSeek V4 Flash | 1.0M | ❌ | ✅ | $0.13 | $0.01 | $0.27 |
73
73
  | DeepSeek V4 Pro | 1.0M | ❌ | ✅ | $0.60 | $0.03 | $1.90 |
74
- | Nemotron 3.5 Lightning 30B | 262K | ❌ | ✅ | $0.05 | — | $0.15 |
74
+ | GLM 5.3 Flash | 1.0M | ✅ | ✅ | $0.10 | $0.01 | $0.40 |
75
+ | Nemotron 3.5 Lightning 30B | 262K | ❌ | ✅ | $0.05 | $0.01 | $0.15 |
76
+ | Ornith 1.5 35B | 262K | ✅ | ✅ | $0.10 | $0.01 | $0.40 |
77
+ | Parakeet TDT 0.6B v3 | 131K | ❌ | ❌ | $10.00 | — | — |
78
+ | Qwen3 Embedding 0.6B | 33K | ❌ | ❌ | $0.01 | — | — |
79
+ | Qwen3 Embedding 8B | 33K | ❌ | ❌ | $0.05 | — | — |
80
+ | Qwen3 Reranker 8B | 16K | ❌ | ❌ | $0.05 | — | — |
75
81
  | Qwen3.8 2.4T A95B | 262K | ❌ | ✅ | $2.00 | $0.20 | $6.00 |
76
82
  | Qwen3.8 27B | 262K | ❌ | ✅ | $0.10 | $0.01 | $0.40 |
77
83
 
@@ -128,7 +134,7 @@ RunInfra's API follows the OpenAI Chat Completions API:
128
134
  - **`supportsDeveloperRole: false`** — All models. RunInfra uses standard OpenAI roles.
129
135
  - **`maxTokensField: "max_tokens"`** — All models. RunInfra accepts `max_tokens`.
130
136
  - **`thinkingFormat: "deepseek"`** — DeepSeek V4 Flash / V4 Pro. Reasoning is toggled via a `thinking` parameter and effort is sent as `reasoning_effort` (pi maps Shift+Tab levels to `low`/`high`/`max`).
131
- - **`thinkingFormat: "openai"`** — Nemotron 3.5 Lightning, Qwen3.8. Returns thinking in the `reasoning_content` field.
137
+ - **`thinkingFormat: "openai"`** — Nemotron 3.5 Lightning, Ornith 1.5 35B, and Qwen3.8. Returns thinking in the `reasoning_content` field.
132
138
  - **`supportsReasoningEffort: true`** — All reasoning models. Supports the `reasoning_effort` parameter.
133
139
  - **`supportsStore: false`** — All models. RunInfra doesn't support the `store` parameter.
134
140
 
@@ -165,6 +171,13 @@ This will:
165
171
  3. Apply overrides from `patch.json`
166
172
  4. Update `models.json` and the README model table
167
173
 
174
+ To regenerate just the README model table from local data — no API key needed,
175
+ useful for offline curation:
176
+
177
+ ```bash
178
+ node scripts/update-models.js --readme-only
179
+ ```
180
+
168
181
  ## License
169
182
 
170
183
  MIT
@@ -1 +1,2 @@
1
1
  []
2
+
@@ -1,24 +1,90 @@
1
1
  {
2
- "nemotron-3-5-lightning-30b": {
3
- "id": "nemotron-3-5-lightning-30b",
4
- "name": "Nemotron 3.5 Lightning 30B",
5
- "reasoning": true,
2
+ "parakeet-tdt-0-6b-v3": {
3
+ "id": "parakeet-tdt-0-6b-v3",
4
+ "name": "Parakeet TDT 0.6B v3",
5
+ "reasoning": false,
6
+ "input": [
7
+ "text"
8
+ ],
9
+ "cost": {
10
+ "input": 10,
11
+ "output": 0,
12
+ "cacheRead": 0,
13
+ "cacheWrite": 0
14
+ },
15
+ "contextWindow": 131072,
16
+ "maxTokens": 32768,
17
+ "compat": {
18
+ "supportsDeveloperRole": false,
19
+ "supportsStore": false,
20
+ "maxTokensField": "max_tokens"
21
+ },
22
+ "deprecatedAt": "2026-08-27T07:36:24.190Z"
23
+ },
24
+ "qwen3-embedding-0-6b": {
25
+ "id": "qwen3-embedding-0-6b",
26
+ "name": "Qwen3 Embedding 0.6B",
27
+ "reasoning": false,
28
+ "input": [
29
+ "text"
30
+ ],
31
+ "cost": {
32
+ "input": 0.01,
33
+ "output": 0,
34
+ "cacheRead": 0,
35
+ "cacheWrite": 0
36
+ },
37
+ "contextWindow": 32768,
38
+ "maxTokens": 32768,
39
+ "compat": {
40
+ "supportsDeveloperRole": false,
41
+ "supportsStore": false,
42
+ "maxTokensField": "max_tokens"
43
+ },
44
+ "deprecatedAt": "2026-08-27T07:36:24.190Z"
45
+ },
46
+ "qwen3-embedding-8b": {
47
+ "id": "qwen3-embedding-8b",
48
+ "name": "Qwen3 Embedding 8B",
49
+ "reasoning": false,
50
+ "input": [
51
+ "text"
52
+ ],
53
+ "cost": {
54
+ "input": 0.05,
55
+ "output": 0,
56
+ "cacheRead": 0,
57
+ "cacheWrite": 0
58
+ },
59
+ "contextWindow": 32768,
60
+ "maxTokens": 32768,
61
+ "compat": {
62
+ "supportsDeveloperRole": false,
63
+ "supportsStore": false,
64
+ "maxTokensField": "max_tokens"
65
+ },
66
+ "deprecatedAt": "2026-08-27T07:36:24.190Z"
67
+ },
68
+ "qwen3-reranker-8b": {
69
+ "id": "qwen3-reranker-8b",
70
+ "name": "Qwen3 Reranker 8B",
71
+ "reasoning": false,
6
72
  "input": [
7
73
  "text"
8
74
  ],
9
75
  "cost": {
10
76
  "input": 0.05,
11
- "output": 0.15,
77
+ "output": 0,
12
78
  "cacheRead": 0,
13
79
  "cacheWrite": 0
14
80
  },
15
- "contextWindow": 262144,
81
+ "contextWindow": 16384,
16
82
  "maxTokens": 32768,
17
83
  "compat": {
18
84
  "supportsDeveloperRole": false,
19
85
  "supportsStore": false,
20
86
  "maxTokensField": "max_tokens"
21
87
  },
22
- "deprecatedAt": "2026-08-18T16:43:21.091Z"
88
+ "deprecatedAt": "2026-08-27T07:36:24.190Z"
23
89
  }
24
90
  }
package/models.json CHANGED
@@ -13,7 +13,7 @@
13
13
  "cacheWrite": 0
14
14
  },
15
15
  "contextWindow": 1048576,
16
- "maxTokens": 32768,
16
+ "maxTokens": 1048576,
17
17
  "compat": {
18
18
  "supportsDeveloperRole": false,
19
19
  "supportsStore": false,
@@ -34,7 +34,71 @@
34
34
  "cacheWrite": 0
35
35
  },
36
36
  "contextWindow": 1048576,
37
- "maxTokens": 32768,
37
+ "maxTokens": 1048576,
38
+ "compat": {
39
+ "supportsDeveloperRole": false,
40
+ "supportsStore": false,
41
+ "maxTokensField": "max_tokens"
42
+ }
43
+ },
44
+ {
45
+ "id": "glm-5-3-flash",
46
+ "name": "Glm 5 3 Flash",
47
+ "reasoning": false,
48
+ "input": [
49
+ "text"
50
+ ],
51
+ "cost": {
52
+ "input": 0.1,
53
+ "output": 0.4,
54
+ "cacheRead": 0.01,
55
+ "cacheWrite": 0
56
+ },
57
+ "contextWindow": 1048576,
58
+ "maxTokens": 1048576,
59
+ "compat": {
60
+ "supportsDeveloperRole": false,
61
+ "supportsStore": false,
62
+ "maxTokensField": "max_tokens"
63
+ }
64
+ },
65
+ {
66
+ "id": "nemotron-3-5-lightning-30b",
67
+ "name": "Nemotron 3.5 Lightning 30B",
68
+ "reasoning": true,
69
+ "input": [
70
+ "text"
71
+ ],
72
+ "cost": {
73
+ "input": 0.05,
74
+ "output": 0.15,
75
+ "cacheRead": 0.01,
76
+ "cacheWrite": 0
77
+ },
78
+ "contextWindow": 262144,
79
+ "maxTokens": 262144,
80
+ "compat": {
81
+ "supportsDeveloperRole": false,
82
+ "supportsStore": false,
83
+ "maxTokensField": "max_tokens"
84
+ }
85
+ },
86
+ {
87
+ "id": "ornith-1-5-35b",
88
+ "name": "Ornith 1.5 35B",
89
+ "reasoning": true,
90
+ "input": [
91
+ "text",
92
+ "image"
93
+ ],
94
+ "cost": {
95
+ "input": 0.1,
96
+ "output": 0.4,
97
+ "cacheRead": 0.01,
98
+ "cacheWrite": 0
99
+ },
100
+ "contextWindow": 262144,
101
+ "maxTokens": 262144,
38
102
  "compat": {
39
103
  "supportsDeveloperRole": false,
40
104
  "supportsStore": false,
@@ -55,7 +119,7 @@
55
119
  "cacheWrite": 0
56
120
  },
57
121
  "contextWindow": 262144,
58
- "maxTokens": 32768,
122
+ "maxTokens": 262144,
59
123
  "compat": {
60
124
  "supportsDeveloperRole": false,
61
125
  "supportsStore": false,
@@ -76,7 +140,7 @@
76
140
  "cacheWrite": 0
77
141
  },
78
142
  "contextWindow": 262144,
79
- "maxTokens": 32768,
143
+ "maxTokens": 262144,
80
144
  "compat": {
81
145
  "supportsDeveloperRole": false,
82
146
  "supportsStore": false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-runinfra-provider",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "RunInfra provider extension for pi - Access DeepSeek V4, Nemotron 3.5 Lightning, and Qwen3.8 models through the RunInfra gateway",
5
5
  "author": "monotykamary",
6
6
  "homepage": "https://github.com/monotykamary/pi-runinfra-provider#readme",
package/patch.json CHANGED
@@ -37,6 +37,19 @@
37
37
  "maxTokensField": "max_tokens"
38
38
  }
39
39
  },
40
+ "glm-5-3-flash": {
41
+ "name": "GLM 5.3 Flash",
42
+ "reasoning": true,
43
+ "input": [
44
+ "text",
45
+ "image"
46
+ ],
47
+ "compat": {
48
+ "thinkingFormat": "zai",
49
+ "supportsReasoningEffort": false,
50
+ "maxTokensField": "max_tokens"
51
+ }
52
+ },
40
53
  "nemotron-3-5-lightning-30b": {
41
54
  "name": "Nemotron 3.5 Lightning 30B",
42
55
  "reasoning": true,
@@ -56,6 +69,25 @@
56
69
  "maxTokensField": "max_tokens"
57
70
  }
58
71
  },
72
+ "ornith-1-5-35b": {
73
+ "reasoning": true,
74
+ "name": "Ornith 1.5 35B",
75
+ "thinkingLevelMap": {
76
+ "off": "none",
77
+ "minimal": "low",
78
+ "low": "low",
79
+ "medium": "medium",
80
+ "high": "xhigh",
81
+ "xhigh": "xhigh",
82
+ "max": "xhigh"
83
+ },
84
+ "compat": {
85
+ "thinkingFormat": "openai",
86
+ "supportsReasoningEffort": true,
87
+ "requiresReasoningContentOnAssistantMessages": true,
88
+ "maxTokensField": "max_tokens"
89
+ }
90
+ },
59
91
  "qwen3-8-2-4t-a95b": {
60
92
  "name": "Qwen3.8 2.4T A95B",
61
93
  "reasoning": true,
@@ -430,6 +430,20 @@ function withDeprecatedForReadme(models) {
430
430
 
431
431
  async function main() {
432
432
  try {
433
+ // Regenerate the derived README table from local source data without an API
434
+ // key. This is useful for offline workflows while curating custom models.
435
+ if (process.argv.includes('--readme-only')) {
436
+ const baseModels = loadJson(MODELS_JSON_PATH);
437
+ const patchData = loadJson(PATCH_JSON_PATH);
438
+ const customModels = loadJson(CUSTOM_MODELS_JSON_PATH);
439
+ const readmeBase = withDeprecatedForReadme(Array.isArray(baseModels) ? baseModels : []);
440
+ const readmeModels = buildModels(readmeBase, Array.isArray(customModels) ? customModels : [], patchData);
441
+ readmeModels.sort((a, b) => a.name.localeCompare(b.name));
442
+ updateReadme(readmeModels);
443
+ console.log('✓ Regenerated README.md from local model data');
444
+ return;
445
+ }
446
+
433
447
  const apiModels = await fetchModels();
434
448
 
435
449
  // Load existing models.json — source of truth for curated specs