@oh-my-pi/pi-catalog 16.3.2 → 16.3.4
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 +23 -0
- package/dist/types/hosts.d.ts +4 -0
- package/dist/types/provider-models/descriptors.d.ts +11 -1
- package/dist/types/provider-models/openai-compat.d.ts +6 -0
- package/dist/types/types.d.ts +11 -0
- package/package.json +3 -3
- package/src/compat/anthropic.ts +71 -19
- package/src/hosts.ts +1 -0
- package/src/identity/priority.ts +1 -0
- package/src/models.json +799 -101
- package/src/provider-models/descriptors.ts +11 -1
- package/src/provider-models/openai-compat.ts +98 -0
- package/src/types.ts +11 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [16.3.4] - 2026-07-03
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added Baseten as a supported model provider
|
|
10
|
+
- Added support for new models from Baseten, including DeepSeek V4 Pro and Kimi series
|
|
11
|
+
- Added new Devin agent models: Claude 5 Fable variants
|
|
12
|
+
- Added new Github Copilot models: Kimi K2.7 Code and MAI-Code-1-Flash
|
|
13
|
+
- Added Poolside Laguna XS 2.1 models via Kilo and OpenRouter providers
|
|
14
|
+
- Added support for Claude Fable 5 (Free) via Zenmux provider
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Updated priority ordering to include Baseten
|
|
19
|
+
- Updated pricing and limits for various existing models in the catalog
|
|
20
|
+
|
|
21
|
+
## [16.3.3] - 2026-07-02
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Extended Anthropic-compatible signing-endpoint recognition to Cloudflare AI Gateway, Google Vertex, AWS Bedrock, and Azure AI Inference / Foundry to ensure consistent reasoning-replay and signature-stripping behavior, and exposed ResolvedAnthropicCompat.signingEndpoint in the public API.
|
|
26
|
+
- Fixed Zhipu Coding Plan runtime discovery to prioritize account-scoped model lists over bundled fallback models, preventing routing errors for valid non-z.ai keys.
|
|
27
|
+
|
|
5
28
|
## [16.3.2] - 2026-07-02
|
|
6
29
|
|
|
7
30
|
### Fixed
|
package/dist/types/hosts.d.ts
CHANGED
|
@@ -86,6 +86,10 @@ export declare const KNOWN_HOSTS: {
|
|
|
86
86
|
readonly providers: readonly ["together"];
|
|
87
87
|
readonly urlMarkers: readonly ["api.together.xyz"];
|
|
88
88
|
};
|
|
89
|
+
readonly baseten: {
|
|
90
|
+
readonly providers: readonly ["baseten"];
|
|
91
|
+
readonly urlMarkers: readonly ["baseten.co"];
|
|
92
|
+
};
|
|
89
93
|
/** URL-only on purpose: the `fireworks`/`firepass` providers route per-model and not every model is Fireworks-shaped. */
|
|
90
94
|
readonly fireworks: {
|
|
91
95
|
readonly urlMarkers: readonly ["fireworks.ai"];
|
|
@@ -23,6 +23,15 @@ export declare const CATALOG_PROVIDERS: readonly [{
|
|
|
23
23
|
readonly catalogDiscovery: {
|
|
24
24
|
readonly label: "Alibaba Coding Plan";
|
|
25
25
|
};
|
|
26
|
+
}, {
|
|
27
|
+
readonly id: "baseten";
|
|
28
|
+
readonly defaultModel: "moonshotai/Kimi-K2.7-Code";
|
|
29
|
+
readonly envVars: readonly ["BASETEN_API_KEY"];
|
|
30
|
+
readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
|
|
31
|
+
readonly dynamicModelsAuthoritative: true;
|
|
32
|
+
readonly catalogDiscovery: {
|
|
33
|
+
readonly label: "Baseten";
|
|
34
|
+
};
|
|
26
35
|
}, {
|
|
27
36
|
readonly id: "amazon-bedrock";
|
|
28
37
|
readonly defaultModel: "us.anthropic.claude-opus-4-8";
|
|
@@ -414,9 +423,10 @@ export declare const CATALOG_PROVIDERS: readonly [{
|
|
|
414
423
|
};
|
|
415
424
|
}, {
|
|
416
425
|
readonly id: "zhipu-coding-plan";
|
|
417
|
-
readonly defaultModel: "glm-5.
|
|
426
|
+
readonly defaultModel: "glm-5.1";
|
|
418
427
|
readonly envVars: readonly ["ZHIPU_API_KEY"];
|
|
419
428
|
readonly createModelManagerOptions: (config: ModelManagerConfig) => import("..").ModelManagerOptions<"openai-completions", unknown>;
|
|
429
|
+
readonly dynamicModelsAuthoritative: true;
|
|
420
430
|
readonly catalogDiscovery: {
|
|
421
431
|
readonly label: "Zhipu Coding Plan";
|
|
422
432
|
};
|
|
@@ -303,6 +303,12 @@ export interface VeniceModelManagerConfig {
|
|
|
303
303
|
fetch?: FetchImpl;
|
|
304
304
|
}
|
|
305
305
|
export declare function veniceModelManagerOptions(config?: VeniceModelManagerConfig): ModelManagerOptions<"openai-completions">;
|
|
306
|
+
export interface BasetenModelManagerConfig {
|
|
307
|
+
apiKey?: string;
|
|
308
|
+
baseUrl?: string;
|
|
309
|
+
fetch?: FetchImpl;
|
|
310
|
+
}
|
|
311
|
+
export declare function basetenModelManagerOptions(config?: BasetenModelManagerConfig): ModelManagerOptions<"openai-completions">;
|
|
306
312
|
export interface TogetherModelManagerConfig {
|
|
307
313
|
apiKey?: string;
|
|
308
314
|
baseUrl?: string;
|
package/dist/types/types.d.ts
CHANGED
|
@@ -492,6 +492,17 @@ export type ResolvedAnthropicCompat = Required<AnthropicCompat> & {
|
|
|
492
492
|
* env headers, and cache-TTL shaping without per-request URL parsing.
|
|
493
493
|
*/
|
|
494
494
|
officialEndpoint: boolean;
|
|
495
|
+
/**
|
|
496
|
+
* The configured endpoint enforces Anthropic's signature protocol on
|
|
497
|
+
* replayed thinking blocks — either the official API itself or a proxy
|
|
498
|
+
* that forwards to it (GitHub Copilot, ZenMux, Cloudflare AI Gateway's
|
|
499
|
+
* `/anthropic` route, Google Vertex's `publishers/anthropic/…`).
|
|
500
|
+
* Downstream transforms strip stale cross-model thinking signatures on
|
|
501
|
+
* these endpoints so the signing proxy doesn't 400 with
|
|
502
|
+
* `Invalid signature in thinking block` (#4297). Superset of
|
|
503
|
+
* {@link officialEndpoint}.
|
|
504
|
+
*/
|
|
505
|
+
signingEndpoint: boolean;
|
|
495
506
|
};
|
|
496
507
|
/**
|
|
497
508
|
* Compatibility settings for the devin-agent (Codeium Cascade) API. Cascade
|
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.4",
|
|
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.4",
|
|
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.4",
|
|
43
43
|
"@types/bun": "^1.3.14"
|
|
44
44
|
},
|
|
45
45
|
"engines": {
|
package/src/compat/anthropic.ts
CHANGED
|
@@ -36,6 +36,52 @@ function matchesKimiK27CodeFamily(spec: ModelSpec<"anthropic-messages">): boolea
|
|
|
36
36
|
return spec.id === "kimi-for-coding" && /k2\.?7 code/i.test(spec.name ?? "");
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
const CLOUDFLARE_ANTHROPIC_GATEWAY_URL_MARKER = /gateway\.ai\.cloudflare\.com\/.+\/anthropic(?:\/|$)/i;
|
|
40
|
+
const VERTEX_ANTHROPIC_URL_MARKER = /aiplatform\.googleapis\.com\/.+\/publishers\/anthropic\//i;
|
|
41
|
+
const BEDROCK_ANTHROPIC_URL_MARKER = /(?:^|\/\/|\.)bedrock-runtime\.[a-z0-9-]+\.amazonaws\.com/i;
|
|
42
|
+
const AZURE_ANTHROPIC_URL_MARKER = /(?:^|\/\/|\.)[a-z0-9-]+\.(?:inference|services)\.ai\.azure\.com/i;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Cloudflare AI Gateway's `/anthropic` route forwards to signature-enforcing
|
|
46
|
+
* Anthropic (same failure class as GitHub Copilot #2851 / ZenMux #4192).
|
|
47
|
+
* Detection is by baseUrl marker rather than provider id: users routinely
|
|
48
|
+
* declare `provider: "custom"` (or other free-form ids) in `models.yml` for
|
|
49
|
+
* their own Cloudflare gateway account.
|
|
50
|
+
*/
|
|
51
|
+
function isCloudflareAnthropicGateway(baseUrl?: string): boolean {
|
|
52
|
+
return baseUrl !== undefined && CLOUDFLARE_ANTHROPIC_GATEWAY_URL_MARKER.test(baseUrl);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Google Vertex's `publishers/anthropic/models/…:streamRawPredict` route
|
|
57
|
+
* proxies Claude through Google's identity layer and returns full thinking
|
|
58
|
+
* signatures, so it is a SIGNING endpoint.
|
|
59
|
+
*/
|
|
60
|
+
function isVertexAnthropicRoute(baseUrl?: string): boolean {
|
|
61
|
+
return baseUrl !== undefined && VERTEX_ANTHROPIC_URL_MARKER.test(baseUrl);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* AWS Bedrock's Anthropic route (`bedrock-runtime.<region>.amazonaws.com`)
|
|
66
|
+
* forwards Claude requests through Anthropic's signature protocol. Users can
|
|
67
|
+
* front Bedrock with a custom `anthropic-messages` provider entry in
|
|
68
|
+
* `models.yml`; the URL marker makes those signing by default without
|
|
69
|
+
* requiring a provider-id list.
|
|
70
|
+
*/
|
|
71
|
+
function isBedrockAnthropicRoute(baseUrl?: string): boolean {
|
|
72
|
+
return baseUrl !== undefined && BEDROCK_ANTHROPIC_URL_MARKER.test(baseUrl);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Azure AI Inference / Foundry Anthropic route
|
|
77
|
+
* (`<resource>.inference.ai.azure.com`, `<resource>.services.ai.azure.com`).
|
|
78
|
+
* Fronts Claude behind Azure identity and enforces Anthropic signatures on
|
|
79
|
+
* replay.
|
|
80
|
+
*/
|
|
81
|
+
function isAzureAnthropicRoute(baseUrl?: string): boolean {
|
|
82
|
+
return baseUrl !== undefined && AZURE_ANTHROPIC_URL_MARKER.test(baseUrl);
|
|
83
|
+
}
|
|
84
|
+
|
|
39
85
|
/** Build the resolved anthropic-messages compat record for a model spec. */
|
|
40
86
|
export function buildAnthropicCompat(spec: ModelSpec<"anthropic-messages">): ResolvedAnthropicCompat {
|
|
41
87
|
const baseUrl = spec.baseUrl;
|
|
@@ -53,8 +99,17 @@ export function buildAnthropicCompat(spec: ModelSpec<"anthropic-messages">): Res
|
|
|
53
99
|
// (issue #4192).
|
|
54
100
|
const isZenmux = modelMatchesHost(spec, "zenmux");
|
|
55
101
|
const requiresThinkingEnabled = modelMatchesHost(spec, "moonshotNative") && matchesKimiK27CodeFamily(spec);
|
|
102
|
+
const signingEndpoint =
|
|
103
|
+
official ||
|
|
104
|
+
isCopilot ||
|
|
105
|
+
isZenmux ||
|
|
106
|
+
isCloudflareAnthropicGateway(baseUrl) ||
|
|
107
|
+
isVertexAnthropicRoute(baseUrl) ||
|
|
108
|
+
isBedrockAnthropicRoute(baseUrl) ||
|
|
109
|
+
isAzureAnthropicRoute(baseUrl);
|
|
56
110
|
const compat: ResolvedAnthropicCompat = {
|
|
57
111
|
officialEndpoint: official,
|
|
112
|
+
signingEndpoint,
|
|
58
113
|
disableStrictTools: false,
|
|
59
114
|
disableAdaptiveThinking: false,
|
|
60
115
|
supportsEagerToolInputStreaming: !isCopilot,
|
|
@@ -73,26 +128,23 @@ export function buildAnthropicCompat(spec: ModelSpec<"anthropic-messages">): Res
|
|
|
73
128
|
// into a class that reads `.id`.
|
|
74
129
|
requiresToolResultId: isZai,
|
|
75
130
|
requiresThinkingEnabled,
|
|
76
|
-
// Official Anthropic
|
|
77
|
-
//
|
|
78
|
-
//
|
|
79
|
-
//
|
|
80
|
-
//
|
|
81
|
-
// arguments (#2005
|
|
82
|
-
//
|
|
131
|
+
// Official Anthropic and Anthropic-compatible signing proxies enforce
|
|
132
|
+
// signature-based thinking-chain integrity, so unsigned thinking blocks
|
|
133
|
+
// must stay text there. Every other `anthropic-messages` reasoning
|
|
134
|
+
// endpoint replays unsigned thinking natively so the reasoning chain
|
|
135
|
+
// survives continuation and doesn't destabilize the next tool-call
|
|
136
|
+
// arguments (#2005, #2257, #2265, #3288, #3433, #3434). Opaque custom
|
|
137
|
+
// signing proxies remain the reporter's responsibility to mark with
|
|
138
|
+
// `compat.replayUnsignedThinking: false`; the transport surfaces a
|
|
139
|
+
// pointed remediation the first time the signing 400 fires (#4297).
|
|
83
140
|
//
|
|
84
|
-
//
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
//
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
// blocks to text instead, which the API accepts.
|
|
92
|
-
replayUnsignedThinking:
|
|
93
|
-
!isCopilot &&
|
|
94
|
-
!isZenmux &&
|
|
95
|
-
(isZai || modelMatchesHost(spec, "deepseekFamily") || (spec.reasoning && !official)),
|
|
141
|
+
// Known signing Anthropic-messages hosts (Copilot, ZenMux, Cloudflare
|
|
142
|
+
// AI Gateway `/anthropic`, Google Vertex `publishers/anthropic`, AWS
|
|
143
|
+
// Bedrock `bedrock-runtime.<region>.amazonaws.com`, and Azure
|
|
144
|
+
// AI Inference / Foundry `<res>.(inference|services).ai.azure.com`)
|
|
145
|
+
// are excluded automatically because they can be recognised by provider
|
|
146
|
+
// id or baseUrl marker.
|
|
147
|
+
replayUnsignedThinking: !signingEndpoint && (Boolean(spec.reasoning) || modelMatchesHost(spec, "deepseekFamily")),
|
|
96
148
|
escapeBuiltinToolNames: modelMatchesHost(spec, "umans"),
|
|
97
149
|
};
|
|
98
150
|
applyCompatOverrides(compat, spec.compat);
|
package/src/hosts.ts
CHANGED
|
@@ -47,6 +47,7 @@ export const KNOWN_HOSTS = {
|
|
|
47
47
|
xai: { providers: ["xai"], urlMarkers: ["api.x.ai"] },
|
|
48
48
|
mistral: { providers: ["mistral"], urlMarkers: ["mistral.ai"] },
|
|
49
49
|
together: { providers: ["together"], urlMarkers: ["api.together.xyz"] },
|
|
50
|
+
baseten: { providers: ["baseten"], urlMarkers: ["baseten.co"] },
|
|
50
51
|
/** URL-only on purpose: the `fireworks`/`firepass` providers route per-model and not every model is Fireworks-shaped. */
|
|
51
52
|
fireworks: { urlMarkers: ["fireworks.ai"] },
|
|
52
53
|
groq: { providers: ["groq"], urlMarkers: ["api.groq.com"] },
|