@oh-my-pi/pi-catalog 16.3.11 → 16.3.13
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 +24 -0
- package/dist/types/model-manager.d.ts +1 -1
- package/package.json +3 -3
- package/src/compat/anthropic.ts +5 -8
- package/src/discovery/cursor.ts +23 -1
- package/src/model-manager.ts +1 -1
- package/src/models.json +2290 -259
- package/src/provider-models/openai-compat.ts +91 -16
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [16.3.13] - 2026-07-09
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added support for Grok 4.5 across multiple providers
|
|
10
|
+
- Added support for GPT-5.6 series models (Luna, Sol, Terra)
|
|
11
|
+
- Added Aion 3.0 and 3.0 Mini models
|
|
12
|
+
- Added Kuaishou KAT-Coder v2.5 models
|
|
13
|
+
- Added Nex-N2-Mini and SWE-1.7 series models
|
|
14
|
+
- Added Hy3 models and free variants
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Updated cost and token configurations for various models across providers
|
|
19
|
+
- Renamed several models for consistency (e.g., MiniMax M3, Gemma 4 31B, Qwen variants)
|
|
20
|
+
|
|
21
|
+
## [16.3.12] - 2026-07-08
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Fixed LiteLLM discovery stopping at `/model_group/info` when that endpoint omitted `supports_vision`; it now continues to `/model/info` and preserves `model_info.supports_vision=true` for vision-capable proxy models. ([#4747](https://github.com/can1357/oh-my-pi/issues/4747))
|
|
26
|
+
- Fixed LiteLLM discovery to fall back to bundled catalog metadata when `models.dev` lacks a model reference, preserving reasoning and thinking support for models such as `glm-5.2`. ([#4695](https://github.com/can1357/oh-my-pi/issues/4695))
|
|
27
|
+
- Detected Azure AI Inference / Foundry Anthropic routes as strict-tool-incompatible so resolved Anthropic compat disables strict tools before request construction ([#4679](https://github.com/can1357/oh-my-pi/issues/4679)).
|
|
28
|
+
|
|
5
29
|
## [16.3.11] - 2026-07-06
|
|
6
30
|
|
|
7
31
|
### Added
|
|
@@ -24,7 +24,7 @@ export interface ModelManagerOptions<TApi extends Api = Api, TModelsDevPayload =
|
|
|
24
24
|
cacheDbPath?: string;
|
|
25
25
|
/** Optional provider id override for cache namespacing. Defaults to providerId. */
|
|
26
26
|
cacheProviderId?: string;
|
|
27
|
-
/** Maximum cache age in milliseconds before considered stale. Default:
|
|
27
|
+
/** Maximum cache age in milliseconds before considered stale. Default: 2h (`DEFAULT_CACHE_TTL_MS`). */
|
|
28
28
|
cacheTtlMs?: number;
|
|
29
29
|
/** When true, a successful dynamic fetch is the complete provider catalog and prunes static-only models. */
|
|
30
30
|
dynamicModelsAuthoritative?: boolean;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@oh-my-pi/pi-catalog",
|
|
4
|
-
"version": "16.3.
|
|
4
|
+
"version": "16.3.13",
|
|
5
5
|
"description": "Model catalog for omp: bundled model database, provider discovery descriptors, model identity, classification, and equivalence",
|
|
6
6
|
"homepage": "https://omp.sh",
|
|
7
7
|
"author": "Can Boluk",
|
|
@@ -34,12 +34,12 @@
|
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@bufbuild/protobuf": "^2.12.0",
|
|
37
|
-
"@oh-my-pi/pi-utils": "16.3.
|
|
37
|
+
"@oh-my-pi/pi-utils": "16.3.13",
|
|
38
38
|
"arktype": "^2.2.0",
|
|
39
39
|
"zod": "^4"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@oh-my-pi/pi-ai": "16.3.
|
|
42
|
+
"@oh-my-pi/pi-ai": "16.3.13",
|
|
43
43
|
"@types/bun": "^1.3.14"
|
|
44
44
|
},
|
|
45
45
|
"engines": {
|
package/src/compat/anthropic.ts
CHANGED
|
@@ -99,18 +99,15 @@ export function buildAnthropicCompat(spec: ModelSpec<"anthropic-messages">): Res
|
|
|
99
99
|
// (issue #4192).
|
|
100
100
|
const isZenmux = modelMatchesHost(spec, "zenmux");
|
|
101
101
|
const requiresThinkingEnabled = modelMatchesHost(spec, "moonshotNative") && matchesKimiK27CodeFamily(spec);
|
|
102
|
+
const isVertex = isVertexAnthropicRoute(baseUrl);
|
|
103
|
+
const isBedrock = isBedrockAnthropicRoute(baseUrl);
|
|
104
|
+
const isAzure = isAzureAnthropicRoute(baseUrl);
|
|
102
105
|
const signingEndpoint =
|
|
103
|
-
official ||
|
|
104
|
-
isCopilot ||
|
|
105
|
-
isZenmux ||
|
|
106
|
-
isCloudflareAnthropicGateway(baseUrl) ||
|
|
107
|
-
isVertexAnthropicRoute(baseUrl) ||
|
|
108
|
-
isBedrockAnthropicRoute(baseUrl) ||
|
|
109
|
-
isAzureAnthropicRoute(baseUrl);
|
|
106
|
+
official || isCopilot || isZenmux || isCloudflareAnthropicGateway(baseUrl) || isVertex || isBedrock || isAzure;
|
|
110
107
|
const compat: ResolvedAnthropicCompat = {
|
|
111
108
|
officialEndpoint: official,
|
|
112
109
|
signingEndpoint,
|
|
113
|
-
disableStrictTools:
|
|
110
|
+
disableStrictTools: isAzure,
|
|
114
111
|
disableAdaptiveThinking: false,
|
|
115
112
|
supportsEagerToolInputStreaming: !isCopilot,
|
|
116
113
|
// Long cache retention is only sent to the official API by default;
|
package/src/discovery/cursor.ts
CHANGED
|
@@ -13,6 +13,13 @@ const CURSOR_GET_USABLE_MODELS_PATH = "/agent.v1.AgentService/GetUsableModels";
|
|
|
13
13
|
const DEFAULT_CONTEXT_WINDOW = 200_000;
|
|
14
14
|
const DEFAULT_MAX_TOKENS = 64_000;
|
|
15
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Model-id families whose native catalogs (anthropic, openai/openai-codex,
|
|
18
|
+
* google) are multimodal. Cursor-only or text-only families (`composer-*`,
|
|
19
|
+
* `grok-code-*`) intentionally stay outside this pattern.
|
|
20
|
+
*/
|
|
21
|
+
const CURSOR_MULTIMODAL_ID_PATTERN = /claude|gemini|gpt-|codex/;
|
|
22
|
+
|
|
16
23
|
const OptionalDisplayNameSchema = type("unknown").pipe(raw => (typeof raw === "string" ? raw : undefined));
|
|
17
24
|
const CursorAliasesSchema = type("unknown").pipe(raw => {
|
|
18
25
|
if (Array.isArray(raw)) {
|
|
@@ -292,7 +299,7 @@ function normalizeCursorModel(
|
|
|
292
299
|
provider: "cursor",
|
|
293
300
|
baseUrl: baseUrlOverride ?? CURSOR_DEFAULT_BASE_URL,
|
|
294
301
|
reasoning,
|
|
295
|
-
input:
|
|
302
|
+
input: inferInputFromCursorId(id),
|
|
296
303
|
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
297
304
|
contextWindow: DEFAULT_CONTEXT_WINDOW,
|
|
298
305
|
maxTokens: DEFAULT_MAX_TOKENS,
|
|
@@ -312,3 +319,18 @@ function pickModelDisplayName(model: CursorModelDetailsValue, fallbackId: string
|
|
|
312
319
|
}
|
|
313
320
|
return fallbackId;
|
|
314
321
|
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Infers input modalities for Cursor models without a bundled reference.
|
|
325
|
+
*
|
|
326
|
+
* `GetUsableModels` carries no per-model modality metadata, so classification
|
|
327
|
+
* falls back to the model family: families that are multimodal in OMP's own
|
|
328
|
+
* native catalogs accept images, everything else stays text-only. Mirrors
|
|
329
|
+
* `inferInputFromGeminiId` in ./gemini.ts.
|
|
330
|
+
*/
|
|
331
|
+
function inferInputFromCursorId(id: string): ("text" | "image")[] {
|
|
332
|
+
if (CURSOR_MULTIMODAL_ID_PATTERN.test(id.toLowerCase())) {
|
|
333
|
+
return ["text", "image"];
|
|
334
|
+
}
|
|
335
|
+
return ["text"];
|
|
336
|
+
}
|
package/src/model-manager.ts
CHANGED
|
@@ -35,7 +35,7 @@ export interface ModelManagerOptions<TApi extends Api = Api, TModelsDevPayload =
|
|
|
35
35
|
cacheDbPath?: string;
|
|
36
36
|
/** Optional provider id override for cache namespacing. Defaults to providerId. */
|
|
37
37
|
cacheProviderId?: string;
|
|
38
|
-
/** Maximum cache age in milliseconds before considered stale. Default:
|
|
38
|
+
/** Maximum cache age in milliseconds before considered stale. Default: 2h (`DEFAULT_CACHE_TTL_MS`). */
|
|
39
39
|
cacheTtlMs?: number;
|
|
40
40
|
/** When true, a successful dynamic fetch is the complete provider catalog and prunes static-only models. */
|
|
41
41
|
dynamicModelsAuthoritative?: boolean;
|