@oh-my-pi/pi-catalog 16.3.13 → 16.3.15
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 +26 -0
- package/dist/types/model-thinking.d.ts +7 -5
- package/dist/types/provider-models/openai-compat.d.ts +12 -0
- package/dist/types/types.d.ts +7 -0
- package/package.json +3 -3
- package/src/compat/openai.ts +1 -1
- package/src/identity/family.ts +1 -1
- package/src/model-thinking.ts +45 -7
- package/src/models.json +1106 -655
- package/src/provider-models/openai-compat.ts +57 -0
- package/src/types.ts +7 -0
- package/src/variant-collapse.ts +61 -12
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [16.3.15] - 2026-07-09
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added support for Grok 4.5 model
|
|
10
|
+
- Added `gpt-5.6` base models and `gpt-5.6-{luna,sol,terra}-pro` variants
|
|
11
|
+
- Added `meta/muse-spark-1.1` model support
|
|
12
|
+
- Added support for thinking modes on `poolside/laguna` models
|
|
13
|
+
- Added generated GPT-5.6 Pro aliases (`gpt-5.6-{luna,sol,terra}-pro`) on the `openai` and `openai-codex` providers: each alias sends the base model id on the wire (`requestModelId`) with the new `reasoningMode: "pro"` marker, and re-derives from the current base rows on every catalog regeneration.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- Updated cache read costs for Grok models
|
|
18
|
+
- Reduced max token limit for Grok 4.3 model
|
|
19
|
+
- Enabled prompt cache affinity for Grok models via the x-grok-conv-id header in OpenAI compatible endpoints
|
|
20
|
+
- Enabled prompt cache affinity for Grok models via the x-grok-conv-id header
|
|
21
|
+
- Marked direct xAI Grok Chat Completions models for `x-grok-conv-id` prompt-cache affinity.
|
|
22
|
+
|
|
23
|
+
## [16.3.14] - 2026-07-09
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- Added support for GPT-5.6 (Luna, Sol, Terra) model variants
|
|
28
|
+
- Enabled expanded five-tier reasoning effort scale (minimal to xhigh) for GPT-5.6 models
|
|
29
|
+
- Added GPT-5.6 (Terra/Luna/Sol) support for the new `max` reasoning tier: on wire-effort APIs (OpenAI Responses, Codex, Azure, openai-compat/OpenRouter models that advertise reasoning) user efforts shift up one notch — `xhigh` sends `max`, `high` sends `xhigh` — mirroring the Claude Fable/Opus 4.7+ five-tier mapping, and the exposed ladder becomes `minimal..xhigh` with `minimal` reaching the native `low` tier. Devin's per-tier GPT-5.6 sibling rows now collapse into `gpt-5-6-{luna,sol,terra}` logical models with the same shifted routing (`xhigh` → `-max`), plus `-fast` families that keep the direct `low..xhigh` `-priority` scale since Devin serves no `-max-priority` tier.
|
|
30
|
+
|
|
5
31
|
## [16.3.13] - 2026-07-09
|
|
6
32
|
|
|
7
33
|
### Added
|
|
@@ -14,12 +14,14 @@ import type { Api, CompatOf, Model, ModelSpec, ThinkingConfig } from "./types.js
|
|
|
14
14
|
*/
|
|
15
15
|
type ApiModel<TApi extends Api = Api> = ModelSpec<TApi> | Model<TApi>;
|
|
16
16
|
/**
|
|
17
|
-
* Effort → wire-value map for
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
17
|
+
* Effort → wire-value map for a shifted five-tier scale (`low..max`):
|
|
18
|
+
* user-facing efforts shift up one notch so the top tier reaches the genuine
|
|
19
|
+
* "max" and "high" lands on the recommended "xhigh" coding/agentic default.
|
|
20
|
+
* Used by Anthropic adaptive models with a real xhigh tier (Opus 4.7+ and
|
|
21
|
+
* Fable/Mythos 5 on the Messages API) and by GPT-5.6+ wire-effort models,
|
|
22
|
+
* which expose the same genuine `max` tier above `xhigh`.
|
|
21
23
|
*/
|
|
22
|
-
export declare const
|
|
24
|
+
export declare const SHIFTED_FIVE_TIER_EFFORT_MAP: Readonly<Partial<Record<Effort, string>>>;
|
|
23
25
|
/**
|
|
24
26
|
* Effort → wire-value map for the legacy 4-tier adaptive scale (Opus 4.6,
|
|
25
27
|
* Sonnet 4.6+, and every adaptive model on Bedrock Converse). `low..high` pass
|
|
@@ -54,6 +54,18 @@ export interface OpenAIModelManagerConfig {
|
|
|
54
54
|
fetch?: FetchImpl;
|
|
55
55
|
}
|
|
56
56
|
export declare function openaiModelManagerOptions(config?: OpenAIModelManagerConfig): ModelManagerOptions<"openai-responses">;
|
|
57
|
+
/**
|
|
58
|
+
* Re-derive the generated pro-reasoning aliases (`gpt-5.6-*-pro`) for the
|
|
59
|
+
* first-party `openai`/`openai-codex` gpt-5.6 rows. Each alias inherits the
|
|
60
|
+
* base row's metadata, requests the base wire id via `requestModelId`, and
|
|
61
|
+
* sets `reasoningMode: "pro"` so Responses-family request builders emit
|
|
62
|
+
* `reasoning: { mode: "pro" }`. Called by the models.json generator after all
|
|
63
|
+
* sources merge: stale copies of the owned aliases (previous snapshot) are
|
|
64
|
+
* dropped and re-projected from the current base rows so alias metadata always
|
|
65
|
+
* tracks the base, while a real upstream model that occupies an alias id wins
|
|
66
|
+
* and suppresses the projection.
|
|
67
|
+
*/
|
|
68
|
+
export declare function projectOpenAIProReasoningAliases(models: readonly ModelSpec<Api>[]): ModelSpec<Api>[];
|
|
57
69
|
export interface GroqModelManagerConfig {
|
|
58
70
|
apiKey?: string;
|
|
59
71
|
baseUrl?: string;
|
package/dist/types/types.d.ts
CHANGED
|
@@ -563,6 +563,13 @@ export interface Model<TApi extends Api = Api> {
|
|
|
563
563
|
* everything local (selection, caching, usage attribution) keys on `id`.
|
|
564
564
|
*/
|
|
565
565
|
requestModelId?: string;
|
|
566
|
+
/**
|
|
567
|
+
* `reasoning.mode` to send on OpenAI Responses-family requests. Set on
|
|
568
|
+
* generated pro aliases (`gpt-5.6-*-pro` on `openai`/`openai-codex`) that
|
|
569
|
+
* pair a base wire id (`requestModelId`) with OpenAI's pro reasoning
|
|
570
|
+
* serving path. Absent everywhere else; providers omit the wire field.
|
|
571
|
+
*/
|
|
572
|
+
reasoningMode?: "pro";
|
|
566
573
|
name: string;
|
|
567
574
|
api: TApi;
|
|
568
575
|
provider: Provider;
|
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.3.
|
|
4
|
+
"version": "16.3.15",
|
|
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.3.
|
|
37
|
+
"@oh-my-pi/pi-utils": "16.3.15",
|
|
38
38
|
"arktype": "^2.2.0",
|
|
39
39
|
"zod": "^4"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@oh-my-pi/pi-ai": "16.3.
|
|
42
|
+
"@oh-my-pi/pi-ai": "16.3.15",
|
|
43
43
|
"@types/bun": "^1.3.14"
|
|
44
44
|
},
|
|
45
45
|
"engines": {
|
package/src/compat/openai.ts
CHANGED
|
@@ -541,7 +541,7 @@ export function buildOpenAICompat(spec: ModelSpec<"openai-completions">): Resolv
|
|
|
541
541
|
MINIMAX_PROVIDER_OR_ID_PATTERN.test(provider) || MINIMAX_PROVIDER_OR_ID_PATTERN.test(spec.id),
|
|
542
542
|
emptyLengthFinishIsContextError: provider === "ollama",
|
|
543
543
|
usesOpenAIToolCallIdLimit: provider === "openai",
|
|
544
|
-
promptCacheSessionHeader: undefined,
|
|
544
|
+
promptCacheSessionHeader: isGrok ? "x-grok-conv-id" : undefined,
|
|
545
545
|
dropThinkingWhenReasoningEffort: provider === "fireworks",
|
|
546
546
|
};
|
|
547
547
|
|
package/src/identity/family.ts
CHANGED
|
@@ -78,7 +78,7 @@ export const isMimoModelIdOrName = memo((value: string): boolean => {
|
|
|
78
78
|
return value.toLowerCase().includes("mimo");
|
|
79
79
|
});
|
|
80
80
|
|
|
81
|
-
const GROK_EFFORT_CAPABLE_PREFIXES = ["grok-3-mini", "grok-4.20-multi-agent", "grok-4.3"] as const;
|
|
81
|
+
const GROK_EFFORT_CAPABLE_PREFIXES = ["grok-3-mini", "grok-4.20-multi-agent", "grok-4.3", "grok-4.5"] as const;
|
|
82
82
|
|
|
83
83
|
/**
|
|
84
84
|
* Grok SKUs that expose the wire `reasoning.effort` dial. Other Grok reasoners
|
package/src/model-thinking.ts
CHANGED
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
type ParsedModel,
|
|
18
18
|
parseAnthropicModel,
|
|
19
19
|
parseKnownModel,
|
|
20
|
+
parseOpenAIModel,
|
|
20
21
|
semverEqual,
|
|
21
22
|
semverGte,
|
|
22
23
|
} from "./identity/classify";
|
|
@@ -101,12 +102,14 @@ const MIMO_REASONING_EFFORT_MAP: Readonly<EffortMap> = {
|
|
|
101
102
|
};
|
|
102
103
|
|
|
103
104
|
/**
|
|
104
|
-
* Effort → wire-value map for
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
105
|
+
* Effort → wire-value map for a shifted five-tier scale (`low..max`):
|
|
106
|
+
* user-facing efforts shift up one notch so the top tier reaches the genuine
|
|
107
|
+
* "max" and "high" lands on the recommended "xhigh" coding/agentic default.
|
|
108
|
+
* Used by Anthropic adaptive models with a real xhigh tier (Opus 4.7+ and
|
|
109
|
+
* Fable/Mythos 5 on the Messages API) and by GPT-5.6+ wire-effort models,
|
|
110
|
+
* which expose the same genuine `max` tier above `xhigh`.
|
|
108
111
|
*/
|
|
109
|
-
export const
|
|
112
|
+
export const SHIFTED_FIVE_TIER_EFFORT_MAP: Readonly<Partial<Record<Effort, string>>> = {
|
|
110
113
|
[Effort.Minimal]: "low",
|
|
111
114
|
[Effort.Low]: "medium",
|
|
112
115
|
[Effort.Medium]: "high",
|
|
@@ -295,6 +298,27 @@ function isOpenAICompatReasoningApi(api: Api): boolean {
|
|
|
295
298
|
return api === "openai-completions" || api === "openrouter";
|
|
296
299
|
}
|
|
297
300
|
|
|
301
|
+
/**
|
|
302
|
+
* GPT-5.6+ addressed through a wire `reasoning.effort`/`reasoning_effort`
|
|
303
|
+
* field, where the shifted five-tier map applies. Devin (`devin-agent`)
|
|
304
|
+
* selects effort by routing to per-tier sibling model ids instead and must
|
|
305
|
+
* stay unmapped.
|
|
306
|
+
*/
|
|
307
|
+
function isGpt56PlusWireEffortModel<TApi extends Api>(spec: ModelSpec<TApi>): boolean {
|
|
308
|
+
switch (spec.api) {
|
|
309
|
+
case "openai-responses":
|
|
310
|
+
case "openai-codex-responses":
|
|
311
|
+
case "azure-openai-responses":
|
|
312
|
+
case "openai-completions":
|
|
313
|
+
case "openrouter":
|
|
314
|
+
break;
|
|
315
|
+
default:
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
const parsed = parseOpenAIModel(bareModelId(spec.id));
|
|
319
|
+
return parsed !== null && semverGte(parsed.version, "5.6");
|
|
320
|
+
}
|
|
321
|
+
|
|
298
322
|
function getModelDefinedEfforts<TApi extends Api>(
|
|
299
323
|
spec: ModelSpec<TApi>,
|
|
300
324
|
compat: CompatOf<TApi>,
|
|
@@ -313,6 +337,12 @@ function getModelDefinedEfforts<TApi extends Api>(
|
|
|
313
337
|
if (isSakanaFuguReasoningModel(spec)) {
|
|
314
338
|
return FUGU_REASONING_EFFORTS;
|
|
315
339
|
}
|
|
340
|
+
if (isGpt56PlusWireEffortModel(spec)) {
|
|
341
|
+
// Normalize stale baked/discovered `low..xhigh` surfaces to the full
|
|
342
|
+
// five-tier ladder so the shifted map keeps the native `low` tier
|
|
343
|
+
// reachable (user `minimal`).
|
|
344
|
+
return DEFAULT_REASONING_EFFORTS_WITH_XHIGH;
|
|
345
|
+
}
|
|
316
346
|
return isOpenAICompatReasoningApi(spec.api) &&
|
|
317
347
|
(isMinimaxM2FamilyModelId(spec.id) ||
|
|
318
348
|
isOpenAIGptOssModelId(spec.id) ||
|
|
@@ -373,7 +403,7 @@ function inferDetectedEffortMap<TApi extends Api>(
|
|
|
373
403
|
return MINIMAX_ANTHROPIC_ADAPTIVE_EFFORT_MAP;
|
|
374
404
|
}
|
|
375
405
|
return anthropicModelHasRealXHighEffort(spec, parsedModel)
|
|
376
|
-
?
|
|
406
|
+
? SHIFTED_FIVE_TIER_EFFORT_MAP
|
|
377
407
|
: ANTHROPIC_ADAPTIVE_EFFORT_MAP_4_TIER;
|
|
378
408
|
}
|
|
379
409
|
// GLM-5.2 coding SKUs accept `reasoning_effort`, but the effort dialect is
|
|
@@ -397,6 +427,9 @@ function inferDetectedEffortMap<TApi extends Api>(
|
|
|
397
427
|
if (isSakanaFuguReasoningModel(spec)) {
|
|
398
428
|
return FUGU_REASONING_EFFORT_MAP;
|
|
399
429
|
}
|
|
430
|
+
if (isGpt56PlusWireEffortModel(spec)) {
|
|
431
|
+
return SHIFTED_FIVE_TIER_EFFORT_MAP;
|
|
432
|
+
}
|
|
400
433
|
if (!isOpenAICompatReasoningApi(spec.api)) {
|
|
401
434
|
return undefined;
|
|
402
435
|
}
|
|
@@ -446,7 +479,7 @@ function getOpenRouterAnthropicReasoningEffortMap(modelId: string): EffortMap |
|
|
|
446
479
|
if (!isAnthropicAdaptiveGenAtLeast(parsed, "4.6")) return undefined;
|
|
447
480
|
|
|
448
481
|
const hasRealXHigh = isAnthropicAdaptiveGenAtLeast(parsed, "4.7");
|
|
449
|
-
return hasRealXHigh ?
|
|
482
|
+
return hasRealXHigh ? SHIFTED_FIVE_TIER_EFFORT_MAP : ANTHROPIC_ADAPTIVE_EFFORT_MAP_4_TIER;
|
|
450
483
|
}
|
|
451
484
|
|
|
452
485
|
function inferSupportedEfforts<TApi extends Api>(
|
|
@@ -474,6 +507,11 @@ function inferOpenAISupportedEfforts(model: OpenAIModel): readonly Effort[] {
|
|
|
474
507
|
if (model.variant === "codex-mini" && semverEqual(model.version, "5.1")) {
|
|
475
508
|
return GPT_5_1_CODEX_MINI_EFFORTS;
|
|
476
509
|
}
|
|
510
|
+
// 5.6+ exposes the full five-tier ladder: the shifted wire map spans
|
|
511
|
+
// low..max, with user `minimal` reaching the native `low` tier.
|
|
512
|
+
if (semverGte(model.version, "5.6")) {
|
|
513
|
+
return DEFAULT_REASONING_EFFORTS_WITH_XHIGH;
|
|
514
|
+
}
|
|
477
515
|
if (semverGte(model.version, "5.2")) {
|
|
478
516
|
return GPT_5_2_PLUS_EFFORTS;
|
|
479
517
|
}
|