pi-freeflow 1.33.0 → 1.33.1

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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.33.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Removed one free model from the catalog that could never be used in a coding session. It answers a plain chat request fine, but rejects any request that carries tool definitions — and coding agents always send tools, so picking it failed on every turn with a "no endpoints found that support tool use" error. The catalog is now 30 models.
8
+
3
9
  ## 1.33.0
4
10
 
5
11
  ### Minor Changes
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # pi-freeflow
2
2
 
3
- > 31 free models with up to 1M context. No API keys to manage. Add your own relays to spread requests across more IPs.
3
+ > 30 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
- | **31 free models** | 10 from OpenCode Zen, 16 from KiloCode Gateway, 5 from Cline, context windows up to 1M. Full list below. | **$0** |
19
+ | **30 free models** | 10 from OpenCode Zen, 15 from KiloCode Gateway, 5 from Cline, context windows up to 1M. Full list below. | **$0** |
20
20
  | **Relay pool** | Route requests through your own Cloudflare Workers 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** | Every model has a slash-free, colon-free alias, plus an optional `:effort` suffix for thinking depth. You type `freeflow/<name>`. | **$0** |
@@ -185,7 +185,7 @@ The same command set works identically in OMP and Pi:
185
185
 
186
186
  ---
187
187
 
188
- ### 31 models, one command
188
+ ### 30 models, one command
189
189
 
190
190
  ```bash
191
191
  /model → freeflow → pick
@@ -225,7 +225,6 @@ Keyless access. Short aliases work for every row (the full ID is in parentheses)
225
225
  | `lfm-2.5` (`liquid/lfm-2.5-2.6b:free`) | Liquid AI | **65K** (65.536) | **32K** (32.768) | `minimal…xhigh`\* | ❌ |
226
226
  | `kilo-auto` (`kilo-auto/free`) | Kilo Gateway Auto | **256K** (256.000) | **10K** (10.000) | `minimal…xhigh`\* | ❌ |
227
227
  | `openrouter` (`openrouter/free`) | OpenRouter Free | **200K** (200.000) | **65K** (65.536) | `minimal…xhigh`\* | ✅ |
228
- | `content-safety` (`nvidia/...:free`) | NVIDIA | **128K** (128.000) | **8K** (8.192) | ❌ *(non-thinking)* | ✅ |
229
228
  | `ling-3.0-flash-sante` (`inclusionai/ling-3.0-flash-sante:free`) | Inclusion AI | **262K** (262.144) | **32K** (32.768) | `minimal…xhigh`\* | ❌ |
230
229
  | `step-3.7-flash` (`stepfun/...:free`) | StepFun | **262K** (262.144) | **262K** (262.144) | `minimal…xhigh`\* | ✅ |
231
230
  | `inkling-small` (`thinkingmachines/inkling-small:free`) | Thinking Machines | **1M** (1.048.576) | **262K** (262.144) | `minimal…xhigh`\* | ✅ |
@@ -342,7 +341,7 @@ pnpm smoke # verifies extensions/index.ts loads without crashing
342
341
  ```
343
342
  src/
344
343
  ├── index.ts # extension entry, lifecycle hooks
345
- ├── models.ts # 31-model catalog definitions
344
+ ├── models.ts # 30-model catalog definitions
346
345
  ├── catalog.ts # model catalog cache (24h disk)
347
346
  ├── proxy.ts # local proxy server (127.0.0.1:28180)
348
347
  ├── relay.ts # relay fetch, rolling on retryable failures
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-freeflow",
3
3
  "type": "module",
