@oh-my-pi/pi-catalog 17.2.4 → 17.2.6
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 +18 -0
- package/dist/types/provider-models/descriptor-types.d.ts +2 -0
- package/dist/types/provider-models/descriptors.d.ts +6 -0
- package/dist/types/provider-models/openai-compat.d.ts +7 -0
- package/package.json +3 -3
- package/src/compat/openai.ts +8 -2
- package/src/models.json +151 -149
- package/src/provider-models/descriptor-types.ts +7 -1
- package/src/provider-models/descriptors.ts +8 -0
- package/src/provider-models/openai-compat.ts +164 -11
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [17.2.6] - 2026-08-03
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added the `bedrock-mantle` provider with authenticated model discovery for OpenAI GPT-5.4, GPT-5.5, and GPT-5.6 models (including Luna and Terra variants with corrected pricing) served through Amazon Bedrock's Responses endpoint.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Fixed dynamic discovery for the `deepseek-v4` model family (such as `deepseek-v4-flash-0731`) under `alibaba-token-plan` missing reasoning configuration and maximum thinking effort.
|
|
14
|
+
- Fixed GitHub Copilot dynamic discovery retaining stale bundled prices for default-context models instead of using the provider's reported default-tier prices.
|
|
15
|
+
|
|
16
|
+
## [17.2.5] - 2026-08-03
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- Fixed an issue where newly advertised chat models were dropped during dynamic discovery for the `alibaba-token-plan` provider.
|
|
21
|
+
- Fixed a `400` error when forcing a specific tool with DeepSeek reasoning models on OpenCode Zen/Go gateways by automatically downgrading the tool selection mode to `auto` while keeping the tool advertised.
|
|
22
|
+
|
|
5
23
|
## [17.2.4] - 2026-08-01
|
|
6
24
|
|
|
7
25
|
### Added
|
|
@@ -5,6 +5,8 @@ export type ModelManagerConfig = {
|
|
|
5
5
|
apiKey?: string;
|
|
6
6
|
baseUrl?: string;
|
|
7
7
|
fetch?: FetchImpl;
|
|
8
|
+
/** The supplied fetch already applies provider-specific authentication. */
|
|
9
|
+
authenticated?: boolean;
|
|
8
10
|
};
|
|
9
11
|
/** Catalog discovery configuration for providers that support endpoint-based model listing. */
|
|
10
12
|
export interface CatalogDiscoveryConfig {
|
|
@@ -53,6 +53,12 @@ export declare const CATALOG_PROVIDERS: readonly [{
|
|
|
53
53
|
}, {
|
|
54
54
|
readonly id: "amazon-bedrock";
|
|
55
55
|
readonly defaultModel: "us.anthropic.claude-opus-4-8";
|
|
56
|
+
}, {
|
|
57
|
+
readonly id: "bedrock-mantle";
|
|
58
|
+
readonly defaultModel: "openai.gpt-5.6-terra";
|
|
59
|
+
readonly envVars: readonly ["AWS_BEARER_TOKEN_BEDROCK"];
|
|
60
|
+
readonly createModelManagerOptions: (config: ModelManagerConfig) => import("../index.js").ModelManagerOptions<"openai-responses", unknown>;
|
|
61
|
+
readonly dynamicModelsAuthoritative: true;
|
|
56
62
|
}, {
|
|
57
63
|
readonly id: "anthropic";
|
|
58
64
|
readonly defaultModel: "claude-opus-4-8";
|
|
@@ -2,6 +2,7 @@ import type { ModelManagerOptions } from "../model-manager.js";
|
|
|
2
2
|
import { getBundledModels } from "../models.js";
|
|
3
3
|
import type { Api, FetchImpl, ModelSpec, Provider } from "../types.js";
|
|
4
4
|
import { ALIBABA_TOKEN_PLAN_BASE_URL } from "../wire/alibaba-token-plan.js";
|
|
5
|
+
import type { ModelManagerConfig } from "./descriptor-types.js";
|
|
5
6
|
export interface ModelsDevModel {
|
|
6
7
|
id?: string;
|
|
7
8
|
name?: string;
|
|
@@ -424,6 +425,12 @@ export interface CoreWeaveModelManagerConfig {
|
|
|
424
425
|
}
|
|
425
426
|
export declare function coreWeaveModelManagerOptions(config?: CoreWeaveModelManagerConfig): ModelManagerOptions<"openai-completions">;
|
|
426
427
|
export declare const META_MUSE_STATIC_MODELS: readonly ModelSpec<"openai-responses">[];
|
|
428
|
+
/**
|
|
429
|
+
* OpenAI frontier models served exclusively through Bedrock Mantle's Responses
|
|
430
|
+
* endpoint. Pricing is per million tokens from the Amazon Bedrock pricing page.
|
|
431
|
+
*/
|
|
432
|
+
export declare const BEDROCK_MANTLE_STATIC_MODELS: readonly ModelSpec<"openai-responses">[];
|
|
433
|
+
export declare function bedrockMantleModelManagerOptions(config?: ModelManagerConfig): ModelManagerOptions<"openai-responses">;
|
|
427
434
|
export interface MetaModelManagerConfig {
|
|
428
435
|
apiKey?: string;
|
|
429
436
|
baseUrl?: string;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@oh-my-pi/pi-catalog",
|
|
4
|
-
"version": "17.2.
|
|
4
|
+
"version": "17.2.6",
|
|
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",
|
|
@@ -35,12 +35,12 @@
|
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@bufbuild/protobuf": "^2.12.1",
|
|
38
|
-
"@oh-my-pi/pi-utils": "17.2.
|
|
38
|
+
"@oh-my-pi/pi-utils": "17.2.6",
|
|
39
39
|
"arktype": "2.2.3",
|
|
40
40
|
"zod": "^4"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@oh-my-pi/pi-ai": "17.2.
|
|
43
|
+
"@oh-my-pi/pi-ai": "17.2.6",
|
|
44
44
|
"@types/bun": "^1.3.14"
|
|
45
45
|
},
|
|
46
46
|
"engines": {
|
package/src/compat/openai.ts
CHANGED
|
@@ -318,7 +318,8 @@ export function buildOpenAICompat(spec: ModelSpec<"openai-completions">): Resolv
|
|
|
318
318
|
isDeepseekModelIdOrName(spec.name ?? "") ||
|
|
319
319
|
isOpenCodeDeepseekAlias;
|
|
320
320
|
const isDirectDeepseekApi = modelMatchesHost(hostModel, "deepseekDirect");
|
|
321
|
-
const
|
|
321
|
+
const isDeepseekReasoning = isDeepseekFamily && Boolean(spec.reasoning);
|
|
322
|
+
const isDirectDeepseekReasoning = isDirectDeepseekApi && isDeepseekReasoning;
|
|
322
323
|
const isGrok = modelMatchesHost(hostModel, "xai");
|
|
323
324
|
const isMistral = modelMatchesHost(hostModel, "mistral");
|
|
324
325
|
const isOpenCodeHost = modelMatchesHost(hostModel, "opencode");
|
|
@@ -490,7 +491,12 @@ export function buildOpenAICompat(spec: ModelSpec<"openai-completions">): Resolv
|
|
|
490
491
|
disableReasoningOnForcedToolChoice: (isKimiModel && !isMoonshotKimiK3) || isAnthropicModel,
|
|
491
492
|
disableReasoningOnToolChoice: isDeepseekFamily && Boolean(spec.reasoning) && !isOpenRouter,
|
|
492
493
|
supportsToolChoice: !isDirectDeepseekReasoning,
|
|
493
|
-
|
|
494
|
+
// DeepSeek reasoning models on OpenCode Zen/Go 400 with
|
|
495
|
+
// "Thinking mode does not support this tool_choice" when a specific
|
|
496
|
+
// function is forced while the gateway's default thinking mode is active.
|
|
497
|
+
// Downgrade only on those gateways: other hosts can turn thinking off via
|
|
498
|
+
// disableReasoningOnToolChoice and must retain hard tool selection.
|
|
499
|
+
supportsForcedToolChoice: !requiresEnabledThinking && !(isOpenCodeHost && isDeepseekReasoning),
|
|
494
500
|
supportsNamedToolChoice: STRING_ONLY_NAMED_TOOL_CHOICE_PROVIDERS[provider] !== true,
|
|
495
501
|
maxTokensField: useMaxTokens ? "max_tokens" : "max_completion_tokens",
|
|
496
502
|
requiresToolResultName: isMistral,
|
package/src/models.json
CHANGED
|
@@ -10186,155 +10186,6 @@
|
|
|
10186
10186
|
]
|
|
10187
10187
|
}
|
|
10188
10188
|
},
|
|
10189
|
-
"openai.gpt-5.4": {
|
|
10190
|
-
"id": "openai.gpt-5.4",
|
|
10191
|
-
"name": "GPT-5.4",
|
|
10192
|
-
"api": "bedrock-converse-stream",
|
|
10193
|
-
"provider": "amazon-bedrock",
|
|
10194
|
-
"baseUrl": "https://bedrock-runtime.us-east-1.amazonaws.com",
|
|
10195
|
-
"reasoning": true,
|
|
10196
|
-
"input": [
|
|
10197
|
-
"text",
|
|
10198
|
-
"image"
|
|
10199
|
-
],
|
|
10200
|
-
"cost": {
|
|
10201
|
-
"input": 2.75,
|
|
10202
|
-
"output": 16.5,
|
|
10203
|
-
"cacheRead": 0.275,
|
|
10204
|
-
"cacheWrite": 0
|
|
10205
|
-
},
|
|
10206
|
-
"contextWindow": 272000,
|
|
10207
|
-
"maxTokens": 128000,
|
|
10208
|
-
"thinking": {
|
|
10209
|
-
"mode": "budget",
|
|
10210
|
-
"efforts": [
|
|
10211
|
-
"low",
|
|
10212
|
-
"medium",
|
|
10213
|
-
"high",
|
|
10214
|
-
"xhigh"
|
|
10215
|
-
]
|
|
10216
|
-
}
|
|
10217
|
-
},
|
|
10218
|
-
"openai.gpt-5.5": {
|
|
10219
|
-
"id": "openai.gpt-5.5",
|
|
10220
|
-
"name": "GPT-5.5",
|
|
10221
|
-
"api": "bedrock-converse-stream",
|
|
10222
|
-
"provider": "amazon-bedrock",
|
|
10223
|
-
"baseUrl": "https://bedrock-runtime.us-east-1.amazonaws.com",
|
|
10224
|
-
"reasoning": true,
|
|
10225
|
-
"input": [
|
|
10226
|
-
"text",
|
|
10227
|
-
"image"
|
|
10228
|
-
],
|
|
10229
|
-
"cost": {
|
|
10230
|
-
"input": 5.5,
|
|
10231
|
-
"output": 33,
|
|
10232
|
-
"cacheRead": 0.55,
|
|
10233
|
-
"cacheWrite": 0
|
|
10234
|
-
},
|
|
10235
|
-
"contextWindow": 272000,
|
|
10236
|
-
"maxTokens": 128000,
|
|
10237
|
-
"thinking": {
|
|
10238
|
-
"mode": "budget",
|
|
10239
|
-
"efforts": [
|
|
10240
|
-
"low",
|
|
10241
|
-
"medium",
|
|
10242
|
-
"high",
|
|
10243
|
-
"xhigh"
|
|
10244
|
-
]
|
|
10245
|
-
},
|
|
10246
|
-
"contextPromotionTarget": "amazon-bedrock/openai.gpt-5.4"
|
|
10247
|
-
},
|
|
10248
|
-
"openai.gpt-5.6-luna": {
|
|
10249
|
-
"id": "openai.gpt-5.6-luna",
|
|
10250
|
-
"name": "GPT-5.6 Luna",
|
|
10251
|
-
"api": "bedrock-converse-stream",
|
|
10252
|
-
"provider": "amazon-bedrock",
|
|
10253
|
-
"baseUrl": "https://bedrock-runtime.us-east-1.amazonaws.com",
|
|
10254
|
-
"reasoning": true,
|
|
10255
|
-
"input": [
|
|
10256
|
-
"text",
|
|
10257
|
-
"image"
|
|
10258
|
-
],
|
|
10259
|
-
"cost": {
|
|
10260
|
-
"input": 0.22,
|
|
10261
|
-
"output": 1.32,
|
|
10262
|
-
"cacheRead": 0.022,
|
|
10263
|
-
"cacheWrite": 0.275
|
|
10264
|
-
},
|
|
10265
|
-
"contextWindow": 272000,
|
|
10266
|
-
"maxTokens": 128000,
|
|
10267
|
-
"thinking": {
|
|
10268
|
-
"mode": "budget",
|
|
10269
|
-
"efforts": [
|
|
10270
|
-
"low",
|
|
10271
|
-
"medium",
|
|
10272
|
-
"high",
|
|
10273
|
-
"xhigh",
|
|
10274
|
-
"max"
|
|
10275
|
-
]
|
|
10276
|
-
}
|
|
10277
|
-
},
|
|
10278
|
-
"openai.gpt-5.6-sol": {
|
|
10279
|
-
"id": "openai.gpt-5.6-sol",
|
|
10280
|
-
"name": "GPT-5.6 Sol",
|
|
10281
|
-
"api": "bedrock-converse-stream",
|
|
10282
|
-
"provider": "amazon-bedrock",
|
|
10283
|
-
"baseUrl": "https://bedrock-runtime.us-east-1.amazonaws.com",
|
|
10284
|
-
"reasoning": true,
|
|
10285
|
-
"input": [
|
|
10286
|
-
"text",
|
|
10287
|
-
"image"
|
|
10288
|
-
],
|
|
10289
|
-
"cost": {
|
|
10290
|
-
"input": 5.5,
|
|
10291
|
-
"output": 33,
|
|
10292
|
-
"cacheRead": 0.55,
|
|
10293
|
-
"cacheWrite": 6.88
|
|
10294
|
-
},
|
|
10295
|
-
"contextWindow": 272000,
|
|
10296
|
-
"maxTokens": 128000,
|
|
10297
|
-
"thinking": {
|
|
10298
|
-
"mode": "budget",
|
|
10299
|
-
"efforts": [
|
|
10300
|
-
"low",
|
|
10301
|
-
"medium",
|
|
10302
|
-
"high",
|
|
10303
|
-
"xhigh",
|
|
10304
|
-
"max"
|
|
10305
|
-
]
|
|
10306
|
-
}
|
|
10307
|
-
},
|
|
10308
|
-
"openai.gpt-5.6-terra": {
|
|
10309
|
-
"id": "openai.gpt-5.6-terra",
|
|
10310
|
-
"name": "GPT-5.6 Terra",
|
|
10311
|
-
"api": "bedrock-converse-stream",
|
|
10312
|
-
"provider": "amazon-bedrock",
|
|
10313
|
-
"baseUrl": "https://bedrock-runtime.us-east-1.amazonaws.com",
|
|
10314
|
-
"reasoning": true,
|
|
10315
|
-
"input": [
|
|
10316
|
-
"text",
|
|
10317
|
-
"image"
|
|
10318
|
-
],
|
|
10319
|
-
"cost": {
|
|
10320
|
-
"input": 2.2,
|
|
10321
|
-
"output": 13.2,
|
|
10322
|
-
"cacheRead": 0.22,
|
|
10323
|
-
"cacheWrite": 2.75
|
|
10324
|
-
},
|
|
10325
|
-
"contextWindow": 272000,
|
|
10326
|
-
"maxTokens": 128000,
|
|
10327
|
-
"thinking": {
|
|
10328
|
-
"mode": "budget",
|
|
10329
|
-
"efforts": [
|
|
10330
|
-
"low",
|
|
10331
|
-
"medium",
|
|
10332
|
-
"high",
|
|
10333
|
-
"xhigh",
|
|
10334
|
-
"max"
|
|
10335
|
-
]
|
|
10336
|
-
}
|
|
10337
|
-
},
|
|
10338
10189
|
"openai.gpt-oss-120b": {
|
|
10339
10190
|
"id": "openai.gpt-oss-120b",
|
|
10340
10191
|
"name": "gpt-oss-120b",
|
|
@@ -13666,6 +13517,157 @@
|
|
|
13666
13517
|
"supportsComputerUseConfig": false
|
|
13667
13518
|
}
|
|
13668
13519
|
},
|
|
13520
|
+
"bedrock-mantle": {
|
|
13521
|
+
"openai.gpt-5.4": {
|
|
13522
|
+
"id": "openai.gpt-5.4",
|
|
13523
|
+
"name": "GPT-5.4",
|
|
13524
|
+
"api": "openai-responses",
|
|
13525
|
+
"provider": "bedrock-mantle",
|
|
13526
|
+
"baseUrl": "https://bedrock-mantle.{region}.api.aws/openai/v1",
|
|
13527
|
+
"reasoning": true,
|
|
13528
|
+
"input": [
|
|
13529
|
+
"text",
|
|
13530
|
+
"image"
|
|
13531
|
+
],
|
|
13532
|
+
"cost": {
|
|
13533
|
+
"input": 2.75,
|
|
13534
|
+
"output": 16.5,
|
|
13535
|
+
"cacheRead": 0.275,
|
|
13536
|
+
"cacheWrite": 0
|
|
13537
|
+
},
|
|
13538
|
+
"contextWindow": 272000,
|
|
13539
|
+
"maxTokens": 128000,
|
|
13540
|
+
"thinking": {
|
|
13541
|
+
"mode": "effort",
|
|
13542
|
+
"efforts": [
|
|
13543
|
+
"low",
|
|
13544
|
+
"medium",
|
|
13545
|
+
"high",
|
|
13546
|
+
"xhigh"
|
|
13547
|
+
]
|
|
13548
|
+
}
|
|
13549
|
+
},
|
|
13550
|
+
"openai.gpt-5.5": {
|
|
13551
|
+
"id": "openai.gpt-5.5",
|
|
13552
|
+
"name": "GPT-5.5",
|
|
13553
|
+
"api": "openai-responses",
|
|
13554
|
+
"provider": "bedrock-mantle",
|
|
13555
|
+
"baseUrl": "https://bedrock-mantle.{region}.api.aws/openai/v1",
|
|
13556
|
+
"reasoning": true,
|
|
13557
|
+
"input": [
|
|
13558
|
+
"text",
|
|
13559
|
+
"image"
|
|
13560
|
+
],
|
|
13561
|
+
"cost": {
|
|
13562
|
+
"input": 5.5,
|
|
13563
|
+
"output": 33,
|
|
13564
|
+
"cacheRead": 0.55,
|
|
13565
|
+
"cacheWrite": 0
|
|
13566
|
+
},
|
|
13567
|
+
"contextWindow": 272000,
|
|
13568
|
+
"maxTokens": 128000,
|
|
13569
|
+
"thinking": {
|
|
13570
|
+
"mode": "effort",
|
|
13571
|
+
"efforts": [
|
|
13572
|
+
"low",
|
|
13573
|
+
"medium",
|
|
13574
|
+
"high",
|
|
13575
|
+
"xhigh"
|
|
13576
|
+
]
|
|
13577
|
+
},
|
|
13578
|
+
"contextPromotionTarget": "bedrock-mantle/openai.gpt-5.4"
|
|
13579
|
+
},
|
|
13580
|
+
"openai.gpt-5.6-luna": {
|
|
13581
|
+
"id": "openai.gpt-5.6-luna",
|
|
13582
|
+
"name": "GPT-5.6 Luna",
|
|
13583
|
+
"api": "openai-responses",
|
|
13584
|
+
"provider": "bedrock-mantle",
|
|
13585
|
+
"baseUrl": "https://bedrock-mantle.{region}.api.aws/openai/v1",
|
|
13586
|
+
"reasoning": true,
|
|
13587
|
+
"input": [
|
|
13588
|
+
"text",
|
|
13589
|
+
"image"
|
|
13590
|
+
],
|
|
13591
|
+
"cost": {
|
|
13592
|
+
"input": 0.22,
|
|
13593
|
+
"output": 1.32,
|
|
13594
|
+
"cacheRead": 0.022,
|
|
13595
|
+
"cacheWrite": 0.275
|
|
13596
|
+
},
|
|
13597
|
+
"contextWindow": 272000,
|
|
13598
|
+
"maxTokens": 128000,
|
|
13599
|
+
"thinking": {
|
|
13600
|
+
"mode": "effort",
|
|
13601
|
+
"efforts": [
|
|
13602
|
+
"low",
|
|
13603
|
+
"medium",
|
|
13604
|
+
"high",
|
|
13605
|
+
"xhigh",
|
|
13606
|
+
"max"
|
|
13607
|
+
]
|
|
13608
|
+
}
|
|
13609
|
+
},
|
|
13610
|
+
"openai.gpt-5.6-sol": {
|
|
13611
|
+
"id": "openai.gpt-5.6-sol",
|
|
13612
|
+
"name": "GPT-5.6 Sol",
|
|
13613
|
+
"api": "openai-responses",
|
|
13614
|
+
"provider": "bedrock-mantle",
|
|
13615
|
+
"baseUrl": "https://bedrock-mantle.{region}.api.aws/openai/v1",
|
|
13616
|
+
"reasoning": true,
|
|
13617
|
+
"input": [
|
|
13618
|
+
"text",
|
|
13619
|
+
"image"
|
|
13620
|
+
],
|
|
13621
|
+
"cost": {
|
|
13622
|
+
"input": 5.5,
|
|
13623
|
+
"output": 33,
|
|
13624
|
+
"cacheRead": 0.55,
|
|
13625
|
+
"cacheWrite": 6.88
|
|
13626
|
+
},
|
|
13627
|
+
"contextWindow": 272000,
|
|
13628
|
+
"maxTokens": 128000,
|
|
13629
|
+
"thinking": {
|
|
13630
|
+
"mode": "effort",
|
|
13631
|
+
"efforts": [
|
|
13632
|
+
"low",
|
|
13633
|
+
"medium",
|
|
13634
|
+
"high",
|
|
13635
|
+
"xhigh",
|
|
13636
|
+
"max"
|
|
13637
|
+
]
|
|
13638
|
+
}
|
|
13639
|
+
},
|
|
13640
|
+
"openai.gpt-5.6-terra": {
|
|
13641
|
+
"id": "openai.gpt-5.6-terra",
|
|
13642
|
+
"name": "GPT-5.6 Terra",
|
|
13643
|
+
"api": "openai-responses",
|
|
13644
|
+
"provider": "bedrock-mantle",
|
|
13645
|
+
"baseUrl": "https://bedrock-mantle.{region}.api.aws/openai/v1",
|
|
13646
|
+
"reasoning": true,
|
|
13647
|
+
"input": [
|
|
13648
|
+
"text",
|
|
13649
|
+
"image"
|
|
13650
|
+
],
|
|
13651
|
+
"cost": {
|
|
13652
|
+
"input": 2.2,
|
|
13653
|
+
"output": 13.2,
|
|
13654
|
+
"cacheRead": 0.22,
|
|
13655
|
+
"cacheWrite": 2.75
|
|
13656
|
+
},
|
|
13657
|
+
"contextWindow": 272000,
|
|
13658
|
+
"maxTokens": 128000,
|
|
13659
|
+
"thinking": {
|
|
13660
|
+
"mode": "effort",
|
|
13661
|
+
"efforts": [
|
|
13662
|
+
"low",
|
|
13663
|
+
"medium",
|
|
13664
|
+
"high",
|
|
13665
|
+
"xhigh",
|
|
13666
|
+
"max"
|
|
13667
|
+
]
|
|
13668
|
+
}
|
|
13669
|
+
}
|
|
13670
|
+
},
|
|
13669
13671
|
"cerebras": {
|
|
13670
13672
|
"gemma-4-31b": {
|
|
13671
13673
|
"id": "gemma-4-31b",
|
|
@@ -2,7 +2,13 @@ import type { ModelManagerOptions } from "../model-manager";
|
|
|
2
2
|
import type { Api, FetchImpl } from "../types";
|
|
3
3
|
|
|
4
4
|
/** Config passed to a provider's runtime model-manager factory. */
|
|
5
|
-
export type ModelManagerConfig = {
|
|
5
|
+
export type ModelManagerConfig = {
|
|
6
|
+
apiKey?: string;
|
|
7
|
+
baseUrl?: string;
|
|
8
|
+
fetch?: FetchImpl;
|
|
9
|
+
/** The supplied fetch already applies provider-specific authentication. */
|
|
10
|
+
authenticated?: boolean;
|
|
11
|
+
};
|
|
6
12
|
|
|
7
13
|
/** Catalog discovery configuration for providers that support endpoint-based model listing. */
|
|
8
14
|
export interface CatalogDiscoveryConfig {
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
alibabaTokenPlanModelManagerOptions,
|
|
16
16
|
anthropicModelManagerOptions,
|
|
17
17
|
basetenModelManagerOptions,
|
|
18
|
+
bedrockMantleModelManagerOptions,
|
|
18
19
|
cerebrasModelManagerOptions,
|
|
19
20
|
cloudflareAiGatewayModelManagerOptions,
|
|
20
21
|
coreWeaveModelManagerOptions,
|
|
@@ -109,6 +110,13 @@ export const CATALOG_PROVIDERS = [
|
|
|
109
110
|
id: "amazon-bedrock",
|
|
110
111
|
defaultModel: "us.anthropic.claude-opus-4-8",
|
|
111
112
|
},
|
|
113
|
+
{
|
|
114
|
+
id: "bedrock-mantle",
|
|
115
|
+
defaultModel: "openai.gpt-5.6-terra",
|
|
116
|
+
envVars: ["AWS_BEARER_TOKEN_BEDROCK"],
|
|
117
|
+
createModelManagerOptions: (config: ModelManagerConfig) => bedrockMantleModelManagerOptions(config),
|
|
118
|
+
dynamicModelsAuthoritative: true,
|
|
119
|
+
},
|
|
112
120
|
{
|
|
113
121
|
id: "anthropic",
|
|
114
122
|
defaultModel: "claude-opus-4-8",
|
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
} from "../wire/github-copilot";
|
|
32
32
|
import { createBundledReferenceMap, createReferenceResolver, toModelSpec } from "./bundled-references";
|
|
33
33
|
import { getDefaultModelDiscoveryBaseUrl, resolveModelCacheProviderId } from "./cache-provider-id";
|
|
34
|
+
import type { ModelManagerConfig } from "./descriptor-types";
|
|
34
35
|
|
|
35
36
|
const MODELS_DEV_URL = "https://catalog.stencil.so/models.json.zstd";
|
|
36
37
|
|
|
@@ -2833,6 +2834,22 @@ export const ALIBABA_TOKEN_PLAN_STATIC_MODELS: readonly ModelSpec<"openai-comple
|
|
|
2833
2834
|
},
|
|
2834
2835
|
];
|
|
2835
2836
|
|
|
2837
|
+
const ALIBABA_TOKEN_PLAN_NON_CHAT_MODEL_PREFIXES = [
|
|
2838
|
+
"fun-asr",
|
|
2839
|
+
"happyhorse-",
|
|
2840
|
+
"qwen-audio-",
|
|
2841
|
+
"qwen-image-",
|
|
2842
|
+
"text-embedding-",
|
|
2843
|
+
"wan2.7-",
|
|
2844
|
+
] as const;
|
|
2845
|
+
|
|
2846
|
+
function isAlibabaTokenPlanChatModelId(id: string): boolean {
|
|
2847
|
+
const normalized = id.trim().toLowerCase();
|
|
2848
|
+
return (
|
|
2849
|
+
normalized.length > 0 && !ALIBABA_TOKEN_PLAN_NON_CHAT_MODEL_PREFIXES.some(prefix => normalized.startsWith(prefix))
|
|
2850
|
+
);
|
|
2851
|
+
}
|
|
2852
|
+
|
|
2836
2853
|
export interface AlibabaTokenPlanModelManagerConfig {
|
|
2837
2854
|
apiKey?: string;
|
|
2838
2855
|
baseUrl?: string;
|
|
@@ -2859,19 +2876,30 @@ export function alibabaTokenPlanModelManagerOptions(
|
|
|
2859
2876
|
provider: "alibaba-token-plan",
|
|
2860
2877
|
baseUrl,
|
|
2861
2878
|
apiKey,
|
|
2862
|
-
filterModel: (_entry, model) =>
|
|
2863
|
-
ALIBABA_TOKEN_PLAN_STATIC_MODELS.some(reference => reference.id === model.id),
|
|
2879
|
+
filterModel: (_entry, model) => isAlibabaTokenPlanChatModelId(model.id),
|
|
2864
2880
|
mapModel: (_entry, defaults) => {
|
|
2865
2881
|
const reference = ALIBABA_TOKEN_PLAN_STATIC_MODELS.find(model => model.id === defaults.id);
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
|
|
2882
|
+
if (reference) {
|
|
2883
|
+
return {
|
|
2884
|
+
...reference,
|
|
2885
|
+
id: defaults.id,
|
|
2886
|
+
api: defaults.api,
|
|
2887
|
+
provider: defaults.provider,
|
|
2888
|
+
baseUrl: defaults.baseUrl,
|
|
2889
|
+
};
|
|
2890
|
+
}
|
|
2891
|
+
// DeepSeek V4 family models discovered dynamically need reasoning config
|
|
2892
|
+
if (defaults.id.startsWith("deepseek-v4")) {
|
|
2893
|
+
return {
|
|
2894
|
+
...defaults,
|
|
2895
|
+
reasoning: true,
|
|
2896
|
+
thinking: {
|
|
2897
|
+
mode: "effort" as const,
|
|
2898
|
+
efforts: [Effort.High, Effort.Max],
|
|
2899
|
+
},
|
|
2900
|
+
};
|
|
2901
|
+
}
|
|
2902
|
+
return defaults;
|
|
2875
2903
|
},
|
|
2876
2904
|
fetch: config?.fetch,
|
|
2877
2905
|
}),
|
|
@@ -3607,6 +3635,126 @@ export const META_MUSE_STATIC_MODELS: readonly ModelSpec<"openai-responses">[] =
|
|
|
3607
3635
|
},
|
|
3608
3636
|
];
|
|
3609
3637
|
|
|
3638
|
+
// ---------------------------------------------------------------------------
|
|
3639
|
+
// 15.76 Amazon Bedrock Mantle
|
|
3640
|
+
// ---------------------------------------------------------------------------
|
|
3641
|
+
|
|
3642
|
+
const BEDROCK_MANTLE_BASE_URL = "https://bedrock-mantle.{region}.api.aws/openai/v1";
|
|
3643
|
+
const BEDROCK_MANTLE_GPT_5_X_THINKING: ThinkingConfig = {
|
|
3644
|
+
mode: "effort",
|
|
3645
|
+
efforts: [Effort.Low, Effort.Medium, Effort.High, Effort.XHigh],
|
|
3646
|
+
};
|
|
3647
|
+
const BEDROCK_MANTLE_GPT_5_6_THINKING: ThinkingConfig = {
|
|
3648
|
+
mode: "effort",
|
|
3649
|
+
efforts: [Effort.Low, Effort.Medium, Effort.High, Effort.XHigh, Effort.Max],
|
|
3650
|
+
};
|
|
3651
|
+
|
|
3652
|
+
/**
|
|
3653
|
+
* OpenAI frontier models served exclusively through Bedrock Mantle's Responses
|
|
3654
|
+
* endpoint. Pricing is per million tokens from the Amazon Bedrock pricing page.
|
|
3655
|
+
*/
|
|
3656
|
+
export const BEDROCK_MANTLE_STATIC_MODELS: readonly ModelSpec<"openai-responses">[] = [
|
|
3657
|
+
{
|
|
3658
|
+
id: "openai.gpt-5.4",
|
|
3659
|
+
name: "GPT-5.4",
|
|
3660
|
+
api: "openai-responses",
|
|
3661
|
+
provider: "bedrock-mantle",
|
|
3662
|
+
baseUrl: BEDROCK_MANTLE_BASE_URL,
|
|
3663
|
+
reasoning: true,
|
|
3664
|
+
input: ["text", "image"],
|
|
3665
|
+
cost: { input: 2.75, output: 16.5, cacheRead: 0.275, cacheWrite: 0 },
|
|
3666
|
+
contextWindow: 272_000,
|
|
3667
|
+
maxTokens: 128_000,
|
|
3668
|
+
thinking: BEDROCK_MANTLE_GPT_5_X_THINKING,
|
|
3669
|
+
},
|
|
3670
|
+
{
|
|
3671
|
+
id: "openai.gpt-5.5",
|
|
3672
|
+
name: "GPT-5.5",
|
|
3673
|
+
api: "openai-responses",
|
|
3674
|
+
provider: "bedrock-mantle",
|
|
3675
|
+
baseUrl: BEDROCK_MANTLE_BASE_URL,
|
|
3676
|
+
reasoning: true,
|
|
3677
|
+
input: ["text", "image"],
|
|
3678
|
+
cost: { input: 5.5, output: 33, cacheRead: 0.55, cacheWrite: 0 },
|
|
3679
|
+
contextWindow: 272_000,
|
|
3680
|
+
maxTokens: 128_000,
|
|
3681
|
+
thinking: BEDROCK_MANTLE_GPT_5_X_THINKING,
|
|
3682
|
+
},
|
|
3683
|
+
{
|
|
3684
|
+
id: "openai.gpt-5.6-luna",
|
|
3685
|
+
name: "GPT-5.6 Luna",
|
|
3686
|
+
api: "openai-responses",
|
|
3687
|
+
provider: "bedrock-mantle",
|
|
3688
|
+
baseUrl: BEDROCK_MANTLE_BASE_URL,
|
|
3689
|
+
reasoning: true,
|
|
3690
|
+
input: ["text", "image"],
|
|
3691
|
+
cost: { input: 0.22, output: 1.32, cacheRead: 0.022, cacheWrite: 0.275 },
|
|
3692
|
+
contextWindow: 272_000,
|
|
3693
|
+
maxTokens: 128_000,
|
|
3694
|
+
thinking: BEDROCK_MANTLE_GPT_5_6_THINKING,
|
|
3695
|
+
},
|
|
3696
|
+
{
|
|
3697
|
+
id: "openai.gpt-5.6-sol",
|
|
3698
|
+
name: "GPT-5.6 Sol",
|
|
3699
|
+
api: "openai-responses",
|
|
3700
|
+
provider: "bedrock-mantle",
|
|
3701
|
+
baseUrl: BEDROCK_MANTLE_BASE_URL,
|
|
3702
|
+
reasoning: true,
|
|
3703
|
+
input: ["text", "image"],
|
|
3704
|
+
cost: { input: 5.5, output: 33, cacheRead: 0.55, cacheWrite: 6.88 },
|
|
3705
|
+
contextWindow: 272_000,
|
|
3706
|
+
maxTokens: 128_000,
|
|
3707
|
+
thinking: BEDROCK_MANTLE_GPT_5_6_THINKING,
|
|
3708
|
+
},
|
|
3709
|
+
{
|
|
3710
|
+
id: "openai.gpt-5.6-terra",
|
|
3711
|
+
name: "GPT-5.6 Terra",
|
|
3712
|
+
api: "openai-responses",
|
|
3713
|
+
provider: "bedrock-mantle",
|
|
3714
|
+
baseUrl: BEDROCK_MANTLE_BASE_URL,
|
|
3715
|
+
reasoning: true,
|
|
3716
|
+
input: ["text", "image"],
|
|
3717
|
+
cost: { input: 2.2, output: 13.2, cacheRead: 0.22, cacheWrite: 2.75 },
|
|
3718
|
+
contextWindow: 272_000,
|
|
3719
|
+
maxTokens: 128_000,
|
|
3720
|
+
thinking: BEDROCK_MANTLE_GPT_5_6_THINKING,
|
|
3721
|
+
},
|
|
3722
|
+
];
|
|
3723
|
+
|
|
3724
|
+
const BEDROCK_MANTLE_MODEL_BY_ID: Partial<Record<string, ModelSpec<"openai-responses">>> = Object.fromEntries(
|
|
3725
|
+
BEDROCK_MANTLE_STATIC_MODELS.map(model => [model.id, model]),
|
|
3726
|
+
);
|
|
3727
|
+
|
|
3728
|
+
export function bedrockMantleModelManagerOptions(
|
|
3729
|
+
config: ModelManagerConfig = {},
|
|
3730
|
+
): ModelManagerOptions<"openai-responses"> {
|
|
3731
|
+
const inferenceBaseUrl = config.baseUrl ?? BEDROCK_MANTLE_BASE_URL;
|
|
3732
|
+
const discoveryBaseUrl = inferenceBaseUrl.replace(/\/openai\/v1\/?$/, "/v1");
|
|
3733
|
+
return {
|
|
3734
|
+
providerId: "bedrock-mantle",
|
|
3735
|
+
staticModels: BEDROCK_MANTLE_STATIC_MODELS,
|
|
3736
|
+
// The bearer-scoped /v1/models response lists only the models enabled for
|
|
3737
|
+
// the account; a successful fetch replaces the static seed instead of
|
|
3738
|
+
// merging, so disabled models are not selectable.
|
|
3739
|
+
dynamicModelsAuthoritative: true,
|
|
3740
|
+
...(config.authenticated && {
|
|
3741
|
+
fetchDynamicModels: () =>
|
|
3742
|
+
fetchOpenAICompatibleModels({
|
|
3743
|
+
api: "openai-responses",
|
|
3744
|
+
provider: "bedrock-mantle",
|
|
3745
|
+
baseUrl: discoveryBaseUrl,
|
|
3746
|
+
fetch: config.fetch,
|
|
3747
|
+
mapModel: (entry, defaults) =>
|
|
3748
|
+
mapWithBundledReference(
|
|
3749
|
+
entry,
|
|
3750
|
+
{ ...defaults, baseUrl: BEDROCK_MANTLE_BASE_URL },
|
|
3751
|
+
BEDROCK_MANTLE_MODEL_BY_ID[defaults.id],
|
|
3752
|
+
),
|
|
3753
|
+
}),
|
|
3754
|
+
}),
|
|
3755
|
+
};
|
|
3756
|
+
}
|
|
3757
|
+
|
|
3610
3758
|
export interface MetaModelManagerConfig {
|
|
3611
3759
|
apiKey?: string;
|
|
3612
3760
|
baseUrl?: string;
|
|
@@ -5035,6 +5183,11 @@ export function githubCopilotModelManagerOptions(config?: GithubCopilotModelMana
|
|
|
5035
5183
|
}
|
|
5036
5184
|
: {}),
|
|
5037
5185
|
};
|
|
5186
|
+
const defaultCost = copilotTierCost(tokenPrices.defaultTier);
|
|
5187
|
+
if (defaultCost) {
|
|
5188
|
+
// Cache writes are not reported per tier; retain the bundled provider rate.
|
|
5189
|
+
base.cost = { ...defaultCost, cacheWrite: base.cost.cacheWrite };
|
|
5190
|
+
}
|
|
5038
5191
|
const variant = createCopilotLongContextVariant(
|
|
5039
5192
|
base,
|
|
5040
5193
|
contextWindow,
|