@oh-my-pi/pi-catalog 18.5.0 → 18.5.1
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 +25 -0
- package/dist/types/compat/collapse.d.ts +7 -0
- package/dist/types/provider-models/special.d.ts +6 -0
- package/dist/types/types.d.ts +15 -2
- package/package.json +4 -4
- package/src/compat/axes.ts +2 -2
- package/src/compat/collapse.ts +11 -0
- package/src/compat/resolve.ts +5 -4
- package/src/compat/rules/README.md +1 -1
- package/src/compat/rules/classes/anthropic.kdl +30 -0
- package/src/compat/rules/classes/glm.kdl +1 -1
- package/src/compat/rules/classes/kimi.kdl +7 -0
- package/src/compat/rules/classes/meta.kdl +4 -4
- package/src/compat/rules/classes/openai.kdl +7 -1
- package/src/compat/rules/providers/amazon-bedrock.kdl +0 -7
- package/src/compat/rules/providers/cursor.kdl +6 -8
- package/src/compat/rules/providers/google-antigravity.kdl +5 -1
- package/src/compat/rules/providers/meta.kdl +3 -3
- package/src/compat/rules/providers/ollama.kdl +3 -0
- package/src/compat/rules/providers/opencode-go.kdl +11 -0
- package/src/compat/rules/providers/tool-result-images.kdl +16 -0
- package/src/compat/rules/taxonomy/_collapse.kdl +34 -2
- package/src/compat/rules/taxonomy/kimi.kdl +5 -0
- package/src/compat/rules.json +1 -1
- package/src/discovery/cursor.ts +26 -3
- package/src/models.json +1 -1
- package/src/provider-models/cache-provider-id.ts +10 -4
- package/src/provider-models/cline-pass.ts +33 -0
- package/src/provider-models/openai-compat.ts +70 -15
- package/src/provider-models/special.ts +9 -2
- package/src/types.ts +20 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [18.5.1] - 2026-10-03
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added support for listing models from Codex-compatible gateways through openaiCodexModelManagerOptions.baseUrl, with discovery caches isolated per endpoint.
|
|
10
|
+
- Exposed the max reasoning-effort tier for Muse Spark 1.3 contributor models on Meta and Muse Code providers.
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Added full configurable reasoning-effort ladders for ClinePass DeepSeek V4.1 Flash Free and Muse Spark 1.3 Contributor Free models.
|
|
15
|
+
- Recognize bare and provider-qualified k3 and k3-256k selectors as Kimi K3, enabling K3-specific catalog policies and replace-edit fallback behavior while preserving explicit edit-mode overrides.
|
|
16
|
+
- Updated Fireworks model pricing to use Fireworks-specific rates, correcting missing and inaccurate costs for supported models.
|
|
17
|
+
- Updated Fireworks fast-model listings to replace retired models with glm-5.3-fast and kimi-k3-fast; GLM-5.3 Fast now exposes low, high, and max reasoning levels on Fireworks, Baseten, and Vercel AI Gateway.
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- Fixed image input for OpenAI models used through custom Amazon Bedrock Converse providers when images are read through tools.
|
|
22
|
+
- Fixed local Ollama thinking models continuing to reason when thinking was disabled, reducing delays such as slow session-title generation.
|
|
23
|
+
- Fixed reasoning-level availability for OpenCode Go models so unsupported levels are no longer offered and reasoning can be disabled where supported.
|
|
24
|
+
- Fixed Anthropic-compatible Claude Opus 5.5 sessions failing after tool use or system-prompt changes.
|
|
25
|
+
- Fixed Cursor Grok 4.5 and 4.6 model selectors and overrides intermittently resolving to inconsistent model IDs.
|
|
26
|
+
- Fixed Google Antigravity Gemini 3.1 Flash Image being recognized as an image-capable model for image roles and fallback chains.
|
|
27
|
+
- Fixed GitHub Copilot base models reporting an incorrect long-context window when a separate -1m model is available.
|
|
28
|
+
- Fixed newer OpenAI and Anthropic model families being incorrectly marked as accepting sampling parameters when accessed through compatible providers such as Amazon Bedrock, Google, Devin, or OpenRouter; explicit compatibility overrides continue to take precedence.
|
|
29
|
+
|
|
5
30
|
## [18.5.0] - 2026-10-03
|
|
6
31
|
|
|
7
32
|
### Added
|
|
@@ -102,6 +102,13 @@ export interface VariantCollapseTable {
|
|
|
102
102
|
* Discovery uses this accessor to preserve injectable table seams.
|
|
103
103
|
*/
|
|
104
104
|
export declare function reviewedCollapseTable(provider: string): VariantCollapseTable | undefined;
|
|
105
|
+
/**
|
|
106
|
+
* Logical id of the reviewed `provider` family claiming `memberId` as a member
|
|
107
|
+
* or extra alias, or `undefined` when no reviewed family owns it. Cursor's rich
|
|
108
|
+
* discovery names lanes with it so they keep the id the legacy-slug collapse
|
|
109
|
+
* (and the bundled catalog) assigns.
|
|
110
|
+
*/
|
|
111
|
+
export declare function reviewedVariantFamilyId(provider: string, memberId: string): string | undefined;
|
|
105
112
|
/**
|
|
106
113
|
* The global automatic rule: derive an `X` + `X-thinking` family for every
|
|
107
114
|
* pair where both ids are live in `specs` (trailing or infix token). Gates:
|
|
@@ -24,6 +24,12 @@ export interface OpenAICodexModelManagerConfig {
|
|
|
24
24
|
* keeps the previous/bundled catalog instead.
|
|
25
25
|
*/
|
|
26
26
|
resolveAccounts?: () => Promise<readonly OpenAICodexAccount[] | null>;
|
|
27
|
+
/**
|
|
28
|
+
* Codex backend base URL (e.g. a Codex-compatible gateway from `models.yml`).
|
|
29
|
+
* Defaults to the official ChatGPT backend. Also scopes the discovery cache,
|
|
30
|
+
* so a gateway roster never serves the official endpoint and vice versa.
|
|
31
|
+
*/
|
|
32
|
+
baseUrl?: string;
|
|
27
33
|
clientVersion?: string;
|
|
28
34
|
fetch?: FetchImpl;
|
|
29
35
|
}
|
package/dist/types/types.d.ts
CHANGED
|
@@ -651,6 +651,12 @@ export interface BedrockCompat {
|
|
|
651
651
|
* `PI_OPENAI_STREAM_IDLE_TIMEOUT_MS` alias, then the 300s default.
|
|
652
652
|
*/
|
|
653
653
|
streamIdleTimeoutMs?: number;
|
|
654
|
+
/**
|
|
655
|
+
* Whether the served model accepts explicit sampling parameters
|
|
656
|
+
* (`temperature`, `topP`, …). Class rules set `false` for model lines that
|
|
657
|
+
* reject them on every host. Unassigned: accepted.
|
|
658
|
+
*/
|
|
659
|
+
supportsSamplingParams?: boolean;
|
|
654
660
|
/**
|
|
655
661
|
* Whether the model accepts a forced `toolChoice` (`any` / `tool`). Claude
|
|
656
662
|
* Opus/Sonnet 5.5 reject it outright; the request builder downgrades forced
|
|
@@ -666,6 +672,8 @@ export interface ResolvedBedrockCompat {
|
|
|
666
672
|
supportsLongPromptCacheRetention: boolean;
|
|
667
673
|
promptCacheMinimumTokens: number;
|
|
668
674
|
promptCacheMaximumCheckpoints: number;
|
|
675
|
+
/** See {@link BedrockCompat.supportsSamplingParams}. */
|
|
676
|
+
supportsSamplingParams?: boolean;
|
|
669
677
|
supportsForcedToolChoice: boolean;
|
|
670
678
|
/**
|
|
671
679
|
* Stream-watchdog idle-timeout fallback in ms for hosts with no keepalive
|
|
@@ -918,9 +926,11 @@ export interface DevinCompat {
|
|
|
918
926
|
modelRouter?: boolean;
|
|
919
927
|
/** Whether the upstream model supports native parallel tool calls. */
|
|
920
928
|
supportsParallelToolCalls?: boolean;
|
|
929
|
+
/** See {@link BedrockCompat.supportsSamplingParams}. */
|
|
930
|
+
supportsSamplingParams?: boolean;
|
|
921
931
|
}
|
|
922
932
|
/** Fully-resolved devin-agent compat view. */
|
|
923
|
-
export type ResolvedDevinCompat = Required<DevinCompat>;
|
|
933
|
+
export type ResolvedDevinCompat = Required<Omit<DevinCompat, "supportsSamplingParams">> & Pick<DevinCompat, "supportsSamplingParams">;
|
|
924
934
|
/**
|
|
925
935
|
* Compatibility settings for the Google API family (google-generative-ai,
|
|
926
936
|
* google-vertex, google-gemini-cli). Class-driven defaults come from the
|
|
@@ -955,13 +965,16 @@ export interface GoogleCompat {
|
|
|
955
965
|
stripImageInput?: boolean;
|
|
956
966
|
/** Thinking-loop watchdog guard family applied to streamed reasoning. */
|
|
957
967
|
thinkingLoopGuard?: "gemini" | "deepseek" | "xai";
|
|
968
|
+
/** See {@link BedrockCompat.supportsSamplingParams}. */
|
|
969
|
+
supportsSamplingParams?: boolean;
|
|
958
970
|
}
|
|
959
971
|
/** Fully-resolved google-API compat view, materialized once by `buildModel`. */
|
|
960
|
-
export type ResolvedGoogleCompat = Required<Omit<GoogleCompat, "streamFirstEventTimeoutMs" | "streamIdleTimeoutMs" | "thinkingLoopGuard" | "antigravityUsageLabel">> & {
|
|
972
|
+
export type ResolvedGoogleCompat = Required<Omit<GoogleCompat, "streamFirstEventTimeoutMs" | "streamIdleTimeoutMs" | "thinkingLoopGuard" | "antigravityUsageLabel" | "supportsSamplingParams">> & {
|
|
961
973
|
streamFirstEventTimeoutMs?: number;
|
|
962
974
|
streamIdleTimeoutMs?: number;
|
|
963
975
|
thinkingLoopGuard?: GoogleCompat["thinkingLoopGuard"];
|
|
964
976
|
antigravityUsageLabel?: string;
|
|
977
|
+
supportsSamplingParams?: boolean;
|
|
965
978
|
};
|
|
966
979
|
/** Sparse, user-authored compat overrides for a given API (models.json / config vocabulary). */
|
|
967
980
|
export type CompatConfigOf<TApi extends Api> = TApi extends "openai-completions" | "openrouter" | "openai-responses" | "azure-openai-responses" | "openai-codex-responses" ? OpenAICompat : TApi extends "anthropic-messages" ? AnthropicCompat : TApi extends "bedrock-converse-stream" ? BedrockCompat : TApi extends "devin-agent" ? DevinCompat : TApi extends "google-generative-ai" | "google-vertex" | "google-gemini-cli" ? GoogleCompat : undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oh-my-pi/pi-catalog",
|
|
3
|
-
"version": "18.5.
|
|
3
|
+
"version": "18.5.1",
|
|
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.5.
|
|
97
|
-
"@oh-my-pi/pi-utils": "18.5.
|
|
96
|
+
"@oh-my-pi/omptype": "18.5.1",
|
|
97
|
+
"@oh-my-pi/pi-utils": "18.5.1"
|
|
98
98
|
},
|
|
99
99
|
"devDependencies": {
|
|
100
100
|
"@bgotink/kdl": "0.4.0",
|
|
101
|
-
"@oh-my-pi/pi-ai": "18.5.
|
|
101
|
+
"@oh-my-pi/pi-ai": "18.5.1",
|
|
102
102
|
"@types/bun": "^1.3.14"
|
|
103
103
|
},
|
|
104
104
|
"engines": {
|
package/src/compat/axes.ts
CHANGED
|
@@ -293,7 +293,7 @@ export const AXES: Readonly<Record<string, AxisDef>> = {
|
|
|
293
293
|
"stream-idle-timeout-ms": wire("streamIdleTimeoutMs", [...OAI, "anthropic", "bedrock", "google"]),
|
|
294
294
|
"strip-image-input": wire("stripImageInput", [...OAI, "anthropic", "google"]),
|
|
295
295
|
"supports-forced-tool-choice": wire("supportsForcedToolChoice", [...OAI, "anthropic", "bedrock"]),
|
|
296
|
-
"supports-sampling-params": wire("supportsSamplingParams", [...OAI, "anthropic"]),
|
|
296
|
+
"supports-sampling-params": wire("supportsSamplingParams", [...OAI, "anthropic", "bedrock", "devin", "google"]),
|
|
297
297
|
"thinking-loop-guard": wire("thinkingLoopGuard", [...OAI, "anthropic", "google"], "scalar", [
|
|
298
298
|
"gemini",
|
|
299
299
|
"deepseek",
|
|
@@ -304,7 +304,7 @@ export const AXES: Readonly<Record<string, AxisDef>> = {
|
|
|
304
304
|
"thinking-default-level": { key: "defaultLevel", set: "thinking", shape: "scalar", values: EFFORTS },
|
|
305
305
|
"thinking-effort-budgets": { key: "effortBudgets", set: "thinking", shape: "object" },
|
|
306
306
|
"thinking-effort-map": { key: "effortMap", set: "thinking", shape: "object" },
|
|
307
|
-
"thinking-efforts": { key: "efforts", set: "thinking", shape: "array", values: EFFORTS },
|
|
307
|
+
"thinking-efforts": { key: "efforts", set: "thinking", shape: "array", values: EFFORTS, emptyArray: true },
|
|
308
308
|
"thinking-mode": {
|
|
309
309
|
key: "mode",
|
|
310
310
|
set: "thinking",
|
package/src/compat/collapse.ts
CHANGED
|
@@ -490,6 +490,17 @@ export function reviewedCollapseTable(provider: string): VariantCollapseTable |
|
|
|
490
490
|
return REVIEWED_COLLAPSE_TABLES[provider] ?? REVIEWED_COLLAPSE_TABLES[provider.toLowerCase()];
|
|
491
491
|
}
|
|
492
492
|
|
|
493
|
+
/**
|
|
494
|
+
* Logical id of the reviewed `provider` family claiming `memberId` as a member
|
|
495
|
+
* or extra alias, or `undefined` when no reviewed family owns it. Cursor's rich
|
|
496
|
+
* discovery names lanes with it so they keep the id the legacy-slug collapse
|
|
497
|
+
* (and the bundled catalog) assigns.
|
|
498
|
+
*/
|
|
499
|
+
export function reviewedVariantFamilyId(provider: string, memberId: string): string | undefined {
|
|
500
|
+
const table = reviewedCollapseTable(provider);
|
|
501
|
+
return table ? getAliasIndex(table).resolve(memberId.trim()) : undefined;
|
|
502
|
+
}
|
|
503
|
+
|
|
493
504
|
/**
|
|
494
505
|
* The global automatic rule: derive an `X` + `X-thinking` family for every
|
|
495
506
|
* pair where both ids are live in `specs` (trailing or infix token). Gates:
|
package/src/compat/resolve.ts
CHANGED
|
@@ -179,7 +179,7 @@ function overlayEffortMapAxis(
|
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
function effortList(value: unknown): readonly Effort[] | undefined {
|
|
182
|
-
if (!Array.isArray(value)
|
|
182
|
+
if (!Array.isArray(value)) return undefined;
|
|
183
183
|
const out: Effort[] = [];
|
|
184
184
|
for (const entry of value) {
|
|
185
185
|
const effort = THINKING_EFFORTS.find(candidate => candidate === entry);
|
|
@@ -505,7 +505,7 @@ function detectOpenAICompat(
|
|
|
505
505
|
// API-conditional: this completions-only Copilot exclusion cannot be a
|
|
506
506
|
// provider rule without changing Copilot Responses rows.
|
|
507
507
|
supportsReasoningParams: provider !== "github-copilot",
|
|
508
|
-
supportsSamplingParams:
|
|
508
|
+
supportsSamplingParams: true,
|
|
509
509
|
supportsPenaltyAndStopParams: !(isGrok && reasoningCapable),
|
|
510
510
|
reasoningEffortMap: {},
|
|
511
511
|
supportsUsageInStreaming: !isCerebrasHost,
|
|
@@ -759,7 +759,7 @@ function resolveOpenAIResponsesPolicy(
|
|
|
759
759
|
thinkingLoopGuard: undefined,
|
|
760
760
|
reasoningEffortMap: {},
|
|
761
761
|
supportsReasoningParams: true,
|
|
762
|
-
supportsSamplingParams:
|
|
762
|
+
supportsSamplingParams: true,
|
|
763
763
|
supportsPenaltyAndStopParams: !isXaiHost,
|
|
764
764
|
thinkingFormat,
|
|
765
765
|
reasoningDisableMode: resolveReasoningDisableMode(thinkingFormat),
|
|
@@ -906,7 +906,7 @@ function resolveAnthropicPolicy(
|
|
|
906
906
|
supportsThinkingBindingControls: false,
|
|
907
907
|
supportsBetweenToolsThinking: false,
|
|
908
908
|
supportsForcedToolChoice: !requiresThinkingEnabled && !facts.family("fable", "mythos"),
|
|
909
|
-
supportsSamplingParams:
|
|
909
|
+
supportsSamplingParams: true,
|
|
910
910
|
requiresToolResultId: false,
|
|
911
911
|
requiresThinkingEnabled,
|
|
912
912
|
replayUnsignedThinking:
|
|
@@ -1162,6 +1162,7 @@ function resolveThinkingPolicy<TApi extends Api>(
|
|
|
1162
1162
|
if (compat !== undefined && "trustExplicitThinkingOnly" in compat && compat.trustExplicitThinkingOnly === true) {
|
|
1163
1163
|
return undefined;
|
|
1164
1164
|
}
|
|
1165
|
+
if (rule.efforts?.length === 0) return undefined;
|
|
1165
1166
|
const config: ThinkingConfig = {
|
|
1166
1167
|
mode: rule.mode ?? defaultThinkingMode(spec, facts),
|
|
1167
1168
|
efforts: rule.efforts ?? fallbackEfforts(spec, compat),
|
|
@@ -209,7 +209,7 @@ The directive vocabulary is closed and lives in **`src/compat/axes.ts`** — one
|
|
|
209
209
|
The three value shapes are:
|
|
210
210
|
|
|
211
211
|
- **Scalar**: exactly one KDL boolean, integer, float, or string argument and no children. `#null` is rejected.
|
|
212
|
-
- **Array**: one or more scalar arguments and no children; it resolves to a JSON array. Axes marked `emptyArray` in `axes.ts` also accept a bare directive, which assigns an explicit empty list (`region-upstreams-eu` with no arguments: the region never serves the model).
|
|
212
|
+
- **Array**: one or more scalar arguments and no children; it resolves to a JSON array. Axes marked `emptyArray` in `axes.ts` also accept a bare directive, which assigns an explicit empty list (`region-upstreams-eu` with no arguments: the region never serves the model). Bare `thinking-efforts` keeps a reasoning-capable deployment without selectable effort tiers off the effort dial.
|
|
213
213
|
- **Object**: no arguments and a child block, including an empty block. Child names are kebab-case: an axis-directive spelling compiles to its resolved axis key (`template-reasoning-effort` → `qwenTemplateReasoningEffort`), anything else converts mechanically (`input-threshold` → `inputThreshold`); camelCase names are a compile error. `extra-body` payloads (top-level or nested) are the exception — their child names are literal wire JSON keys copied verbatim (`enable_thinking`). Each child is either one scalar or another object; arrays are not representable inside an object payload.
|
|
214
214
|
|
|
215
215
|
A rule cannot assign the same resolved axis twice in one block.
|
|
@@ -7,6 +7,30 @@ class "anthropic" {
|
|
|
7
7
|
thinking-prefix-binding #true
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
|
+
// Adaptive Claude (Opus 4.7+, Sonnet/Fable/Mythos 5+) rejects explicit
|
|
11
|
+
// sampling params (`temperature`, `top_p`, `top_k`) with a 400 on every
|
|
12
|
+
// serving host. The `<10` bound keeps whole-number revisions such as
|
|
13
|
+
// `claude-opus-45` (Opus 4.5) out of the range.
|
|
14
|
+
family "opus" {
|
|
15
|
+
revision ">=4.7 <10" {
|
|
16
|
+
supports-sampling-params #false
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
family "sonnet" {
|
|
20
|
+
revision ">=5 <10" {
|
|
21
|
+
supports-sampling-params #false
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
family "fable" {
|
|
25
|
+
revision ">=5 <10" {
|
|
26
|
+
supports-sampling-params #false
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
family "mythos" {
|
|
30
|
+
revision ">=5 <10" {
|
|
31
|
+
supports-sampling-params #false
|
|
32
|
+
}
|
|
33
|
+
}
|
|
10
34
|
// On-demand compaction (compact-2026-09-04) works on the Claude API, Vertex,
|
|
11
35
|
// and Amazon Bedrock's `/anthropic` routes, not Bedrock Converse.
|
|
12
36
|
// Foundry / Claude Platform on AWS are first-party Anthropic routes whose
|
|
@@ -145,6 +169,12 @@ class "anthropic" {
|
|
|
145
169
|
revision ">=5" {
|
|
146
170
|
supports-per-message-effort #true
|
|
147
171
|
}
|
|
172
|
+
// Opus 5.5 is prefix-bound like Sonnet 5.5; without `drop_block` a
|
|
173
|
+
// changed system prompt or tool set fails the replay with a 400.
|
|
174
|
+
// Bounded for the same reason as the forced-tool-choice rule above.
|
|
175
|
+
revision ">=5.5 <6" {
|
|
176
|
+
supports-thinking-binding-controls #true
|
|
177
|
+
}
|
|
148
178
|
}
|
|
149
179
|
}
|
|
150
180
|
on "aimlapi" "gitlab-duo" "kilo" "nanogpt" "venice" {
|
|
@@ -107,7 +107,7 @@ class "glm" {
|
|
|
107
107
|
// the intentional overlap with census host-dialect residues such as
|
|
108
108
|
// baseten's `zai-org/GLM-5*`.
|
|
109
109
|
models "*glm-5.3" "*glm-5.3-air" "*glm-5.3-turbo" "*glm-5.3-flash" "*glm-5.3:*" \
|
|
110
|
-
"*glm-5.3-flash-uncensored" "*glm-5.3-free" "*glm-5.3-highspeed" "*glm-5.3-flash-lab" priority=10 {
|
|
110
|
+
"*glm-5.3-flash-uncensored" "*glm-5.3-free" "*glm-5.3-highspeed" "*glm-5.3-fast" "*glm-5.3-flash-lab" priority=10 {
|
|
111
111
|
thinking-default-level "max"
|
|
112
112
|
thinking-efforts "low" "high" "max"
|
|
113
113
|
thinking-requires-effort #true
|
|
@@ -115,5 +115,12 @@ class "kimi" {
|
|
|
115
115
|
native-kimi-k3-reasoning #true
|
|
116
116
|
clamp-output-to-model-max #true
|
|
117
117
|
}
|
|
118
|
+
// Native K3 accepts forced tools on the Anthropic surface too;
|
|
119
|
+
// omitting thinking leaves its mandatory provider default intact.
|
|
120
|
+
on-api "anthropic-messages" {
|
|
121
|
+
family "k3" {
|
|
122
|
+
supports-forced-tool-choice #true
|
|
123
|
+
}
|
|
124
|
+
}
|
|
118
125
|
}
|
|
119
126
|
}
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
class "meta" {
|
|
4
4
|
// Exact ids on purpose: only an exact selector upgrades hosts whose
|
|
5
5
|
// discovery misreports a Muse Spark revision as non-reasoning.
|
|
6
|
-
// muse-spark-1.3
|
|
7
|
-
// keep the 5-tier ladder.
|
|
8
|
-
models "muse-spark-1.3" {
|
|
6
|
+
// muse-spark-1.3 standard and contributor expose the max effort tier;
|
|
7
|
+
// older revisions keep the 5-tier ladder.
|
|
8
|
+
models "muse-spark-1.3" "muse-spark-1.3-contributor" {
|
|
9
9
|
thinking-efforts "minimal" "low" "medium" "high" "xhigh" "max"
|
|
10
10
|
thinking-mode "effort"
|
|
11
11
|
}
|
|
12
|
-
models "muse-spark-1.1" "muse-spark-1.2" "muse-spark-1.2-contributor"
|
|
12
|
+
models "muse-spark-1.1" "muse-spark-1.2" "muse-spark-1.2-contributor" {
|
|
13
13
|
thinking-efforts "minimal" "low" "medium" "high" "xhigh"
|
|
14
14
|
thinking-mode "effort"
|
|
15
15
|
}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
// Model-lineage compat for "openai"; regenerated from the frozen census using class taxonomy selectors.
|
|
2
2
|
|
|
3
3
|
class "openai" {
|
|
4
|
-
// Replaces the o-series mandatory-reasoning fallback.
|
|
4
|
+
// Replaces the o-series mandatory-reasoning fallback. o-series and GPT-5+
|
|
5
|
+
// reject explicit sampling params (`temperature`, `top_p`) with a 400 on
|
|
6
|
+
// every serving host (#5606), whichever API fronts them.
|
|
5
7
|
family "o-series" {
|
|
6
8
|
thinking-requires-effort #true
|
|
9
|
+
supports-sampling-params #false
|
|
10
|
+
}
|
|
11
|
+
revision ">=5" {
|
|
12
|
+
supports-sampling-params #false
|
|
7
13
|
}
|
|
8
14
|
// GPT wire ladders are model generations, not host contracts: <5.2 keeps
|
|
9
15
|
// the classic four-tier scale, 5.2+ drops minimal for xhigh, and 5.6+
|
|
@@ -36,8 +36,6 @@ provider "amazon-bedrock" {
|
|
|
36
36
|
}
|
|
37
37
|
class "openai" {
|
|
38
38
|
thinking-mode "effort"
|
|
39
|
-
// OpenAI models reject Converse image blocks nested inside toolResult content.
|
|
40
|
-
requires-tool-result-image-hoisting #true
|
|
41
39
|
}
|
|
42
40
|
class "deepseek" {
|
|
43
41
|
requires-reasoning-content-for-all-assistant-turns #true
|
|
@@ -51,11 +49,6 @@ provider "amazon-bedrock" {
|
|
|
51
49
|
class "unknown" {
|
|
52
50
|
thinking-efforts "minimal" "low" "medium" "high"
|
|
53
51
|
thinking-mode "budget"
|
|
54
|
-
// Opaque application-inference-profile ARNs carry no vendor signal, so an
|
|
55
|
-
// OpenAI-backed profile classifies here and would otherwise nest images in
|
|
56
|
-
// toolResult content and hit the same rejection. Hoisting is accepted by
|
|
57
|
-
// every Converse model measured, so it is the safe default for unknowns.
|
|
58
|
-
requires-tool-result-image-hoisting #true
|
|
59
52
|
}
|
|
60
53
|
// residue: taxonomy ranks and exact globs do not isolate these models.
|
|
61
54
|
models "moonshot.kimi-k2-thinking" {
|
|
@@ -28,12 +28,14 @@ provider "cursor" {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
// GetUsableModels advertises no input modalities or context windows.
|
|
31
|
-
//
|
|
32
|
-
//
|
|
31
|
+
// Reviewed full-context K3 aliases are multimodal and 1M-context.
|
|
32
|
+
// K3 family identity alone does not verify other Cursor SKUs such as k3-256k.
|
|
33
33
|
class "kimi" {
|
|
34
34
|
family "k3" {
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
models "*kimi-k3*" "k3" "*/k3" {
|
|
36
|
+
input-modalities "text" "image"
|
|
37
|
+
context-window-floor 1000000
|
|
38
|
+
}
|
|
37
39
|
}
|
|
38
40
|
family "k2.7-code" {
|
|
39
41
|
// Cursor advertised Kimi K2.7 Code Context window 262k.
|
|
@@ -56,10 +58,6 @@ provider "cursor" {
|
|
|
56
58
|
context-window-floor 272000
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
|
-
models "k3" "*/k3" {
|
|
60
|
-
input-modalities "text" "image"
|
|
61
|
-
context-window-floor 1000000
|
|
62
|
-
}
|
|
63
61
|
models "default" {
|
|
64
62
|
context-window-floor 256000
|
|
65
63
|
}
|
|
@@ -64,7 +64,11 @@ provider "google-antigravity" {
|
|
|
64
64
|
models "gemini-3-pro" {
|
|
65
65
|
thinking-mode "google-level"
|
|
66
66
|
}
|
|
67
|
-
|
|
67
|
+
// Antigravity discovery lists image SKUs beside chat models with no output
|
|
68
|
+
// modality, so they would build as chat. Accounts advertise either SKU in
|
|
69
|
+
// `imageGenerationModelIds` (gemini-3.1-flash-image replaced
|
|
70
|
+
// gemini-3-pro-image on some accounts, #11106).
|
|
71
|
+
models "gemini-3-pro-image" "gemini-3.1-flash-image" {
|
|
68
72
|
kind "image"
|
|
69
73
|
}
|
|
70
74
|
// residue: taxonomy ranks and exact globs do not isolate these models.
|
|
@@ -42,8 +42,8 @@ provider "meta" {
|
|
|
42
42
|
supports-reasoning-effort #true
|
|
43
43
|
include-encrypted-reasoning #true
|
|
44
44
|
}
|
|
45
|
-
// Meta documents the `max` effort tier for Muse Spark 1.3
|
|
46
|
-
// contributor tiers
|
|
45
|
+
// Meta documents the `max` effort tier for Muse Spark 1.3 standard and
|
|
46
|
+
// contributor tiers; other revisions stay on the 5-tier ladder.
|
|
47
47
|
model "muse-spark-1.3" name="Muse Spark 1.3" {
|
|
48
48
|
reasoning #true
|
|
49
49
|
input "text" "image"
|
|
@@ -60,7 +60,7 @@ provider "meta" {
|
|
|
60
60
|
cost input=0.1 output=0.2 cache-read=0.002 cache-write=0
|
|
61
61
|
limits context=1048576 max-tokens=131072
|
|
62
62
|
thinking-mode "effort"
|
|
63
|
-
thinking-efforts "minimal" "low" "medium" "high" "xhigh"
|
|
63
|
+
thinking-efforts "minimal" "low" "medium" "high" "xhigh" "max"
|
|
64
64
|
supports-reasoning-effort #true
|
|
65
65
|
include-encrypted-reasoning #true
|
|
66
66
|
}
|
|
@@ -13,6 +13,9 @@ provider "ollama" priority=-1 {
|
|
|
13
13
|
// Replaces both Ollama empty-length finish baselines.
|
|
14
14
|
empty-length-finish-is-context-error #true
|
|
15
15
|
thinking-efforts "low" "medium" "high" "max"
|
|
16
|
+
// Ollama's OpenAI-compatible endpoints accept effort "none" to turn thinking
|
|
17
|
+
// off; the lowest ladder effort ("low") still thinks on e.g. Gemma 4.
|
|
18
|
+
reasoning-disable-mode "none-effort"
|
|
16
19
|
// Ollama continues a trailing assistant turn verbatim on /api/chat and
|
|
17
20
|
// /v1/responses alike; callers use it to commit an output prefix.
|
|
18
21
|
supports-assistant-prefill #true
|
|
@@ -78,6 +78,17 @@ provider "opencode-go" {
|
|
|
78
78
|
thinking-mode "effort"
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
+
// LongCat exposes a reasoning toggle, not selectable effort tiers.
|
|
82
|
+
// Off uses the gateway's boolean reasoning switch, never a fake lowest tier.
|
|
83
|
+
models "longcat-2.5-preview-free" {
|
|
84
|
+
thinking-efforts
|
|
85
|
+
supports-reasoning-effort #false
|
|
86
|
+
reasoning-disable-mode "openrouter-enabled-false"
|
|
87
|
+
}
|
|
88
|
+
// Space Bunny publishes low through max, without the generic minimal tier.
|
|
89
|
+
models "space-bunny-free" {
|
|
90
|
+
thinking-efforts "low" "medium" "high" "xhigh" "max"
|
|
91
|
+
}
|
|
81
92
|
// residue: taxonomy ranks and exact globs do not isolate these models.
|
|
82
93
|
models "glm-5" "glm-5.1" {
|
|
83
94
|
thinking-efforts "minimal" "low" "medium" "high" "xhigh"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Converse rejects image blocks nested inside toolResult content for OpenAI models,
|
|
2
|
+
// so their tool-result images move into sibling user blocks. The rule is scoped by
|
|
3
|
+
// adapter, not provider name, so a custom provider on bedrock-converse-stream gets
|
|
4
|
+
// it too.
|
|
5
|
+
on-api "bedrock-converse-stream" {
|
|
6
|
+
class "openai" {
|
|
7
|
+
requires-tool-result-image-hoisting #true
|
|
8
|
+
}
|
|
9
|
+
// Opaque application-inference-profile ARNs carry no vendor signal, so an
|
|
10
|
+
// OpenAI-backed profile classifies here and would otherwise nest images in
|
|
11
|
+
// toolResult content and hit the same rejection. Hoisting is accepted by
|
|
12
|
+
// every Converse model measured, so it is the safe default for unknowns.
|
|
13
|
+
class "unknown" {
|
|
14
|
+
requires-tool-result-image-hoisting #true
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -639,6 +639,12 @@ collapse {
|
|
|
639
639
|
// Retired id: the Codex image model was relabeled to what the backend runs
|
|
640
640
|
// (gpt-image-2-codex); keep saved `openai-codex/gpt-image-1` roles resolving.
|
|
641
641
|
provider-alias "openai-codex" "gpt-image-1" "gpt-image-2"
|
|
642
|
+
// Retired rich-lane ids: AvailableModels discovery named Grok 4.5/4.6 lanes
|
|
643
|
+
// after the unprefixed model name before they adopted these family ids
|
|
644
|
+
// (#14164). Family `aliases` (not `provider-alias`) so saved selectors and
|
|
645
|
+
// models.yml `modelOverrides` keyed by the old ids both migrate. Grok 4.6
|
|
646
|
+
// is spelled out instead of riding the `cursor-grok-{rev}` template: a
|
|
647
|
+
// templated `grok-{rev}` alias would also claim the live Grok 4.7+ ids.
|
|
642
648
|
variant-family "cursor" "cursor-grok-4.5" name="Grok 4.5" {
|
|
643
649
|
members "cursor-grok-4.5-low" "cursor-grok-4.5-medium" "cursor-grok-4.5-high"
|
|
644
650
|
route "low" "cursor-grok-4.5-low"
|
|
@@ -648,6 +654,7 @@ collapse {
|
|
|
648
654
|
efforts "low" "medium" "high"
|
|
649
655
|
requires-effort #true
|
|
650
656
|
default-member "cursor-grok-4.5-medium"
|
|
657
|
+
aliases "grok-4.5"
|
|
651
658
|
}
|
|
652
659
|
variant-family "cursor" "cursor-grok-4.5-fast" name="Grok 4.5 Fast" {
|
|
653
660
|
members "cursor-grok-4.5-low-fast" "cursor-grok-4.5-medium-fast" "cursor-grok-4.5-high-fast"
|
|
@@ -658,8 +665,33 @@ collapse {
|
|
|
658
665
|
efforts "low" "medium" "high"
|
|
659
666
|
requires-effort #true
|
|
660
667
|
default-member "cursor-grok-4.5-medium-fast"
|
|
668
|
+
aliases "grok-4.5-fast"
|
|
661
669
|
}
|
|
662
|
-
variant-family "cursor" "cursor-grok-
|
|
670
|
+
variant-family "cursor" "cursor-grok-4.6" name="Grok 4.6" {
|
|
671
|
+
members "cursor-grok-4.6-low" "cursor-grok-4.6-medium" "cursor-grok-4.6-high" "cursor-grok-4.6-xhigh"
|
|
672
|
+
route "low" "cursor-grok-4.6-low"
|
|
673
|
+
route "medium" "cursor-grok-4.6-medium"
|
|
674
|
+
route "high" "cursor-grok-4.6-high"
|
|
675
|
+
route "xhigh" "cursor-grok-4.6-xhigh"
|
|
676
|
+
mode "effort"
|
|
677
|
+
efforts "low" "medium" "high" "xhigh"
|
|
678
|
+
requires-effort #true
|
|
679
|
+
default-member "cursor-grok-4.6-medium"
|
|
680
|
+
aliases "grok-4.6"
|
|
681
|
+
}
|
|
682
|
+
variant-family "cursor" "cursor-grok-4.6-fast" name="Grok 4.6 Fast" {
|
|
683
|
+
members "cursor-grok-4.6-low-fast" "cursor-grok-4.6-medium-fast" "cursor-grok-4.6-high-fast" "cursor-grok-4.6-xhigh-fast"
|
|
684
|
+
route "low" "cursor-grok-4.6-low-fast"
|
|
685
|
+
route "medium" "cursor-grok-4.6-medium-fast"
|
|
686
|
+
route "high" "cursor-grok-4.6-high-fast"
|
|
687
|
+
route "xhigh" "cursor-grok-4.6-xhigh-fast"
|
|
688
|
+
mode "effort"
|
|
689
|
+
efforts "low" "medium" "high" "xhigh"
|
|
690
|
+
requires-effort #true
|
|
691
|
+
default-member "cursor-grok-4.6-medium-fast"
|
|
692
|
+
aliases "grok-4.6-fast"
|
|
693
|
+
}
|
|
694
|
+
variant-family "cursor" "cursor-grok-{rev}" name="Grok {rev}" revision=">=4.7" {
|
|
663
695
|
members "cursor-grok-{rev}-low" "cursor-grok-{rev}-medium" "cursor-grok-{rev}-high" "cursor-grok-{rev}-xhigh"
|
|
664
696
|
route "low" "cursor-grok-{rev}-low"
|
|
665
697
|
route "medium" "cursor-grok-{rev}-medium"
|
|
@@ -670,7 +702,7 @@ collapse {
|
|
|
670
702
|
requires-effort #true
|
|
671
703
|
default-member "cursor-grok-{rev}-medium"
|
|
672
704
|
}
|
|
673
|
-
variant-family "cursor" "cursor-grok-{rev}-fast" name="Grok {rev} Fast" revision=">=4.
|
|
705
|
+
variant-family "cursor" "cursor-grok-{rev}-fast" name="Grok {rev} Fast" revision=">=4.7" {
|
|
674
706
|
members "cursor-grok-{rev}-low-fast" "cursor-grok-{rev}-medium-fast" "cursor-grok-{rev}-high-fast" "cursor-grok-{rev}-xhigh-fast"
|
|
675
707
|
route "low" "cursor-grok-{rev}-low-fast"
|
|
676
708
|
route "medium" "cursor-grok-{rev}-medium-fast"
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
class "kimi" {
|
|
2
2
|
namespace "moonshotai"
|
|
3
3
|
bounded "kimi"
|
|
4
|
+
// Kimi Code exposes bare K3 SKUs; selectors may include a provider namespace.
|
|
5
|
+
exact "k3"
|
|
6
|
+
exact "k3-256k"
|
|
4
7
|
|
|
5
8
|
family "k2" glob="*kimi-k2*"
|
|
6
9
|
family "k2.5" glob="*kimi-k2.5*" priority=10
|
|
@@ -13,6 +16,8 @@ class "kimi" {
|
|
|
13
16
|
family "k2.7-code" glob="*kimi-k2p7*code*" priority=10
|
|
14
17
|
family "k2-thinking" glob="*kimi-k2-thinking*" priority=20
|
|
15
18
|
family "k3" glob="*kimi-k3*"
|
|
19
|
+
family "k3" glob="k3"
|
|
20
|
+
family "k3" glob="k3-256k"
|
|
16
21
|
|
|
17
22
|
override id="kilo-kimi-k2-thinking-product" provider="kilo" model="kimi-k2-thinking" logical="moonshotai/kimi-k2-thinking" class="kimi" rationale="Oracle exposes this independently priced product rather than an effort route" provenance="fixtures/llm-oracle/catalog/models.normalized.json"
|
|
18
23
|
override id="openrouter-kimi-k2-thinking-product" provider="openrouter" model="kimi-k2-thinking" logical="moonshotai/kimi-k2-thinking" class="kimi" rationale="Oracle exposes this independently priced product rather than an effort route" provenance="fixtures/llm-oracle/catalog/models.normalized.json"
|