@oh-my-pi/pi-catalog 16.2.2 → 16.2.3

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
@@ -2,6 +2,18 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [16.2.3] - 2026-06-28
6
+
7
+ ### Added
8
+
9
+ - Added support and configuration parameters for V2 streaming compaction in RemoteCompactionConfig, catalog types, and model/provider metadata.
10
+
11
+ ### Changed
12
+
13
+ - Enabled automatic content markup healing for all OpenAI-compatible streaming models
14
+ - Updated pricing and context window limits for several catalog models.
15
+ - Disabled reasoning capability for multiple providers in the catalog.
16
+
5
17
  ## [16.2.2] - 2026-06-27
6
18
 
7
19
  ### Removed
@@ -532,8 +532,14 @@ export interface RemoteCompactionConfig<TApi extends Api = Api> {
532
532
  enabled?: boolean;
533
533
  /** Adapter family used by the configured compaction endpoint. */
534
534
  api?: TApi;
535
- /** Absolute compact endpoint URL; when omitted, the adapter derives it from the model base URL. */
535
+ /** Absolute V1 compact endpoint URL; when omitted, the adapter derives it from the model base URL. */
536
536
  endpoint?: string;
537
+ /** Enables Responses-stream V2 compaction for models verified to support `compaction_trigger`. */
538
+ v2StreamingEnabled?: boolean;
539
+ /** Absolute Responses-stream endpoint URL for V2 compaction; overrides `streamingEndpoint`. */
540
+ v2Endpoint?: string;
541
+ /** Absolute provider streaming endpoint URL used by V2 compaction when no dedicated endpoint is set. */
542
+ streamingEndpoint?: string;
537
543
  /** Model id sent to the compaction endpoint when it differs from the active model id. */
538
544
  model?: string;
539
545
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@oh-my-pi/pi-catalog",
4
- "version": "16.2.2",
4
+ "version": "16.2.3",
5
5
  "description": "Model catalog for omp: bundled model database, provider discovery descriptors, model identity, classification, and equivalence",
6
6
  "homepage": "https://omp.sh",
7
7
  "author": "Can Boluk",
@@ -34,12 +34,12 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@bufbuild/protobuf": "^2.12.0",
37
- "@oh-my-pi/pi-utils": "16.2.2",
37
+ "@oh-my-pi/pi-utils": "16.2.3",
38
38
  "arktype": "^2.2.0",
39
39
  "zod": "^4"
40
40
  },
41
41
  "devDependencies": {
42
- "@oh-my-pi/pi-ai": "16.2.2",
42
+ "@oh-my-pi/pi-ai": "16.2.3",
43
43
  "@types/bun": "^1.3.14"
44
44
  },
45
45
  "engines": {
@@ -98,20 +98,21 @@ function resolveReasoningDisableMode(
98
98
  }
99
99
  }
100
100
 
