@oh-my-pi/pi-catalog 18.6.3 → 18.7.0
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 +17 -0
- package/dist/types/compat/types.d.ts +2 -0
- package/dist/types/types.d.ts +24 -2
- package/package.json +4 -4
- package/src/build.ts +4 -1
- package/src/compat/rules/README.md +4 -0
- package/src/compat/rules/auth/minimax-code-cn.kdl +1 -1
- package/src/compat/rules/auth/minimax-code.kdl +1 -1
- package/src/compat/rules/classes/minimax.kdl +21 -1
- package/src/compat/rules/providers/apple.kdl +1 -0
- package/src/compat/rules/providers/minimax-code-cn.kdl +10 -5
- package/src/compat/rules/providers/minimax-code.kdl +10 -5
- package/src/compat/rules/providers/mistral.kdl +20 -0
- package/src/compat/rules/providers/openai-codex.kdl +6 -0
- package/src/compat/rules/providers/openai.kdl +5 -0
- package/src/compat/rules/runtime/behavior.kdl +2 -0
- package/src/compat/rules/taxonomy/_collapse.kdl +18 -0
- package/src/compat/rules.json +1 -1
- package/src/compat/types.ts +2 -0
- package/src/models.json +1 -1
- package/src/provider-models/openai-compat.ts +6 -17
- package/src/types.ts +61 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [18.7.0] - 2026-10-06
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added Mistral Large 4 with reasoning support, image input, a 1M-token context window, and preview pricing.
|
|
10
|
+
- Added configurable thinking levels from low through maximum for MiniMax-M3.1-Flash-Preview; because the model always reasons, requests that disable thinking use the low level.
|
|
11
|
+
- Added Google Antigravity pricing and model support for Claude Opus 5.5 and Sonnet 5.5.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- MiniMax Token Plan providers (`minimax-code` and `minimax-code-cn`) now use MiniMax's recommended Anthropic-compatible API for model requests and login key validation.
|
|
16
|
+
- Google Antigravity now exposes Claude Opus 5.5 and Sonnet 5.5 once each, with selectable low, medium, and high thinking levels.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- Added the correct published pricing for GPT-6 Astra's Ultrafast service tier: a 6× multiplier on the OpenAI API and an 8× multiplier on the Codex card.
|
|
21
|
+
|
|
5
22
|
## [18.6.3] - 2026-10-06
|
|
6
23
|
|
|
7
24
|
### Added
|
|
@@ -622,6 +622,8 @@ export interface CompiledProvider {
|
|
|
622
622
|
id: string;
|
|
623
623
|
/** Preferred model id when no explicit selection is made. */
|
|
624
624
|
defaultModel: string;
|
|
625
|
+
/** Whether the provider participates in automatic default selection (defaults to true). */
|
|
626
|
+
automaticDefault?: boolean;
|
|
625
627
|
/** Env vars consulted, in order, for the runtime API-key fallback. */
|
|
626
628
|
envVars?: string[];
|
|
627
629
|
/** The runtime creates a model manager even without a valid API key. */
|
package/dist/types/types.d.ts
CHANGED
|
@@ -15,6 +15,22 @@ export type KindApiKind = (typeof KIND_API_KINDS)[number];
|
|
|
15
15
|
export type WebSearchGrounding = "gemini" | "anthropic" | "codex" | "xai" | "openrouter" | "openai";
|
|
16
16
|
/** Non-chat runner protocols accepted by catalog seeds, outside the chat dispatch union. */
|
|
17
17
|
export declare const RUNNER_APIS: readonly ["local-inference", "web-search", "typesafe", "openrouter-decisions", "openai-images", "openrouter-images", "xai-tts", "openai-speech", "openai-embeddings", "openrouter-rerank", "openrouter-video", "openai-transcriptions"];
|
|
18
|
+
/** Kind each single-purpose runner API serves; `local-inference` hosts several kinds. */
|
|
19
|
+
export declare const RUNNER_API_KINDS: Record<Exclude<(typeof RUNNER_APIS)[number], "local-inference">, ModelKind>;
|
|
20
|
+
/** Kind a runner API serves; `undefined` for chat transports and multi-kind `local-inference`. */
|
|
21
|
+
export declare function runnerApiKind(api: Api): ModelKind | undefined;
|
|
22
|
+
/** Catalog APIs `generate_image` runs through a pi-ai image client; the hosted Responses pair needs a carrier model. */
|
|
23
|
+
export declare const IMAGE_GENERATION_APIS: readonly ["openai-images", "openrouter-images", "google-generative-ai", "google-gemini-cli", "openai-responses", "openai-codex-responses"];
|
|
24
|
+
export type ImageGenerationApi = (typeof IMAGE_GENERATION_APIS)[number];
|
|
25
|
+
/**
|
|
26
|
+
* Kinds a model on `api` may declare: a runner api serves its own kind; a chat
|
|
27
|
+
* transport serves `chat` and `tiny`, plus `image` when `generate_image` runs it
|
|
28
|
+
* (hosted Responses image tool, Gemini image models). `undefined` for
|
|
29
|
+
* `local-inference`, which hosts several kinds chosen by the model itself.
|
|
30
|
+
*/
|
|
31
|
+
export declare function servedKinds(api: Api): readonly ModelKind[] | undefined;
|
|
32
|
+
/** Whether a model of `kind` can run on `api`. */
|
|
33
|
+
export declare function apiServesKind(api: Api, kind: ModelKind): boolean;
|
|
18
34
|
/** Resolve a model's kind while preserving chat semantics for existing catalog rows. */
|
|
19
35
|
export declare function modelKind(model: Pick<Model, "kind">): ModelKind;
|
|
20
36
|
/** Canonical thinking transport used by a model. */
|
|
@@ -1090,6 +1106,12 @@ export interface Model<TApi extends Api = Api> {
|
|
|
1090
1106
|
id: string;
|
|
1091
1107
|
/** Role-specific runner capability; omitted for ordinary chat models. */
|
|
1092
1108
|
kind?: ModelKind;
|
|
1109
|
+
/**
|
|
1110
|
+
* Verbatim configured kind (models.yml, `modelOverrides`, runtime
|
|
1111
|
+
* registrations). `buildModel` applies it over catalog `kind` rules on every
|
|
1112
|
+
* rebuild, so a configured runner keeps its role.
|
|
1113
|
+
*/
|
|
1114
|
+
kindConfig?: ModelKind;
|
|
1093
1115
|
/** Grounding transport supported by this chat model. */
|
|
1094
1116
|
webSearch?: WebSearchGrounding;
|
|
1095
1117
|
/** Cheaper same-provider model to run hosted web search in this model's place (model id or provider/id). */
|
|
@@ -1302,9 +1324,9 @@ export interface Model<TApi extends Api = Api> {
|
|
|
1302
1324
|
/**
|
|
1303
1325
|
* Per-service-tier cost multipliers baked from the `service-tier-cost`
|
|
1304
1326
|
* catalog axis (e.g. `{ priority: 2.5 }`). Absent tiers use the API-generic
|
|
1305
|
-
* defaults.
|
|
1327
|
+
* defaults, and a tier with no published price stays at 1x.
|
|
1306
1328
|
*/
|
|
1307
|
-
serviceTierCost?: Readonly<Partial<Record<"flex" | "priority", number>>>;
|
|
1329
|
+
serviceTierCost?: Readonly<Partial<Record<"flex" | "priority" | "ultrafast", number>>>;
|
|
1308
1330
|
/**
|
|
1309
1331
|
* Provider-supplied one-line blurb for this model. Set only when an upstream
|
|
1310
1332
|
* ships one (Devin's `GetCliModelConfigs`); never synthesized locally.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oh-my-pi/pi-catalog",
|
|
3
|
-
"version": "18.
|
|
3
|
+
"version": "18.7.0",
|
|
4
4
|
"description": "Model catalog for omp: bundled model database, provider discovery descriptors, model identity, classification, and equivalence",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -93,12 +93,12 @@
|
|
|
93
93
|
"gen:proto": "bun scripts/generate-protocols.ts"
|
|
94
94
|
},
|
|
95
95
|
"dependencies": {
|
|
96
|
-
"@oh-my-pi/omptype": "18.
|
|
97
|
-
"@oh-my-pi/pi-utils": "18.
|
|
96
|
+
"@oh-my-pi/omptype": "18.7.0",
|
|
97
|
+
"@oh-my-pi/pi-utils": "18.7.0"
|
|
98
98
|
},
|
|
99
99
|
"devDependencies": {
|
|
100
100
|
"@bgotink/kdl": "0.4.0",
|
|
101
|
-
"@oh-my-pi/pi-ai": "18.
|
|
101
|
+
"@oh-my-pi/pi-ai": "18.7.0",
|
|
102
102
|
"@types/bun": "^1.3.14"
|
|
103
103
|
},
|
|
104
104
|
"engines": {
|
package/src/build.ts
CHANGED
|
@@ -101,9 +101,11 @@ function applyCatalogAssignments<TApi extends Api>(model: Model<TApi>, catalog:
|
|
|
101
101
|
if (serviceTierCost !== undefined) {
|
|
102
102
|
const flex = numberField(serviceTierCost, "flex");
|
|
103
103
|
const priorityTier = numberField(serviceTierCost, "priority");
|
|
104
|
+
const ultrafast = numberField(serviceTierCost, "ultrafast");
|
|
104
105
|
model.serviceTierCost = {
|
|
105
106
|
...(flex !== undefined && { flex }),
|
|
106
107
|
...(priorityTier !== undefined && { priority: priorityTier }),
|
|
108
|
+
...(ultrafast !== undefined && { ultrafast }),
|
|
107
109
|
};
|
|
108
110
|
}
|
|
109
111
|
const priority = catalog.priority;
|
|
@@ -363,7 +365,8 @@ export function buildModel<TApi extends Api>(spec: ModelSpec<TApi>): Model<TApi>
|
|
|
363
365
|
};
|
|
364
366
|
applyCatalogAssignments(model, policy.catalog);
|
|
365
367
|
applyCatalogCorrections(model, policy.catalog);
|
|
366
|
-
// Configured lifetimes replace catalog
|
|
368
|
+
// Configured kinds and lifetimes replace catalog values rather than merging with them.
|
|
369
|
+
if (spec.kindConfig !== undefined) model.kind = spec.kindConfig;
|
|
367
370
|
if (spec.promptCacheConfig !== undefined) model.promptCache = { ...spec.promptCacheConfig };
|
|
368
371
|
return model;
|
|
369
372
|
}
|
|
@@ -413,6 +413,10 @@ provider "muse-code" {
|
|
|
413
413
|
|
|
414
414
|
Only `discovery` enrolls a provider in `generate-models.ts`; providers without it are never fetched at generation time (see the `charm-hyper` entry for why a live gateway deliberately omits it).
|
|
415
415
|
|
|
416
|
+
`automatic-default #false` keeps a provider available for explicit selection but excludes it from startup fallback and automatic model presets. The default is `#true`; `apple` opts out because its on-device context cannot accommodate the standard coding-agent prompt in many projects.
|
|
417
|
+
|
|
418
|
+
`kind-apis { <kind> "<api>" }` maps each non-chat kind (`image`, `tts`, `stt`, `embedding`, `rerank`, `video`) to the API discovery assigns rows of that kind. A runner API must sit under the kind it serves (`RUNNER_API_KINDS` in `src/types.ts`); chat APIs, which serve hosted image generation, and multi-kind `local-inference` may back any kind.
|
|
419
|
+
|
|
416
420
|
### Seed rows
|
|
417
421
|
|
|
418
422
|
A `seed` _defines_ bundled rows for providers whose catalog cannot be discovered at generation time — credential-scoped rosters, unauthenticated regens, or models ahead of upstream catalogs. Every other stratum patches rows; this one authors them. Runtime model managers hand the rows to `staticModels` through `seedModels(provider)`; the generator bundles them per the seed's `bundle` policy. Values are literal — a seed never derives from another provider's row, and pricing is never borrowed.
|
|
@@ -4,6 +4,6 @@ auth "minimax-code-cn" {
|
|
|
4
4
|
auth-url "https://platform.minimaxi.com/subscribe/token-plan"
|
|
5
5
|
instructions "Subscribe to Token Plan and copy your API key"
|
|
6
6
|
prompt "Paste your MiniMax Token Plan API key" placeholder="sk-..."
|
|
7
|
-
validate "
|
|
7
|
+
validate "anthropic-messages" base-url="https://api.minimaxi.com/anthropic" model="MiniMax-M3"
|
|
8
8
|
}
|
|
9
9
|
}
|
|
@@ -4,6 +4,6 @@ auth "minimax-code" {
|
|
|
4
4
|
auth-url "https://platform.minimax.io/subscribe/token-plan"
|
|
5
5
|
instructions "Subscribe to Token Plan and copy your API key"
|
|
6
6
|
prompt "Paste your MiniMax Token Plan API key" placeholder="sk-..."
|
|
7
|
-
validate "
|
|
7
|
+
validate "anthropic-messages" label="MiniMax Token Plan" base-url="https://api.minimax.io/anthropic" model="MiniMax-M3"
|
|
8
8
|
}
|
|
9
9
|
}
|
|
@@ -51,7 +51,7 @@ class "minimax" {
|
|
|
51
51
|
thinking-efforts "minimal" "low" "medium" "high" "xhigh"
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
on "minimax" "minimax-cn" "vercel-ai-gateway" {
|
|
54
|
+
on "minimax" "minimax-cn" "minimax-code" "minimax-code-cn" "vercel-ai-gateway" {
|
|
55
55
|
thinking-mode "anthropic-adaptive"
|
|
56
56
|
family "m2" {
|
|
57
57
|
// Replaces the Anthropic-route MiniMax effort remap table.
|
|
@@ -71,6 +71,26 @@ class "minimax" {
|
|
|
71
71
|
thinking-efforts "low" "medium" "high"
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
|
+
// MiniMax-M3.1-Flash-Preview always thinks (`thinking.type: "disabled"` and
|
|
75
|
+
// effort `none` 400 with error 2013) and tunes depth through
|
|
76
|
+
// `output_config.effort` from `low` to `max` (the default when omitted).
|
|
77
|
+
// The identity map replaces the M3 family's adaptive-tag-only map so each
|
|
78
|
+
// level reaches the wire. Like the M2 family, thinking cannot be turned off:
|
|
79
|
+
// `thinking-requires-effort` hides the off level and clamps forced-off
|
|
80
|
+
// requests to the lowest effort instead of sending `disabled`.
|
|
81
|
+
on "minimax" "minimax-cn" "minimax-code" "minimax-code-cn" {
|
|
82
|
+
models "MiniMax-M3.1-Flash-Preview" {
|
|
83
|
+
thinking-requires-effort #true
|
|
84
|
+
thinking-efforts "low" "medium" "high" "xhigh" "max"
|
|
85
|
+
thinking-effort-map {
|
|
86
|
+
low "low"
|
|
87
|
+
medium "medium"
|
|
88
|
+
high "high"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Token Plan rows ride the Anthropic route; these OpenAI-only wire axes
|
|
93
|
+
// serve the legacy lightning rows that stay on the OpenAI-compatible one.
|
|
74
94
|
on "minimax-code" "minimax-code-cn" {
|
|
75
95
|
supports-reasoning-effort #false
|
|
76
96
|
supports-store #false
|
|
@@ -6,11 +6,16 @@ provider "minimax-code-cn" priority=1 {
|
|
|
6
6
|
|
|
7
7
|
// Replaces the provider-id regex in both OpenAI baselines.
|
|
8
8
|
reasoning-deltas-may-be-cumulative #true
|
|
9
|
-
|
|
9
|
+
// residue: the legacy lightning SKUs survive only as previous-snapshot rows
|
|
10
|
+
// on the OpenAI-compatible route (models.dev and both live model lists omit
|
|
11
|
+
// them), so they keep that route's effort-mode thinking instead of the
|
|
12
|
+
// Anthropic adaptive rules the rest of the plan uses.
|
|
13
|
+
models "MiniMax-M2.1-lightning" "MiniMax-M2.5-lightning" {
|
|
10
14
|
thinking-mode "effort"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
thinking-effort-map {
|
|
16
|
+
low "low"
|
|
17
|
+
medium "medium"
|
|
18
|
+
high "high"
|
|
19
|
+
}
|
|
15
20
|
}
|
|
16
21
|
}
|
|
@@ -6,11 +6,16 @@ provider "minimax-code" priority=1 {
|
|
|
6
6
|
|
|
7
7
|
// Replaces the provider-id regex in both OpenAI baselines.
|
|
8
8
|
reasoning-deltas-may-be-cumulative #true
|
|
9
|
-
|
|
9
|
+
// residue: the legacy lightning SKUs survive only as previous-snapshot rows
|
|
10
|
+
// on the OpenAI-compatible route (models.dev and both live model lists omit
|
|
11
|
+
// them), so they keep that route's effort-mode thinking instead of the
|
|
12
|
+
// Anthropic adaptive rules the rest of the plan uses.
|
|
13
|
+
models "MiniMax-M2.1-lightning" "MiniMax-M2.5-lightning" {
|
|
10
14
|
thinking-mode "effort"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
thinking-effort-map {
|
|
16
|
+
low "low"
|
|
17
|
+
medium "medium"
|
|
18
|
+
high "high"
|
|
19
|
+
}
|
|
15
20
|
}
|
|
16
21
|
}
|
|
@@ -4,6 +4,26 @@ provider "mistral" {
|
|
|
4
4
|
default-model "devstral-medium-latest"
|
|
5
5
|
env "MISTRAL_API_KEY"
|
|
6
6
|
|
|
7
|
+
// Public-preview aliases and current USD / 1M token pricing:
|
|
8
|
+
// https://docs.mistral.ai/models/mistral-large-4-0 (2026-10-06).
|
|
9
|
+
// Public preview is 50% off: input $0.68, output $2.09, cached input $0.07.
|
|
10
|
+
// List prices: input $1.36, output $4.18, cached input $0.14; update when preview ends.
|
|
11
|
+
// No separate maximum output-token limit is published.
|
|
12
|
+
seed api="openai-completions" base-url="https://api.mistral.ai/v1" bundle="always" {
|
|
13
|
+
model "mistral-large-4" name="Mistral Large 4" {
|
|
14
|
+
reasoning #true
|
|
15
|
+
input "text" "image"
|
|
16
|
+
cost input=0.68 output=2.09 cache-read=0.07 cache-write=0
|
|
17
|
+
limits context=1000000
|
|
18
|
+
}
|
|
19
|
+
model "mistral-large-4-0" name="Mistral Large 4" {
|
|
20
|
+
reasoning #true
|
|
21
|
+
input "text" "image"
|
|
22
|
+
cost input=0.68 output=2.09 cache-read=0.07 cache-write=0
|
|
23
|
+
limits context=1000000
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
7
27
|
thinking-mode "effort"
|
|
8
28
|
class "unknown" {
|
|
9
29
|
thinking-efforts "minimal" "low" "medium" "high" "xhigh"
|
|
@@ -76,6 +76,12 @@ provider "openai-codex" {
|
|
|
76
76
|
service-tier-cost {
|
|
77
77
|
flex 0.5
|
|
78
78
|
priority 2.5
|
|
79
|
+
// Ultrafast is Astra-only. This table uses OpenAI's included-usage
|
|
80
|
+
// multipliers for Codex: Ultrafast 8x and Fast 2.5x Standard (purchased
|
|
81
|
+
// credits / Enterprise pay-as-you-go bill 6x and 2x instead). See
|
|
82
|
+
// https://learn.chatgpt.com/docs/agent-configuration/speed and
|
|
83
|
+
// https://learn.chatgpt.com/docs/pricing.
|
|
84
|
+
ultrafast 8
|
|
79
85
|
}
|
|
80
86
|
limits-patch {
|
|
81
87
|
context-window 272000
|
|
@@ -176,6 +176,11 @@ provider "openai" {
|
|
|
176
176
|
cache-read 2.0
|
|
177
177
|
cache-write 25.0
|
|
178
178
|
}
|
|
179
|
+
// Ultrafast is Astra-only: $60/$6/$75/$300 per 1M short-context
|
|
180
|
+
// (6x the standard card), and the same 6x holds on the long-context tier.
|
|
181
|
+
service-tier-cost {
|
|
182
|
+
ultrafast 6
|
|
183
|
+
}
|
|
179
184
|
}
|
|
180
185
|
// residue: the bare Daybreak rolling aliases pin the documented 5.6-gen
|
|
181
186
|
// wire restrictions without carrying the gpt- prefix identity.
|
|
@@ -351,6 +351,8 @@ behavior {
|
|
|
351
351
|
alias "claude-opus-4-6" peer-id="claude-opus-4-6@default"
|
|
352
352
|
alias "claude-sonnet-4-5" peer-id="claude-sonnet-4-5@20250929"
|
|
353
353
|
alias "claude-sonnet-4-6" peer-id="claude-sonnet-4-6@default"
|
|
354
|
+
alias "claude-opus-5-5" peer-id="claude-opus-5-5@default"
|
|
355
|
+
alias "claude-sonnet-5-5" peer-id="claude-sonnet-5-5@default"
|
|
354
356
|
}
|
|
355
357
|
// SuperGrok surfaces a few models under IDs that differ from their public
|
|
356
358
|
// xai equivalent, so the exact-id price mirror misses them.
|
|
@@ -88,6 +88,24 @@ collapse {
|
|
|
88
88
|
mode "budget"
|
|
89
89
|
efforts "minimal" "low" "medium" "high"
|
|
90
90
|
}
|
|
91
|
+
variant-family "google-antigravity" "claude-opus-5-5" name="Claude Opus 5.5" {
|
|
92
|
+
members "claude-opus-5-5-low" "claude-opus-5-5-medium" "claude-opus-5-5-high"
|
|
93
|
+
route "low" "claude-opus-5-5-low"
|
|
94
|
+
route "medium" "claude-opus-5-5-medium"
|
|
95
|
+
route "high" "claude-opus-5-5-high"
|
|
96
|
+
mode "budget"
|
|
97
|
+
efforts "low" "medium" "high"
|
|
98
|
+
requires-effort #true
|
|
99
|
+
}
|
|
100
|
+
variant-family "google-antigravity" "claude-sonnet-5-5" name="Claude Sonnet 5.5" {
|
|
101
|
+
members "claude-sonnet-5-5-low" "claude-sonnet-5-5-medium" "claude-sonnet-5-5-high"
|
|
102
|
+
route "low" "claude-sonnet-5-5-low"
|
|
103
|
+
route "medium" "claude-sonnet-5-5-medium"
|
|
104
|
+
route "high" "claude-sonnet-5-5-high"
|
|
105
|
+
mode "budget"
|
|
106
|
+
efforts "low" "medium" "high"
|
|
107
|
+
requires-effort #true
|
|
108
|
+
}
|
|
91
109
|
variant-family "google-antigravity" "claude-sonnet-4-6" name="Claude Sonnet 4.6" {
|
|
92
110
|
members "claude-sonnet-4-6" "claude-sonnet-4-6-thinking"
|
|
93
111
|
mode "budget"
|