@oh-my-pi/pi-catalog 18.11.1 → 18.11.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 +27 -0
- package/dist/types/compat/axes.d.ts +1 -1
- package/dist/types/compat/request-size.d.ts +2 -1
- package/dist/types/compat/types.d.ts +2 -0
- package/dist/types/model-manager.d.ts +6 -0
- package/dist/types/types.d.ts +14 -2
- package/package.json +4 -4
- package/src/compat/axes.ts +11 -2
- package/src/compat/request-size.ts +3 -1
- package/src/compat/resolve.ts +10 -0
- package/src/compat/rules/README.md +1 -0
- package/src/compat/rules/auth/google-antigravity.kdl +1 -1
- package/src/compat/rules/providers/ollama-cloud.kdl +7 -0
- package/src/compat/rules/providers/openai-codex.kdl +5 -0
- package/src/compat/rules/providers/openrouter.kdl +10 -0
- package/src/compat/rules/providers/typesafe.kdl +3 -0
- package/src/compat/rules/runtime/behavior.kdl +7 -4
- package/src/compat/rules/taxonomy/openai.kdl +2 -0
- package/src/compat/rules.json +1 -1
- package/src/compat/types.ts +2 -0
- package/src/discovery/cursor.ts +3 -9
- package/src/discovery/devin.ts +2 -5
- package/src/model-manager.ts +41 -21
- package/src/models.json +1 -1
- package/src/provider-models/openai-compat.ts +8 -5
- package/src/provider-models/special.ts +1 -0
- package/src/types.ts +20 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [18.11.3] - 2026-10-16
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Renamed the built-in `google-antigravity` login option to "Google Antigravity (Gemini, Claude, GPT-OSS)" so it is distinguishable from similarly named third-party plugins and no longer implies support stops at Gemini 3 ([#15998](https://github.com/can1357/oh-my-pi/pull/15998) by [@savanne-kham](https://github.com/savanne-kham)).
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Fixed Command Code's `z-ai/glm-5.3-flash` failing every request with "not available on this endpoint": the catalog routes it to chat completions, the only endpoint Command Code lists for it ([#15922](https://github.com/can1357/oh-my-pi/pull/15922) by [@jasonharrison](https://github.com/jasonharrison))
|
|
14
|
+
- Fixed `/handoff` failing with `400 Provider returned error` on OpenRouter's hosted Muse Spark 1.x and Muse Wonder models: requests no longer send a `tool_choice` the upstream Meta backend rejects ([#15910](https://github.com/can1357/oh-my-pi/issues/15910))
|
|
15
|
+
- Fixed OpenCode Zen bringing back retired bundled models from an authoritative model cache, and dropping drop-listed models such as `gemini-3.7-flash` when a refresh fails after an upgrade ([#15770](https://github.com/can1357/oh-my-pi/pull/15770) by [@adi-IL](https://github.com/adi-IL))
|
|
16
|
+
|
|
17
|
+
## [18.11.2] - 2026-10-16
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- Added `keep-bundled-names` catalog attribute to preserve static model display names during discovery
|
|
22
|
+
- Updated `openai-codex` provider configuration to prevent model name regressions during live discovery
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- GPT Image models (`gpt-image-*`, `chatgpt-image-*`) now classify as their own `gpt-image` family instead of `gpt` or `chatgpt`, so GPT chat-model rules no longer apply to them ([#14619](https://github.com/can1357/oh-my-pi/pull/14619) by [@jimhester](https://github.com/jimhester))
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
|
|
30
|
+
- Fixed OpenCode Zen Gemini 4 Argon failing with an unsupported protocol; it now uses the native Gemini endpoint ([#15977](https://github.com/can1357/oh-my-pi/issues/15977)).
|
|
31
|
+
|
|
5
32
|
## [18.11.1] - 2026-10-15
|
|
6
33
|
|
|
7
34
|
### Fixed
|
|
@@ -16,7 +16,7 @@ export type AxisShape = "scalar" | "array" | "object";
|
|
|
16
16
|
/** Axis namespace: request-wire compat, thinking control surface, or catalog metadata. */
|
|
17
17
|
export type AxisSet = "wire" | "thinking" | "catalog";
|
|
18
18
|
/** Resolved compat record families a wire axis may be assigned onto. */
|
|
19
|
-
export type CompatRecordName = "openai" | "openai-responses" | "anthropic" | "bedrock" | "devin" | "google" | "request";
|
|
19
|
+
export type CompatRecordName = "openai" | "openai-responses" | "anthropic" | "bedrock" | "devin" | "google" | "request" | "ollama";
|
|
20
20
|
/** One axis definition: resolved key, namespace, shape, and applicability. */
|
|
21
21
|
export interface AxisDef {
|
|
22
22
|
/** Resolved camelCase field the directive assigns. */
|
|
@@ -7,7 +7,8 @@ import type { Model } from "../types.js";
|
|
|
7
7
|
*/
|
|
8
8
|
export declare function resolveInlineImageByteBudget(model: Model, officialEndpoint: boolean): number | undefined;
|
|
9
9
|
/**
|
|
10
|
-
* Most images one request to this deployment may carry, or `undefined` when no rule names the host.
|
|
10
|
+
* Most images one request to this deployment may carry, or `undefined` when no rule names the host. A configured
|
|
11
|
+
* `model.imageCountBudget` wins: the user knows the host behind a custom gateway. Otherwise the
|
|
11
12
|
* `official-image-count-budget` axis replaces `image-count-budget` only when `officialEndpoint` says the request
|
|
12
13
|
* reaches the model's official endpoint (see {@link resolveInlineImageByteBudget}); a rerouted endpoint keeps the
|
|
13
14
|
* provider's generic budget.
|
|
@@ -634,6 +634,8 @@ export interface CompiledProvider {
|
|
|
634
634
|
dynamicModelsAuthoritative?: boolean;
|
|
635
635
|
/** Generator backfills never copy reasoning/input/limits from same-id rows on other hosts. */
|
|
636
636
|
skipCrossProviderReferenceFills?: boolean;
|
|
637
|
+
/** Runtime discovery keeps a bundled row's display name instead of the live one. */
|
|
638
|
+
keepBundledNames?: boolean;
|
|
637
639
|
/** Present only for providers enrolled in `generate-models.ts` discovery. */
|
|
638
640
|
discovery?: CompiledProviderDiscovery;
|
|
639
641
|
/** Non-chat model kinds mapped to their runtime transport APIs. */
|
|
@@ -51,6 +51,12 @@ export interface ModelManagerOptions<TApi extends Api = Api, TModelsDevPayload =
|
|
|
51
51
|
* a zero discovery price is treated as unknown and the bundled rate is kept.
|
|
52
52
|
*/
|
|
53
53
|
dynamicCostAuthoritative?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* When true, a static row's display name wins over the cached or live row
|
|
56
|
+
* for the same id, so a model keeps one name before and after discovery.
|
|
57
|
+
* Set from the provider's `keep-bundled-names` catalog entry.
|
|
58
|
+
*/
|
|
59
|
+
keepStaticNames?: boolean;
|
|
54
60
|
/**
|
|
55
61
|
* When true, a fresh cache never satisfies an online-eligible refresh: the
|
|
56
62
|
* dynamic fetch always runs (an explicit `"offline"` strategy is still
|
package/dist/types/types.d.ts
CHANGED
|
@@ -1100,10 +1100,16 @@ export type ResolvedGoogleCompat = Required<Omit<GoogleCompat, "streamFirstEvent
|
|
|
1100
1100
|
maxImageDimension?: number;
|
|
1101
1101
|
maxImagePayloadBytes?: number;
|
|
1102
1102
|
};
|
|
1103
|
+
/** Ollama chat history compatibility resolved by the catalog. */
|
|
1104
|
+
export interface OllamaCompat {
|
|
1105
|
+
/** Omit assistant thinking when the deployment rejects it in history. */
|
|
1106
|
+
stripThinkingHistory?: boolean;
|
|
1107
|
+
}
|
|
1108
|
+
export type ResolvedOllamaCompat = Required<OllamaCompat>;
|
|
1103
1109
|
/** Sparse, user-authored compat overrides for a given API (models.json / config vocabulary). */
|
|
1104
|
-
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;
|
|
1110
|
+
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 : TApi extends "ollama-chat" ? OllamaCompat : undefined;
|
|
1105
1111
|
/** Resolved compat for a given API: complete record, materialized once by `buildModel`. */
|
|
1106
|
-
export type CompatOf<TApi extends Api> = TApi extends "openrouter" ? ResolvedOpenRouterCompat : TApi extends "openai-completions" ? ResolvedOpenAICompat : TApi extends "openai-responses" | "azure-openai-responses" | "openai-codex-responses" ? ResolvedOpenAIResponsesCompat : TApi extends "anthropic-messages" ? ResolvedAnthropicCompat : TApi extends "bedrock-converse-stream" ? ResolvedBedrockCompat : TApi extends "devin-agent" ? ResolvedDevinCompat : TApi extends "google-generative-ai" | "google-vertex" | "google-gemini-cli" ? ResolvedGoogleCompat : undefined;
|
|
1112
|
+
export type CompatOf<TApi extends Api> = TApi extends "openrouter" ? ResolvedOpenRouterCompat : TApi extends "openai-completions" ? ResolvedOpenAICompat : TApi extends "openai-responses" | "azure-openai-responses" | "openai-codex-responses" ? ResolvedOpenAIResponsesCompat : TApi extends "anthropic-messages" ? ResolvedAnthropicCompat : TApi extends "bedrock-converse-stream" ? ResolvedBedrockCompat : TApi extends "devin-agent" ? ResolvedDevinCompat : TApi extends "google-generative-ai" | "google-vertex" | "google-gemini-cli" ? ResolvedGoogleCompat : TApi extends "ollama-chat" ? ResolvedOllamaCompat : undefined;
|
|
1107
1113
|
/** Provider-native compaction endpoint configuration for one model. */
|
|
1108
1114
|
export interface RemoteCompactionConfig<TApi extends Api = Api> {
|
|
1109
1115
|
/** Enables provider-native compaction for providers not enabled by built-in policy. */
|
|
@@ -1280,6 +1286,12 @@ export interface Model<TApi extends Api = Api> {
|
|
|
1280
1286
|
* than OMP's general image pipeline. `stb` local backends reject WebP.
|
|
1281
1287
|
*/
|
|
1282
1288
|
imageInputDecoder?: "stb";
|
|
1289
|
+
/**
|
|
1290
|
+
* Most images one request may carry, from user configuration. Replaces the
|
|
1291
|
+
* catalog's `image-count-budget` for hosts no rule names, such as a custom
|
|
1292
|
+
* gateway in front of a vendor with a higher limit.
|
|
1293
|
+
*/
|
|
1294
|
+
imageCountBudget?: number;
|
|
1283
1295
|
/**
|
|
1284
1296
|
* Native provider tool-call support. `false` is the only unsupported signal:
|
|
1285
1297
|
* `true` and `undefined` both mean callers may use native tools. Catalog and
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oh-my-pi/pi-catalog",
|
|
3
|
-
"version": "18.11.
|
|
3
|
+
"version": "18.11.3",
|
|
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.11.
|
|
97
|
-
"@oh-my-pi/pi-utils": "18.11.
|
|
96
|
+
"@oh-my-pi/omptype": "18.11.3",
|
|
97
|
+
"@oh-my-pi/pi-utils": "18.11.3"
|
|
98
98
|
},
|
|
99
99
|
"devDependencies": {
|
|
100
100
|
"@bgotink/kdl": "0.4.0",
|
|
101
|
-
"@oh-my-pi/pi-ai": "18.11.
|
|
101
|
+
"@oh-my-pi/pi-ai": "18.11.3",
|
|
102
102
|
"@types/bun": "^1.3.14"
|
|
103
103
|
},
|
|
104
104
|
"engines": {
|
package/src/compat/axes.ts
CHANGED
|
@@ -20,7 +20,15 @@ export type AxisShape = "scalar" | "array" | "object";
|
|
|
20
20
|
export type AxisSet = "wire" | "thinking" | "catalog";
|
|
21
21
|
|
|
22
22
|
/** Resolved compat record families a wire axis may be assigned onto. */
|
|
23
|
-
export type CompatRecordName =
|
|
23
|
+
export type CompatRecordName =
|
|
24
|
+
| "openai"
|
|
25
|
+
| "openai-responses"
|
|
26
|
+
| "anthropic"
|
|
27
|
+
| "bedrock"
|
|
28
|
+
| "devin"
|
|
29
|
+
| "google"
|
|
30
|
+
| "request"
|
|
31
|
+
| "ollama";
|
|
24
32
|
|
|
25
33
|
/** One axis definition: resolved key, namespace, shape, and applicability. */
|
|
26
34
|
export interface AxisDef {
|
|
@@ -251,7 +259,7 @@ export const AXES: Readonly<Record<string, AxisDef>> = {
|
|
|
251
259
|
"requires-thinking-enabled": wire("requiresThinkingEnabled", ["anthropic"]),
|
|
252
260
|
"requires-tool-result-id": wire("requiresToolResultId", ["anthropic"]),
|
|
253
261
|
"signing-endpoint": wire("signingEndpoint", ["anthropic"]),
|
|
254
|
-
"strip-thinking-history": wire("stripThinkingHistory", ["anthropic"]),
|
|
262
|
+
"strip-thinking-history": wire("stripThinkingHistory", ["anthropic", "ollama"]),
|
|
255
263
|
"supports-context-management": wire("supportsContextManagement", ["anthropic"]),
|
|
256
264
|
"supports-output-effort": wire("supportsOutputEffort", ["anthropic"]),
|
|
257
265
|
"supports-eager-tool-input-streaming": wire("supportsEagerToolInputStreaming", ["anthropic"]),
|
|
@@ -596,6 +604,7 @@ export const AXES: Readonly<Record<string, AxisDef>> = {
|
|
|
596
604
|
|
|
597
605
|
/** Records applicable to each API family; used by `resolve.ts` when applying wire axes. */
|
|
598
606
|
export const API_COMPAT_RECORDS: Readonly<Record<string, readonly CompatRecordName[]>> = {
|
|
607
|
+
"ollama-chat": ["ollama"],
|
|
599
608
|
"openai-completions": ["openai"],
|
|
600
609
|
openrouter: ["openai", "openai-responses"],
|
|
601
610
|
"openai-responses": ["openai-responses"],
|
|
@@ -26,12 +26,14 @@ export function resolveInlineImageByteBudget(model: Model, officialEndpoint: boo
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
|
-
* Most images one request to this deployment may carry, or `undefined` when no rule names the host.
|
|
29
|
+
* Most images one request to this deployment may carry, or `undefined` when no rule names the host. A configured
|
|
30
|
+
* `model.imageCountBudget` wins: the user knows the host behind a custom gateway. Otherwise the
|
|
30
31
|
* `official-image-count-budget` axis replaces `image-count-budget` only when `officialEndpoint` says the request
|
|
31
32
|
* reaches the model's official endpoint (see {@link resolveInlineImageByteBudget}); a rerouted endpoint keeps the
|
|
32
33
|
* provider's generic budget.
|
|
33
34
|
*/
|
|
34
35
|
export function resolveImageCountBudget(model: Model, officialEndpoint: boolean): number | undefined {
|
|
36
|
+
if (model.imageCountBudget !== undefined) return model.imageCountBudget;
|
|
35
37
|
const policy = resolveCatalogPolicy(model);
|
|
36
38
|
const value = (officialEndpoint && policy.officialImageCountBudget) || policy.imageCountBudget;
|
|
37
39
|
return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : undefined;
|
package/src/compat/resolve.ts
CHANGED
|
@@ -27,6 +27,7 @@ import type {
|
|
|
27
27
|
ResolvedBedrockCompat,
|
|
28
28
|
ResolvedDevinCompat,
|
|
29
29
|
ResolvedGoogleCompat,
|
|
30
|
+
ResolvedOllamaCompat,
|
|
30
31
|
ResolvedOpenAICompat,
|
|
31
32
|
ResolvedOpenAIResponsesCompat,
|
|
32
33
|
ResolvedOpenAISharedCompat,
|
|
@@ -974,6 +975,13 @@ function resolveBedrockPolicy(spec: ModelSpec<"bedrock-converse-stream">, axes:
|
|
|
974
975
|
return compat;
|
|
975
976
|
}
|
|
976
977
|
|
|
978
|
+
function resolveOllamaPolicy(spec: ModelSpec<"ollama-chat">, axes: ResolvedAxes): ResolvedOllamaCompat {
|
|
979
|
+
const compat: ResolvedOllamaCompat = { stripThinkingHistory: false };
|
|
980
|
+
applyWireAxes(compat, axes.wire, "ollama-chat");
|
|
981
|
+
applyCompatOverrides(compat, spec.compat);
|
|
982
|
+
return compat;
|
|
983
|
+
}
|
|
984
|
+
|
|
977
985
|
function resolveDevinPolicy(spec: ModelSpec<"devin-agent">, axes: ResolvedAxes): ResolvedDevinCompat {
|
|
978
986
|
const compat: ResolvedDevinCompat = {
|
|
979
987
|
trustExplicitThinkingOnly: true,
|
|
@@ -1380,6 +1388,8 @@ export function resolveModelPolicy(input: ModelSpec<Api>, route?: ResolveRoute):
|
|
|
1380
1388
|
compat = resolveAnthropicPolicy(spec, facts, axes);
|
|
1381
1389
|
} else if (specUsesApi(spec, "bedrock-converse-stream")) {
|
|
1382
1390
|
compat = resolveBedrockPolicy(spec, axes);
|
|
1391
|
+
} else if (specUsesApi(spec, "ollama-chat")) {
|
|
1392
|
+
compat = resolveOllamaPolicy(spec, axes);
|
|
1383
1393
|
} else if (specUsesApi(spec, "devin-agent")) {
|
|
1384
1394
|
compat = resolveDevinPolicy(spec, axes);
|
|
1385
1395
|
} else if (
|
|
@@ -403,6 +403,7 @@ provider "sakana" {
|
|
|
403
403
|
dynamic-models-authoritative #true // discovery replaces bundled rows
|
|
404
404
|
allow-unauthenticated #true // runtime manager without a key
|
|
405
405
|
skip-cross-provider-reference-fills #true // generator never backfills from same-id rows elsewhere
|
|
406
|
+
keep-bundled-names #true // discovery never renames a bundled row
|
|
406
407
|
discovery label="Sakana AI" oauth-provider="sakana" allow-unauthenticated=#true {
|
|
407
408
|
env "SAKANA_GEN_KEY" // generation-time keys; defaults to the provider env
|
|
408
409
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
auth "google-antigravity" {
|
|
2
|
-
name "Antigravity (Gemini
|
|
2
|
+
name "Google Antigravity (Gemini, Claude, GPT-OSS)"
|
|
3
3
|
login "oauth-code" {
|
|
4
4
|
// Antigravity uses different Google OAuth credentials for its additional models.
|
|
5
5
|
client-id "MTA3MTAwNjA2MDU5MS10bWhzc2luMmgyMWxjcmUyMzV2dG9sb2poNGc0MDNlcC5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbQ==" encoding="base64"
|
|
@@ -5,6 +5,8 @@ provider "ollama-cloud" {
|
|
|
5
5
|
env "OLLAMA_CLOUD_API_KEY"
|
|
6
6
|
discovery label="Ollama Cloud" oauth-provider="ollama-cloud"
|
|
7
7
|
|
|
8
|
+
// Legacy deployments can reject assistant thinking history (#1000).
|
|
9
|
+
strip-thinking-history #true
|
|
8
10
|
thinking-mode "effort"
|
|
9
11
|
// Same runtime as local Ollama: a trailing assistant turn is continued verbatim.
|
|
10
12
|
supports-assistant-prefill #true
|
|
@@ -20,7 +22,12 @@ provider "ollama-cloud" {
|
|
|
20
22
|
thinking-efforts "minimal" "low" "medium" "high"
|
|
21
23
|
}
|
|
22
24
|
// residue: taxonomy ranks and exact globs do not isolate these models.
|
|
25
|
+
// #9693 verifies thinking history for these GLM-5.2 wire IDs only.
|
|
23
26
|
models "glm-5.2" {
|
|
27
|
+
strip-thinking-history #false
|
|
24
28
|
thinking-efforts "high" "max"
|
|
25
29
|
}
|
|
30
|
+
models "glm-5.2:cloud" {
|
|
31
|
+
strip-thinking-history #false
|
|
32
|
+
}
|
|
26
33
|
}
|
|
@@ -4,6 +4,11 @@ provider "openai-codex" {
|
|
|
4
4
|
default-model "gpt-5.5"
|
|
5
5
|
env "OPENAI_CODEX_OAUTH_TOKEN"
|
|
6
6
|
dynamic-models-authoritative #true
|
|
7
|
+
// Codex `/models` `display_name` is a title-cased slug (`GPT-6.1-Sol`,
|
|
8
|
+
// `GPT-5.6-Luna`) while the generator names bundled rows from the shared
|
|
9
|
+
// reference (`GPT-6.1 Sol`); without this the composer chip flips spelling
|
|
10
|
+
// once live discovery lands.
|
|
11
|
+
keep-bundled-names #true
|
|
7
12
|
kind-apis {
|
|
8
13
|
image "openai-codex-responses"
|
|
9
14
|
}
|
|
@@ -119,6 +119,9 @@ provider "openrouter" {
|
|
|
119
119
|
models "~typesafe/*" "typesafe/*" {
|
|
120
120
|
kind "judge"
|
|
121
121
|
}
|
|
122
|
+
models "~typesafe/jev-latest" "typesafe/jev-1.13" "typesafe/jev-1.14" {
|
|
123
|
+
input-modalities "text" "image"
|
|
124
|
+
}
|
|
122
125
|
models "cohere/rerank-v3.5" {
|
|
123
126
|
kind "rerank"
|
|
124
127
|
}
|
|
@@ -151,6 +154,13 @@ provider "openrouter" {
|
|
|
151
154
|
allows-synthetic-reasoning-content-for-tool-calls #false
|
|
152
155
|
}
|
|
153
156
|
}
|
|
157
|
+
// OpenRouter forwards these hosted Muse SKUs to Meta's backend, which
|
|
158
|
+
// accepts only tool_choice "auto" and 400s on "none" (see providers/meta.kdl).
|
|
159
|
+
// Other Muse models, including muse-spark-open, retain discovered tool_choice.
|
|
160
|
+
models "meta/muse-spark-1.1" "meta/muse-spark-1.2" "meta/muse-spark-1.2-contributor" \
|
|
161
|
+
"meta/muse-spark-1.3" "meta/muse-spark-1.3-contributor" "meta/muse-wonder" {
|
|
162
|
+
supports-tool-choice #false
|
|
163
|
+
}
|
|
154
164
|
class "minimax" {
|
|
155
165
|
family "m3" {
|
|
156
166
|
thinking-efforts "minimal" "low" "medium" "high"
|
|
@@ -226,9 +226,10 @@ behavior {
|
|
|
226
226
|
// effort ladder that lists `/responses` therefore rides Responses, so
|
|
227
227
|
// thinking-off actually disables reasoning instead of clamping to the
|
|
228
228
|
// lowest effort. Ladder ids without `/responses` (deepseek-v4-flash-fast,
|
|
229
|
-
// gemini-3.7-flash,
|
|
230
|
-
// space-bunny-alpha), the Qwen3.8 ids (chat
|
|
231
|
-
// `enable_thinking: false`), and
|
|
229
|
+
// gemini-3.7-flash, glm-5.3-flash since 2026-10-14, Qwen3.8-Flash,
|
|
230
|
+
// Qwen3.8-Max-0902, hy4-preview, space-bunny-alpha), the Qwen3.8 ids (chat
|
|
231
|
+
// already disables them through `enable_thinking: false`), and
|
|
232
|
+
// non-reasoning ids stay on chat completions.
|
|
232
233
|
api-routes provider="commandcode" default="openai-completions" {
|
|
233
234
|
route "anthropic-messages" prefix="claude-"
|
|
234
235
|
route "openai-responses" exact="gpt-5.3-codex" exact="gpt-5.4" exact="gpt-5.4-mini" exact="gpt-5.5" \
|
|
@@ -237,7 +238,7 @@ behavior {
|
|
|
237
238
|
exact="deepseek/deepseek-v4-flash" exact="deepseek/deepseek-v4-flash-vision-exp" \
|
|
238
239
|
exact="deepseek/deepseek-v4-pro" exact="deepseek/deepseek-v4.1-flash" \
|
|
239
240
|
exact="deepseek/deepseek-v4.1-flash-fast" exact="moonshotai/Kimi-K3" \
|
|
240
|
-
exact="z-ai/glm-5.3-
|
|
241
|
+
exact="z-ai/glm-5.3-flashx" exact="zai-org/GLM-5.2" \
|
|
241
242
|
exact="zai-org/GLM-5.3" exact="google/gemini-3.1-flash-lite" exact="google/gemini-3.5-flash" \
|
|
242
243
|
exact="google/gemini-3.5-flash-lite" exact="google/gemini-3.6-flash" \
|
|
243
244
|
exact="google/gemini-3.8-flash" exact="MiniMaxAI/MiniMax-M3" exact="stepfun/Step-5-Preview" \
|
|
@@ -262,6 +263,8 @@ behavior {
|
|
|
262
263
|
// at /responses (#10610, #12030). The Muse prefix covers gateway-first
|
|
263
264
|
// revisions; exact ids stay as cache-migration identity.
|
|
264
265
|
api-routes provider="opencode-zen" {
|
|
266
|
+
// Paid Argon is served only on Zen's native Google endpoint (#15977).
|
|
267
|
+
route "google-generative-ai" exact="gemini-4-argon"
|
|
265
268
|
route "anthropic-messages" exact="union-alpha"
|
|
266
269
|
route "openai-responses" prefix="muse-spark-" exact="muse-spark-1.3-contributor-free" exact="gpt-6-astra"
|
|
267
270
|
route "openai-completions" exact="minimax-m3" exact="minimax-m3-free"
|
|
@@ -16,6 +16,8 @@ class "openai" {
|
|
|
16
16
|
|
|
17
17
|
family "gpt" glob="gpt-*"
|
|
18
18
|
family "chatgpt" glob="chatgpt-*"
|
|
19
|
+
family "gpt-image" glob="gpt-image-*"
|
|
20
|
+
family "gpt-image" glob="chatgpt-image-*"
|
|
19
21
|
family "o-series" glob="o1"
|
|
20
22
|
family "o-series" glob="o1-*"
|
|
21
23
|
family "o-series" glob="o1.*"
|