@oh-my-pi/pi-catalog 18.11.0 → 18.11.2
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/compat/axes.d.ts +1 -1
- package/dist/types/compat/types.d.ts +2 -0
- package/dist/types/discovery/antigravity.d.ts +7 -0
- package/dist/types/model-manager.d.ts +6 -0
- package/dist/types/types.d.ts +11 -3
- package/package.json +4 -4
- package/src/build.ts +5 -0
- package/src/compat/axes.ts +12 -2
- package/src/compat/resolve.ts +13 -1
- package/src/compat/rules/README.md +1 -0
- package/src/compat/rules/classes/gemini.kdl +18 -2
- package/src/compat/rules/providers/google-vertex.kdl +4 -0
- package/src/compat/rules/providers/native-tools.kdl +3 -0
- 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 +3 -0
- package/src/compat/rules/providers/typesafe.kdl +3 -0
- package/src/compat/rules/providers/xai-oauth.kdl +9 -6
- package/src/compat/rules/runtime/behavior.kdl +6 -1
- 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/antigravity.ts +13 -0
- package/src/discovery/cursor.ts +3 -9
- package/src/discovery/devin.ts +2 -5
- package/src/model-manager.ts +12 -1
- package/src/models.json +1 -1
- package/src/provider-models/google.ts +7 -1
- package/src/provider-models/openai-compat.ts +8 -5
- package/src/provider-models/special.ts +1 -0
- package/src/types.ts +17 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [18.11.2] - 2026-10-16
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added `keep-bundled-names` catalog attribute to preserve static model display names during discovery
|
|
10
|
+
- Updated `openai-codex` provider configuration to prevent model name regressions during live discovery
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- 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))
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- 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)).
|
|
19
|
+
|
|
20
|
+
## [18.11.1] - 2026-10-15
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- Enabled long prompt-cache retention (`ttl: "1h"`) for Claude models on `google-vertex` ([#15505](https://github.com/can1357/oh-my-pi/pull/15505) by [@hpost](https://github.com/hpost))
|
|
25
|
+
- Fixed Gemini 4 Argon on Google Vertex and the Gemini API failing every request with "Thinking budget is not supported for this model": Gemini 4 now sends `thinkingLevel` instead of `thinkingBudget`, and Argon offers only the low, medium, and high levels Google accepts ([#15643](https://github.com/can1357/oh-my-pi/pull/15643) by [@kevcube](https://github.com/kevcube))
|
|
26
|
+
- Fixed the Antigravity model selector offering roster rows the backend marks disabled (`disabled: true`, e.g. `gemini-4-argon-disabled` on accounts without Argon access), which answered `Cloud Code Assist API error (404): Requested entity was not found.`; discovery now skips them the way it already skips `isInternal` rows ([#15684](https://github.com/can1357/oh-my-pi/pull/15684) by [@CharleoYang](https://github.com/CharleoYang))
|
|
27
|
+
- Removed Google Antigravity's Gemini 3.5 Flash and its `gemini-3-flash` alias from the model list; Antigravity retired them and answers every request with a retirement notice instead of a reply ([#15445](https://github.com/can1357/oh-my-pi/pull/15445) by [@will-bogusz](https://github.com/will-bogusz))
|
|
28
|
+
- Fixed `xai-oauth` Grok 4.20 models (`grok-4.20-0309-reasoning`, `-non-reasoning`, `grok-4.20-multi-agent-0309`) advertising a 2M context window when the SuperGrok API rejects prompts over 1M; auto-compaction and context usage now work from the 1M window ([#15443](https://github.com/can1357/oh-my-pi/pull/15443) by [@will-bogusz](https://github.com/will-bogusz))
|
|
29
|
+
- Fixed trailing-dot `localhost.` and `*.local.` custom endpoints losing local-backend compatibility settings ([#15798](https://github.com/can1357/oh-my-pi/issues/15798)).
|
|
30
|
+
|
|
5
31
|
## [18.11.0] - 2026-10-14
|
|
6
32
|
|
|
7
33
|
### Added
|
|
@@ -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. */
|
|
@@ -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. */
|
|
@@ -18,6 +18,13 @@ export interface AntigravityDiscoveryApiModel {
|
|
|
18
18
|
apiProvider?: string;
|
|
19
19
|
modelProvider?: string;
|
|
20
20
|
isInternal?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Set for roster rows the backend lists but refuses to serve on this
|
|
23
|
+
* account (e.g. `gemini-4-argon-disabled`, `tagTitle: "Unavailable"`,
|
|
24
|
+
* `model: MODEL_PLACEHOLDER_M421`); a request against such an id answers
|
|
25
|
+
* `Cloud Code Assist API error (404): Requested entity was not found.`
|
|
26
|
+
*/
|
|
27
|
+
disabled?: boolean;
|
|
21
28
|
supportsVideo?: boolean;
|
|
22
29
|
}
|
|
23
30
|
/**
|
|
@@ -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. */
|
|
@@ -1230,6 +1236,8 @@ export interface Model<TApi extends Api = Api> {
|
|
|
1230
1236
|
requiresGlyphTokenization?: boolean;
|
|
1231
1237
|
/** Whether this model requires Cursor's tool-schema combiner projection. */
|
|
1232
1238
|
requiresCursorToolSchemaProjection?: boolean;
|
|
1239
|
+
/** Whether advertised tool schemas occupy every model request's context (false for deferred catalogs). */
|
|
1240
|
+
toolSchemasInContext?: boolean;
|
|
1233
1241
|
/** Whether this model requires tool-result images hoisted into sibling user content blocks. */
|
|
1234
1242
|
requiresToolResultImageHoisting?: boolean;
|
|
1235
1243
|
/**
|
|
@@ -1493,7 +1501,7 @@ export interface Model<TApi extends Api = Api> {
|
|
|
1493
1501
|
* vocabulary of `buildModel`. Identical to `Model` except `compat` carries the
|
|
1494
1502
|
* sparse override shape and nothing is resolved yet.
|
|
1495
1503
|
*/
|
|
1496
|
-
export interface ModelSpec<TApi extends Api = Api> extends Omit<Model<TApi>, "compat" | "identity" | "compatConfig" | "requiresGlyphTokenization" | "requiresCursorToolSchemaProjection" | "requiresToolResultImageHoisting" | "supportsAssistantPrefill" | "supportsComputerUseConfig"> {
|
|
1504
|
+
export interface ModelSpec<TApi extends Api = Api> extends Omit<Model<TApi>, "compat" | "identity" | "compatConfig" | "requiresGlyphTokenization" | "requiresCursorToolSchemaProjection" | "toolSchemasInContext" | "requiresToolResultImageHoisting" | "supportsAssistantPrefill" | "supportsComputerUseConfig"> {
|
|
1497
1505
|
/** Sparse compatibility overrides; resolved into `Model.compat` by `buildModel`. */
|
|
1498
1506
|
compat?: CompatConfigOf<TApi>;
|
|
1499
1507
|
}
|
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.2",
|
|
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.2",
|
|
97
|
+
"@oh-my-pi/pi-utils": "18.11.2"
|
|
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.2",
|
|
102
102
|
"@types/bun": "^1.3.14"
|
|
103
103
|
},
|
|
104
104
|
"engines": {
|
package/src/build.ts
CHANGED
|
@@ -115,6 +115,11 @@ function applyCatalogAssignments<TApi extends Api>(model: Model<TApi>, catalog:
|
|
|
115
115
|
} else {
|
|
116
116
|
delete model.requiresCursorToolSchemaProjection;
|
|
117
117
|
}
|
|
118
|
+
if (catalog.toolSchemasInContext === false) {
|
|
119
|
+
model.toolSchemasInContext = false;
|
|
120
|
+
} else {
|
|
121
|
+
delete model.toolSchemasInContext;
|
|
122
|
+
}
|
|
118
123
|
const requiresToolResultImageHoisting = catalog.requiresToolResultImageHoisting;
|
|
119
124
|
if (requiresToolResultImageHoisting === true) {
|
|
120
125
|
model.requiresToolResultImageHoisting = true;
|
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"]),
|
|
@@ -340,6 +348,7 @@ export const AXES: Readonly<Record<string, AxisDef>> = {
|
|
|
340
348
|
values: ["freeform", "function"],
|
|
341
349
|
},
|
|
342
350
|
"requires-native-tools": { key: "requiresNativeTools", set: "catalog", shape: "scalar", values: [true, false] },
|
|
351
|
+
"tool-schemas-in-context": { key: "toolSchemasInContext", set: "catalog", shape: "scalar", values: [true, false] },
|
|
343
352
|
"requires-tool-free-history-for-tool-opt-out": {
|
|
344
353
|
key: "requiresToolFreeHistoryForToolOptOut",
|
|
345
354
|
set: "catalog",
|
|
@@ -595,6 +604,7 @@ export const AXES: Readonly<Record<string, AxisDef>> = {
|
|
|
595
604
|
|
|
596
605
|
/** Records applicable to each API family; used by `resolve.ts` when applying wire axes. */
|
|
597
606
|
export const API_COMPAT_RECORDS: Readonly<Record<string, readonly CompatRecordName[]>> = {
|
|
607
|
+
"ollama-chat": ["ollama"],
|
|
598
608
|
"openai-completions": ["openai"],
|
|
599
609
|
openrouter: ["openai", "openai-responses"],
|
|
600
610
|
"openai-responses": ["openai-responses"],
|
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,
|
|
@@ -276,6 +277,7 @@ function hasLocalLoopbackBaseUrl(baseUrl: string | undefined): boolean {
|
|
|
276
277
|
let hostname: string;
|
|
277
278
|
try {
|
|
278
279
|
hostname = new URL(baseUrl).hostname.toLowerCase();
|
|
280
|
+
if (hostname.endsWith(".")) hostname = hostname.slice(0, -1);
|
|
279
281
|
} catch {
|
|
280
282
|
return false;
|
|
281
283
|
}
|
|
@@ -973,6 +975,13 @@ function resolveBedrockPolicy(spec: ModelSpec<"bedrock-converse-stream">, axes:
|
|
|
973
975
|
return compat;
|
|
974
976
|
}
|
|
975
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
|
+
|
|
976
985
|
function resolveDevinPolicy(spec: ModelSpec<"devin-agent">, axes: ResolvedAxes): ResolvedDevinCompat {
|
|
977
986
|
const compat: ResolvedDevinCompat = {
|
|
978
987
|
trustExplicitThinkingOnly: true,
|
|
@@ -1039,7 +1048,8 @@ function defaultThinkingMode<TApi extends Api>(spec: ModelSpec<TApi>, facts: Ide
|
|
|
1039
1048
|
case "google-generative-ai":
|
|
1040
1049
|
case "google-gemini-cli":
|
|
1041
1050
|
case "google-vertex":
|
|
1042
|
-
|
|
1051
|
+
// Gemini 3+ `google-level` is a `thinking-mode` rule in classes/gemini.kdl.
|
|
1052
|
+
return "budget";
|
|
1043
1053
|
case "anthropic-messages":
|
|
1044
1054
|
if (facts.is("minimax") && facts.family("m2", "m3")) return "anthropic-adaptive";
|
|
1045
1055
|
if (facts.is("glm") && facts.revGte("5.2") && (spec.provider === "umans" || spec.provider === "zai")) {
|
|
@@ -1378,6 +1388,8 @@ export function resolveModelPolicy(input: ModelSpec<Api>, route?: ResolveRoute):
|
|
|
1378
1388
|
compat = resolveAnthropicPolicy(spec, facts, axes);
|
|
1379
1389
|
} else if (specUsesApi(spec, "bedrock-converse-stream")) {
|
|
1380
1390
|
compat = resolveBedrockPolicy(spec, axes);
|
|
1391
|
+
} else if (specUsesApi(spec, "ollama-chat")) {
|
|
1392
|
+
compat = resolveOllamaPolicy(spec, axes);
|
|
1381
1393
|
} else if (specUsesApi(spec, "devin-agent")) {
|
|
1382
1394
|
compat = resolveDevinPolicy(spec, axes);
|
|
1383
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
|
}
|
|
@@ -66,13 +66,15 @@ class "gemini" {
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
-
// Gemini 3.7+ Flash native thinkingLevel does not accept
|
|
70
|
-
// (400 THINKING_LEVEL_MINIMAL; observed on 3.7 and 3.8
|
|
69
|
+
// Gemini 3.7+ Flash and Gemini 4 Argon native thinkingLevel does not accept
|
|
70
|
+
// `minimal` (400 THINKING_LEVEL_MINIMAL; observed on Flash 3.7 and 3.8, and
|
|
71
|
+
// documented for Argon and Argon Cyber Permissive). Only the direct
|
|
71
72
|
// google-level transports emit `thinkingLevel` on the wire, so the tier is
|
|
72
73
|
// dropped there; budget (anthropic-messages) and reasoning_effort resellers
|
|
73
74
|
// never send the rejected value and keep the four-tier ladder. The collapsed
|
|
74
75
|
// google-antigravity / google-gemini-cli variants remap minimal -> LOW and
|
|
75
76
|
// carry their own explicit ladder, so they are unaffected.
|
|
77
|
+
// https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/gemini/4-argon
|
|
76
78
|
// https://ai.google.dev/gemini-api/docs/generate-content/thinking#thinking-levels
|
|
77
79
|
on "google" "google-vertex" "opencode-zen" {
|
|
78
80
|
family "flash" {
|
|
@@ -80,6 +82,13 @@ class "gemini" {
|
|
|
80
82
|
thinking-efforts "low" "medium" "high"
|
|
81
83
|
}
|
|
82
84
|
}
|
|
85
|
+
// Exact ids: a revision-wide rule would tie with the Pro low/high ladder.
|
|
86
|
+
// Gemini API discovery has no bundled Argon reference and infers
|
|
87
|
+
// `reasoning: false` from the id; repair it so the ladder is selectable.
|
|
88
|
+
models "gemini-4-argon" "gemini-4-argon-cyber-permissive" {
|
|
89
|
+
thinking-upgrade-neutral #true
|
|
90
|
+
thinking-efforts "low" "medium" "high"
|
|
91
|
+
}
|
|
83
92
|
}
|
|
84
93
|
// Gemini 4 Argon's introductory list price ($2/$10, $0.10 cached) ends
|
|
85
94
|
// 2026-11-30; from 2026-12-01 Google bills $4/$20, $0.20 cached, on the
|
|
@@ -116,6 +125,13 @@ class "gemini" {
|
|
|
116
125
|
// Replaces the Gemini 3+ mandatory-reasoning fallback.
|
|
117
126
|
thinking-requires-effort #true
|
|
118
127
|
}
|
|
128
|
+
// Gemini 3+ takes `thinkingLevel` on the native Google transports; Gemini 4
|
|
129
|
+
// rejects `thinkingBudget` outright (400 "Use thinking level instead").
|
|
130
|
+
on-api "google-generative-ai" "google-gemini-cli" "google-vertex" {
|
|
131
|
+
revision ">=3" {
|
|
132
|
+
thinking-mode "google-level"
|
|
133
|
+
}
|
|
134
|
+
}
|
|
119
135
|
// Public Gemini requires the bypass sentinel on every unsigned call and
|
|
120
136
|
// supports function-part ids. Scope by adapter so custom providers using
|
|
121
137
|
// the same wire protocol inherit both contracts. The Cloud Code Assist
|
|
@@ -28,6 +28,10 @@ provider "google-vertex" {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
class "anthropic" {
|
|
31
|
+
// Vertex rawPredict honors `cache_control.ttl: "1h"` (writes bill to
|
|
32
|
+
// `ephemeral_1h_input_tokens`, entries outlive 5m) without any beta; the
|
|
33
|
+
// `extended-cache-ttl-2025-04-11` beta is rejected in `anthropic_beta`.
|
|
34
|
+
supports-long-cache-retention #true
|
|
31
35
|
revision ">=4.5 <4.6" {
|
|
32
36
|
thinking-efforts "minimal" "low" "medium" "high" "xhigh"
|
|
33
37
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
// Cursor always exposes server-owned native operations, even with an empty tool catalog.
|
|
2
2
|
on-api "cursor-agent" {
|
|
3
3
|
requires-native-tools #true
|
|
4
|
+
// MCP schemas live in Cursor's server-side catalog and enter model context
|
|
5
|
+
// only when dynamically selected, not as a fixed cost on every turn.
|
|
6
|
+
tool-schemas-in-context #false
|
|
4
7
|
}
|
|
@@ -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
|
}
|
|
@@ -15,8 +15,9 @@ provider "xai-oauth" {
|
|
|
15
15
|
|
|
16
16
|
// Source of truth for the xai-oauth chat picker. Declaration order is headline order.
|
|
17
17
|
// Context windows from hermes-agent/agent/model_metadata.py:205-220
|
|
18
|
-
// ("Values sourced from models.dev (2026-04)")
|
|
19
|
-
// coding-fine-tuned chat model; 512K context per user
|
|
18
|
+
// ("Values sourced from models.dev (2026-04)") unless a row says otherwise.
|
|
19
|
+
// grok-build is xAI's coding-fine-tuned chat model; 512K context per user
|
|
20
|
+
// spec (2026-05-17).
|
|
20
21
|
//
|
|
21
22
|
// xai-oauth's /v1/models exposes no per-request output limit on the OAuth
|
|
22
23
|
// (Grok Build / SuperGrok) surface, so maxTokens mirrors contextWindow. The
|
|
@@ -68,25 +69,27 @@ provider "xai-oauth" {
|
|
|
68
69
|
cost input=0 output=0 cache-read=0 cache-write=0
|
|
69
70
|
limits context=500000 max-tokens=500000
|
|
70
71
|
}
|
|
71
|
-
//
|
|
72
|
+
// grok-4.20-*-0309: api.x.ai rejects prompts over 1M tokens on this surface
|
|
73
|
+
// ([input_too_large] "... > 1000000 tokens", all three ids, 2026-10-12).
|
|
74
|
+
// Multi-agent is text-only per the bundled catalog.
|
|
72
75
|
model "grok-4.20-multi-agent-0309" name="Grok 4.20 (Multi-Agent)" {
|
|
73
76
|
reasoning #true
|
|
74
77
|
input "text"
|
|
75
78
|
cost input=0 output=0 cache-read=0 cache-write=0
|
|
76
|
-
limits context=
|
|
79
|
+
limits context=1000000 max-tokens=1000000
|
|
77
80
|
}
|
|
78
81
|
model "grok-4.20-0309-reasoning" name="Grok 4.20 (Reasoning)" {
|
|
79
82
|
reasoning #true
|
|
80
83
|
input "text" "image"
|
|
81
84
|
cost input=0 output=0 cache-read=0 cache-write=0
|
|
82
|
-
limits context=
|
|
85
|
+
limits context=1000000 max-tokens=1000000
|
|
83
86
|
supports-reasoning-effort #false
|
|
84
87
|
}
|
|
85
88
|
model "grok-4.20-0309-non-reasoning" name="Grok 4.20 (Non-Reasoning)" {
|
|
86
89
|
reasoning #false
|
|
87
90
|
input "text" "image"
|
|
88
91
|
cost input=0 output=0 cache-read=0 cache-write=0
|
|
89
|
-
limits context=
|
|
92
|
+
limits context=1000000 max-tokens=1000000
|
|
90
93
|
}
|
|
91
94
|
// Cursor's "Composer 2.5 Fast" exposed via SuperGrok: non-reasoning,
|
|
92
95
|
// text-only, 200K context (mirrors Cursor's composer-* catalog entries).
|
|
@@ -173,6 +173,10 @@ behavior {
|
|
|
173
173
|
// serve; the dedicated tool surfaces route them instead.
|
|
174
174
|
exclude-models provider="xai-oauth" exact="grok-imagine-image-quality" exact="grok-imagine-image-2.0" \
|
|
175
175
|
prefix="grok-imagine-video" prefix="grok-stt-" prefix="grok-voice-"
|
|
176
|
+
// Antigravity still advertises the Gemini 3.5 Flash wire ids, but every
|
|
177
|
+
// request to them answers with a retirement notice instead of a reply.
|
|
178
|
+
// `gemini-3-flash` is the family's recycled alias and routes to the same ids.
|
|
179
|
+
exclude-models provider="google-antigravity" exact="gemini-3.5-flash" exact="gemini-3-flash"
|
|
176
180
|
// Meta's /v1/models lists image generation and transcription SKUs beside
|
|
177
181
|
// the Muse Spark chat models, and SAM segmentation beside them.
|
|
178
182
|
exclude-models provider="meta" prefix="muse-image-" prefix="muse-voice-" prefix="sam-"
|
|
@@ -258,6 +262,8 @@ behavior {
|
|
|
258
262
|
// at /responses (#10610, #12030). The Muse prefix covers gateway-first
|
|
259
263
|
// revisions; exact ids stay as cache-migration identity.
|
|
260
264
|
api-routes provider="opencode-zen" {
|
|
265
|
+
// Paid Argon is served only on Zen's native Google endpoint (#15977).
|
|
266
|
+
route "google-generative-ai" exact="gemini-4-argon"
|
|
261
267
|
route "anthropic-messages" exact="union-alpha"
|
|
262
268
|
route "openai-responses" prefix="muse-spark-" exact="muse-spark-1.3-contributor-free" exact="gpt-6-astra"
|
|
263
269
|
route "openai-completions" exact="minimax-m3" exact="minimax-m3-free"
|
|
@@ -349,7 +355,6 @@ behavior {
|
|
|
349
355
|
// Google); price rows at their first-party equivalents, Vertex before
|
|
350
356
|
// Anthropic for Claude ids. Aliases map ids whose peer ships differently.
|
|
351
357
|
pricing-peer provider="google-antigravity" peers="google" "google-vertex" "anthropic" {
|
|
352
|
-
alias "gemini-3-flash" peer-id="gemini-3-flash-preview"
|
|
353
358
|
alias "gemini-3-pro" peer-id="gemini-3-pro-preview"
|
|
354
359
|
alias "gemini-3.1-pro" peer-id="gemini-3.1-pro-preview"
|
|
355
360
|
alias "claude-opus-4-5" peer-id="claude-opus-4-5@20251101"
|
|
@@ -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.*"
|