pi-runinfra-provider 1.0.0 → 1.1.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
@@ -72,6 +72,11 @@ pi
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
74
  | Nemotron 3.5 Lightning 30B | 262K | ❌ | ✅ | $0.05 | — | $0.15 |
75
+ | Ornith 1.5 35B | 262K | ✅ | ✅ | $0.10 | $0.01 | $0.40 |
76
+ | Parakeet TDT 0.6B v3 | 131K | ❌ | ❌ | $10.00 | — | — |
77
+ | Qwen3 Embedding 0.6B | 33K | ❌ | ❌ | $0.01 | — | — |
78
+ | Qwen3 Embedding 8B | 33K | ❌ | ❌ | $0.05 | — | — |
79
+ | Qwen3 Reranker 8B | 16K | ❌ | ❌ | $0.05 | — | — |
75
80
  | Qwen3.8 2.4T A95B | 262K | ❌ | ✅ | $2.00 | $0.20 | $6.00 |
76
81
  | Qwen3.8 27B | 262K | ❌ | ✅ | $0.10 | $0.01 | $0.40 |
77
82
 
@@ -128,7 +133,7 @@ RunInfra's API follows the OpenAI Chat Completions API:
128
133
  - **`supportsDeveloperRole: false`** — All models. RunInfra uses standard OpenAI roles.
129
134
  - **`maxTokensField: "max_tokens"`** — All models. RunInfra accepts `max_tokens`.
