@oh-my-pi/pi-catalog 17.1.2 → 17.1.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,12 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [17.1.3] - 2026-07-24
6
+
7
+ ### Fixed
8
+
9
+ - Disabled the first-event watchdog for local OpenAI-compatible backends while retaining the 300-second inter-event watchdog, so long llama.cpp prompt prefill is not canceled and retried ([#6524](https://github.com/can1357/oh-my-pi/issues/6524)).
10
+
5
11
  ## [17.1.1] - 2026-07-24
6
12
 
7
13
  ### Added
@@ -303,6 +303,12 @@ export interface OpenAICompat {
303
303
  * to opt a host out.
304
304
  */
305
305
  toolSchemaFlavor?: "moonshot-mfjs" | "grammar" | "none";
306
+ /**
307
+ * Stream-watchdog first-event timeout in ms.
308
+ * Set to `0` to allow unbounded prompt processing. Default: auto-detected
309
+ * (disabled for local OpenAI-compatible backends).
310
+ */
311
+ streamFirstEventTimeoutMs?: number;
306
312
  /**
307
313
  * Stream-watchdog idle-timeout floor in ms for slow reasoning hosts.
308
314
  * Default: auto-detected (GLM coding-plan hosts, direct DeepSeek reasoning).
@@ -520,6 +526,8 @@ export interface ResolvedOpenAISharedCompat {
520
526
  requiresAssistantContentForToolCalls: boolean;
521
527
  stripDeepseekSpecialTokens: boolean;
522
528
  streamMarkupHealingPattern?: OpenAIStreamMarkupHealingPattern;
529
+ /** See {@link OpenAICompat.streamFirstEventTimeoutMs}. */
530
+ streamFirstEventTimeoutMs?: number;
523
531
  reasoningDeltasMayBeCumulative: boolean;
524
532
  emptyLengthFinishIsContextError: boolean;
525
533
  usesOpenAIToolCallIdLimit: boolean;
@@ -550,7 +558,7 @@ export interface ResolvedOpenAISharedCompat {
550
558
  * `buildModel`; request handlers read fields and never detect, resolve, or
551
559
  * allocate.
552
560
  */
553
- export type ResolvedOpenAICompat = ResolvedOpenAISharedCompat & Required<Omit<OpenAICompat, "supportsDeveloperRole" | "supportsReasoningEffort" | "reasoningEffortMap" | "supportsReasoningParams" | "supportsSamplingParams" | "thinkingFormat" | "kimiApiFormat" | "reasoningDisableMode" | "omitReasoningEffort" | "includeEncryptedReasoning" | "filterReasoningHistory" | "disableReasoningOnForcedToolChoice" | "disableReasoningOnToolChoice" | "supportsToolChoice" | "supportsForcedToolChoice" | "supportsNamedToolChoice" | "reasoningContentField" | "requiresReasoningContentForToolCalls" | "requiresReasoningContentForAllAssistantTurns" | "allowsSyntheticReasoningContentForToolCalls" | "replayReasoningContent" | "qwenPreserveThinking" | "requiresThinkingAsText" | "requiresMistralToolIds" | "requiresToolResultName" | "requiresAssistantAfterToolResult" | "requiresAssistantContentForToolCalls" | "stripDeepseekSpecialTokens" | "streamMarkupHealingPattern" | "reasoningDeltasMayBeCumulative" | "emptyLengthFinishIsContextError" | "usesOpenAIToolCallIdLimit" | "promptCacheSessionHeader" | "supportsPromptCacheBreakpoints" | "promptCacheBreakpointTtl" | "openRouterRouting" | "isOpenRouterHost" | "supportsStrictMode" | "supportsLongPromptCacheRetention" | "alwaysSendMaxTokens" | "wireModelIdMode" | "vercelGatewayRouting" | "extraBody" | "toolStrictMode" | "toolSchemaFlavor" | "streamIdleTimeoutMs" | "cacheControlFormat" | "thinkingKeep" | "strictResponsesPairing" | "supportsImageDetailOriginal" | "enableGeminiThinkingLoopGuard" | "whenThinking">> & {
561
+ export type ResolvedOpenAICompat = ResolvedOpenAISharedCompat & Required<Omit<OpenAICompat, "supportsDeveloperRole" | "supportsReasoningEffort" | "reasoningEffortMap" | "supportsReasoningParams" | "supportsSamplingParams" | "thinkingFormat" | "kimiApiFormat" | "reasoningDisableMode" | "omitReasoningEffort" | "includeEncryptedReasoning" | "filterReasoningHistory" | "disableReasoningOnForcedToolChoice" | "disableReasoningOnToolChoice" | "supportsToolChoice" | "supportsForcedToolChoice" | "supportsNamedToolChoice" | "reasoningContentField" | "requiresReasoningContentForToolCalls" | "requiresReasoningContentForAllAssistantTurns" | "allowsSyntheticReasoningContentForToolCalls" | "replayReasoningContent" | "qwenPreserveThinking" | "requiresThinkingAsText" | "requiresMistralToolIds" | "requiresToolResultName" | "requiresAssistantAfterToolResult" | "requiresAssistantContentForToolCalls" | "stripDeepseekSpecialTokens" | "streamMarkupHealingPattern" | "reasoningDeltasMayBeCumulative" | "emptyLengthFinishIsContextError" | "usesOpenAIToolCallIdLimit" | "promptCacheSessionHeader" | "supportsPromptCacheBreakpoints" | "promptCacheBreakpointTtl" | "openRouterRouting" | "isOpenRouterHost" | "supportsStrictMode" | "supportsLongPromptCacheRetention" | "alwaysSendMaxTokens" | "wireModelIdMode" | "vercelGatewayRouting" | "extraBody" | "toolStrictMode" | "toolSchemaFlavor" | "streamFirstEventTimeoutMs" | "streamIdleTimeoutMs" | "cacheControlFormat" | "thinkingKeep" | "strictResponsesPairing" | "supportsImageDetailOriginal" | "enableGeminiThinkingLoopGuard" | "whenThinking">> & {
554
562
  vercelGatewayRouting?: OpenAICompat["vercelGatewayRouting"];
555
563
  extraBody?: OpenAICompat["extraBody"];
556
564
  cacheControlFormat?: OpenAICompat["cacheControlFormat"];
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@oh-my-pi/pi-catalog",
4
- "version": "17.1.2",
4
+ "version": "17.1.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.1",
37
- "@oh-my-pi/pi-utils": "17.1.2",
37
+ "@oh-my-pi/pi-utils": "17.1.3",
38
38
  "arktype": "2.2.3",
39
39
  "zod": "^4"
40
40
  },
41
41
  "devDependencies": {
42
- "@oh-my-pi/pi-ai": "17.1.2",
42
+ "@oh-my-pi/pi-ai": "17.1.3",
43
43
  "@types/bun": "^1.3.14"
44
44
  },
45
45
  "engines": {
@@ -574,6 +574,7 @@ export function buildOpenAICompat(spec: ModelSpec<"openai-completions">): Resolv
574
574
  // to Moonshot verbatim, which 400s on non-MFJS constructs.
575
575
  toolSchemaFlavor:
576
576
  isMoonshotNative || isKimiModel ? "moonshot-mfjs" : isLocalOpenAICompatBackend ? "grammar" : undefined,
577
+ streamFirstEventTimeoutMs: isLocalServingBackend ? 0 : undefined,
577
578
  streamIdleTimeoutMs,
578
579
  stripDeepseekSpecialTokens:
579
580
  isDeepseekModelIdOrName(spec.id) && (provider === "nvidia" || provider === "deepseek"),
@@ -723,6 +724,7 @@ export function buildOpenAIResponsesCompat(spec: OpenAIResponsesSpecLike): Resol
723
724
  emptyLengthFinishIsContextError: spec.provider === "ollama",
724
725
  usesOpenAIToolCallIdLimit: spec.provider === "openai",
725
726
  promptCacheSessionHeader: spec.provider === "xai-oauth" ? "x-grok-conv-id" : undefined,
727
+ streamFirstEventTimeoutMs: isLocalServingBackend ? 0 : spec.compat?.streamFirstEventTimeoutMs,
726
728
  streamIdleTimeoutMs: isLocalServingBackend
727
729
  ? LOCAL_OPENAI_COMPAT_STREAM_IDLE_TIMEOUT_MS
728
730
  : spec.compat?.streamIdleTimeoutMs,
package/src/types.ts CHANGED
@@ -341,6 +341,12 @@ export interface OpenAICompat {
341
341
  * to opt a host out.
342
342
  */
343
343
  toolSchemaFlavor?: "moonshot-mfjs" | "grammar" | "none";
344
+ /**
345
+ * Stream-watchdog first-event timeout in ms.
346
+ * Set to `0` to allow unbounded prompt processing. Default: auto-detected
347
+ * (disabled for local OpenAI-compatible backends).
348
+ */
349
+ streamFirstEventTimeoutMs?: number;
344
350
  /**
345
351
  * Stream-watchdog idle-timeout floor in ms for slow reasoning hosts.
346
352
  * Default: auto-detected (GLM coding-plan hosts, direct DeepSeek reasoning).
@@ -565,6 +571,8 @@ export interface ResolvedOpenAISharedCompat {
565
571
  requiresAssistantContentForToolCalls: boolean;
566
572
  stripDeepseekSpecialTokens: boolean;
567
573
  streamMarkupHealingPattern?: OpenAIStreamMarkupHealingPattern;
574
+ /** See {@link OpenAICompat.streamFirstEventTimeoutMs}. */
575
+ streamFirstEventTimeoutMs?: number;
568
576
  reasoningDeltasMayBeCumulative: boolean;
569
577
  emptyLengthFinishIsContextError: boolean;
570
578
  usesOpenAIToolCallIdLimit: boolean;
@@ -645,6 +653,7 @@ export type ResolvedOpenAICompat = ResolvedOpenAISharedCompat &
645
653
  | "extraBody"
646
654
  | "toolStrictMode"
647
655
  | "toolSchemaFlavor"
656
+ | "streamFirstEventTimeoutMs"
648
657
  | "streamIdleTimeoutMs"
649
658
  | "cacheControlFormat"
650
659
  | "thinkingKeep"