@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
|
@@ -821,6 +821,62 @@ export function openaiModelManagerOptions(config?: OpenAIModelManagerConfig): Mo
|
|
|
821
821
|
};
|
|
822
822
|
}
|
|
823
823
|
|
|
824
|
+
/** First-party gpt-5.6 SKUs that accept `reasoning: { mode: "pro" }` on the Responses APIs. */
|
|
825
|
+
const OPENAI_PRO_REASONING_BASE_IDS: Record<string, true> = {
|
|
826
|
+
"gpt-5.6-luna": true,
|
|
827
|
+
"gpt-5.6-sol": true,
|
|
828
|
+
"gpt-5.6-terra": true,
|
|
829
|
+
};
|
|
830
|
+
const OPENAI_PRO_REASONING_PROVIDERS: Record<string, true> = { openai: true, "openai-codex": true };
|
|
831
|
+
|
|
832
|
+
/**
|
|
833
|
+
* A row this generator pass owns: one of the derived `gpt-5.6-*-pro` alias ids
|
|
834
|
+
* on `openai`/`openai-codex` that carries the generated `reasoningMode` marker.
|
|
835
|
+
* A real upstream model occupying the same id has no `reasoningMode` and is
|
|
836
|
+
* never touched.
|
|
837
|
+
*/
|
|
838
|
+
function isGeneratedOpenAIProReasoningAlias(model: ModelSpec<Api>): boolean {
|
|
839
|
+
return (
|
|
840
|
+
OPENAI_PRO_REASONING_PROVIDERS[model.provider] === true &&
|
|
841
|
+
model.reasoningMode !== undefined &&
|
|
842
|
+
model.id.endsWith("-pro") &&
|
|
843
|
+
OPENAI_PRO_REASONING_BASE_IDS[model.id.slice(0, -"-pro".length)] === true
|
|
844
|
+
);
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
/**
|
|
848
|
+
* Re-derive the generated pro-reasoning aliases (`gpt-5.6-*-pro`) for the
|
|
849
|
+
* first-party `openai`/`openai-codex` gpt-5.6 rows. Each alias inherits the
|
|
850
|
+
* base row's metadata, requests the base wire id via `requestModelId`, and
|
|
851
|
+
* sets `reasoningMode: "pro"` so Responses-family request builders emit
|
|
852
|
+
* `reasoning: { mode: "pro" }`. Called by the models.json generator after all
|
|
853
|
+
* sources merge: stale copies of the owned aliases (previous snapshot) are
|
|
854
|
+
* dropped and re-projected from the current base rows so alias metadata always
|
|
855
|
+
* tracks the base, while a real upstream model that occupies an alias id wins
|
|
856
|
+
* and suppresses the projection.
|
|
857
|
+
*/
|
|
858
|
+
export function projectOpenAIProReasoningAliases(models: readonly ModelSpec<Api>[]): ModelSpec<Api>[] {
|
|
859
|
+
const kept = models.filter(model => !isGeneratedOpenAIProReasoningAlias(model));
|
|
860
|
+
const ids = new Set(kept.map(model => `${model.provider}/${model.id}`));
|
|
861
|
+
const out = [...kept];
|
|
862
|
+
for (const model of kept) {
|
|
863
|
+
if (!OPENAI_PRO_REASONING_PROVIDERS[model.provider]) continue;
|
|
864
|
+
if (!OPENAI_PRO_REASONING_BASE_IDS[model.id]) continue;
|
|
865
|
+
const aliasId = `${model.id}-pro`;
|
|
866
|
+
const aliasKey = `${model.provider}/${aliasId}`;
|
|
867
|
+
if (ids.has(aliasKey)) continue;
|
|
868
|
+
ids.add(aliasKey);
|
|
869
|
+
out.push({
|
|
870
|
+
...model,
|
|
871
|
+
id: aliasId,
|
|
872
|
+
name: `${model.name} Pro`,
|
|
873
|
+
requestModelId: model.id,
|
|
874
|
+
reasoningMode: "pro",
|
|
875
|
+
});
|
|
876
|
+
}
|
|
877
|
+
return out;
|
|
878
|
+
}
|
|
879
|
+
|
|
824
880
|
// ---------------------------------------------------------------------------
|
|
825
881
|
// 2. Groq
|
|
826
882
|
// ---------------------------------------------------------------------------
|
|
@@ -983,6 +1039,7 @@ export const XAI_OAUTH_CURATED_MODELS: readonly XAICuratedModel[] = [
|
|
|
983
1039
|
input: ["text", "image"],
|
|
984
1040
|
},
|
|
985
1041
|
{ id: "grok-4.3", contextWindow: 1_000_000, name: "Grok 4.3", input: ["text", "image"] },
|
|
1042
|
+
{ id: "grok-4.5", contextWindow: 500_000, name: "Grok 4.5", input: ["text", "image"] },
|
|
986
1043
|
// grok-4.20-multi-agent-0309 is text-only per the bundled catalog; omit `input` for the default.
|
|
987
1044
|
{ id: "grok-4.20-multi-agent-0309", contextWindow: 2_000_000, name: "Grok 4.20 (Multi-Agent)" },
|
|
988
1045
|
{
|
package/src/types.ts
CHANGED
|
@@ -691,6 +691,13 @@ export interface Model<TApi extends Api = Api> {
|
|
|
691
691
|
* everything local (selection, caching, usage attribution) keys on `id`.
|
|
692
692
|
*/
|
|
693
693
|
requestModelId?: string;
|
|
694
|
+
/**
|
|
695
|
+
* `reasoning.mode` to send on OpenAI Responses-family requests. Set on
|
|
696
|
+
* generated pro aliases (`gpt-5.6-*-pro` on `openai`/`openai-codex`) that
|
|
697
|
+
* pair a base wire id (`requestModelId`) with OpenAI's pro reasoning
|
|
698
|
+
* serving path. Absent everywhere else; providers omit the wire field.
|
|
699
|
+
*/
|
|
700
|
+
reasoningMode?: "pro";
|
|
694
701
|
name: string;
|
|
695
702
|
api: TApi;
|
|
696
703
|
provider: Provider;
|
package/src/variant-collapse.ts
CHANGED
|
@@ -113,6 +113,14 @@ function thinkingPair(baseId: string, name: string): EffortVariantFamily {
|
|
|
113
113
|
|
|
114
114
|
type DevinTierRoutes = Partial<Record<"off" | "minimal" | "low" | "medium" | "high" | "xhigh", string>>;
|
|
115
115
|
|
|
116
|
+
const DEVIN_FIVE_TIER_EFFORTS: readonly Effort[] = [
|
|
117
|
+
Effort.Minimal,
|
|
118
|
+
Effort.Low,
|
|
119
|
+
Effort.Medium,
|
|
120
|
+
Effort.High,
|
|
121
|
+
Effort.XHigh,
|
|
122
|
+
];
|
|
123
|
+
|
|
116
124
|
function devinTierFamily(
|
|
117
125
|
id: string,
|
|
118
126
|
name: string,
|
|
@@ -160,6 +168,44 @@ function devinTierFamily(
|
|
|
160
168
|
};
|
|
161
169
|
}
|
|
162
170
|
|
|
171
|
+
/**
|
|
172
|
+
* GPT-5.6 (Luna/Sol/Terra) adds a genuine `max` tier above `xhigh`, so the
|
|
173
|
+
* standard family shifts every user effort up one notch (`minimal` → `-low`
|
|
174
|
+
* … `xhigh` → `-max`), mirroring the Opus 4.7+ five-tier mapping. Devin
|
|
175
|
+
* serves no `-max-priority` sibling, so the fast family keeps the direct
|
|
176
|
+
* `low..xhigh` `-priority` scale.
|
|
177
|
+
*/
|
|
178
|
+
function devinGpt56Families(variant: "luna" | "sol" | "terra", name: string): readonly EffortVariantFamily[] {
|
|
179
|
+
const base = `gpt-5-6-${variant}`;
|
|
180
|
+
return [
|
|
181
|
+
devinTierFamily(
|
|
182
|
+
base,
|
|
183
|
+
name,
|
|
184
|
+
{
|
|
185
|
+
off: `${base}-none`,
|
|
186
|
+
minimal: `${base}-low`,
|
|
187
|
+
low: `${base}-medium`,
|
|
188
|
+
medium: `${base}-high`,
|
|
189
|
+
high: `${base}-xhigh`,
|
|
190
|
+
xhigh: `${base}-max`,
|
|
191
|
+
},
|
|
192
|
+
DEVIN_FIVE_TIER_EFFORTS,
|
|
193
|
+
),
|
|
194
|
+
devinTierFamily(
|
|
195
|
+
`${base}-fast`,
|
|
196
|
+
`${name} Fast`,
|
|
197
|
+
{
|
|
198
|
+
off: `${base}-none-priority`,
|
|
199
|
+
low: `${base}-low-priority`,
|
|
200
|
+
medium: `${base}-medium-priority`,
|
|
201
|
+
high: `${base}-high-priority`,
|
|
202
|
+
xhigh: `${base}-xhigh-priority`,
|
|
203
|
+
},
|
|
204
|
+
DEVIN_FIVE_TIER_EFFORTS,
|
|
205
|
+
),
|
|
206
|
+
];
|
|
207
|
+
}
|
|
208
|
+
|
|
163
209
|
const GEMINI_3_FLASH_FAMILY_EFFORTS: readonly Effort[] = [Effort.Minimal, Effort.Low, Effort.Medium, Effort.High];
|
|
164
210
|
const GEMINI_3_PRO_FAMILY_EFFORTS: readonly Effort[] = [Effort.Low, Effort.High];
|
|
165
211
|
|
|
@@ -330,7 +376,7 @@ export const DEVIN_VARIANT_COLLAPSE_TABLE: VariantCollapseTable = {
|
|
|
330
376
|
},
|
|
331
377
|
thinking: {
|
|
332
378
|
mode: "effort",
|
|
333
|
-
efforts:
|
|
379
|
+
efforts: DEVIN_FIVE_TIER_EFFORTS,
|
|
334
380
|
requiresEffort: true,
|
|
335
381
|
},
|
|
336
382
|
},
|
|
@@ -353,7 +399,7 @@ export const DEVIN_VARIANT_COLLAPSE_TABLE: VariantCollapseTable = {
|
|
|
353
399
|
},
|
|
354
400
|
thinking: {
|
|
355
401
|
mode: "effort",
|
|
356
|
-
efforts:
|
|
402
|
+
efforts: DEVIN_FIVE_TIER_EFFORTS,
|
|
357
403
|
requiresEffort: true,
|
|
358
404
|
},
|
|
359
405
|
},
|
|
@@ -376,7 +422,7 @@ export const DEVIN_VARIANT_COLLAPSE_TABLE: VariantCollapseTable = {
|
|
|
376
422
|
},
|
|
377
423
|
thinking: {
|
|
378
424
|
mode: "effort",
|
|
379
|
-
efforts:
|
|
425
|
+
efforts: DEVIN_FIVE_TIER_EFFORTS,
|
|
380
426
|
requiresEffort: true,
|
|
381
427
|
},
|
|
382
428
|
},
|
|
@@ -399,7 +445,7 @@ export const DEVIN_VARIANT_COLLAPSE_TABLE: VariantCollapseTable = {
|
|
|
399
445
|
},
|
|
400
446
|
thinking: {
|
|
401
447
|
mode: "effort",
|
|
402
|
-
efforts:
|
|
448
|
+
efforts: DEVIN_FIVE_TIER_EFFORTS,
|
|
403
449
|
requiresEffort: true,
|
|
404
450
|
},
|
|
405
451
|
},
|
|
@@ -413,7 +459,7 @@ export const DEVIN_VARIANT_COLLAPSE_TABLE: VariantCollapseTable = {
|
|
|
413
459
|
high: "MODEL_GPT_5_2_HIGH",
|
|
414
460
|
xhigh: "MODEL_GPT_5_2_XHIGH",
|
|
415
461
|
},
|
|
416
|
-
|
|
462
|
+
DEVIN_FIVE_TIER_EFFORTS,
|
|
417
463
|
),
|
|
418
464
|
devinTierFamily(
|
|
419
465
|
"gpt-5-3-codex",
|
|
@@ -424,7 +470,7 @@ export const DEVIN_VARIANT_COLLAPSE_TABLE: VariantCollapseTable = {
|
|
|
424
470
|
high: "gpt-5-3-codex-high",
|
|
425
471
|
xhigh: "gpt-5-3-codex-xhigh",
|
|
426
472
|
},
|
|
427
|
-
|
|
473
|
+
DEVIN_FIVE_TIER_EFFORTS,
|
|
428
474
|
),
|
|
429
475
|
devinTierFamily(
|
|
430
476
|
"gpt-5-3-codex-fast",
|
|
@@ -435,7 +481,7 @@ export const DEVIN_VARIANT_COLLAPSE_TABLE: VariantCollapseTable = {
|
|
|
435
481
|
high: "gpt-5-3-codex-high-priority",
|
|
436
482
|
xhigh: "gpt-5-3-codex-xhigh-priority",
|
|
437
483
|
},
|
|
438
|
-
|
|
484
|
+
DEVIN_FIVE_TIER_EFFORTS,
|
|
439
485
|
),
|
|
440
486
|
devinTierFamily(
|
|
441
487
|
"gpt-5-4",
|
|
@@ -447,7 +493,7 @@ export const DEVIN_VARIANT_COLLAPSE_TABLE: VariantCollapseTable = {
|
|
|
447
493
|
high: "gpt-5-4-high",
|
|
448
494
|
xhigh: "gpt-5-4-xhigh",
|
|
449
495
|
},
|
|
450
|
-
|
|
496
|
+
DEVIN_FIVE_TIER_EFFORTS,
|
|
451
497
|
),
|
|
452
498
|
devinTierFamily(
|
|
453
499
|
"gpt-5-4-fast",
|
|
@@ -459,7 +505,7 @@ export const DEVIN_VARIANT_COLLAPSE_TABLE: VariantCollapseTable = {
|
|
|
459
505
|
high: "gpt-5-4-high-priority",
|
|
460
506
|
xhigh: "gpt-5-4-xhigh-priority",
|
|
461
507
|
},
|
|
462
|
-
|
|
508
|
+
DEVIN_FIVE_TIER_EFFORTS,
|
|
463
509
|
),
|
|
464
510
|
devinTierFamily(
|
|
465
511
|
"gpt-5-4-mini",
|
|
@@ -470,7 +516,7 @@ export const DEVIN_VARIANT_COLLAPSE_TABLE: VariantCollapseTable = {
|
|
|
470
516
|
high: "gpt-5-4-mini-high",
|
|
471
517
|
xhigh: "gpt-5-4-mini-xhigh",
|
|
472
518
|
},
|
|
473
|
-
|
|
519
|
+
DEVIN_FIVE_TIER_EFFORTS,
|
|
474
520
|
),
|
|
475
521
|
devinTierFamily(
|
|
476
522
|
"gpt-5-5",
|
|
@@ -482,7 +528,7 @@ export const DEVIN_VARIANT_COLLAPSE_TABLE: VariantCollapseTable = {
|
|
|
482
528
|
high: "gpt-5-5-high",
|
|
483
529
|
xhigh: "gpt-5-5-xhigh",
|
|
484
530
|
},
|
|
485
|
-
|
|
531
|
+
DEVIN_FIVE_TIER_EFFORTS,
|
|
486
532
|
),
|
|
487
533
|
devinTierFamily(
|
|
488
534
|
"gpt-5-5-fast",
|
|
@@ -494,8 +540,11 @@ export const DEVIN_VARIANT_COLLAPSE_TABLE: VariantCollapseTable = {
|
|
|
494
540
|
high: "gpt-5-5-high-priority",
|
|
495
541
|
xhigh: "gpt-5-5-xhigh-priority",
|
|
496
542
|
},
|
|
497
|
-
|
|
543
|
+
DEVIN_FIVE_TIER_EFFORTS,
|
|
498
544
|
),
|
|
545
|
+
...devinGpt56Families("luna", "GPT-5.6 Luna"),
|
|
546
|
+
...devinGpt56Families("sol", "GPT-5.6 Sol"),
|
|
547
|
+
...devinGpt56Families("terra", "GPT-5.6 Terra"),
|
|
499
548
|
devinTierFamily(
|
|
500
549
|
"gemini-3-1-pro",
|
|
501
550
|
"Gemini 3.1 Pro",
|