pi-freeflow 1.11.2 → 1.12.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/CHANGELOG.md +6 -0
- package/README.md +8 -6
- package/package.json +1 -1
- package/src/catalog.ts +3 -2
- package/src/index.ts +1 -1
- package/src/models.ts +30 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.12.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Free-model picker grows from 24 to 26: adds Nex N2.5 Pro, Nex N2.5 Mini, and Ling 3.0 Flash VL, and removes the discontinued Inkling entry. A new Stealth Models Watchlist docs page tracks masked preview IDs users ask about.
|
|
8
|
+
|
|
3
9
|
## 1.11.2
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# pi-freeflow 🌊
|
|
2
2
|
|
|
3
|
-
> **
|
|
3
|
+
> **26 free models. Up to 1M context. Zero API keys. Infinite scale via your own relay pool.**
|
|
4
4
|
|
|
5
5
|
Thin by design: model list + dumb relay + log. Host `pi-ai` owns thinking, normalization & provider magic. We just make it free, fast, and unbreakable.
|
|
6
6
|
|
|
@@ -18,7 +18,7 @@ Join devs bypassing rate limits with their own relay pools. BYO, add as many as
|
|
|
18
18
|
|
|
19
19
|
| Feature | Description | Value | Cost |
|
|
20
20
|
| :--- | :--- | :--- | :--- |
|
|
21
|
-
| **
|
|
21
|
+
| **26 Curated Free Models** | 7 OpenCode Zen + 19 KiloCode Gateway models, up to 1M context & 512K output | Ceiling Unlocked | **$0** |
|
|
22
22
|
| **BYO Relay Pool** | Round-robin load balancing across your Cloudflare Workers & Vercel Edges | Zero Rate Limits | **$0** (your free tiers) |
|
|
23
23
|
| **Adaptive Health & Error Detection** | Auto-cooldown on 429 rate limits, 504 timeouts, and socket drops | 0ms Wasted Latency | **$0** |
|
|
24
24
|
| **Stream Truncation Resilience** | Stateful SSE terminal tracking (`response.failed` / `response.incomplete` injection) | Zero Host Crashes | **$0** |
|
|
@@ -32,7 +32,7 @@ Philosophy: **Thin by design.** We only ship model list + relay proxy + log. Hos
|
|
|
32
32
|
|
|
33
33
|
---
|
|
34
34
|
|
|
35
|
-
###
|
|
35
|
+
### 26 Curated Models, One Command
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
38
|
/model → freeflow → pick
|
|
@@ -51,7 +51,7 @@ Optimized for deep reasoning, long-horizon coding & autonomous agentic workflows
|
|
|
51
51
|
| `big-pickle` | Big Pickle | **200K** (200.000) | **32K** (32.000) | `high / max` | ❌ |
|
|
52
52
|
| `ling-3.0-flash-fin-free` | Inclusion AI | **262K** (262.144) | **131K** (131.072) | `minimal … xhigh` | ❌ |
|
|
53
53
|
|
|
54
|
-
#### KiloCode Gateway (
|
|
54
|
+
#### KiloCode Gateway (19 Models), OpenRouter Compatible
|
|
55
55
|
Keyless access with `Bearer kilo-free`. Clean slash-free and colon-free CLI aliases supported.
|
|
56
56
|
|
|
57
57
|
| Model ID | Creator / Lab | Context | Max Output | Thinking | Vision |
|
|
@@ -70,8 +70,10 @@ Keyless access with `Bearer kilo-free`. Clean slash-free and colon-free CLI alia
|
|
|
70
70
|
| `openrouter` (`openrouter/free`) | OpenRouter Free | **200K** (200.000) | **65K** (65.536) | `minimal…xhigh`\* | ✅ |
|
|
71
71
|
| `content-safety` (`nvidia/...:free`) | NVIDIA | **128K** (128.000) | **8K** (8.192) | ❌ *(non-thinking)* | ✅ |
|
|
72
72
|
| `ling-3.0-flash-fin` (`inclusionai/ling-3.0-flash-fin:free`) | Inclusion AI | **262K** (262.144) | **32K** (32.768) | `minimal…xhigh`\* | ❌ |
|
|
73
|
-
| `inkling` (`thinkingmachines/inkling:free`) | Thinking Machines | **1M** (1.048.576) | **262K** (262.144) | `minimal…xhigh`\* | ✅ |
|
|
74
73
|
| `ling-3.0-flash-sante` (`inclusionai/ling-3.0-flash-sante:free`) | Inclusion AI | **262K** (262.144) | **32K** (32.768) | `minimal…xhigh`\* | ❌ |
|
|
74
|
+
| `nex-n2.5-pro` (`nex-agi/nex-n2.5-pro:free`) | Nex AGI | **262K** (262.144) | **235K** (235.929) | `minimal…xhigh`\* | ✅ |
|
|
75
|
+
| `nex-n2.5-mini` (`nex-agi/nex-n2.5-mini:free`) | Nex AGI | **262K** (262.144) | **235K** (235.929) | `minimal…xhigh`\* | ✅ |
|
|
76
|
+
| `ling-3.0-flash-vl` (`inclusionai/ling-3.0-flash-vl:free`) | Inclusion AI | **262K** (262.144) | **32K** (32.768) | `minimal…xhigh`\* | ✅ |
|
|
75
77
|
| `inkling-small` (`thinkingmachines/inkling-small:free`) | Thinking Machines | **1M** (1.048.576) | **262K** (262.144) | `minimal…xhigh`\* | ✅ |
|
|
76
78
|
|
|
77
79
|
\* 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.
|
|
@@ -340,7 +342,7 @@ pnpm smoke # verifies extensions/index.ts loads without crashing
|
|
|
340
342
|
```
|
|
341
343
|
src/
|
|
342
344
|
├── index.ts # extension entry, lifecycle hooks
|
|
343
|
-
├── models.ts #
|
|
345
|
+
├── models.ts # 26-model catalog definitions
|
|
344
346
|
├── catalog.ts # model catalog cache (24h disk)
|
|
345
347
|
├── proxy.ts # local proxy server (127.0.0.1:28180)
|
|
346
348
|
├── relay.ts # relay selection & round-robin
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-freeflow",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.12.0",
|
|
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
|
@@ -40,6 +40,7 @@ export const DEAD_MODEL_IDS = new Set<string>([
|
|
|
40
40
|
"laguna-s-2.1-free",
|
|
41
41
|
"minimax/minimax-m2.7:free",
|
|
42
42
|
"minimax/minimax-m3:free",
|
|
43
|
+
"thinkingmachines/inkling:free",
|
|
43
44
|
]);
|
|
44
45
|
/**
|
|
45
46
|
* Free-tier allowlist for anything entering the picker via network or stale disk.
|
|
@@ -76,7 +77,7 @@ export function sanitizeCatalogModels(models: RegisteredModel[]): RegisteredMode
|
|
|
76
77
|
}
|
|
77
78
|
/**
|
|
78
79
|
* In-memory cache of currently active/available free models.
|
|
79
|
-
* Initialized with all
|
|
80
|
+
* Initialized with all 26 verified models for 0ms instant availability.
|
|
80
81
|
*/
|
|
81
82
|
let aliveCatalog: RegisteredModel[] = ALL_MODELS.map((m) => ({
|
|
82
83
|
...m,
|
|
@@ -399,6 +400,6 @@ export async function refreshCatalog(force = false): Promise<RegisteredModel[]>
|
|
|
399
400
|
} catch (err) {
|
|
400
401
|
logDebug("Failed reading stale catalog cache", { error: String(err) });
|
|
401
402
|
}
|
|
402
|
-
// No valid cache — return in-memory static
|
|
403
|
+
// No valid cache — return in-memory static 26 (host will refresh if needed)
|
|
403
404
|
return aliveCatalog;
|
|
404
405
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* pi-freeflow — Modular, high-resiliency LLM extension for Pi & Oh My Pi (OMP)
|
|
3
3
|
*
|
|
4
|
-
* Provides access to
|
|
4
|
+
* Provides access to 26 free models (7 OpenCode Zen + 19 KiloCode Gateway) with:
|
|
5
5
|
* - Single-port daemon reuse on 28180 across concurrent subagents
|
|
6
6
|
* - Multi-cloud rolling egress relays (Vercel Edge, Cloudflare, Deno)
|
|
7
7
|
* - 0ms instant startup with verified static catalog and background live health checks
|
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
|
|
4
|
+
* Defines the 26 verified free models:
|
|
5
5
|
* - 7 OpenCode Zen models (2 Responses API + 5 Chat Completions)
|
|
6
|
-
* -
|
|
6
|
+
* - 19 KiloCode Keyless Gateway models (18 OpenRouter format + 1 Standard format)
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import type { ModelDef, ThinkingLevelMap, Upstream } from "./types.ts";
|
|
@@ -290,11 +290,21 @@ export const KILO_MODELS: ModelDef[] = [
|
|
|
290
290
|
thinkingLevelMap: KILO_REASONING_MAP,
|
|
291
291
|
},
|
|
292
292
|
{
|
|
293
|
-
id: "
|
|
294
|
-
name: "
|
|
293
|
+
id: "nex-agi/nex-n2.5-pro:free",
|
|
294
|
+
name: "Nex N2.5 Pro",
|
|
295
295
|
reasoning: true,
|
|
296
|
-
contextWindow:
|
|
297
|
-
maxTokens:
|
|
296
|
+
contextWindow: 262_144,
|
|
297
|
+
maxTokens: 235_929,
|
|
298
|
+
input: ["text", "image"],
|
|
299
|
+
thinkingFormat: "openrouter",
|
|
300
|
+
thinkingLevelMap: KILO_REASONING_MAP,
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
id: "nex-agi/nex-n2.5-mini:free",
|
|
304
|
+
name: "Nex N2.5 Mini",
|
|
305
|
+
reasoning: true,
|
|
306
|
+
contextWindow: 262_144,
|
|
307
|
+
maxTokens: 235_929,
|
|
298
308
|
input: ["text", "image"],
|
|
299
309
|
thinkingFormat: "openrouter",
|
|
300
310
|
thinkingLevelMap: KILO_REASONING_MAP,
|
|
@@ -319,6 +329,16 @@ export const KILO_MODELS: ModelDef[] = [
|
|
|
319
329
|
thinkingFormat: "openrouter",
|
|
320
330
|
thinkingLevelMap: KILO_REASONING_MAP,
|
|
321
331
|
},
|
|
332
|
+
{
|
|
333
|
+
id: "inclusionai/ling-3.0-flash-vl:free",
|
|
334
|
+
name: "Ling 3.0 Flash VL",
|
|
335
|
+
reasoning: true,
|
|
336
|
+
contextWindow: 262_144,
|
|
337
|
+
maxTokens: 32_768,
|
|
338
|
+
input: ["text", "image"],
|
|
339
|
+
thinkingFormat: "openrouter",
|
|
340
|
+
thinkingLevelMap: KILO_REASONING_MAP,
|
|
341
|
+
},
|
|
322
342
|
];
|
|
323
343
|
|
|
324
344
|
/**
|
|
@@ -329,7 +349,6 @@ export const KILO_MODELS: ModelDef[] = [
|
|
|
329
349
|
* - Hy3 = Tencent Hunyuan (not Alibaba Qwen) → removed qwen3-coder alias
|
|
330
350
|
*/
|
|
331
351
|
export const MODEL_ALIASES: Record<string, string> = {
|
|
332
|
-
// Kilo Gateway — slash-free & colon-free clean aliases (one per model)
|
|
333
352
|
"dots-3-note-preview": "dots-studio/dots-3-note-preview:free",
|
|
334
353
|
"step-3.7-flash": "stepfun/step-3.7-flash:free",
|
|
335
354
|
"nemotron-3-nano-omni": "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free",
|
|
@@ -341,7 +360,9 @@ export const MODEL_ALIASES: Record<string, string> = {
|
|
|
341
360
|
"content-safety": "nvidia/nemotron-3.5-content-safety:free",
|
|
342
361
|
"ling-3.0-flash-fin": "inclusionai/ling-3.0-flash-fin:free",
|
|
343
362
|
"ling-3.0-flash-sante": "inclusionai/ling-3.0-flash-sante:free",
|
|
344
|
-
"
|
|
363
|
+
"ling-3.0-flash-vl": "inclusionai/ling-3.0-flash-vl:free",
|
|
364
|
+
"nex-n2.5-pro": "nex-agi/nex-n2.5-pro:free",
|
|
365
|
+
"nex-n2.5-mini": "nex-agi/nex-n2.5-mini:free",
|
|
345
366
|
"inkling-small": "thinkingmachines/inkling-small:free",
|
|
346
367
|
// provider-prefixed short aliases (slash-normalized)
|
|
347
368
|
"laguna-s-2.1:free": "poolside/laguna-s-2.1:free",
|
|
@@ -357,7 +378,6 @@ export function resolveCanonicalModelId(id: string): string {
|
|
|
357
378
|
const clean = (id || "").trim();
|
|
358
379
|
return MODEL_ALIASES[clean] || clean;
|
|
359
380
|
}
|
|
360
|
-
|
|
361
381
|
/**
|
|
362
382
|
* Set of all KiloCode model IDs (including aliases) for fast lookup
|
|
363
383
|
*/
|
|
@@ -369,7 +389,7 @@ export const KILO_MODEL_IDS = new Set<string>([
|
|
|
369
389
|
]);
|
|
370
390
|
|
|
371
391
|
/**
|
|
372
|
-
* Combined list of all
|
|
392
|
+
* Combined list of all 26 static free models (canonical)
|
|
373
393
|
*/
|
|
374
394
|
export const ALL_MODELS: ModelDef[] = [...OPENCODE_MODELS, ...KILO_MODELS];
|
|
375
395
|
|