4
- "version": "1.33.0",
4
+ "version": "1.33.1",
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
@@ -46,6 +46,14 @@ import type {
46
46
  * - exo-free: unserved upstream (2026-10-07) — HTTP 503 "Error from provider (Console): Upstream request failed: Endpoint is unavailable.".
47
47
  * - stealth/space-bunny-alpha: gone from Kilo (2026-10-07) — keyless chat 404 "The requested model ... does not exist".
48
48
  * - qwen/qwen3.8-27b:free: gone from Kilo (2026-10-07) — keyless chat 404 "The requested model is currently unavailable.".
49
+ * - nvidia/nemotron-3.5-content-safety:free: tool-less guardrail model (2026-10-08),
50
+ * NOT decommissioned — it answers 200 keyless chat with no tools, but every
51
+ * tool-bearing request 404s "No endpoints found that support tool use" (Kilo
52
+ * `supported_parameters` lists reasoning only, no tools). It is a 4B
53
+ * moderation classifier fine-tuned from Gemma-3-4B that "moderates inputs to
54
+ * and responses from LLMs", not a chat model. Same exclusion class as
55
+ * jev-1.13-free: live, wrong shape for an agentic harness, so it must never
56
+ * re-enter the picker via disk cache or upstream merge.
49
57
  */
50
58
  export const DEAD_MODEL_IDS = new Set<string>([
51
59
  "jev-1.13-free",
@@ -69,6 +77,7 @@ export const DEAD_MODEL_IDS = new Set<string>([
69
77
  "exo-free",
70
78
  "stealth/space-bunny-alpha",
71
79
  "qwen/qwen3.8-27b:free",
80
+ "nvidia/nemotron-3.5-content-safety:free",
72
81
  ]);
73
82
  /**
74
83
  * Free-tier allowlist for anything entering the picker via network or stale disk.
@@ -108,7 +117,7 @@ export function sanitizeCatalogModels(models: RegisteredModel[]): RegisteredMode
108
117
  }
109
118
  /**
110
119
  * In-memory cache of currently active/available free models.
111
- * Initialized with all 31 verified models for 0ms instant availability.
120
+ * Initialized with all 30 verified models for 0ms instant availability.
112
121
  */
113
122
  let aliveCatalog: RegisteredModel[] = ALL_MODELS.map((m) => ({
114
123
  ...m,
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 31 free models (10 OpenCode Zen + 16 KiloCode Gateway + 5 Cline) with:
4
+ * Provides access to 30 free models (10 OpenCode Zen + 15 KiloCode Gateway + 5 Cline) 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 31 verified free models (live-verified 2026-10-07):
4
+ * Defines the 30 verified free models (live-verified 2026-10-08):
5
5
  * - 10 OpenCode Zen models (2 Responses API + 8 Chat Completions)
6
- * - 16 KiloCode Keyless Gateway models (OpenRouter format)
6
+ * - 15 KiloCode Keyless Gateway models (OpenRouter format)
7
7
  * - 5 Cline direct-only models (per-user pool)
8
8
  */
9
9
 
@@ -319,14 +319,6 @@ export const KILO_MODELS: ModelDef[] = [
319
319
  thinkingFormat: "openrouter",
320
320
  thinkingLevelMap: KILO_REASONING_MAP,
321
321
  },
322
- {
323
- id: "nvidia/nemotron-3.5-content-safety:free",
324
- name: "Nemotron Content Safety [Kilo]",
325
- reasoning: false,
326
- contextWindow: 128_000,
327
- maxTokens: 8_192,
328
- input: ["text", "image"],
329
- },
330
322
  {
331
323
  // Resurrected 2026-09-28: back on the live Kilo free list
332
324
  // (isFree:true, 0/0 pricing, no expiry) + keyless chat 200.
@@ -485,7 +477,6 @@ export const MODEL_ALIASES: Record<string, string> = {
485
477
  "nemotron-3-super": "nvidia/nemotron-3-super-120b-a12b:free",
486
478
  "north-mini-code": "cohere/north-mini-code:free",
487
479
  "lfm-2.5": "liquid/lfm-2.5-2.6b:free",
488
- "content-safety": "nvidia/nemotron-3.5-content-safety:free",
489
480
  "ling-3.0-flash-sante": "inclusionai/ling-3.0-flash-sante:free",
490
481
  "step-3.7-flash": "stepfun/step-3.7-flash:free",
491
482
  "inkling-small": "thinkingmachines/inkling-small:free",
@@ -530,7 +521,7 @@ export const CLINE_MODEL_IDS = new Set<string>([
530
521
  .map(([alias]) => alias),
531
522
  ]);
532
523
  /**
533
- * Combined list of all 31 static free models (canonical)
524
+ * Combined list of all 30 static free models (canonical)
534
525
  */
535
526
  export const ALL_MODELS: ModelDef[] = [...OPENCODE_MODELS, ...KILO_MODELS, ...CLINE_MODELS];
536
527