130
135
  - **`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.
136
+ - **`thinkingFormat: "openai"`** — Nemotron 3.5 Lightning, Ornith 1.5 35B, and Qwen3.8. Returns thinking in the `reasoning_content` field.
132
137
  - **`supportsReasoningEffort: true`** — All reasoning models. Supports the `reasoning_effort` parameter.
133
138
  - **`supportsStore: false`** — All models. RunInfra doesn't support the `store` parameter.
134
139
 
@@ -165,6 +170,13 @@ This will:
165
170
  3. Apply overrides from `patch.json`
166
171
  4. Update `models.json` and the README model table
167
172
 
173
+ To regenerate just the README model table from local data — no API key needed,
174
+ useful for offline curation:
175
+
176
+ ```bash
177
+ node scripts/update-models.js --readme-only
178
+ ```
179
+
168
180
  ## License
169
181
 
170
182
  MIT
@@ -1 +1,2 @@
1
1
  []
2
+
package/models.json CHANGED
@@ -41,6 +41,49 @@
41
41
  "maxTokensField": "max_tokens"
42
42
  }
43
43
  },
44
+ {
45
+ "id": "nemotron-3-5-lightning-30b",
46
+ "name": "Nemotron 3.5 Lightning 30B",
47
+ "reasoning": true,
48
+ "input": [
49
+ "text"
50
+ ],
51
+ "cost": {
52
+ "input": 0.05,
53
+ "output": 0.15,
54
+ "cacheRead": 0,
55
+ "cacheWrite": 0
56
+ },
57
+ "contextWindow": 262144,
58
+ "maxTokens": 262144,
59
+ "compat": {
60
+ "supportsDeveloperRole": false,
61
+ "supportsStore": false,
62
+ "maxTokensField": "max_tokens"
63
+ }
64
+ },
65
+ {
66
+ "id": "ornith-1-5-35b",
67
+ "name": "Ornith 1.5 35B",
68
+ "reasoning": true,
69
+ "input": [
70
+ "text",
71
+ "image"
72
+ ],
73
+ "cost": {
74
+ "input": 0.1,
75
+ "output": 0.4,
76
+ "cacheRead": 0.01,
77
+ "cacheWrite": 0
78
+ },
79
+ "contextWindow": 262144,
80
+ "maxTokens": 262144,
81
+ "compat": {
82
+ "supportsDeveloperRole": false,
83
+ "supportsStore": false,
84
+ "maxTokensField": "max_tokens"
85
+ }
86
+ },
44
87
  {
45
88
  "id": "qwen3-8-2-4t-a95b",
46
89
  "name": "Qwen3.8 2.4T A95B",
@@ -82,5 +125,89 @@
82
125
  "supportsStore": false,
83
126
  "maxTokensField": "max_tokens"
84
127
  }
128
+ },
129
+ {
130
+ "id": "parakeet-tdt-0-6b-v3",
131
+ "name": "Parakeet TDT 0.6B v3",
132
+ "reasoning": false,
133
+ "input": [
134
+ "text"
135
+ ],
136
+ "cost": {
137
+ "input": 10,
138
+ "output": 0,
139
+ "cacheRead": 0,
140
+ "cacheWrite": 0
141
+ },
142
+ "contextWindow": 131072,
143
+ "maxTokens": 32768,
144
+ "compat": {
145
+ "supportsDeveloperRole": false,
146
+ "supportsStore": false,
147
+ "maxTokensField": "max_tokens"
148
+ }
149
+ },
150
+ {
151
+ "id": "qwen3-embedding-0-6b",
152
+ "name": "Qwen3 Embedding 0.6B",
153
+ "reasoning": false,
154
+ "input": [
155
+ "text"
156
+ ],
157
+ "cost": {
158
+ "input": 0.01,
159
+ "output": 0,
160
+ "cacheRead": 0,
161
+ "cacheWrite": 0
162
+ },
163
+ "contextWindow": 32768,
164
+ "maxTokens": 32768,
165
+ "compat": {
166
+ "supportsDeveloperRole": false,
167
+ "supportsStore": false,
168
+ "maxTokensField": "max_tokens"
169
+ }
170
+ },
171
+ {
172
+ "id": "qwen3-embedding-8b",
173
+ "name": "Qwen3 Embedding 8B",
174
+ "reasoning": false,
175
+ "input": [
176
+ "text"
177
+ ],
178
+ "cost": {
179
+ "input": 0.05,
180
+ "output": 0,
181
+ "cacheRead": 0,
182
+ "cacheWrite": 0
183
+ },
184
+ "contextWindow": 32768,
185
+ "maxTokens": 32768,
186
+ "compat": {
187
+ "supportsDeveloperRole": false,
188
+ "supportsStore": false,
189
+ "maxTokensField": "max_tokens"
190
+ }
191
+ },
192
+ {
193
+ "id": "qwen3-reranker-8b",
194
+ "name": "Qwen3 Reranker 8B",
195
+ "reasoning": false,
196
+ "input": [
197
+ "text"
198
+ ],
199
+ "cost": {
200
+ "input": 0.05,
201
+ "output": 0,
202
+ "cacheRead": 0,
203
+ "cacheWrite": 0
204
+ },
205
+ "contextWindow": 16384,
206
+ "maxTokens": 32768,
207
+ "compat": {
208
+ "supportsDeveloperRole": false,
209
+ "supportsStore": false,
210
+ "maxTokensField": "max_tokens"
211
+ }
85
212
  }
86
213
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-runinfra-provider",
3
- "version": "1.0.0",
3
+ "version": "1.1.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
@@ -56,6 +56,25 @@
56
56
  "maxTokensField": "max_tokens"
57
57
  }
58
58
  },
59
+ "ornith-1-5-35b": {
60
+ "reasoning": true,
61
+ "name": "Ornith 1.5 35B",
62
+ "thinkingLevelMap": {
63
+ "off": "none",
64
+ "minimal": "low",
65
+ "low": "low",
66
+ "medium": "medium",
67
+ "high": "xhigh",
68
+ "xhigh": "xhigh",
69
+ "max": "xhigh"
70
+ },
71
+ "compat": {
72
+ "thinkingFormat": "openai",
73
+ "supportsReasoningEffort": true,
74
+ "requiresReasoningContentOnAssistantMessages": true,
75
+ "maxTokensField": "max_tokens"
76
+ }
77
+ },
59
78
  "qwen3-8-2-4t-a95b": {
60
79
  "name": "Qwen3.8 2.4T A95B",
61
80
  "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