101
- function detectStreamMarkupHealingPattern(
102
- provider: string,
103
- modelId: string,
104
- ): OpenAIStreamMarkupHealingPattern | undefined {
105
- if (MINIMAX_PROVIDER_OR_ID_PATTERN.test(provider) || MINIMAX_PROVIDER_OR_ID_PATTERN.test(modelId)) {
106
- return "thinking";
107
- }
101
+ /**
102
+ * Pick the leaked-markup healer for an OpenAI-compatible visible-text stream.
103
+ * Kimi chat-template tokens and DeepSeek DSML envelopes need their dedicated
104
+ * tool-call grammars; every other model defaults to `"thinking"`. All patterns
105
+ * run the generic thinking healer, so leaked reasoning idioms (e.g. a Gemini
106
+ * ` ```thinking ` fence on OpenRouter) are always recovered from `delta.content`.
107
+ */
108
+ function detectStreamMarkupHealingPattern(provider: string, modelId: string): OpenAIStreamMarkupHealingPattern {
108
109
  if (provider === "kimi-code" || provider === "moonshot" || /kimi[-/_.]?k2/i.test(modelId)) {
109
110
  return "kimi";
110
111
  }
111
112
  if (isDeepseekModelIdOrName(modelId) && DSML_HEALING_PROVIDERS.has(provider)) {
112
113
  return "dsml";
113
114
  }
114
- return undefined;
115
+ return "thinking";
115
116
  }
116
117
 
117
118
  /**
package/src/models.json CHANGED
@@ -31303,7 +31303,7 @@
31303
31303
  "api": "openai-completions",
31304
31304
  "provider": "kilo",
31305
31305
  "baseUrl": "https://api.kilo.ai/api/gateway",
31306
- "reasoning": true,
31306
+ "reasoning": false,
31307
31307
  "input": [
31308
31308
  "text"
31309
31309
  ],
@@ -31314,16 +31314,7 @@
31314
31314
  "cacheWrite": 0
31315
31315
  },
31316
31316
  "contextWindow": 262144,
31317
- "maxTokens": 52429,
31318
- "thinking": {
31319
- "mode": "effort",
31320
- "efforts": [
31321
- "minimal",
31322
- "low",
31323
- "medium",
31324
- "high"
31325
- ]
31326
- }
31317
+ "maxTokens": 52429
31327
31318
  },
31328
31319
  "qwen/qwen3-235b-a22b-thinking-2507": {
31329
31320
  "id": "qwen/qwen3-235b-a22b-thinking-2507",
@@ -68464,7 +68455,7 @@
68464
68455
  "api": "openrouter",
68465
68456
  "baseUrl": "https://openrouter.ai/api/v1",
68466
68457
  "provider": "openrouter",
68467
- "reasoning": true,
68458
+ "reasoning": false,
68468
68459
  "input": [
68469
68460
  "text"
68470
68461
  ],
@@ -68475,16 +68466,7 @@
68475
68466
  "cacheWrite": 0
68476
68467
  },
68477
68468
  "contextWindow": 262144,
68478
- "maxTokens": 16384,
68479
- "thinking": {
68480
- "mode": "effort",
68481
- "efforts": [
68482
- "minimal",
68483
- "low",
68484
- "medium",
68485
- "high"
68486
- ]
68487
- }
68469
+ "maxTokens": 16384
68488
68470
  },
68489
68471
  "qwen/qwen3-235b-a22b-thinking-2507": {
68490
68472
  "id": "qwen/qwen3-235b-a22b-thinking-2507",
@@ -76863,13 +76845,13 @@
76863
76845
  "text"
76864
76846
  ],
76865
76847
  "cost": {
76866
- "input": 0.56,
76867
- "output": 1.68,
76848
+ "input": 0.6,
76849
+ "output": 1.7,
76868
76850
  "cacheRead": 0.28,
76869
76851
  "cacheWrite": 0
76870
76852
  },
76871
- "contextWindow": 163840,
76872
- "maxTokens": 8192,
76853
+ "contextWindow": 128000,
76854
+ "maxTokens": 128000,
76873
76855
  "thinking": {
76874
76856
  "mode": "budget",
76875
76857
  "efforts": [
@@ -78430,13 +78412,13 @@
78430
78412
  "text"
78431
78413
  ],
78432
78414
  "cost": {
78433
- "input": 0.6,
78434
- "output": 2.5,
78435
- "cacheRead": 0.15,
78415
+ "input": 0.47,
78416
+ "output": 2,
78417
+ "cacheRead": 0.14100000000000001,
78436
78418
  "cacheWrite": 0
78437
78419
  },
78438
- "contextWindow": 262114,
78439
- "maxTokens": 262114,
78420
+ "contextWindow": 216144,
78421
+ "maxTokens": 216144,
78440
78422
  "thinking": {
78441
78423
  "mode": "budget",
78442
78424
  "efforts": [
@@ -86461,7 +86443,7 @@
86461
86443
  "api": "openai-completions",
86462
86444
  "provider": "zenmux",
86463
86445
  "baseUrl": "https://zenmux.ai/api/v1",
86464
- "reasoning": true,
86446
+ "reasoning": false,
86465
86447
  "input": [
86466
86448
  "text"
86467
86449
  ],
@@ -86472,16 +86454,7 @@
86472
86454
  "cacheWrite": 0
86473
86455
  },
86474
86456
  "contextWindow": 256000,
86475
- "maxTokens": 16384,
86476
- "thinking": {
86477
- "mode": "effort",
86478
- "efforts": [
86479
- "minimal",
86480
- "low",
86481
- "medium",
86482
- "high"
86483
- ]
86484
- }
86457
+ "maxTokens": 16384
86485
86458
  },
86486
86459
  "qwen/qwen3-235b-a22b-thinking-2507": {
86487
86460
  "id": "qwen/qwen3-235b-a22b-thinking-2507",
package/src/types.ts CHANGED
@@ -659,8 +659,14 @@ export interface RemoteCompactionConfig<TApi extends Api = Api> {
659
659
  enabled?: boolean;
660
660
  /** Adapter family used by the configured compaction endpoint. */
661
661
  api?: TApi;
662
- /** Absolute compact endpoint URL; when omitted, the adapter derives it from the model base URL. */
662
+ /** Absolute V1 compact endpoint URL; when omitted, the adapter derives it from the model base URL. */
663
663
  endpoint?: string;
664
+ /** Enables Responses-stream V2 compaction for models verified to support `compaction_trigger`. */
665
+ v2StreamingEnabled?: boolean;
666
+ /** Absolute Responses-stream endpoint URL for V2 compaction; overrides `streamingEndpoint`. */
667
+ v2Endpoint?: string;
668
+ /** Absolute provider streaming endpoint URL used by V2 compaction when no dedicated endpoint is set. */
669
+ streamingEndpoint?: string;
664
670
  /** Model id sent to the compaction endpoint when it differs from the active model id. */
665
671
  model?: string;
666
672
  }