@oh-my-pi/pi-catalog 18.0.4 → 18.0.5
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 +11 -0
- package/dist/types/provider-models/descriptors.d.ts +20 -1
- package/dist/types/provider-models/openai-compat.d.ts +36 -0
- package/dist/types/types.d.ts +2 -2
- package/package.json +4 -4
- package/src/compat/openai.ts +2 -0
- package/src/identity/priority.ts +1 -0
- package/src/model-manager.ts +9 -1
- package/src/model-thinking.ts +11 -0
- package/src/models.json +7945 -266
- package/src/provider-models/descriptors.ts +19 -1
- package/src/provider-models/openai-compat.ts +302 -0
- package/src/types.ts +10 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [18.0.5] - 2026-08-25
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added built-in DeepInfra provider support (`deepinfra`, `DEEPINFRA_API_KEY`) with live model discovery, including chat models, context windows, pricing, cache-read pricing, vision input, and reasoning-effort capabilities.
|
|
10
|
+
- Added built-in Yolo-Auto provider support with the flat-rate `deepseek-flash-v4` model and live model discovery.
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Fixed the Synthetic provider’s default model to use `hf:zai-org/GLM-5.2` instead of the retired `hf:zai-org/GLM-5.1`.
|
|
15
|
+
|
|
5
16
|
## [18.0.4] - 2026-08-24
|
|
6
17
|
|
|
7
18
|
### Fixed
|
|
@@ -97,6 +97,16 @@ export declare const CATALOG_PROVIDERS: readonly [{
|
|
|
97
97
|
readonly envVars: readonly ["CURSOR_API_KEY"];
|
|
98
98
|
readonly oauthProvider: "cursor";
|
|
99
99
|
};
|
|
100
|
+
}, {
|
|
101
|
+
readonly id: "deepinfra";
|
|
102
|
+
readonly defaultModel: "deepseek-ai/DeepSeek-V4-Flash-0731";
|
|
103
|
+
readonly envVars: readonly ["DEEPINFRA_API_KEY"];
|
|
104
|
+
readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
|
|
105
|
+
readonly dynamicModelsAuthoritative: true;
|
|
106
|
+
readonly catalogDiscovery: {
|
|
107
|
+
readonly label: "DeepInfra";
|
|
108
|
+
readonly allowUnauthenticated: true;
|
|
109
|
+
};
|
|
100
110
|
}, {
|
|
101
111
|
readonly id: "deepseek";
|
|
102
112
|
readonly defaultModel: "deepseek-v4-pro";
|
|
@@ -361,7 +371,7 @@ export declare const CATALOG_PROVIDERS: readonly [{
|
|
|
361
371
|
readonly dynamicModelsAuthoritative: true;
|
|
362
372
|
}, {
|
|
363
373
|
readonly id: "synthetic";
|
|
364
|
-
readonly defaultModel: "hf:zai-org/GLM-5.
|
|
374
|
+
readonly defaultModel: "hf:zai-org/GLM-5.2";
|
|
365
375
|
readonly envVars: readonly ["SYNTHETIC_API_KEY"];
|
|
366
376
|
readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
|
|
367
377
|
readonly dynamicModelsAuthoritative: true;
|
|
@@ -469,6 +479,15 @@ export declare const CATALOG_PROVIDERS: readonly [{
|
|
|
469
479
|
readonly defaultModel: "mimo-v2.5";
|
|
470
480
|
readonly envVars: readonly ["XIAOMI_TOKEN_PLAN_SGP_API_KEY"];
|
|
471
481
|
readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
|
|
482
|
+
}, {
|
|
483
|
+
readonly id: "yolo-auto";
|
|
484
|
+
readonly defaultModel: "deepseek-flash-v4";
|
|
485
|
+
readonly envVars: readonly ["YOLO_AUTO_API_KEY"];
|
|
486
|
+
readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-completions", unknown>;
|
|
487
|
+
readonly dynamicModelsAuthoritative: true;
|
|
488
|
+
readonly catalogDiscovery: {
|
|
489
|
+
readonly label: "Yolo-Auto";
|
|
490
|
+
};
|
|
472
491
|
}, {
|
|
473
492
|
readonly id: "zai";
|
|
474
493
|
readonly defaultModel: "glm-5.3";
|
|
@@ -161,6 +161,19 @@ export interface NovitaModelManagerConfig {
|
|
|
161
161
|
}
|
|
162
162
|
/** Builds Novita's public model-discovery manager. */
|
|
163
163
|
export declare function novitaModelManagerOptions(config?: NovitaModelManagerConfig): ModelManagerOptions<"openai-completions">;
|
|
164
|
+
export declare const DEEPINFRA_BASE_URL = "https://api.deepinfra.com/v1/openai";
|
|
165
|
+
/** DeepInfra OpenAI-compatible discovery configuration. */
|
|
166
|
+
export interface DeepinfraModelManagerConfig {
|
|
167
|
+
apiKey?: string;
|
|
168
|
+
baseUrl?: string;
|
|
169
|
+
fetch?: FetchImpl;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Builds DeepInfra's model-discovery manager. The catalog endpoint is public,
|
|
173
|
+
* so discovery (and keyless `gen:models` generation) works without an API key;
|
|
174
|
+
* model availability at runtime is still gated on credentials by the registry.
|
|
175
|
+
*/
|
|
176
|
+
export declare function deepinfraModelManagerOptions(config?: DeepinfraModelManagerConfig): ModelManagerOptions<"openai-completions">;
|
|
164
177
|
export interface XaiModelManagerConfig {
|
|
165
178
|
apiKey?: string;
|
|
166
179
|
baseUrl?: string;
|
|
@@ -528,6 +541,29 @@ export interface AiandModelManagerConfig {
|
|
|
528
541
|
* pricing metadata, so discovery is authoritative over the bundled seed.
|
|
529
542
|
*/
|
|
530
543
|
export declare function aiandModelManagerOptions(config?: AiandModelManagerConfig): ModelManagerOptions<"openai-completions">;
|
|
544
|
+
/**
|
|
545
|
+
* Documented Yolo-Auto catalog (yolo-auto.com/docs, 2026-08) bundled so the
|
|
546
|
+
* provider is usable when generation and first boot have no live key. The
|
|
547
|
+
* flat-rate `/v1/models` response is authoritative once discovery runs.
|
|
548
|
+
* The compat block mirrors the provider's documented wire surface: the API
|
|
549
|
+
* speaks the generic chat template with `reasoning_effort` support and rejects
|
|
550
|
+
* the `developer` role and `store` param.
|
|
551
|
+
*/
|
|
552
|
+
export declare const YOLO_AUTO_STATIC_MODELS: readonly ModelSpec<"openai-completions">[];
|
|
553
|
+
export interface YoloAutoModelManagerConfig {
|
|
554
|
+
apiKey?: string;
|
|
555
|
+
baseUrl?: string;
|
|
556
|
+
fetch?: FetchImpl;
|
|
557
|
+
}
|
|
558
|
+
/**
|
|
559
|
+
* Yolo-Auto model manager: OpenAI-compatible chat completions at the
|
|
560
|
+
* flat-rate `deepseek-flash-v4` endpoint. Live `/v1/models` discovery replaces the
|
|
561
|
+
* bundled seed once a key is stored or present in `YOLO_AUTO_API_KEY`. Models
|
|
562
|
+
* the provider adds later inherit metadata (reasoning, thinking, context)
|
|
563
|
+
* from the global bundled reference index, so new ids work without a per-id
|
|
564
|
+
* code change.
|
|
565
|
+
*/
|
|
566
|
+
export declare function yoloAutoModelManagerOptions(config?: YoloAutoModelManagerConfig): ModelManagerOptions<"openai-completions">;
|
|
531
567
|
export interface QwenPortalModelManagerConfig {
|
|
532
568
|
apiKey?: string;
|
|
533
569
|
baseUrl?: string;
|
package/dist/types/types.d.ts
CHANGED
|
@@ -121,8 +121,8 @@ export interface Usage {
|
|
|
121
121
|
total: number;
|
|
122
122
|
};
|
|
123
123
|
}
|
|
124
|
-
export type OpenAIReasoningFormat = "openai" | "openrouter" | "zai" | "kimi" | "qwen" | "qwen-chat-template";
|
|
125
|
-
export type OpenAIReasoningDisableMode = "omit" | "lowest-effort" | "none-effort" | "openrouter-enabled-false" | "venice-disable-thinking" | "zai-thinking-disabled" | "qwen-enable-thinking-false" | "qwen-template-false";
|
|
124
|
+
export type OpenAIReasoningFormat = "openai" | "openrouter" | "zai" | "kimi" | "qwen" | "qwen-chat-template" | "chat-template";
|
|
125
|
+
export type OpenAIReasoningDisableMode = "omit" | "lowest-effort" | "none-effort" | "openrouter-enabled-false" | "venice-disable-thinking" | "zai-thinking-disabled" | "qwen-enable-thinking-false" | "qwen-template-false" | "chat-template-thinking-false";
|
|
126
126
|
export type OpenAIStreamMarkupHealingPattern = "kimi" | "dsml" | "qwen" | "thinking";
|
|
127
127
|
/**
|
|
128
128
|
* Compatibility settings for openai-completions API.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@oh-my-pi/pi-catalog",
|
|
4
|
-
"version": "18.0.
|
|
4
|
+
"version": "18.0.5",
|
|
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": "Stencil Labs, Inc.",
|
|
@@ -34,11 +34,11 @@
|
|
|
34
34
|
"gen:proto": "bun scripts/generate-protocols.ts"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@oh-my-pi/omptype": "18.0.
|
|
38
|
-
"@oh-my-pi/pi-utils": "18.0.
|
|
37
|
+
"@oh-my-pi/omptype": "18.0.5",
|
|
38
|
+
"@oh-my-pi/pi-utils": "18.0.5"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@oh-my-pi/pi-ai": "18.0.
|
|
41
|
+
"@oh-my-pi/pi-ai": "18.0.5",
|
|
42
42
|
"@types/bun": "^1.3.14"
|
|
43
43
|
},
|
|
44
44
|
"engines": {
|
package/src/compat/openai.ts
CHANGED
package/src/identity/priority.ts
CHANGED
package/src/model-manager.ts
CHANGED
|
@@ -492,9 +492,17 @@ function mergeDynamicModel<TApi extends Api>(existingModel: Model<TApi>, dynamic
|
|
|
492
492
|
// dynamic discovery also pre-applies the correct image fallback for omitted
|
|
493
493
|
// `supports.vision`, so its explicit `false` must not be OR-upgraded by the
|
|
494
494
|
// canonical bundled model.
|
|
495
|
+
// DeepInfra's discovery is authoritative (`dynamicModelsAuthoritative`) and
|
|
496
|
+
// its `vision`/`vlm` tags are the catalog's whole truth for modality. Every
|
|
497
|
+
// row shares the single DeepInfra endpoint, so `endpointChanged` never fires
|
|
498
|
+
// there: without this carve-out a model that dropped those tags would keep
|
|
499
|
+
// the bundled reference's image support and the agent would go on sending
|
|
500
|
+
// images to a now text-only route.
|
|
495
501
|
const endpointChanged = existingModel.baseUrl !== dynamicModel.baseUrl;
|
|
496
502
|
const dynamicInputAuthoritative =
|
|
497
|
-
endpointChanged ||
|
|
503
|
+
endpointChanged ||
|
|
504
|
+
(existingModel.provider === "github-copilot" && dynamicModel.provider === "github-copilot") ||
|
|
505
|
+
(existingModel.provider === "deepinfra" && dynamicModel.provider === "deepinfra");
|
|
498
506
|
const supportsImage = dynamicInputAuthoritative
|
|
499
507
|
? dynamicModel.input.includes("image")
|
|
500
508
|
: existingModel.input.includes("image") || dynamicModel.input.includes("image");
|
package/src/model-thinking.ts
CHANGED
|
@@ -329,6 +329,14 @@ function getModelDefinedEfforts<TApi extends Api>(
|
|
|
329
329
|
spec: ModelSpec<TApi>,
|
|
330
330
|
compat: CompatOf<TApi>,
|
|
331
331
|
): readonly Effort[] | undefined {
|
|
332
|
+
if (
|
|
333
|
+
isOpenAICompatReasoningApi(spec.api) &&
|
|
334
|
+
isChatTemplateThinkingFormat(compat) &&
|
|
335
|
+
spec.thinking?.mode === "effort" &&
|
|
336
|
+
spec.thinking.efforts.length > 0
|
|
337
|
+
) {
|
|
338
|
+
return spec.thinking.efforts;
|
|
339
|
+
}
|
|
332
340
|
if (isGlm53ReasoningEffortModelId(spec.id)) {
|
|
333
341
|
// GLM-5.3+ exposes a uniform wire-exact low/high/max ladder on every
|
|
334
342
|
// host — unlike GLM-5.2, whose reasoning_effort dialect is
|
|
@@ -519,6 +527,9 @@ function isQwenTemplateReasoningEffortCompat(compat: CompatOf<Api>): boolean {
|
|
|
519
527
|
compat !== undefined && "qwenTemplateReasoningEffort" in compat && compat.qwenTemplateReasoningEffort === true
|
|
520
528
|
);
|
|
521
529
|
}
|
|
530
|
+
function isChatTemplateThinkingFormat(compat: CompatOf<Api>): boolean {
|
|
531
|
+
return compat !== undefined && "thinkingFormat" in compat && compat.thinkingFormat === "chat-template";
|
|
532
|
+
}
|
|
522
533
|
|
|
523
534
|
function inferDetectedEffortMap<TApi extends Api>(
|
|
524
535
|
spec: ModelSpec<TApi>,
|