pi-freeflow 1.38.1 → 1.38.2
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 +7 -0
- package/README.md +9 -8
- package/package.json +1 -1
- package/src/catalog.ts +18 -4
- package/src/models.ts +100 -42
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.38.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Add Exo to the OpenCode free tier — a live preview model with chat, tools, reasoning, and image input that the official free lineup lists.
|
|
8
|
+
- Add GLM-5.3 Flash and LL Alpha to the OpenCode free tier, and retire Step 5 Preview — it is gone from the Zen lineup and demoted to paid on the Kilo lane, so those entries can no longer be selected.
|
|
9
|
+
|
|
3
10
|
## 1.38.1
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# pi-freeflow
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 37 free models with up to 1M context. No API keys to manage. Add your own relays to spread requests across more IPs.
|
|
4
4
|
|
|
5
5
|
Thin by design: a model list, a relay proxy, and a log. The host (`pi-ai`) handles thinking, normalization, and provider behavior.
|
|
6
6
|
|
|
@@ -16,7 +16,7 @@ Thin by design: a model list, a relay proxy, and a log. The host (`pi-ai`) handl
|
|
|
16
16
|
|
|
17
17
|
| Feature | What it does | Cost |
|
|
18
18
|
| :--- | :--- | :--- |
|
|
19
|
-
| **
|
|
19
|
+
| **37 free models** | 14 from OpenCode Zen, 13 from KiloCode Gateway, 2 from Cline, 8 from OVHcloud AI Endpoints, context windows up to 1M. Full list below. | **$0** |
|
|
20
20
|
| **Relay pool** | Route requests through your own Cloudflare Workers, Deno Deploy, and Vercel Edge relays. Traffic spreads across the pool, or stays on one sticky relay. A relay that rate-limits, times out, or drops the connection cools down while healthy ones take its traffic. | **$0** beyond your platforms' free tiers |
|
|
21
21
|
| **Automatic fallback** | When every relay is cooling down, requests go direct to upstream instead of failing. | **$0** |
|
|
22
22
|
| **Short model names** | Most models have a slash-free, colon-free alias, plus an optional `:effort` suffix for thinking depth. You type `freeflow/<name>`; the two Cline models have no alias and must be typed in full. | **$0** |
|
|
@@ -197,14 +197,14 @@ The same command set works identically in OMP and Pi:
|
|
|
197
197
|
|
|
198
198
|
---
|
|
199
199
|
|
|
200
|
-
###
|
|
200
|
+
### 37 models, one command
|
|
201
201
|
|
|
202
202
|
```bash
|
|
203
203
|
/model → freeflow → pick
|
|
204
204
|
```
|
|
205
205
|
|
|
206
206
|
Every model specification is reconciled against [models.dev](https://models.dev/), [OpenRouter](https://openrouter.ai/), and OMP's built-in catalog, configured with the highest verified context, output ceiling, and reasoning capabilities across twin models.
|
|
207
|
-
#### OpenCode Zen (
|
|
207
|
+
#### OpenCode Zen (14 models), Responses and Chat API
|
|
208
208
|
|
|
209
209
|
Good defaults for long coding sessions and agentic work.
|
|
210
210
|
|
|
@@ -220,10 +220,12 @@ Good defaults for long coding sessions and agentic work.
|
|
|
220
220
|
| `big-pickle` | Big Pickle | **200K** (200.000) | **32K** (32.000) | `high / max` | ❌ |
|
|
221
221
|
| `space-bunny-free` | Stealth preview (lab undisclosed) | **1M** (1.048.576) | **512K** (524.288) | `low … max` | ✅ |
|
|
222
222
|
| `longcat-2.5-preview-free` | Meituan LongCat | **1M** (1.000.000) | **131K** (131.072) | `minimal … max` | ✅ |
|
|
223
|
-
| `
|
|
223
|
+
| `glm-5.3-flash-free` | Zhipu AI | **1M** (1.000.000) | **32K** (32.000) | `minimal … max` | ✅ |
|
|
224
|
+
| `ll-alpha-free` | Undisclosed | **262K** (262.144) | **64K** (65.536) | `low … max` | ❌ |
|
|
225
|
+
| `exo-free` | Undisclosed | **1M** (1.048.576) | **131K** (131.072) | `high` | ✅ |
|
|
224
226
|
| `deepseek-v4.1-flash-free` | DeepSeek | **1M** (1.000.000) | **384K** (384.000) | `minimal … max` | ✅ |
|
|
225
227
|
|
|
226
|
-
#### KiloCode Gateway (
|
|
228
|
+
#### KiloCode Gateway (13 models), OpenRouter compatible
|
|
227
229
|
|
|
228
230
|
Keyless access. Short aliases work for every row (the full ID is in parentheses).
|
|
229
231
|
|
|
@@ -241,7 +243,6 @@ Keyless access. Short aliases work for every row (the full ID is in parentheses)
|
|
|
241
243
|
| `kilo-auto` (`kilo-auto/free`) | Kilo Gateway Auto | **256K** (256.000) | **10K** (10.000) | `minimal…xhigh`\* | ❌ |
|
|
242
244
|
| `openrouter` (`openrouter/free`) | OpenRouter Free | **200K** (200.000) | **65K** (65.536) | `minimal…xhigh`\* | ✅ |
|
|
243
245
|
| `glyph-cluster` (`stealth/glyph-cluster`) | Stealth preview (lab undisclosed) | **256K** (256.000) | **256K** (256.000) | `minimal…xhigh`\* | ❌ |
|
|
244
|
-
| `step-5-preview:kilo` (`stepfun/...:free`) | StepFun | **1M** (1.000.000) | **64K** (65.536) | `minimal…xhigh`\* | ✅ |
|
|
245
246
|
| `inkling-small` (`thinkingmachines/inkling-small:free`) | Thinking Machines | **1M** (1.048.576) | **262K** (262.144) | `minimal…xhigh`\* | ✅ |
|
|
246
247
|
|
|
247
248
|
\* Levels are forwarded as-is through the OpenRouter-style nested `reasoning` parameter; effort mapping is decided by each model. MiMo collapses `minimal→low` and `xhigh→high` upstream, so its selector shows 5 labels but only 3 distinct effort values.
|
|
@@ -367,7 +368,7 @@ pnpm smoke # verifies extensions/index.ts loads without crashing
|
|
|
367
368
|
#### Project structure
|
|
368
369
|
|
|
369
370
|
```
|
|
370
|
-
├── models.ts #
|
|
371
|
+
├── models.ts # 37-model catalog definitions
|
|
371
372
|
├── index.ts # extension entry, lifecycle hooks
|
|
372
373
|
├── catalog.ts # model catalog cache (24h disk)
|
|
373
374
|
├── proxy.ts # local proxy server (127.0.0.1:28180)
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-freeflow",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.38.
|
|
4
|
+
"version": "1.38.2",
|
|
5
5
|
"description": "Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization",
|
|
6
6
|
"main": "extensions/index.ts",
|
|
7
7
|
"types": "src/index.ts",
|
package/src/catalog.ts
CHANGED
|
@@ -43,8 +43,14 @@ import type {
|
|
|
43
43
|
* - inclusionai/ling-3.0-flash-fin:free: gone from Kilo (2026-10-01) — keyless chat 404
|
|
44
44
|
* "The requested model ... does not exist".
|
|
45
45
|
* - mimo-v2.5-free: decommissioned upstream (2026-10-07) — HTTP 401 "Model mimo-v2.5-free is not supported".
|
|
46
|
-
*
|
|
47
|
-
*
|
|
46
|
+
* Re-probed 2026-10-16: 410 "Model mimo-v2.5-free has been deprecated. Use
|
|
47
|
+
* mimo-v2.6-flash-free instead." The docs still list it as free; they are stale.
|
|
48
|
+
* - exo-free: dead-listed 2026-10-09 (410 "Model exo-free has been deprecated")
|
|
49
|
+
* but revived upstream on 2026-10-16 — back on the official free lineup and
|
|
50
|
+
* answering live through the proxy (chat 200 with tools, stream, reasoning,
|
|
51
|
+
* vision; dual-canary recall at ~520K tokens; a 1.2M-word prompt draws the
|
|
52
|
+
* empty-bodied 400). Re-registered statically the same day: do NOT add this
|
|
53
|
+
* id back to this set unless it dies again.
|
|
48
54
|
* - fledge-alpha-free: withdrawn upstream (2026-10-09) — absent from the live
|
|
49
55
|
* Zen list, chat 401 "Model fledge-alpha-free is not supported".
|
|
50
56
|
* - inclusionai/ling-3.0-flash-sante:free: demoted to paid on Kilo (2026-10-09) —
|
|
@@ -94,7 +100,6 @@ export const DEAD_MODEL_IDS = new Set<string>([
|
|
|
94
100
|
"ling-3.0-flash-fin-free",
|
|
95
101
|
"inclusionai/ling-3.0-flash-fin:free",
|
|
96
102
|
"mimo-v2.5-free",
|
|
97
|
-
"exo-free",
|
|
98
103
|
"stealth/space-bunny-alpha",
|
|
99
104
|
"qwen/qwen3.8-27b:free",
|
|
100
105
|
"nvidia/nemotron-3.5-content-safety:free",
|
|
@@ -110,6 +115,15 @@ export const DEAD_MODEL_IDS = new Set<string>([
|
|
|
110
115
|
"inclusionai/ling-3.1-flash",
|
|
111
116
|
// ovh-free/Mistral-7B-Instruct-v0.3: removed upstream by OVH (2026-10-15) — answers 404 no route matched.
|
|
112
117
|
"ovh-free/Mistral-7B-Instruct-v0.3",
|
|
118
|
+
// step-5-preview-free: removed from the Zen free docs (2026-10-16 drift,
|
|
119
|
+
// v1.19.2) and the endpoint answers 400 "Model is unavailable" on both the
|
|
120
|
+
// chat and the responses shape — the same retirement signature as
|
|
121
|
+
// deepseek-v4-flash-free.
|
|
122
|
+
"step-5-preview-free",
|
|
123
|
+
// stepfun/step-5-preview-free: demoted to paid on Kilo (2026-10-16) —
|
|
124
|
+
// answers 401 PAID_MODEL_AUTH_REQUIRED while the sibling z-ai/glm-5.3-flash
|
|
125
|
+
// answers 200 keyless with the same request shape.
|
|
126
|
+
"stepfun/step-5-preview-free",
|
|
113
127
|
]);
|
|
114
128
|
/**
|
|
115
129
|
* Free-tier allowlist for anything entering the picker via network or stale disk.
|
|
@@ -149,7 +163,7 @@ export function sanitizeCatalogModels(models: RegisteredModel[]): RegisteredMode
|
|
|
149
163
|
}
|
|
150
164
|
/**
|
|
151
165
|
* In-memory cache of currently active/available free models.
|
|
152
|
-
* Initialized with all
|
|
166
|
+
* Initialized with all 37 verified models for 0ms instant availability.
|
|
153
167
|
*/
|
|
154
168
|
let aliveCatalog: RegisteredModel[] = ALL_MODELS.map((m) => ({
|
|
155
169
|
...m,
|
package/src/models.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Static model definitions and upstream routing catalogs for pi-freeflow
|
|
3
3
|
*
|
|
4
|
-
* Defines the
|
|
5
|
-
* -
|
|
6
|
-
* -
|
|
4
|
+
* Defines the 37 verified free models (live-verified 2026-10-16):
|
|
5
|
+
* - 14 OpenCode Zen models (2 Responses API + 12 Chat Completions)
|
|
6
|
+
* - 13 KiloCode Keyless Gateway models (OpenRouter format)
|
|
7
7
|
* - 2 Cline direct-only models (per-user pool)
|
|
8
8
|
* - 8 OVHcloud AI Endpoints models (keyless, direct-only)
|
|
9
9
|
*/
|
|
@@ -216,30 +216,100 @@ export const OPENCODE_MODELS: ModelDef[] = [
|
|
|
216
216
|
},
|
|
217
217
|
},
|
|
218
218
|
{
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
219
|
+
// Added 2026-10-16 (issue #71 drift): Zen v1.19.2 added this free id;
|
|
220
|
+
// served through the fingerprint path (chat 200 with tools + stream).
|
|
221
|
+
// Not published on pi.dev yet, and models.dev's 200,000 context is
|
|
222
|
+
// contradicted by probe: a marker planted at 90% depth (~250K words) is
|
|
223
|
+
// recalled, and only above ~1M words does the gateway refuse with
|
|
224
|
+
// context_length_exceeded. Declared 1,000,000 like its Zen siblings and
|
|
225
|
+
// the Kilo twin (z-ai/glm-5.3-flash, 1,048,576 in this catalog); the
|
|
226
|
+
// 450K/700K-word recall probes timed out upstream and stayed inconclusive.
|
|
227
|
+
// maxTokens 32,000 per models.dev — the gateway accepted up to 131,072,
|
|
228
|
+
// and acceptance is not a cap, so the published figure stays the budget.
|
|
229
|
+
// Effort ladder probed level-by-level 2026-10-16: minimal/low/medium/high/
|
|
230
|
+
// xhigh/max all answer 200 (an unsupported value answers 400
|
|
231
|
+
// [invalid_value], so the gateway validates per model), and minimal vs max
|
|
232
|
+
// visibly changes reasoning length. Chat is the only native shape
|
|
233
|
+
// (/v1/responses answers 400 "Model does not support this protocol"),
|
|
234
|
+
// so `api` stays unset. Vision verified live (a 1x1 PNG reads back as a
|
|
235
|
+
// colour); video/pdf from the published entry stay unverified and are not
|
|
236
|
+
// offered.
|
|
237
|
+
id: "glm-5.3-flash-free",
|
|
238
|
+
name: "GLM-5.3 Flash [OpenCode]",
|
|
239
|
+
reasoning: true,
|
|
240
|
+
contextWindow: 1_000_000,
|
|
241
|
+
maxTokens: 32_000,
|
|
242
|
+
input: ["text", "image"],
|
|
243
|
+
thinkingLevelMap: {
|
|
244
|
+
off: null,
|
|
245
|
+
minimal: "minimal",
|
|
246
|
+
low: "low",
|
|
247
|
+
medium: "medium",
|
|
248
|
+
high: "high",
|
|
249
|
+
xhigh: "xhigh",
|
|
250
|
+
max: "max",
|
|
251
|
+
},
|
|
242
252
|
},
|
|
253
|
+
{
|
|
254
|
+
// Added 2026-10-16 (issue #71 drift): Zen v1.19.2 added this free id.
|
|
255
|
+
// Specs agree across pi.dev and models.dev (262,144 ctx / 65,536 max,
|
|
256
|
+
// text-only) and the boundary probe matches: a marker at 90% depth is
|
|
257
|
+
// recalled at ~220K words and the gateway refuses ~250K words (400), with
|
|
258
|
+
// a silent no-recall at ~240K — the window ends right about there.
|
|
259
|
+
// maxTokens 65,536 published; the gateway accepted 131,072, which is
|
|
260
|
+
// acceptance, not a cap. Effort ladder: low/medium/high/xhigh/max probed
|
|
261
|
+
// 200 with visibly different reasoning lengths; `minimal` answers 200 too
|
|
262
|
+
// but stays hidden because the published ladder starts at low (same class
|
|
263
|
+
// as nemotron's tolerated-but-hidden `max`); `off` is null like everywhere.
|
|
264
|
+
// Chat-only (/v1/responses 400 protocol). Text-only: an image probe
|
|
265
|
+
// produced no answer.
|
|
266
|
+
id: "ll-alpha-free",
|
|
267
|
+
name: "LL Alpha [OpenCode]",
|
|
268
|
+
reasoning: true,
|
|
269
|
+
contextWindow: 262_144,
|
|
270
|
+
maxTokens: 65_536,
|
|
271
|
+
input: ["text"],
|
|
272
|
+
thinkingLevelMap: {
|
|
273
|
+
off: null,
|
|
274
|
+
minimal: null,
|
|
275
|
+
low: "low",
|
|
276
|
+
medium: "medium",
|
|
277
|
+
high: "high",
|
|
278
|
+
xhigh: "xhigh",
|
|
279
|
+
max: "max",
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
// Added 2026-10-16 (recheck): live free id on the Zen lane, listed on the
|
|
284
|
+
// official free lineup while models.dev already tags it deprecated — the
|
|
285
|
+
// tag also sits on live ids (muse-spark-1.2-contributor-free) and on
|
|
286
|
+
// already-dead ones (mimo-v2.5-free), so the live answer decides: chat 200
|
|
287
|
+
// with tools + stream, and the tool call round-trips. Chat is the only
|
|
288
|
+
// native shape (/v1/responses answers 400 "Model does not support this
|
|
289
|
+
// protocol"), so `api` stays unset. Reasoning: the published ladder lists
|
|
290
|
+
// `high` only; high streams thinking and the unavailable rungs stay null
|
|
291
|
+
// so the picker never offers them. Vision verified live (a 1x1 PNG reads
|
|
292
|
+
// back as "Pink"). Context: published 1,048,576; a dual-canary prompt at
|
|
293
|
+
// ~400K words (~520K tokens, canaries at ~30%/~97% depth) recalls both
|
|
294
|
+
// markers, and a 1.2M-word prompt (~1.56M tokens) draws an empty-bodied
|
|
295
|
+
// 400 — the wall sits between, matching the published figure. maxTokens
|
|
296
|
+
// 131,072 published; 131,073 accepted (acceptance is not a cap, so the
|
|
297
|
+
// published figure stays the budget).
|
|
298
|
+
id: "exo-free",
|
|
299
|
+
name: "Exo [OpenCode]",
|
|
300
|
+
reasoning: true,
|
|
301
|
+
contextWindow: 1_048_576,
|
|
302
|
+
maxTokens: 131_072,
|
|
303
|
+
input: ["text", "image"],
|
|
304
|
+
thinkingLevelMap: {
|
|
305
|
+
off: null,
|
|
306
|
+
minimal: null,
|
|
307
|
+
low: null,
|
|
308
|
+
medium: null,
|
|
309
|
+
high: "high",
|
|
310
|
+
xhigh: null,
|
|
311
|
+
max: null,
|
|
312
|
+
},
|
|
243
313
|
},
|
|
244
314
|
{
|
|
245
315
|
// Added 2026-10-15: new free model on the OpenCode Zen lane. Live-verified by
|
|
@@ -409,19 +479,6 @@ export const KILO_MODELS: ModelDef[] = [
|
|
|
409
479
|
thinkingFormat: "openrouter",
|
|
410
480
|
thinkingLevelMap: KILO_REASONING_MAP,
|
|
411
481
|
},
|
|
412
|
-
{
|
|
413
|
-
// Added 2026-10-09: replaces step-3.7-flash (demoted to paid upstream —
|
|
414
|
-
// :free ID 404s keyless). Live on Kilo free list (isFree:true, 0/0
|
|
415
|
-
// pricing, 1M ctx) + keyless chat served (429 provider concurrency).
|
|
416
|
-
id: "stepfun/step-5-preview-free",
|
|
417
|
-
name: "Step 5 Preview [Kilo]",
|
|
418
|
-
reasoning: true,
|
|
419
|
-
contextWindow: 1_000_000,
|
|
420
|
-
maxTokens: 65_536,
|
|
421
|
-
input: ["text", "image", "video"],
|
|
422
|
-
thinkingFormat: "openrouter",
|
|
423
|
-
thinkingLevelMap: KILO_REASONING_MAP,
|
|
424
|
-
},
|
|
425
482
|
{
|
|
426
483
|
id: "thinkingmachines/inkling-small:free",
|
|
427
484
|
name: "Inkling Small [Kilo]",
|
|
@@ -656,7 +713,8 @@ export const MODEL_ALIASES: Record<string, string> = {
|
|
|
656
713
|
"nemotron-3-super": "nvidia/nemotron-3-super-120b-a12b:free",
|
|
657
714
|
"north-mini-code": "cohere/north-mini-code:free",
|
|
658
715
|
"lfm-2.5": "liquid/lfm-2.5-2.6b:free",
|
|
659
|
-
"
|
|
716
|
+
"glm-5.3-flash": "glm-5.3-flash-free",
|
|
717
|
+
"exo": "exo-free",
|
|
660
718
|
"glyph-cluster": "stealth/glyph-cluster",
|
|
661
719
|
"inkling-small": "thinkingmachines/inkling-small:free",
|
|
662
720
|
"mimo-v2.6-flash": "mimo-v2.6-flash-free",
|
|
@@ -664,7 +722,7 @@ export const MODEL_ALIASES: Record<string, string> = {
|
|
|
664
722
|
"space-bunny": "space-bunny-free",
|
|
665
723
|
"longcat-2.5-preview": "longcat-2.5-preview-free",
|
|
666
724
|
"longcat": "longcat-2.5-preview-free",
|
|
667
|
-
"
|
|
725
|
+
"ll-alpha": "ll-alpha-free",
|
|
668
726
|
"deepseek-v4.1-flash": "deepseek-v4.1-flash-free",
|
|
669
727
|
// provider-prefixed short aliases (slash-normalized)
|
|
670
728
|
"laguna-s-2.1:free": "poolside/laguna-s-2.1:free",
|
|
@@ -719,7 +777,7 @@ export const OVH_MODEL_IDS = new Set<string>([
|
|
|
719
777
|
.map(([alias]) => alias),
|
|
720
778
|
]);
|
|
721
779
|
/**
|
|
722
|
-
* Combined list of all
|
|
780
|
+
* Combined list of all 37 static free models (canonical)
|
|
723
781
|
*/
|
|
724
782
|
export const ALL_MODELS: ModelDef[] = [...OPENCODE_MODELS, ...KILO_MODELS, ...CLINE_MODELS, ...OVH_MODELS];
|
|
725
783
|
|