@standardagents/provider-pricing 0.45.1 → 0.45.3
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/README.md +10 -0
- package/dist/index.js +48 -12
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -42,6 +42,16 @@ use `jev-1.13.0` where a fixed version and price are required.
|
|
|
42
42
|
|
|
43
43
|
## Catalog audit sources
|
|
44
44
|
|
|
45
|
+
Re-synced 2026-11-10: added Gemini 4 Carbon at $2/$0.10/$10 input/cache/output
|
|
46
|
+
per MTok through November 30 (doubling December 1); corrected Ling 3.1 Flash
|
|
47
|
+
context to 1M; added Cloudflare Gemma 4 cache reads at $0.05/MTok and token-priced
|
|
48
|
+
M2M100, IndicTrans2, and Moondream 3.1. All ten providers were checked.
|
|
49
|
+
|
|
50
|
+
Re-synced 2026-11-09: confirmed new models across nine providers and corrected
|
|
51
|
+
Baseten cache-read rates. Groq was unchanged. Jev aliases now resolve to 1.14.
|
|
52
|
+
Google Argon promotional rates end 2026-11-30; 3.8 TTS rates end 2026-12-31.
|
|
53
|
+
Haiku 5.5 tiered cache writes require additional billing fields; left unlisted.
|
|
54
|
+
|
|
45
55
|
The static tables were last reconciled on 2026-09-01 against these authoritative
|
|
46
56
|
catalog and pricing surfaces:
|
|
47
57
|
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,10 @@ var TOKENS_PER_MILLION = 1e6;
|
|
|
3
3
|
var MICROCENTS_PER_DOLLAR = 1e8;
|
|
4
4
|
var XAI_TICKS_PER_DOLLAR = 1e10;
|
|
5
5
|
var ANTHROPIC_MODEL_PRICING = [
|
|
6
|
+
["claude-fable-5-2", { inputPerMillion: 8, cachedInputPerMillion: 0.2, outputPerMillion: 40 }],
|
|
7
|
+
["claude-mythos-5-2", { inputPerMillion: 8, cachedInputPerMillion: 0.2, outputPerMillion: 40 }],
|
|
8
|
+
["claude-opus-5-5", { inputPerMillion: 4, cachedInputPerMillion: 0.2, outputPerMillion: 20 }],
|
|
9
|
+
["claude-sonnet-5-5", { inputPerMillion: 2, cachedInputPerMillion: 0.1, outputPerMillion: 10 }],
|
|
6
10
|
// Fable/Mythos 5.1 cache hits use a model-specific 0.025x input rate.
|
|
7
11
|
["claude-fable-5-1", { inputPerMillion: 10, cachedInputPerMillion: 0.25, outputPerMillion: 50 }],
|
|
8
12
|
["claude-mythos-5-1", { inputPerMillion: 10, cachedInputPerMillion: 0.25, outputPerMillion: 50 }],
|
|
@@ -28,6 +32,7 @@ var ANTHROPIC_MODEL_PRICING = [
|
|
|
28
32
|
["claude-3-haiku", { inputPerMillion: 0.25, outputPerMillion: 1.25 }]
|
|
29
33
|
];
|
|
30
34
|
var CEREBRAS_MODEL_PRICING = {
|
|
35
|
+
"qwen-3.8-27b": { inputPerMillion: 0.99, outputPerMillion: 1.49, maxTokens: 131072 },
|
|
31
36
|
// Retain documented/enterprise models even when the public catalog omits them.
|
|
32
37
|
"zai-glm-4.7": { inputPerMillion: 2.25, outputPerMillion: 2.75, maxTokens: 64e3 },
|
|
33
38
|
"gpt-oss-120b": { inputPerMillion: 0.35, outputPerMillion: 0.75, maxTokens: 64e3 },
|
|
@@ -36,6 +41,10 @@ var CEREBRAS_MODEL_PRICING = {
|
|
|
36
41
|
"gemma-4-31b": { inputPerMillion: 0.99, outputPerMillion: 1.49, maxTokens: 4096 }
|
|
37
42
|
};
|
|
38
43
|
var NOVITA_MODEL_PRICING = {
|
|
44
|
+
"tencent/hy4": { inputPerMillion: 0.417, cachedInputPerMillion: 0.021, outputPerMillion: 1.2505, maxTokens: 1e6 },
|
|
45
|
+
"deepseek/deepseek-v4.1-flash-1017": { inputPerMillion: 0.3, cachedInputPerMillion: 6e-3, outputPerMillion: 1.2, maxTokens: 1048576 },
|
|
46
|
+
"zai-org/glm-5.3-flashx": { inputPerMillion: 0.37, cachedInputPerMillion: 0.075, outputPerMillion: 1.25, maxTokens: 1048576 },
|
|
47
|
+
"minimax/minimax-m3.1-flash": { inputPerMillion: 0.15, cachedInputPerMillion: 0.015, outputPerMillion: 0.6, maxTokens: 1e6 },
|
|
39
48
|
// FULL live-catalog sync 2026-09-01 (GET api.novita.ai/openai/v1/models;
|
|
40
49
|
// unit price_per_m / 10000 = $/M, including pricing.input_cache_read for
|
|
41
50
|
// cached-read rates — the API now reports them directly). Hosted routing
|
|
@@ -101,7 +110,7 @@ var NOVITA_MODEL_PRICING = {
|
|
|
101
110
|
"inclusionai/ling-3.0-flash-fin": { inputPerMillion: 0.075, cachedInputPerMillion: 0.015, outputPerMillion: 0.22, maxTokens: 262144 },
|
|
102
111
|
"inclusionai/ling-3.0-flash-sante": { inputPerMillion: 0.075, cachedInputPerMillion: 0.015, outputPerMillion: 0.22, maxTokens: 262144 },
|
|
103
112
|
"inclusionai/ling-3.0-flash-vl": { inputPerMillion: 0.075, cachedInputPerMillion: 0.015, outputPerMillion: 0.22, maxTokens: 262144 },
|
|
104
|
-
"inclusionai/ling-3.1-flash": { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 0.9, maxTokens:
|
|
113
|
+
"inclusionai/ling-3.1-flash": { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 0.9, maxTokens: 1e6 },
|
|
105
114
|
"inclusionai/ring-2.6-1t": { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 2.5 },
|
|
106
115
|
"kwaipilot/kat-coder-pro": { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 1.2 },
|
|
107
116
|
"meta-llama/llama-3-70b-instruct": { inputPerMillion: 0.51, outputPerMillion: 0.74 },
|
|
@@ -213,28 +222,47 @@ var NOVITA_MODEL_PRICING = {
|
|
|
213
222
|
"zai-org/glm-5v-turbo": { inputPerMillion: 1.2, cachedInputPerMillion: 0.24, outputPerMillion: 4 }
|
|
214
223
|
};
|
|
215
224
|
var BASETEN_MODEL_PRICING = {
|
|
225
|
+
"moonshotai/kimi-k3.1-pro": { inputPerMillion: 2, cachedInputPerMillion: 0.2, outputPerMillion: 10, maxTokens: 1e6 },
|
|
226
|
+
"decision-models/baseten-joey-2b-latest": { inputPerMillion: 0.01, cachedInputPerMillion: 0, outputPerMillion: 0, maxTokens: 16384 },
|
|
227
|
+
"decision-models/baseten-mammoth-27b-latest": { inputPerMillion: 0.1, cachedInputPerMillion: 0, outputPerMillion: 0, maxTokens: 16384 },
|
|
228
|
+
"decision-models/baseten-elephant-9b-latest": { inputPerMillion: 0.035, cachedInputPerMillion: 0, outputPerMillion: 0, maxTokens: 16384 },
|
|
229
|
+
"deepseek-ai/deepseek-v4.1-flash-1017-fast": { inputPerMillion: 0.6, cachedInputPerMillion: 0.014, outputPerMillion: 2.4, maxTokens: 1048576 },
|
|
230
|
+
"deepseek-ai/deepseek-v4.1-flash-1017": { inputPerMillion: 0.3, cachedInputPerMillion: 7e-3, outputPerMillion: 1.2, maxTokens: 1048576 },
|
|
231
|
+
"meta-models/muse-spark-open": { inputPerMillion: 1.25, cachedInputPerMillion: 0.15, outputPerMillion: 4.25, maxTokens: 1048576 },
|
|
232
|
+
"reflection/beam-1.0": { inputPerMillion: 0.4, cachedInputPerMillion: 0.04, outputPerMillion: 1.2, maxTokens: 1048576 },
|
|
233
|
+
"nvidia/nvidia-nemotron-3.5-super-vl-120b-a12b": { inputPerMillion: 0.2, cachedInputPerMillion: 0.04, outputPerMillion: 0.5, maxTokens: 1048576 },
|
|
234
|
+
"deepseek-ai/deepseek-v4.1-flash-fast": { inputPerMillion: 0.6, cachedInputPerMillion: 0.014, outputPerMillion: 2.4, maxTokens: 1048576 },
|
|
235
|
+
"deepseek-ai/deepseek-v4.1-flash": { inputPerMillion: 0.3, cachedInputPerMillion: 7e-3, outputPerMillion: 1.2, maxTokens: 1048576 },
|
|
236
|
+
"zai-org/glm-5.3-fast": { inputPerMillion: 2.1, cachedInputPerMillion: 0.21, outputPerMillion: 6.6, maxTokens: 1048576 },
|
|
216
237
|
// FULL live-catalog sync 2026-08-28 (GET api.baseten.co/v1/model_apis).
|
|
217
|
-
"deepseek-ai/deepseek-v4-flash-0731": { inputPerMillion: 0.13, outputPerMillion: 0.26, maxTokens: 1048576 },
|
|
238
|
+
"deepseek-ai/deepseek-v4-flash-0731": { inputPerMillion: 0.13, cachedInputPerMillion: 0.028, outputPerMillion: 0.26, maxTokens: 1048576 },
|
|
218
239
|
"deepseek-ai/deepseek-v4-pro": { inputPerMillion: 1.74, outputPerMillion: 3.48 },
|
|
219
|
-
"deepseek-ai/deepseek-v4-pro-0813": { inputPerMillion: 1.32, outputPerMillion: 3.96, maxTokens: 1048576 },
|
|
240
|
+
"deepseek-ai/deepseek-v4-pro-0813": { inputPerMillion: 1.32, cachedInputPerMillion: 0.132, outputPerMillion: 3.96, maxTokens: 1048576 },
|
|
220
241
|
"moonshotai/kimi-k2.5": { inputPerMillion: 0.6, outputPerMillion: 3 },
|
|
221
242
|
"moonshotai/kimi-k2.6": { inputPerMillion: 0.95, outputPerMillion: 4 },
|
|
222
243
|
"moonshotai/kimi-k2.7-code": { inputPerMillion: 0.95, outputPerMillion: 4 },
|
|
223
|
-
"moonshotai/kimi-k3": { inputPerMillion: 3, outputPerMillion: 15, maxTokens: 1048576 },
|
|
244
|
+
"moonshotai/kimi-k3": { inputPerMillion: 3, cachedInputPerMillion: 0.3, outputPerMillion: 15, maxTokens: 1048576 },
|
|
224
245
|
"nvidia/nemotron-120b-a12b": { inputPerMillion: 0.3, outputPerMillion: 0.75 },
|
|
225
|
-
"nvidia/nvidia-nemotron-3-ultra-550b-a55b": { inputPerMillion: 0.6, outputPerMillion: 2.4 },
|
|
226
|
-
"openai/gpt-oss-120b": { inputPerMillion: 0.1, outputPerMillion: 0.5 },
|
|
246
|
+
"nvidia/nvidia-nemotron-3-ultra-550b-a55b": { inputPerMillion: 0.6, cachedInputPerMillion: 0.12, outputPerMillion: 2.4 },
|
|
247
|
+
"openai/gpt-oss-120b": { inputPerMillion: 0.1, cachedInputPerMillion: 0.1, outputPerMillion: 0.5 },
|
|
227
248
|
"thinkingmachines/inkling": { inputPerMillion: 1, outputPerMillion: 4.05, maxTokens: 1048576 },
|
|
228
249
|
"thinkingmachines/inkling-small": { inputPerMillion: 0.5, outputPerMillion: 1.2, maxTokens: 1048576 },
|
|
229
250
|
"zai-org/glm-4.7": { inputPerMillion: 0.6, outputPerMillion: 2.2 },
|
|
230
251
|
"zai-org/glm-5": { inputPerMillion: 0.95, outputPerMillion: 3.15 },
|
|
231
252
|
"zai-org/glm-5.1": { inputPerMillion: 1.3, outputPerMillion: 4.3 },
|
|
232
|
-
"zai-org/glm-5.2": { inputPerMillion: 1.4, cachedInputPerMillion: 0.
|
|
233
|
-
"zai-org/glm-5.2-fast": { inputPerMillion: 2.1, outputPerMillion: 6.6, maxTokens: 1048576 },
|
|
234
|
-
"zai-org/glm-5.3": { inputPerMillion: 1.4, outputPerMillion: 4.4, maxTokens: 1048576 },
|
|
235
|
-
"zai-org/glm-5.3-flash": { inputPerMillion: 0.15, outputPerMillion: 0.5, maxTokens: 1048576 }
|
|
253
|
+
"zai-org/glm-5.2": { inputPerMillion: 1.4, cachedInputPerMillion: 0.14, outputPerMillion: 4.4 },
|
|
254
|
+
"zai-org/glm-5.2-fast": { inputPerMillion: 2.1, cachedInputPerMillion: 0.21, outputPerMillion: 6.6, maxTokens: 1048576 },
|
|
255
|
+
"zai-org/glm-5.3": { inputPerMillion: 1.4, cachedInputPerMillion: 0.14, outputPerMillion: 4.4, maxTokens: 1048576 },
|
|
256
|
+
"zai-org/glm-5.3-flash": { inputPerMillion: 0.15, cachedInputPerMillion: 0.03, outputPerMillion: 0.5, maxTokens: 1048576 }
|
|
236
257
|
};
|
|
237
258
|
var GOOGLE_MODEL_PRICING = {
|
|
259
|
+
// Promotional rates through 2026-11-30; double from 2026-12-01.
|
|
260
|
+
"gemini-4-carbon": { inputPerMillion: 2, cachedInputPerMillion: 0.1, outputPerMillion: 10 },
|
|
261
|
+
"gemini-4-argon": { inputPerMillion: 2, cachedInputPerMillion: 0.1, outputPerMillion: 10 },
|
|
262
|
+
"gemini-omni-1.2-flash": { inputPerMillion: 1.5, outputPerMillion: 9, outputByModalityPerMillion: { video: 12 } },
|
|
263
|
+
"gemini-nano-banana-2.1": { inputPerMillion: 1.5, outputPerMillion: 7.5, outputByModalityPerMillion: { image: 30 } },
|
|
264
|
+
"gemini-3.8-flash-tts": { inputPerMillion: 0.5, outputPerMillion: 9, outputByModalityPerMillion: { audio: 9 } },
|
|
265
|
+
"gemini-3.8-flash-lite-tts": { inputPerMillion: 0.5, outputPerMillion: 6, outputByModalityPerMillion: { audio: 6 } },
|
|
238
266
|
"gemini-3-pro-preview": {
|
|
239
267
|
inputPerMillion: 2,
|
|
240
268
|
outputPerMillion: 12,
|
|
@@ -513,6 +541,9 @@ var GOOGLE_MODEL_PRICING_PREFIXES = [
|
|
|
513
541
|
];
|
|
514
542
|
var OPENAI_LONG_CONTEXT_THRESHOLD = 272e3;
|
|
515
543
|
var OPENAI_MODEL_PRICING = {
|
|
544
|
+
"gpt-6.1-terra": { inputPerMillion: 1, cachedInputPerMillion: 0.05, outputPerMillion: 5, longInputPerMillion: 2, longCachedInputPerMillion: 0.1, longOutputPerMillion: 7.5, longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD },
|
|
545
|
+
"chat-latest": { inputPerMillion: 5, cachedInputPerMillion: 0.5, outputPerMillion: 30 },
|
|
546
|
+
"gpt-5.3-codex": { inputPerMillion: 1.75, cachedInputPerMillion: 0.175, outputPerMillion: 14 },
|
|
516
547
|
// GPT-6 family — synced 2026-10-01 against developers.openai.com/api/docs/pricing
|
|
517
548
|
// and /docs/models. The family is exactly gpt-6-astra, gpt-6-sol, gpt-6-luna,
|
|
518
549
|
// and gpt-6.1-sol (no mini/nano/pro variants, no 6.1 Luna or Astra). All
|
|
@@ -707,6 +738,7 @@ var GROQ_MODEL_PRICING = {
|
|
|
707
738
|
"qwen/qwen3.8-27b": { inputPerMillion: 0.8, cachedInputPerMillion: 0.4, outputPerMillion: 4 }
|
|
708
739
|
};
|
|
709
740
|
var XAI_MODEL_PRICING = {
|
|
741
|
+
"grok-4.7": { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 6, longInputPerMillion: 4, longCachedInputPerMillion: 1, longOutputPerMillion: 12, longContextThreshold: 2e5 },
|
|
710
742
|
"grok-4-0709": { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 15 },
|
|
711
743
|
"grok-4": { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 15 },
|
|
712
744
|
"grok-4-latest": { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 15 },
|
|
@@ -733,6 +765,10 @@ var XAI_MODEL_PRICING = {
|
|
|
733
765
|
"grok-3-mini-latest": { inputPerMillion: 0.3, cachedInputPerMillion: 0.075, outputPerMillion: 0.5 }
|
|
734
766
|
};
|
|
735
767
|
var CLOUDFLARE_MODEL_PRICING = {
|
|
768
|
+
"@cf/meta/m2m100-1.2b": { inputPerMillion: 0.342, outputPerMillion: 0.342 },
|
|
769
|
+
"@cf/ai4bharat/indictrans2-en-indic-1b": { inputPerMillion: 0.342, outputPerMillion: 0.342 },
|
|
770
|
+
"@cf/moondream/moondream3.1-9b-a2b": { inputPerMillion: 0.3, outputPerMillion: 1 },
|
|
771
|
+
"@cf/deepseek-ai/deepseek-v4.1-flash-1017": { inputPerMillion: 0.3, cachedInputPerMillion: 6e-3, outputPerMillion: 1.2 },
|
|
736
772
|
"@cf/meta/llama-3.2-1b-instruct": { inputPerMillion: 0.027, outputPerMillion: 0.201 },
|
|
737
773
|
"@cf/meta/llama-3.2-3b-instruct": { inputPerMillion: 0.0509, outputPerMillion: 0.335 },
|
|
738
774
|
"@cf/meta/llama-3.1-8b-instruct-fp8-fast": { inputPerMillion: 0.045, outputPerMillion: 0.384 },
|
|
@@ -763,7 +799,7 @@ var CLOUDFLARE_MODEL_PRICING = {
|
|
|
763
799
|
"@cf/moonshotai/kimi-k2.5": { inputPerMillion: 0.6, cachedInputPerMillion: 0.1, outputPerMillion: 3 },
|
|
764
800
|
"@cf/deepseek-ai/deepseek-v4-flash-0731": { inputPerMillion: 0.44, cachedInputPerMillion: 0.014, outputPerMillion: 1.32 },
|
|
765
801
|
"@cf/deepseek-ai/deepseek-v4-pro-0813": { inputPerMillion: 1.32, cachedInputPerMillion: 0.044, outputPerMillion: 3.96 },
|
|
766
|
-
"@cf/google/gemma-4-26b-a4b-it": { inputPerMillion: 0.1, outputPerMillion: 0.3 },
|
|
802
|
+
"@cf/google/gemma-4-26b-a4b-it": { inputPerMillion: 0.1, cachedInputPerMillion: 0.05, outputPerMillion: 0.3 },
|
|
767
803
|
"@cf/moonshotai/kimi-k2.6": { inputPerMillion: 0.95, cachedInputPerMillion: 0.16, outputPerMillion: 4 },
|
|
768
804
|
"@cf/moonshotai/kimi-k2.7-code": { inputPerMillion: 0.95, cachedInputPerMillion: 0.19, outputPerMillion: 4 },
|
|
769
805
|
"@cf/qwen/qwen3.8-27b": { inputPerMillion: 0.45, cachedInputPerMillion: 0.05, outputPerMillion: 3.2 },
|
|
@@ -980,7 +1016,7 @@ function calculateCloudflareUsageCost(modelId, usage) {
|
|
|
980
1016
|
}
|
|
981
1017
|
function getTypeSafeModelPricing(modelId) {
|
|
982
1018
|
const id = normalizeModelId(modelId);
|
|
983
|
-
if (id !== "jev-1.13.0" && id !== "jev-latest" && id !== "jev-preview") return void 0;
|
|
1019
|
+
if (id !== "jev-1.14.0" && id !== "jev-1.13.0" && id !== "jev-latest" && id !== "jev-preview") return void 0;
|
|
984
1020
|
return { inputPerMillion: 0.042, outputPerMillion: 0, maxTokens: 64e3, source: "typesafe-static" };
|
|
985
1021
|
}
|
|
986
1022
|
function calculateTypeSafeUsageCost(modelId, usage) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["const TOKENS_PER_MILLION = 1_000_000;\nexport const MICROCENTS_PER_DOLLAR = 100_000_000;\nconst XAI_TICKS_PER_DOLLAR = 10_000_000_000;\n\nexport type ProviderPricingName =\n | 'anthropic'\n | 'baseten'\n | 'cerebras'\n | 'cloudflare'\n | 'google'\n | 'groq'\n | 'novita'\n | 'openai'\n | 'typesafe'\n | 'xai';\n\nexport interface ProviderUsageLike {\n promptTokens: number;\n completionTokens: number;\n cachedTokens?: number;\n reasoningTokens?: number;\n}\n\nexport interface PlatformTokenUsageLike {\n input_tokens: number;\n output_tokens: number;\n cached_tokens?: number;\n reasoning_tokens?: number;\n prompt_token_details?: GoogleModalityTokenCount[];\n completion_token_details?: GoogleModalityTokenCount[];\n cached_token_details?: GoogleModalityTokenCount[];\n image_count?: number;\n cache_creation_input_tokens?: number;\n cache_creation_5m_input_tokens?: number;\n cache_creation_1h_input_tokens?: number;\n cache_read_input_tokens?: number;\n}\n\nexport interface ProviderModelPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n longInputPerMillion?: number;\n longOutputPerMillion?: number;\n longCachedInputPerMillion?: number;\n longContextThreshold?: number;\n maxTokens?: number;\n source: `${ProviderPricingName}-static`;\n}\n\nexport interface AnthropicModelPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n}\n\nexport interface AnthropicUsageBuckets {\n inputTokens: number;\n outputTokens: number;\n cacheReadTokens: number;\n cacheWrite5mTokens: number;\n cacheWrite1hTokens: number;\n}\n\nconst ANTHROPIC_MODEL_PRICING: Array<[prefix: string, pricing: AnthropicModelPricing]> = [\n // Fable/Mythos 5.1 cache hits use a model-specific 0.025x input rate.\n ['claude-fable-5-1', { inputPerMillion: 10, cachedInputPerMillion: 0.25, outputPerMillion: 50 }],\n ['claude-mythos-5-1', { inputPerMillion: 10, cachedInputPerMillion: 0.25, outputPerMillion: 50 }],\n ['claude-fable-5', { inputPerMillion: 10, outputPerMillion: 50 }],\n ['claude-mythos', { inputPerMillion: 10, outputPerMillion: 50 }],\n ['claude-opus-5', { inputPerMillion: 5, outputPerMillion: 25 }],\n ['claude-opus-4-8', { inputPerMillion: 5, outputPerMillion: 25 }],\n ['claude-opus-4-7', { inputPerMillion: 5, outputPerMillion: 25 }],\n ['claude-opus-4-6', { inputPerMillion: 5, outputPerMillion: 25 }],\n ['claude-opus-4-5', { inputPerMillion: 5, outputPerMillion: 25 }],\n ['claude-opus-4-1', { inputPerMillion: 15, outputPerMillion: 75 }],\n ['claude-opus-4', { inputPerMillion: 15, outputPerMillion: 75 }],\n // Current list pricing reconfirmed from Anthropic's Sonnet 5 model page on 2026-09-01.\n ['claude-sonnet-5', { inputPerMillion: 2, outputPerMillion: 10 }],\n ['claude-sonnet-4-6', { inputPerMillion: 3, outputPerMillion: 15 }],\n ['claude-sonnet-4-5', { inputPerMillion: 3, outputPerMillion: 15 }],\n ['claude-sonnet-4', { inputPerMillion: 3, outputPerMillion: 15 }],\n ['claude-haiku-4-5', { inputPerMillion: 1, outputPerMillion: 5 }],\n ['claude-3-7-sonnet', { inputPerMillion: 3, outputPerMillion: 15 }],\n ['claude-3-5-sonnet', { inputPerMillion: 3, outputPerMillion: 15 }],\n ['claude-3-5-haiku', { inputPerMillion: 0.8, outputPerMillion: 4 }],\n ['claude-3-opus', { inputPerMillion: 15, outputPerMillion: 75 }],\n ['claude-3-haiku', { inputPerMillion: 0.25, outputPerMillion: 1.25 }],\n];\n\nexport interface CerebrasModelPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n maxTokens?: number;\n}\n\nconst CEREBRAS_MODEL_PRICING: Record<string, CerebrasModelPricing> = {\n // Retain documented/enterprise models even when the public catalog omits them.\n 'zai-glm-4.7': { inputPerMillion: 2.25, outputPerMillion: 2.75, maxTokens: 64_000 },\n 'gpt-oss-120b': { inputPerMillion: 0.35, outputPerMillion: 0.75, maxTokens: 64_000 },\n 'llama3.1-8b': { inputPerMillion: 0.1, outputPerMillion: 0.1, maxTokens: 8_192 },\n 'qwen-3-235b-a22b-instruct-2507': { inputPerMillion: 0.6, outputPerMillion: 1.2, maxTokens: 40_960 },\n 'gemma-4-31b': { inputPerMillion: 0.99, outputPerMillion: 1.49, maxTokens: 4_096 },\n};\n\n// Novita and Baseten are OpenAI-compatible \"custom\" providers with no built-in\n// runtime pricing, so unpriced requests on them log $0. Prices are USD per\n// million tokens sourced from each provider's live catalog\n// (GET api.novita.ai/openai/v1/models, GET api.baseten.co/v1/model_apis).\n// Keep model keys lowercase to match normalizeModelId. These tables are a\n// static fallback; provider packages that can report exact per-request cost\n// (usage.cost) still take precedence in the request-log math.\nexport interface OpenAICompatibleModelPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n /** Rates for prompts of at least `longContextThreshold` tokens. */\n longInputPerMillion?: number;\n longOutputPerMillion?: number;\n longCachedInputPerMillion?: number;\n longContextThreshold?: number;\n maxTokens?: number;\n}\n\nconst NOVITA_MODEL_PRICING: Record<string, OpenAICompatibleModelPricing> = {\n // FULL live-catalog sync 2026-09-01 (GET api.novita.ai/openai/v1/models;\n // unit price_per_m / 10000 = $/M, including pricing.input_cache_read for\n // cached-read rates — the API now reports them directly). Hosted routing\n // fails closed on missing entries, so this table must cover every model\n // Novita serves. Models without a cache-read price bill cached tokens at\n // the input rate. Catalog entries with no/zero token price (unpriced\n // previews, internal test ids) stay unlisted, as do image models\n // (per-image billing is not modeled yet).\n // Re-synced 2026-10-18 (agentbuilder-platform#22): added the newly listed\n // priced chat models (GLM-5.3-P and other `-p` variants, Ling 3.x, MiMo\n // V2.6, Step 5, HY4) and corrected rates that drifted from the catalog\n // (GLM-5.3-Flash's discount ended; DeepSeek V4 Pro 0813 cache read;\n // Macaron Venti output). Rows Novita has since retired stay listed.\n 'baichuan/baichuan-m2-32b': { inputPerMillion: 0.07, outputPerMillion: 0.07 },\n 'baidu/cobuddy': { inputPerMillion: 0.28, cachedInputPerMillion: 0.07, outputPerMillion: 1.13 },\n 'baidu/ernie-4.5-21b-a3b': { inputPerMillion: 0.07, outputPerMillion: 0.28 },\n 'baidu/ernie-4.5-21b-a3b-thinking': { inputPerMillion: 0.07, outputPerMillion: 0.28 },\n 'baidu/ernie-4.5-300b-a47b-paddle': { inputPerMillion: 0.28, outputPerMillion: 1.1 },\n 'baidu/ernie-4.5-vl-28b-a3b': { inputPerMillion: 0.14, outputPerMillion: 0.56 },\n 'baidu/ernie-4.5-vl-28b-a3b-thinking': { inputPerMillion: 0.39, outputPerMillion: 0.39 },\n 'baidu/ernie-4.5-vl-424b-a47b': { inputPerMillion: 0.42, outputPerMillion: 1.25 },\n 'deepseek/deepseek-ocr': { inputPerMillion: 0.03, outputPerMillion: 0.03 },\n 'deepseek/deepseek-ocr-2': { inputPerMillion: 0.03, outputPerMillion: 0.03 },\n 'deepseek/deepseek-prover-v2-671b': { inputPerMillion: 0.7, outputPerMillion: 2.5 },\n 'deepseek/deepseek-r1': { inputPerMillion: 4, outputPerMillion: 4 },\n 'deepseek/deepseek-r1-0528': { inputPerMillion: 0.7, cachedInputPerMillion: 0.35, outputPerMillion: 2.5 },\n 'deepseek/deepseek-r1-0528-qwen3-8b': { inputPerMillion: 0.06, outputPerMillion: 0.09 },\n 'deepseek/deepseek-r1-distill-llama-70b': { inputPerMillion: 0.8, outputPerMillion: 0.8 },\n 'deepseek/deepseek-r1-distill-qwen-14b': { inputPerMillion: 0.15, outputPerMillion: 0.15 },\n 'deepseek/deepseek-r1-distill-qwen-32b': { inputPerMillion: 0.3, outputPerMillion: 0.3 },\n 'deepseek/deepseek-r1-turbo': { inputPerMillion: 0.7, outputPerMillion: 2.5 },\n 'deepseek/deepseek-r1/community': { inputPerMillion: 4, outputPerMillion: 4 },\n 'deepseek/deepseek-v3-0324': { inputPerMillion: 0.27, cachedInputPerMillion: 0.135, outputPerMillion: 1.12 },\n 'deepseek/deepseek-v3-turbo': { inputPerMillion: 0.4, outputPerMillion: 1.3 },\n 'deepseek/deepseek-v3.1': { inputPerMillion: 0.27, cachedInputPerMillion: 0.135, outputPerMillion: 1 },\n 'deepseek/deepseek-v3.1-terminus': { inputPerMillion: 0.27, cachedInputPerMillion: 0.135, outputPerMillion: 1 },\n 'deepseek/deepseek-v3.2': { inputPerMillion: 0.269, cachedInputPerMillion: 0.1345, outputPerMillion: 0.4 },\n 'deepseek/deepseek-v3.2-exp': { inputPerMillion: 0.27, outputPerMillion: 0.41 },\n 'deepseek/deepseek-v3/community': { inputPerMillion: 0.89, outputPerMillion: 0.89 },\n 'deepseek/deepseek-v4-flash': { inputPerMillion: 0.14, cachedInputPerMillion: 0.028, outputPerMillion: 0.28, maxTokens: 1_048_576 },\n 'deepseek/deepseek-v4-flash-0731': { inputPerMillion: 0.44, cachedInputPerMillion: 0.028, outputPerMillion: 1.32, maxTokens: 1_048_576 },\n 'deepseek/deepseek-v4-flash-0731-p': { inputPerMillion: 0.44, cachedInputPerMillion: 0.0148, outputPerMillion: 1.32, maxTokens: 1_048_576 },\n 'deepseek/deepseek-v4-flash-vision-exp': { inputPerMillion: 0.44, cachedInputPerMillion: 0.028, outputPerMillion: 1.32, maxTokens: 1_048_576 },\n 'deepseek/deepseek-v4-pro': { inputPerMillion: 1.6, cachedInputPerMillion: 0.135, outputPerMillion: 3.2 },\n 'deepseek/deepseek-v4-pro-0813': { inputPerMillion: 1.32, cachedInputPerMillion: 0.044, outputPerMillion: 3.96, maxTokens: 1_048_576 },\n 'deepseek/deepseek-v4-pro-0813-p': { inputPerMillion: 1.32, cachedInputPerMillion: 0.044, outputPerMillion: 3.96, maxTokens: 1_048_576 },\n // Added 2026-10-01 from the live catalog (price_per_m_decimal: 0.30 / 1.20,\n // input_cache_read 0.006; 1,048,576 context, 393,216 max output).\n 'deepseek/deepseek-v4.1-flash': { inputPerMillion: 0.3, cachedInputPerMillion: 0.006, outputPerMillion: 1.2, maxTokens: 1_048_576 },\n 'deepseek/deepseek-v4.1-flash-dst': { inputPerMillion: 0.3, cachedInputPerMillion: 0.006, outputPerMillion: 1.2, maxTokens: 1_048_576 },\n 'deepseek/deepseek-v4.1-flash-p': { inputPerMillion: 0.3, cachedInputPerMillion: 0.006, outputPerMillion: 1.2, maxTokens: 1_048_576 },\n 'deepseek/deepseek_v3': { inputPerMillion: 0.89, outputPerMillion: 0.89 },\n 'elephant': { inputPerMillion: 0.1, cachedInputPerMillion: 0.02, outputPerMillion: 0.3 },\n 'google/gemma-3-12b-it': { inputPerMillion: 0.05, outputPerMillion: 0.1 },\n 'google/gemma-3-27b-it': { inputPerMillion: 0.119, outputPerMillion: 0.2 },\n 'google/gemma-4-26b-a4b-it': { inputPerMillion: 0.13, outputPerMillion: 0.4 },\n 'google/gemma-4-31b-it': { inputPerMillion: 0.14, outputPerMillion: 0.4 },\n 'gryphe/mythomax-l2-13b': { inputPerMillion: 0.09, outputPerMillion: 0.09 },\n 'inclusionai/ling-2.6-1t': { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 2.5 },\n 'inclusionai/ling-2.6-flash': { inputPerMillion: 0.1, cachedInputPerMillion: 0.02, outputPerMillion: 0.3, maxTokens: 262_144 },\n 'inclusionai/ling-3.0-flash': { inputPerMillion: 0.06, cachedInputPerMillion: 0.012, outputPerMillion: 0.18, maxTokens: 262_144 },\n 'inclusionai/ling-3.0-flash-fast': { inputPerMillion: 0.06, cachedInputPerMillion: 0.012, outputPerMillion: 0.18, maxTokens: 262_144 },\n 'inclusionai/ling-3.0-flash-fin': { inputPerMillion: 0.075, cachedInputPerMillion: 0.015, outputPerMillion: 0.22, maxTokens: 262_144 },\n 'inclusionai/ling-3.0-flash-sante': { inputPerMillion: 0.075, cachedInputPerMillion: 0.015, outputPerMillion: 0.22, maxTokens: 262_144 },\n 'inclusionai/ling-3.0-flash-vl': { inputPerMillion: 0.075, cachedInputPerMillion: 0.015, outputPerMillion: 0.22, maxTokens: 262_144 },\n 'inclusionai/ling-3.1-flash': { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 0.9, maxTokens: 262_144 },\n 'inclusionai/ring-2.6-1t': { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 2.5 },\n 'kwaipilot/kat-coder-pro': { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 1.2 },\n 'meta-llama/llama-3-70b-instruct': { inputPerMillion: 0.51, outputPerMillion: 0.74 },\n 'meta-llama/llama-3-8b-instruct': { inputPerMillion: 0.04, outputPerMillion: 0.04 },\n 'meta-llama/llama-3.1-8b-instruct': { inputPerMillion: 0.02, outputPerMillion: 0.05 },\n 'meta-llama/llama-3.2-1b-instruct': { inputPerMillion: 0.02, outputPerMillion: 0.02 },\n 'meta-llama/llama-3.2-3b-instruct': { inputPerMillion: 0.03, outputPerMillion: 0.05 },\n 'meta-llama/llama-3.3-70b-instruct': { inputPerMillion: 0.135, outputPerMillion: 0.4 },\n 'meta-llama/llama-4-maverick-17b-128e-instruct-fp8': { inputPerMillion: 0.27, outputPerMillion: 0.85 },\n 'meta-llama/llama-4-scout-17b-16e-instruct': { inputPerMillion: 0.18, outputPerMillion: 0.59 },\n 'microsoft/wizardlm-2-8x22b': { inputPerMillion: 0.62, outputPerMillion: 0.62 },\n 'mindai/macaron-v1-tall': { inputPerMillion: 0.2475, cachedInputPerMillion: 0.044, outputPerMillion: 1.43, maxTokens: 262_144 },\n 'mindai/macaron-v1-venti': { inputPerMillion: 0.825, cachedInputPerMillion: 0.165, outputPerMillion: 2.475, maxTokens: 1_048_576 },\n 'minimax/minimax-m2': { inputPerMillion: 0.3, cachedInputPerMillion: 0.03, outputPerMillion: 1.2 },\n 'minimax/minimax-m2.1': { inputPerMillion: 0.3, cachedInputPerMillion: 0.03, outputPerMillion: 1.2 },\n 'minimax/minimax-m2.5': { inputPerMillion: 0.3, cachedInputPerMillion: 0.03, outputPerMillion: 1.2 },\n 'minimax/minimax-m2.5-highspeed': { inputPerMillion: 0.6, cachedInputPerMillion: 0.03, outputPerMillion: 2.4 },\n 'minimax/minimax-m2.7': { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 1.2 },\n 'minimax/minimax-m2.7-highspeed': { inputPerMillion: 0.6, cachedInputPerMillion: 0.06, outputPerMillion: 2.4 },\n // Tiered in the catalog (is_tiered_billing): prompts of 524,288+ tokens\n // bill every rate at double the base tier.\n 'minimax/minimax-m3': { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 1.2, longInputPerMillion: 0.6, longCachedInputPerMillion: 0.12, longOutputPerMillion: 2.4, longContextThreshold: 524_288 },\n 'minimaxai/minimax-m1-80k': { inputPerMillion: 0.55, outputPerMillion: 2.2 },\n 'mistralai/mistral-nemo': { inputPerMillion: 0.04, outputPerMillion: 0.17 },\n 'moonshotai/kimi-k2-0905': { inputPerMillion: 0.6, outputPerMillion: 2.5 },\n 'moonshotai/kimi-k2-instruct': { inputPerMillion: 0.57, outputPerMillion: 2.3 },\n 'moonshotai/kimi-k2-thinking': { inputPerMillion: 0.6, cachedInputPerMillion: 0.15, outputPerMillion: 2.5 },\n 'moonshotai/kimi-k2.5': { inputPerMillion: 0.6, cachedInputPerMillion: 0.1, outputPerMillion: 3 },\n 'moonshotai/kimi-k2.6': { inputPerMillion: 0.8, cachedInputPerMillion: 0.16, outputPerMillion: 3.4 },\n 'moonshotai/kimi-k2.7-code': { inputPerMillion: 0.95, cachedInputPerMillion: 0.19, outputPerMillion: 4 },\n 'moonshotai/kimi-k3': { inputPerMillion: 3, cachedInputPerMillion: 0.3, outputPerMillion: 15 },\n 'moonshotai/kimi-k3-p': { inputPerMillion: 3, cachedInputPerMillion: 0.3, outputPerMillion: 15, maxTokens: 1_048_576 },\n 'nousresearch/hermes-2-pro-llama-3-8b': { inputPerMillion: 0.14, outputPerMillion: 0.14 },\n 'nousresearch/nous-hermes-llama2-13b': { inputPerMillion: 0.17, outputPerMillion: 0.17 },\n 'nvidia/nemotron-3-nano-30b-a3b': { inputPerMillion: 0.05, outputPerMillion: 0.2 },\n 'openai/gpt-oss-120b': { inputPerMillion: 0.05, outputPerMillion: 0.25 },\n 'openai/gpt-oss-20b': { inputPerMillion: 0.04, outputPerMillion: 0.15 },\n 'openchat/openchat-7b': { inputPerMillion: 0.06, outputPerMillion: 0.06 },\n 'paddlepaddle/paddleocr-vl': { inputPerMillion: 0.02, outputPerMillion: 0.02 },\n 'qwen/qwen-2-7b-instruct': { inputPerMillion: 0.054, outputPerMillion: 0.054 },\n 'qwen/qwen-2-vl-72b-instruct': { inputPerMillion: 0.45, outputPerMillion: 0.45 },\n 'qwen/qwen-2.5-72b-instruct': { inputPerMillion: 0.38, outputPerMillion: 0.4 },\n 'qwen/qwen-mt-plus': { inputPerMillion: 0.25, outputPerMillion: 0.75 },\n 'qwen/qwen2.5-7b-instruct': { inputPerMillion: 0.07, outputPerMillion: 0.07 },\n 'qwen/qwen2.5-vl-72b-instruct': { inputPerMillion: 0.8, outputPerMillion: 0.8 },\n 'qwen/qwen3-235b-a22b-fp8': { inputPerMillion: 0.2, outputPerMillion: 0.8 },\n 'qwen/qwen3-235b-a22b-instruct-2507': { inputPerMillion: 0.09, outputPerMillion: 0.58 },\n 'qwen/qwen3-235b-a22b-thinking-2507': { inputPerMillion: 0.3, outputPerMillion: 3 },\n 'qwen/qwen3-30b-a3b-fp8': { inputPerMillion: 0.09, outputPerMillion: 0.45 },\n 'qwen/qwen3-32b-fp8': { inputPerMillion: 0.1, outputPerMillion: 0.45 },\n 'qwen/qwen3-4b-fp8': { inputPerMillion: 0.03, outputPerMillion: 0.03 },\n 'qwen/qwen3-8b-fp8': { inputPerMillion: 0.035, outputPerMillion: 0.138 },\n 'qwen/qwen3-coder-30b-a3b-instruct': { inputPerMillion: 0.07, outputPerMillion: 0.27 },\n 'qwen/qwen3-coder-480b-a35b-instruct': { inputPerMillion: 0.38, outputPerMillion: 1.55 },\n 'qwen/qwen3-coder-next': { inputPerMillion: 0.2, outputPerMillion: 1.5 },\n 'qwen/qwen3-max': { inputPerMillion: 2.11, outputPerMillion: 8.45 },\n 'qwen/qwen3-next-80b-a3b-instruct': { inputPerMillion: 0.15, outputPerMillion: 1.5 },\n 'qwen/qwen3-next-80b-a3b-thinking': { inputPerMillion: 0.15, outputPerMillion: 1.5 },\n 'qwen/qwen3-omni-30b-a3b-instruct': { inputPerMillion: 0.25, outputPerMillion: 0.97 },\n 'qwen/qwen3-omni-30b-a3b-thinking': { inputPerMillion: 0.25, outputPerMillion: 0.97 },\n 'qwen/qwen3-vl-235b-a22b-instruct': { inputPerMillion: 0.3, outputPerMillion: 1.5 },\n 'qwen/qwen3-vl-235b-a22b-thinking': { inputPerMillion: 0.98, outputPerMillion: 3.95 },\n 'qwen/qwen3-vl-30b-a3b-instruct': { inputPerMillion: 0.2, outputPerMillion: 0.7 },\n 'qwen/qwen3-vl-30b-a3b-thinking': { inputPerMillion: 0.2, outputPerMillion: 1 },\n 'qwen/qwen3-vl-8b-instruct': { inputPerMillion: 0.08, outputPerMillion: 0.5 },\n 'qwen/qwen3.5-122b-a10b': { inputPerMillion: 0.4, outputPerMillion: 3.2 },\n 'qwen/qwen3.5-27b': { inputPerMillion: 0.3, outputPerMillion: 2.4 },\n 'qwen/qwen3.5-35b-a3b': { inputPerMillion: 0.25, outputPerMillion: 2 },\n 'qwen/qwen3.5-397b-a17b': { inputPerMillion: 0.6, outputPerMillion: 3.6 },\n 'qwen/qwen3.6-27b': { inputPerMillion: 0.6, outputPerMillion: 3.6 },\n 'qwen/qwen3.6-35b-a3b': { inputPerMillion: 0.248, outputPerMillion: 1.485 },\n 'qwen/qwen3.7-max': { inputPerMillion: 1.25, cachedInputPerMillion: 0.25, outputPerMillion: 3.75 },\n 'qwen/qwen3.8-2.4t-a95b': { inputPerMillion: 2, cachedInputPerMillion: 0.25, outputPerMillion: 6, maxTokens: 1_000_000 },\n 'qwen/qwen3.8-27b': { inputPerMillion: 0.42, cachedInputPerMillion: 0.085, outputPerMillion: 3, maxTokens: 1_000_000 },\n 'qwen/qwen3.8-flash': { inputPerMillion: 0.15, cachedInputPerMillion: 0.016, outputPerMillion: 0.47, maxTokens: 1_000_000 },\n 'qwen/qwen3.8-max': { inputPerMillion: 2, cachedInputPerMillion: 0.25, outputPerMillion: 6, maxTokens: 1_000_000 },\n 'sao10k/l3-70b-euryale-v2.1': { inputPerMillion: 1.48, outputPerMillion: 1.48 },\n 'sao10k/l3-8b-lunaris': { inputPerMillion: 0.05, outputPerMillion: 0.05 },\n 'sao10k/l3-8b-stheno-v3.2': { inputPerMillion: 0.05, outputPerMillion: 0.05 },\n 'sao10k/l31-70b-euryale-v2.2': { inputPerMillion: 1.48, outputPerMillion: 1.48 },\n 'stepfun/step-3.7-flash': { inputPerMillion: 0.2, cachedInputPerMillion: 0.04, outputPerMillion: 1.15 },\n 'stepfun/step-5-preview': { inputPerMillion: 1, cachedInputPerMillion: 0.1, outputPerMillion: 2.7, maxTokens: 1_000_000 },\n 'teknium/openhermes-2.5-mistral-7b': { inputPerMillion: 0.17, outputPerMillion: 0.17 },\n 'tencent/hy3': { inputPerMillion: 0.14, cachedInputPerMillion: 0.035, outputPerMillion: 0.58, maxTokens: 262_144 },\n 'tencent/hy4-preview': { inputPerMillion: 0.834, cachedInputPerMillion: 0.042, outputPerMillion: 2.501, maxTokens: 1_000_000 },\n 'thudm/glm-4-32b-0414': { inputPerMillion: 0.55, outputPerMillion: 1.66 },\n 'xiaomimimo/mimo-v2-flash': { inputPerMillion: 0.11, cachedInputPerMillion: 0.024, outputPerMillion: 0.33 },\n 'xiaomimimo/mimo-v2-pro': { inputPerMillion: 2, cachedInputPerMillion: 0.4, outputPerMillion: 6 },\n 'xiaomimimo/mimo-v2.5': { inputPerMillion: 0.168, cachedInputPerMillion: 0.0034, outputPerMillion: 0.336 },\n 'xiaomimimo/mimo-v2.5-pro': { inputPerMillion: 0.522, cachedInputPerMillion: 0.0043, outputPerMillion: 1.044 },\n 'xiaomimimo/mimo-v2.6-flash': { inputPerMillion: 0.14, cachedInputPerMillion: 0.0028, outputPerMillion: 0.28, maxTokens: 1_048_576 },\n 'xiaomimimo/mimo-v2.6-pro': { inputPerMillion: 0.435, cachedInputPerMillion: 0.0036, outputPerMillion: 0.87, maxTokens: 1_048_576 },\n 'zai-org/autoglm-phone-9b-multilingual': { inputPerMillion: 0.035, outputPerMillion: 0.138 },\n 'zai-org/glm-4.5': { inputPerMillion: 0.6, cachedInputPerMillion: 0.11, outputPerMillion: 2.2 },\n 'zai-org/glm-4.5-air': { inputPerMillion: 0.13, cachedInputPerMillion: 0.025, outputPerMillion: 0.85 },\n 'zai-org/glm-4.5v': { inputPerMillion: 0.6, cachedInputPerMillion: 0.11, outputPerMillion: 1.8 },\n 'zai-org/glm-4.6': { inputPerMillion: 0.55, cachedInputPerMillion: 0.11, outputPerMillion: 2.2 },\n 'zai-org/glm-4.6v': { inputPerMillion: 0.3, cachedInputPerMillion: 0.055, outputPerMillion: 0.9 },\n 'zai-org/glm-4.7': { inputPerMillion: 0.6, cachedInputPerMillion: 0.11, outputPerMillion: 2.2 },\n 'zai-org/glm-4.7-flash': { inputPerMillion: 0.07, cachedInputPerMillion: 0.01, outputPerMillion: 0.4, maxTokens: 200_000 },\n 'zai-org/glm-4.7-h': { inputPerMillion: 0.6, cachedInputPerMillion: 0.11, outputPerMillion: 2.2 },\n 'zai-org/glm-5': { inputPerMillion: 1, cachedInputPerMillion: 0.2, outputPerMillion: 3.2 },\n 'zai-org/glm-5-turbo': { inputPerMillion: 1.2, cachedInputPerMillion: 0.24, outputPerMillion: 4 },\n 'zai-org/glm-5.1': { inputPerMillion: 1.38, cachedInputPerMillion: 0.26, outputPerMillion: 4.4 },\n 'zai-org/glm-5.2': { inputPerMillion: 1.4, cachedInputPerMillion: 0.26, outputPerMillion: 4.4, maxTokens: 1_048_576 },\n 'zai-org/glm-5.3': { inputPerMillion: 1.4, cachedInputPerMillion: 0.26, outputPerMillion: 4.4, maxTokens: 1_048_576 },\n 'zai-org/glm-5.3-flash': { inputPerMillion: 0.15, cachedInputPerMillion: 0.03, outputPerMillion: 0.5, maxTokens: 1_048_576 },\n 'zai-org/glm-5.3-p': { inputPerMillion: 1.4, cachedInputPerMillion: 0.26, outputPerMillion: 4.4, maxTokens: 1_048_576 },\n 'zai-org/glm-5v-turbo': { inputPerMillion: 1.2, cachedInputPerMillion: 0.24, outputPerMillion: 4 },\n};\n\nconst BASETEN_MODEL_PRICING: Record<string, OpenAICompatibleModelPricing> = {\n // FULL live-catalog sync 2026-08-28 (GET api.baseten.co/v1/model_apis).\n 'deepseek-ai/deepseek-v4-flash-0731': { inputPerMillion: 0.13, outputPerMillion: 0.26, maxTokens: 1_048_576 },\n 'deepseek-ai/deepseek-v4-pro': { inputPerMillion: 1.74, outputPerMillion: 3.48 },\n 'deepseek-ai/deepseek-v4-pro-0813': { inputPerMillion: 1.32, outputPerMillion: 3.96, maxTokens: 1_048_576 },\n 'moonshotai/kimi-k2.5': { inputPerMillion: 0.6, outputPerMillion: 3 },\n 'moonshotai/kimi-k2.6': { inputPerMillion: 0.95, outputPerMillion: 4 },\n 'moonshotai/kimi-k2.7-code': { inputPerMillion: 0.95, outputPerMillion: 4 },\n 'moonshotai/kimi-k3': { inputPerMillion: 3, outputPerMillion: 15, maxTokens: 1_048_576 },\n 'nvidia/nemotron-120b-a12b': { inputPerMillion: 0.3, outputPerMillion: 0.75 },\n 'nvidia/nvidia-nemotron-3-ultra-550b-a55b': { inputPerMillion: 0.6, outputPerMillion: 2.4 },\n 'openai/gpt-oss-120b': { inputPerMillion: 0.1, outputPerMillion: 0.5 },\n 'thinkingmachines/inkling': { inputPerMillion: 1, outputPerMillion: 4.05, maxTokens: 1_048_576 },\n 'thinkingmachines/inkling-small': { inputPerMillion: 0.5, outputPerMillion: 1.2, maxTokens: 1_048_576 },\n 'zai-org/glm-4.7': { inputPerMillion: 0.6, outputPerMillion: 2.2 },\n 'zai-org/glm-5': { inputPerMillion: 0.95, outputPerMillion: 3.15 },\n 'zai-org/glm-5.1': { inputPerMillion: 1.3, outputPerMillion: 4.3 },\n 'zai-org/glm-5.2': { inputPerMillion: 1.4, cachedInputPerMillion: 0.26, outputPerMillion: 4.4 },\n 'zai-org/glm-5.2-fast': { inputPerMillion: 2.1, outputPerMillion: 6.6, maxTokens: 1_048_576 },\n 'zai-org/glm-5.3': { inputPerMillion: 1.4, outputPerMillion: 4.4, maxTokens: 1_048_576 },\n 'zai-org/glm-5.3-flash': { inputPerMillion: 0.15, outputPerMillion: 0.5, maxTokens: 1_048_576 },\n};\n\ntype GooglePricingModality = 'text' | 'image' | 'video' | 'audio' | 'document' | 'unspecified';\n\nexport interface GoogleModalityTokenCount {\n modality?: string;\n tokenCount?: number;\n}\n\nexport interface GoogleModelPricing {\n inputPerMillion: number;\n longInputPerMillion?: number;\n outputPerMillion?: number;\n longOutputPerMillion?: number;\n cachedInputPerMillion?: number;\n longCachedInputPerMillion?: number;\n outputImagePerImage?: number;\n inputByModalityPerMillion?: Partial<Record<GooglePricingModality, number>>;\n outputByModalityPerMillion?: Partial<Record<GooglePricingModality, number>>;\n cachedByModalityPerMillion?: Partial<Record<GooglePricingModality, number>>;\n longContextThreshold?: number;\n}\n\nconst GOOGLE_MODEL_PRICING: Record<string, GoogleModelPricing> = {\n 'gemini-3-pro-preview': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n cachedInputPerMillion: 0.2,\n },\n 'gemini-3.1-pro-preview': {\n inputPerMillion: 2,\n longInputPerMillion: 4,\n outputPerMillion: 12,\n longOutputPerMillion: 18,\n cachedInputPerMillion: 0.2,\n longCachedInputPerMillion: 0.4,\n longContextThreshold: 200000,\n },\n 'gemini-2.5-pro': {\n inputPerMillion: 1.25,\n longInputPerMillion: 2.5,\n outputPerMillion: 10,\n longOutputPerMillion: 15,\n cachedInputPerMillion: 0.125,\n longCachedInputPerMillion: 0.25,\n longContextThreshold: 200000,\n },\n 'gemini-2.5-flash': {\n inputPerMillion: 0.3,\n outputPerMillion: 2.5,\n cachedInputPerMillion: 0.03,\n },\n 'gemini-2.5-flash-lite': {\n inputPerMillion: 0.1,\n outputPerMillion: 0.4,\n cachedInputPerMillion: 0.01,\n },\n 'gemini-3-flash-preview': {\n inputPerMillion: 0.5,\n outputPerMillion: 3,\n cachedInputPerMillion: 0.05,\n inputByModalityPerMillion: {\n text: 0.5,\n image: 0.5,\n video: 0.5,\n audio: 1,\n },\n cachedByModalityPerMillion: {\n text: 0.05,\n image: 0.05,\n video: 0.05,\n audio: 0.1,\n },\n },\n 'gemini-3.1-flash-lite-preview': {\n inputPerMillion: 0.25,\n outputPerMillion: 1.5,\n cachedInputPerMillion: 0.025,\n inputByModalityPerMillion: {\n text: 0.25,\n image: 0.25,\n video: 0.25,\n audio: 0.5,\n },\n cachedByModalityPerMillion: {\n text: 0.025,\n image: 0.025,\n video: 0.025,\n audio: 0.05,\n },\n },\n 'deep-research-pro-preview-12-2025': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n cachedInputPerMillion: 0.2,\n },\n 'gemini-2.0-flash': {\n inputPerMillion: 0.1,\n outputPerMillion: 0.4,\n cachedInputPerMillion: 0.025,\n inputByModalityPerMillion: {\n text: 0.1,\n image: 0.1,\n video: 0.1,\n audio: 0.7,\n },\n cachedByModalityPerMillion: {\n text: 0.025,\n image: 0.025,\n video: 0.025,\n audio: 0.175,\n },\n },\n 'gemini-2.0-flash-001': {\n inputPerMillion: 0.1,\n outputPerMillion: 0.4,\n cachedInputPerMillion: 0.025,\n inputByModalityPerMillion: {\n text: 0.1,\n image: 0.1,\n video: 0.1,\n audio: 0.7,\n },\n cachedByModalityPerMillion: {\n text: 0.025,\n image: 0.025,\n video: 0.025,\n audio: 0.175,\n },\n },\n 'gemini-2.0-flash-lite': {\n inputPerMillion: 0.075,\n outputPerMillion: 0.3,\n },\n 'gemini-2.0-flash-lite-001': {\n inputPerMillion: 0.075,\n outputPerMillion: 0.3,\n },\n 'gemini-2.5-computer-use-preview-10-2025': {\n inputPerMillion: 1.25,\n longInputPerMillion: 2.5,\n outputPerMillion: 10,\n longOutputPerMillion: 15,\n longContextThreshold: 200000,\n },\n 'gemini-2.5-flash-preview-tts': {\n inputPerMillion: 0.5,\n outputPerMillion: 10,\n outputByModalityPerMillion: {\n audio: 10,\n },\n },\n 'gemini-2.5-pro-preview-tts': {\n inputPerMillion: 1,\n outputPerMillion: 20,\n outputByModalityPerMillion: {\n audio: 20,\n },\n },\n 'gemini-robotics-er-1.5-preview': {\n inputPerMillion: 0.3,\n outputPerMillion: 2.5,\n inputByModalityPerMillion: {\n text: 0.3,\n image: 0.3,\n video: 0.3,\n audio: 1,\n },\n },\n 'gemini-robotics-er-1.6-preview': {\n inputPerMillion: 1,\n outputPerMillion: 5,\n inputByModalityPerMillion: {\n text: 1,\n image: 1,\n video: 1,\n audio: 2,\n },\n },\n 'gemini-robotics-er-2-preview': {\n inputPerMillion: 2,\n cachedInputPerMillion: 0.2,\n outputPerMillion: 10,\n },\n // ai.google.dev/gemini-api/docs/pricing 2026-07-08\n 'gemini-3.5-flash': {\n inputPerMillion: 1.5,\n cachedInputPerMillion: 0.15,\n outputPerMillion: 9,\n },\n // Promotional standard pricing through 2026-12-31.\n 'gemini-3.6-flash': { inputPerMillion: 0.75, cachedInputPerMillion: 0.075, outputPerMillion: 3.75 },\n 'gemini-3.7-flash': { inputPerMillion: 0.75, cachedInputPerMillion: 0.075, outputPerMillion: 3.75 },\n 'gemini-3.8-flash': { inputPerMillion: 0.75, cachedInputPerMillion: 0.075, outputPerMillion: 3.75 },\n 'gemini-3.5-flash-lite': { inputPerMillion: 0.3, cachedInputPerMillion: 0.03, outputPerMillion: 2.5 },\n 'gemini-3.5-transcribe': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n inputByModalityPerMillion: { audio: 2 },\n outputByModalityPerMillion: { text: 12 },\n },\n 'gemini-3.1-flash-lite': {\n inputPerMillion: 0.25,\n cachedInputPerMillion: 0.025,\n outputPerMillion: 1.5,\n },\n 'gemini-3.1-flash-tts-preview': {\n inputPerMillion: 1,\n outputPerMillion: 20,\n outputByModalityPerMillion: { audio: 20 },\n },\n 'gemini-omni-1.1-flash': {\n inputPerMillion: 1.5,\n outputPerMillion: 9,\n outputByModalityPerMillion: { text: 9, video: 17.5 },\n },\n 'gemini-omni-flash-preview': {\n inputPerMillion: 1.5,\n outputPerMillion: 9,\n outputByModalityPerMillion: { text: 9, video: 17.5 },\n },\n 'gemini-2.5-flash-image': {\n inputPerMillion: 0.3,\n outputImagePerImage: 0.039,\n },\n 'gemini-3.1-flash-image-preview': {\n inputPerMillion: 0.5,\n outputPerMillion: 3,\n outputImagePerImage: 0.045,\n },\n // GA ids for the image models (the catalog now lists them without -preview).\n 'gemini-3.1-flash-image': {\n inputPerMillion: 0.5,\n outputPerMillion: 3,\n outputImagePerImage: 0.045,\n },\n 'gemini-3.1-flash-lite-image': {\n inputPerMillion: 0.25,\n outputPerMillion: 1.5,\n outputImagePerImage: 0.0336,\n },\n 'gemini-3-pro-image-preview': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n outputImagePerImage: 0.134,\n },\n 'gemini-3-pro-image': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n outputImagePerImage: 0.134,\n },\n 'nano-banana-pro-preview': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n outputImagePerImage: 0.134,\n },\n 'imagen-4.0-generate-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.04,\n },\n 'imagen-4.0-fast-generate-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.02,\n },\n 'imagen-4.0-ultra-generate-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.06,\n },\n 'imagen-3.0-capability-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.04,\n },\n 'gemma-4-31b-it': {\n inputPerMillion: 0,\n outputPerMillion: 0,\n cachedInputPerMillion: 0,\n },\n};\n\nconst GOOGLE_MODEL_PRICING_PREFIXES: Array<{ prefix: string; pricing: GoogleModelPricing }> = [\n { prefix: 'gemini-3.1-pro-preview', pricing: GOOGLE_MODEL_PRICING['gemini-3.1-pro-preview']! },\n { prefix: 'gemini-3-pro-preview', pricing: GOOGLE_MODEL_PRICING['gemini-3-pro-preview']! },\n { prefix: 'gemini-3-flash-preview', pricing: GOOGLE_MODEL_PRICING['gemini-3-flash-preview']! },\n { prefix: 'gemini-3.1-flash-lite-preview', pricing: GOOGLE_MODEL_PRICING['gemini-3.1-flash-lite-preview']! },\n { prefix: 'gemini-2.5-flash-lite-preview-', pricing: GOOGLE_MODEL_PRICING['gemini-2.5-flash-lite']! },\n { prefix: 'gemini-flash-latest', pricing: GOOGLE_MODEL_PRICING['gemini-2.5-flash']! },\n { prefix: 'gemini-flash-lite-latest', pricing: GOOGLE_MODEL_PRICING['gemini-2.5-flash-lite']! },\n { prefix: 'gemini-pro-latest', pricing: GOOGLE_MODEL_PRICING['gemini-2.5-pro']! },\n {\n prefix: 'gemma-4-',\n pricing: { inputPerMillion: 0, outputPerMillion: 0, cachedInputPerMillion: 0 },\n },\n {\n prefix: 'gemma-3-',\n pricing: { inputPerMillion: 0, outputPerMillion: 0, cachedInputPerMillion: 0 },\n },\n {\n prefix: 'gemma-3n-',\n pricing: { inputPerMillion: 0, outputPerMillion: 0, cachedInputPerMillion: 0 },\n },\n];\n\nexport interface GroqModelPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n}\n\nexport interface OpenAIModelPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n longInputPerMillion?: number;\n longOutputPerMillion?: number;\n longCachedInputPerMillion?: number;\n longContextThreshold?: number;\n}\n\nconst OPENAI_LONG_CONTEXT_THRESHOLD = 272_000;\n\n// Standard token pricing from https://developers.openai.com/api/docs/pricing.md.\nconst OPENAI_MODEL_PRICING: Record<string, OpenAIModelPricing> = {\n // GPT-6 family — synced 2026-10-01 against developers.openai.com/api/docs/pricing\n // and /docs/models. The family is exactly gpt-6-astra, gpt-6-sol, gpt-6-luna,\n // and gpt-6.1-sol (no mini/nano/pro variants, no 6.1 Luna or Astra). All\n // share the 272k long-context threshold. The Batch/Flex, Fast, and Astra\n // Ultrafast tiers are intentionally not modelled (standard tier only).\n 'gpt-6.1-sol': {\n inputPerMillion: 2,\n cachedInputPerMillion: 0.1,\n outputPerMillion: 10,\n longInputPerMillion: 4,\n longCachedInputPerMillion: 0.2,\n longOutputPerMillion: 15,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-6-astra': {\n inputPerMillion: 10,\n cachedInputPerMillion: 1,\n outputPerMillion: 50,\n longInputPerMillion: 20,\n longCachedInputPerMillion: 2,\n longOutputPerMillion: 75,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-6-sol': {\n inputPerMillion: 2,\n cachedInputPerMillion: 0.2,\n outputPerMillion: 10,\n longInputPerMillion: 4,\n longCachedInputPerMillion: 0.4,\n longOutputPerMillion: 15,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-6-luna': {\n inputPerMillion: 0.1,\n cachedInputPerMillion: 0.01,\n outputPerMillion: 0.5,\n longInputPerMillion: 0.2,\n longCachedInputPerMillion: 0.02,\n longOutputPerMillion: 0.75,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n // GPT-5.6 family — synced 2026-07-31 (the \"price-performance frontier\"\n // announcement dropped Luna ~80%). Without explicit entries these ids fell\n // through to the generic 'gpt-5' prefix and were mispriced.\n 'gpt-5.6-sol': {\n inputPerMillion: 4,\n cachedInputPerMillion: 0.4,\n outputPerMillion: 20,\n longInputPerMillion: 8,\n longCachedInputPerMillion: 0.8,\n longOutputPerMillion: 30,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-5.6-terra': {\n inputPerMillion: 2,\n cachedInputPerMillion: 0.2,\n outputPerMillion: 12,\n longInputPerMillion: 4,\n longCachedInputPerMillion: 0.4,\n longOutputPerMillion: 18,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-5.6-luna': {\n inputPerMillion: 0.2,\n cachedInputPerMillion: 0.02,\n outputPerMillion: 1.2,\n longInputPerMillion: 0.4,\n longCachedInputPerMillion: 0.04,\n longOutputPerMillion: 1.8,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-5.5': {\n inputPerMillion: 5,\n cachedInputPerMillion: 0.5,\n outputPerMillion: 30,\n longInputPerMillion: 10,\n longCachedInputPerMillion: 1,\n longOutputPerMillion: 45,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-5.5-pro': {\n inputPerMillion: 30,\n outputPerMillion: 180,\n longInputPerMillion: 60,\n longOutputPerMillion: 270,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-5.4': {\n inputPerMillion: 2.5,\n cachedInputPerMillion: 0.25,\n outputPerMillion: 15,\n longInputPerMillion: 5,\n longCachedInputPerMillion: 0.5,\n longOutputPerMillion: 22.5,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-5.4-mini': { inputPerMillion: 0.75, cachedInputPerMillion: 0.075, outputPerMillion: 4.5 },\n 'gpt-5.4-nano': { inputPerMillion: 0.2, cachedInputPerMillion: 0.02, outputPerMillion: 1.25 },\n 'gpt-5.4-pro': {\n inputPerMillion: 30,\n outputPerMillion: 180,\n longInputPerMillion: 60,\n longOutputPerMillion: 270,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-5.2': { inputPerMillion: 1.75, cachedInputPerMillion: 0.175, outputPerMillion: 14 },\n 'gpt-5.2-pro': { inputPerMillion: 21, outputPerMillion: 168 },\n 'gpt-5.1': { inputPerMillion: 1.25, cachedInputPerMillion: 0.125, outputPerMillion: 10 },\n 'gpt-5': { inputPerMillion: 1.25, cachedInputPerMillion: 0.125, outputPerMillion: 10 },\n 'gpt-5-mini': { inputPerMillion: 0.25, cachedInputPerMillion: 0.025, outputPerMillion: 2 },\n 'gpt-5-nano': { inputPerMillion: 0.05, cachedInputPerMillion: 0.005, outputPerMillion: 0.4 },\n 'gpt-5-pro': { inputPerMillion: 15, outputPerMillion: 120 },\n 'gpt-4.1': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 8 },\n 'gpt-4.1-mini': { inputPerMillion: 0.4, cachedInputPerMillion: 0.1, outputPerMillion: 1.6 },\n 'gpt-4.1-nano': { inputPerMillion: 0.1, cachedInputPerMillion: 0.025, outputPerMillion: 0.4 },\n 'gpt-4o': { inputPerMillion: 2.5, cachedInputPerMillion: 1.25, outputPerMillion: 10 },\n 'gpt-4o-2024-05-13': { inputPerMillion: 5, outputPerMillion: 15 },\n 'gpt-4o-mini': { inputPerMillion: 0.15, cachedInputPerMillion: 0.075, outputPerMillion: 0.6 },\n o1: { inputPerMillion: 15, cachedInputPerMillion: 7.5, outputPerMillion: 60 },\n 'o1-pro': { inputPerMillion: 150, outputPerMillion: 600 },\n 'o3-pro': { inputPerMillion: 20, outputPerMillion: 80 },\n o3: { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 8 },\n 'o4-mini': { inputPerMillion: 1.1, cachedInputPerMillion: 0.275, outputPerMillion: 4.4 },\n 'o3-mini': { inputPerMillion: 1.1, cachedInputPerMillion: 0.55, outputPerMillion: 4.4 },\n 'o1-mini': { inputPerMillion: 1.1, cachedInputPerMillion: 0.55, outputPerMillion: 4.4 },\n 'gpt-4-turbo': { inputPerMillion: 10, outputPerMillion: 30 },\n 'gpt-4-turbo-2024-04-09': { inputPerMillion: 10, outputPerMillion: 30 },\n 'gpt-4-0125-preview': { inputPerMillion: 10, outputPerMillion: 30 },\n 'gpt-4-1106-preview': { inputPerMillion: 10, outputPerMillion: 30 },\n 'gpt-4-1106-vision-preview': { inputPerMillion: 10, outputPerMillion: 30 },\n 'gpt-4': { inputPerMillion: 30, outputPerMillion: 60 },\n 'gpt-4-0613': { inputPerMillion: 30, outputPerMillion: 60 },\n 'gpt-4-0314': { inputPerMillion: 30, outputPerMillion: 60 },\n 'gpt-4-32k': { inputPerMillion: 60, outputPerMillion: 120 },\n 'gpt-3.5-turbo': { inputPerMillion: 0.5, outputPerMillion: 1.5 },\n 'gpt-3.5-turbo-0125': { inputPerMillion: 0.5, outputPerMillion: 1.5 },\n 'gpt-3.5-turbo-1106': { inputPerMillion: 1, outputPerMillion: 2 },\n 'gpt-3.5-turbo-0613': { inputPerMillion: 1.5, outputPerMillion: 2 },\n 'gpt-3.5-0301': { inputPerMillion: 1.5, outputPerMillion: 2 },\n 'gpt-3.5-turbo-instruct': { inputPerMillion: 1.5, outputPerMillion: 2 },\n 'gpt-3.5-turbo-16k-0613': { inputPerMillion: 3, outputPerMillion: 4 },\n 'davinci-002': { inputPerMillion: 2, outputPerMillion: 2 },\n 'babbage-002': { inputPerMillion: 0.4, outputPerMillion: 0.4 },\n};\n\nconst OPENAI_MODEL_PRICING_PREFIXES: Array<{ prefix: string; pricing: OpenAIModelPricing }> = [\n // 'gpt-6.1-sol' and 'gpt-6-sol' differ at the sixth character ('.' vs '-'),\n // so dated 6.1 ids never fall through to the 6 Sol row (cached rates differ).\n { prefix: 'gpt-6.1-sol', pricing: OPENAI_MODEL_PRICING['gpt-6.1-sol']! },\n { prefix: 'gpt-6-astra', pricing: OPENAI_MODEL_PRICING['gpt-6-astra']! },\n { prefix: 'gpt-6-sol', pricing: OPENAI_MODEL_PRICING['gpt-6-sol']! },\n { prefix: 'gpt-6-luna', pricing: OPENAI_MODEL_PRICING['gpt-6-luna']! },\n { prefix: 'gpt-5.6-sol', pricing: OPENAI_MODEL_PRICING['gpt-5.6-sol']! },\n { prefix: 'gpt-5.6-terra', pricing: OPENAI_MODEL_PRICING['gpt-5.6-terra']! },\n { prefix: 'gpt-5.6-luna', pricing: OPENAI_MODEL_PRICING['gpt-5.6-luna']! },\n { prefix: 'gpt-5.5-pro', pricing: OPENAI_MODEL_PRICING['gpt-5.5-pro']! },\n { prefix: 'gpt-5.5', pricing: OPENAI_MODEL_PRICING['gpt-5.5']! },\n { prefix: 'gpt-5.4-mini', pricing: OPENAI_MODEL_PRICING['gpt-5.4-mini']! },\n { prefix: 'gpt-5.4-nano', pricing: OPENAI_MODEL_PRICING['gpt-5.4-nano']! },\n { prefix: 'gpt-5.4-pro', pricing: OPENAI_MODEL_PRICING['gpt-5.4-pro']! },\n { prefix: 'gpt-5.4', pricing: OPENAI_MODEL_PRICING['gpt-5.4']! },\n { prefix: 'gpt-5.2-pro', pricing: OPENAI_MODEL_PRICING['gpt-5.2-pro']! },\n { prefix: 'gpt-5.2', pricing: OPENAI_MODEL_PRICING['gpt-5.2']! },\n { prefix: 'gpt-5.1', pricing: OPENAI_MODEL_PRICING['gpt-5.1']! },\n { prefix: 'gpt-5-mini', pricing: OPENAI_MODEL_PRICING['gpt-5-mini']! },\n { prefix: 'gpt-5-nano', pricing: OPENAI_MODEL_PRICING['gpt-5-nano']! },\n { prefix: 'gpt-5-pro', pricing: OPENAI_MODEL_PRICING['gpt-5-pro']! },\n { prefix: 'gpt-5', pricing: OPENAI_MODEL_PRICING['gpt-5']! },\n { prefix: 'gpt-4.1-mini', pricing: OPENAI_MODEL_PRICING['gpt-4.1-mini']! },\n { prefix: 'gpt-4.1-nano', pricing: OPENAI_MODEL_PRICING['gpt-4.1-nano']! },\n { prefix: 'gpt-4.1', pricing: OPENAI_MODEL_PRICING['gpt-4.1']! },\n { prefix: 'gpt-4o-mini', pricing: OPENAI_MODEL_PRICING['gpt-4o-mini']! },\n { prefix: 'gpt-4o', pricing: OPENAI_MODEL_PRICING['gpt-4o']! },\n { prefix: 'o3-pro', pricing: OPENAI_MODEL_PRICING['o3-pro']! },\n { prefix: 'o3-mini', pricing: OPENAI_MODEL_PRICING['o3-mini']! },\n { prefix: 'o4-mini', pricing: OPENAI_MODEL_PRICING['o4-mini']! },\n { prefix: 'o1-pro', pricing: OPENAI_MODEL_PRICING['o1-pro']! },\n { prefix: 'o1-mini', pricing: OPENAI_MODEL_PRICING['o1-mini']! },\n { prefix: 'o3', pricing: OPENAI_MODEL_PRICING.o3! },\n { prefix: 'o1', pricing: OPENAI_MODEL_PRICING.o1! },\n { prefix: 'gpt-4-turbo', pricing: OPENAI_MODEL_PRICING['gpt-4-turbo']! },\n { prefix: 'gpt-4-32k', pricing: OPENAI_MODEL_PRICING['gpt-4-32k']! },\n { prefix: 'gpt-4', pricing: OPENAI_MODEL_PRICING['gpt-4']! },\n { prefix: 'gpt-3.5-turbo', pricing: OPENAI_MODEL_PRICING['gpt-3.5-turbo']! },\n];\n\nconst GROQ_MODEL_PRICING: Record<string, GroqModelPricing> = {\n 'meta-llama/llama-prompt-guard-2-22m': { inputPerMillion: 0.03, cachedInputPerMillion: 0.015, outputPerMillion: 0.03 },\n 'meta-llama/llama-prompt-guard-2-86m': { inputPerMillion: 0.04, cachedInputPerMillion: 0.02, outputPerMillion: 0.04 },\n 'openai/gpt-oss-120b': { inputPerMillion: 0.15, cachedInputPerMillion: 0.075, outputPerMillion: 0.6 },\n 'openai/gpt-oss-20b': { inputPerMillion: 0.075, cachedInputPerMillion: 0.0375, outputPerMillion: 0.3 },\n 'openai/gpt-oss-safeguard-20b': { inputPerMillion: 0.075, cachedInputPerMillion: 0.0375, outputPerMillion: 0.3 },\n 'qwen/qwen3.6-27b': { inputPerMillion: 0.6, cachedInputPerMillion: 0.3, outputPerMillion: 3 },\n 'qwen/qwen3.8-27b': { inputPerMillion: 0.8, cachedInputPerMillion: 0.4, outputPerMillion: 4 },\n};\n\nexport interface XAITextPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n longInputPerMillion?: number;\n longOutputPerMillion?: number;\n longCachedInputPerMillion?: number;\n longContextThreshold?: number;\n}\n\n// Re-verified against the live xAI catalog 2026-07-08\n// (GET api.x.ai/v1/language-models; field unit price_per_m/10000 = $/M) and\n// docs.x.ai/docs/models. The previous table was systematically ~10x high\n// (e.g. grok-4 at 30/150 vs the real 3/15) — with hosted billing now using\n// xAI's exact cost_in_usd_ticks these values only drive reservation\n// estimates and request-log display, but they must still be right.\nconst XAI_MODEL_PRICING: Record<string, XAITextPricing> = {\n 'grok-4-0709': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 15 },\n 'grok-4': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 15 },\n 'grok-4-latest': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 15 },\n 'grok-4-fast-reasoning': { inputPerMillion: 0.2, cachedInputPerMillion: 0.05, outputPerMillion: 0.5 },\n 'grok-4-fast-non-reasoning': { inputPerMillion: 0.2, cachedInputPerMillion: 0.05, outputPerMillion: 0.5 },\n 'grok-4-1-fast-reasoning': { inputPerMillion: 0.2, cachedInputPerMillion: 0.05, outputPerMillion: 0.5 },\n 'grok-4-1-fast-non-reasoning': { inputPerMillion: 0.2, cachedInputPerMillion: 0.05, outputPerMillion: 0.5 },\n 'grok-4.20-0309-reasoning': { inputPerMillion: 1.25, cachedInputPerMillion: 0.2, outputPerMillion: 2.5, longInputPerMillion: 2.5, longCachedInputPerMillion: 0.4, longOutputPerMillion: 5, longContextThreshold: 200_000 },\n 'grok-4.20-0309-non-reasoning': { inputPerMillion: 1.25, cachedInputPerMillion: 0.2, outputPerMillion: 2.5, longInputPerMillion: 2.5, longCachedInputPerMillion: 0.4, longOutputPerMillion: 5, longContextThreshold: 200_000 },\n 'grok-4.20-multi-agent-0309': { inputPerMillion: 1.25, cachedInputPerMillion: 0.2, outputPerMillion: 2.5, longInputPerMillion: 2.5, longCachedInputPerMillion: 0.4, longOutputPerMillion: 5, longContextThreshold: 200_000 },\n 'grok-4.20': { inputPerMillion: 1.25, cachedInputPerMillion: 0.2, outputPerMillion: 2.5, longInputPerMillion: 2.5, longCachedInputPerMillion: 0.4, longOutputPerMillion: 5, longContextThreshold: 200_000 },\n 'grok-4.3': { inputPerMillion: 1.25, cachedInputPerMillion: 0.2, outputPerMillion: 2.5, longInputPerMillion: 2.5, longCachedInputPerMillion: 0.4, longOutputPerMillion: 5, longContextThreshold: 200_000 },\n 'grok-4.3-latest': { inputPerMillion: 1.25, cachedInputPerMillion: 0.2, outputPerMillion: 2.5, longInputPerMillion: 2.5, longCachedInputPerMillion: 0.4, longOutputPerMillion: 5, longContextThreshold: 200_000 },\n 'grok-latest': { inputPerMillion: 1.25, cachedInputPerMillion: 0.2, outputPerMillion: 2.5 },\n 'grok-4.5': { inputPerMillion: 2, cachedInputPerMillion: 0.3, outputPerMillion: 6, longInputPerMillion: 4, longCachedInputPerMillion: 0.6, longOutputPerMillion: 12, longContextThreshold: 200_000 },\n 'grok-4.6': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 6, longInputPerMillion: 4, longCachedInputPerMillion: 1, longOutputPerMillion: 12, longContextThreshold: 200_000 },\n 'grok-4.5-latest': { inputPerMillion: 2, cachedInputPerMillion: 0.3, outputPerMillion: 6, longInputPerMillion: 4, longCachedInputPerMillion: 0.6, longOutputPerMillion: 12, longContextThreshold: 200_000 },\n 'grok-build-latest': { inputPerMillion: 2, cachedInputPerMillion: 0.3, outputPerMillion: 6, longInputPerMillion: 4, longCachedInputPerMillion: 0.6, longOutputPerMillion: 12, longContextThreshold: 200_000 },\n 'grok-build-0.1': { inputPerMillion: 1, cachedInputPerMillion: 0.2, outputPerMillion: 2, longInputPerMillion: 2, longCachedInputPerMillion: 0.4, longOutputPerMillion: 4, longContextThreshold: 200_000 },\n 'grok-code-fast-1': { inputPerMillion: 1, cachedInputPerMillion: 0.2, outputPerMillion: 2, longInputPerMillion: 2, longCachedInputPerMillion: 0.4, longOutputPerMillion: 4, longContextThreshold: 200_000 },\n 'grok-3': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 15 },\n 'grok-3-latest': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 15 },\n 'grok-3-mini': { inputPerMillion: 0.3, cachedInputPerMillion: 0.075, outputPerMillion: 0.5 },\n 'grok-3-mini-latest': { inputPerMillion: 0.3, cachedInputPerMillion: 0.075, outputPerMillion: 0.5 },\n};\n\nexport interface CloudflareModelPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n}\n\nconst CLOUDFLARE_MODEL_PRICING: Record<string, CloudflareModelPricing> = {\n '@cf/meta/llama-3.2-1b-instruct': { inputPerMillion: 0.027, outputPerMillion: 0.201 },\n '@cf/meta/llama-3.2-3b-instruct': { inputPerMillion: 0.0509, outputPerMillion: 0.335 },\n '@cf/meta/llama-3.1-8b-instruct-fp8-fast': { inputPerMillion: 0.045, outputPerMillion: 0.384 },\n '@cf/meta/llama-3.2-11b-vision-instruct': { inputPerMillion: 0.0485, outputPerMillion: 0.676 },\n '@cf/meta/llama-3.1-70b-instruct-fp8-fast': { inputPerMillion: 0.293, outputPerMillion: 2.253 },\n '@cf/meta/llama-3.3-70b-instruct-fp8-fast': { inputPerMillion: 0.293, outputPerMillion: 2.253 },\n '@cf/deepseek-ai/deepseek-r1-distill-qwen-32b': { inputPerMillion: 0.497, outputPerMillion: 4.881 },\n '@cf/mistral/mistral-7b-instruct-v0.1': { inputPerMillion: 0.11, outputPerMillion: 0.19 },\n '@cf/mistralai/mistral-small-3.1-24b-instruct': { inputPerMillion: 0.351, outputPerMillion: 0.555 },\n '@cf/meta/llama-3.1-8b-instruct': { inputPerMillion: 0.282, outputPerMillion: 0.827 },\n '@cf/meta/llama-3.1-8b-instruct-fp8': { inputPerMillion: 0.152, outputPerMillion: 0.287 },\n '@cf/meta/llama-3.1-8b-instruct-awq': { inputPerMillion: 0.123, outputPerMillion: 0.266 },\n '@cf/meta/llama-3-8b-instruct': { inputPerMillion: 0.282, outputPerMillion: 0.827 },\n '@cf/meta/llama-3-8b-instruct-awq': { inputPerMillion: 0.123, outputPerMillion: 0.266 },\n '@cf/meta/llama-2-7b-chat-fp16': { inputPerMillion: 0.556, outputPerMillion: 6.667 },\n '@cf/meta/llama-guard-3-8b': { inputPerMillion: 0.484, outputPerMillion: 0.03 },\n '@cf/meta/llama-4-scout-17b-16e-instruct': { inputPerMillion: 0.27, outputPerMillion: 0.85 },\n '@cf/google/gemma-3-12b-it': { inputPerMillion: 0.345, outputPerMillion: 0.556 },\n '@cf/qwen/qwq-32b': { inputPerMillion: 0.66, outputPerMillion: 1.0 },\n '@cf/qwen/qwen2.5-coder-32b-instruct': { inputPerMillion: 0.66, outputPerMillion: 1.0 },\n '@cf/qwen/qwen3-30b-a3b-fp8': { inputPerMillion: 0.0509, outputPerMillion: 0.335 },\n '@cf/openai/gpt-oss-120b': { inputPerMillion: 0.35, outputPerMillion: 0.75 },\n '@cf/openai/gpt-oss-20b': { inputPerMillion: 0.2, outputPerMillion: 0.3 },\n '@cf/aisingapore/gemma-sea-lion-v4-27b-it': { inputPerMillion: 0.351, outputPerMillion: 0.555 },\n '@cf/ibm-granite/granite-4.0-h-micro': { inputPerMillion: 0.017, outputPerMillion: 0.112 },\n '@cf/zai-org/glm-4.7-flash': { inputPerMillion: 0.0605, outputPerMillion: 0.4 },\n '@cf/nvidia/nemotron-3-120b-a12b': { inputPerMillion: 0.5, outputPerMillion: 1.5 },\n '@cf/moonshotai/kimi-k2.5': { inputPerMillion: 0.6, cachedInputPerMillion: 0.1, outputPerMillion: 3.0 },\n '@cf/deepseek-ai/deepseek-v4-flash-0731': { inputPerMillion: 0.44, cachedInputPerMillion: 0.014, outputPerMillion: 1.32 },\n '@cf/deepseek-ai/deepseek-v4-pro-0813': { inputPerMillion: 1.32, cachedInputPerMillion: 0.044, outputPerMillion: 3.96 },\n '@cf/google/gemma-4-26b-a4b-it': { inputPerMillion: 0.1, outputPerMillion: 0.3 },\n '@cf/moonshotai/kimi-k2.6': { inputPerMillion: 0.95, cachedInputPerMillion: 0.16, outputPerMillion: 4 },\n '@cf/moonshotai/kimi-k2.7-code': { inputPerMillion: 0.95, cachedInputPerMillion: 0.19, outputPerMillion: 4 },\n '@cf/qwen/qwen3.8-27b': { inputPerMillion: 0.45, cachedInputPerMillion: 0.05, outputPerMillion: 3.2 },\n '@cf/zai-org/glm-5.2': { inputPerMillion: 1.4, cachedInputPerMillion: 0.26, outputPerMillion: 4.4 },\n '@cf/zai-org/glm-5.3': { inputPerMillion: 1.4, cachedInputPerMillion: 0.26, outputPerMillion: 4.4 },\n '@cf/zai-org/glm-5.3-flash': { inputPerMillion: 0.15, cachedInputPerMillion: 0.03, outputPerMillion: 0.5 },\n};\n\nfunction normalizeModelId(modelId: string | null | undefined): string {\n return (modelId || '').trim().toLowerCase();\n}\n\nfunction normalizeOpenAIModelId(modelId: string | null | undefined): string {\n return normalizeModelId(modelId).replace(/^openai\\//, '');\n}\n\nfunction normalizeGoogleModelId(modelId: string | null | undefined): string {\n return normalizeModelId(modelId)\n .replace(/^google\\//, '')\n .replace(/^models\\//, '')\n .replace(/^publishers\\/google\\/models\\//, '');\n}\n\nfunction normalizeCloudflareModelId(modelId: string | null | undefined): string {\n const trimmed = (modelId || '').trim();\n if (trimmed.startsWith('@cf/')) return trimmed;\n return `@cf/${trimmed.replace(/^@cf\\//, '')}`;\n}\n\nfunction roundCost(value: number): number {\n return Number(value.toFixed(12));\n}\n\nfunction normalizeModality(modality: string | undefined): GooglePricingModality {\n const normalized = (modality || '').trim().toLowerCase();\n\n if (normalized === 'text') return 'text';\n if (normalized === 'image') return 'image';\n if (normalized === 'video') return 'video';\n if (normalized === 'audio') return 'audio';\n if (normalized === 'document') return 'document';\n return 'unspecified';\n}\n\nfunction toModalityCounts(\n details: GoogleModalityTokenCount[] | undefined\n): Partial<Record<GooglePricingModality, number>> {\n const counts: Partial<Record<GooglePricingModality, number>> = {};\n\n for (const detail of details || []) {\n const modality = normalizeModality(detail.modality);\n const tokenCount = Math.max(detail.tokenCount ?? 0, 0);\n counts[modality] = (counts[modality] ?? 0) + tokenCount;\n }\n\n return counts;\n}\n\nfunction sumModalityCosts(\n counts: Partial<Record<GooglePricingModality, number>>,\n modalityRates: Partial<Record<GooglePricingModality, number>> | undefined,\n defaultRate: number\n): number {\n let total = 0;\n\n for (const [modality, tokenCount] of Object.entries(counts)) {\n if (!tokenCount) continue;\n const rate = modalityRates?.[modality as GooglePricingModality] ?? defaultRate;\n total += (tokenCount / TOKENS_PER_MILLION) * rate;\n }\n\n return total;\n}\n\nfunction sumModalityCostNumerator(\n counts: Partial<Record<GooglePricingModality, number>>,\n modalityRates: Partial<Record<GooglePricingModality, number>> | undefined,\n defaultRate: number\n): number {\n let total = 0;\n\n for (const [modality, tokenCount] of Object.entries(counts)) {\n if (!tokenCount) continue;\n const rate = modalityRates?.[modality as GooglePricingModality] ?? defaultRate;\n total += tokenCount * ratePerMillionMicrocents(rate);\n }\n\n return total;\n}\n\nfunction ratePerMillionMicrocents(usdPerMillion: number, multiplier = 1): number {\n return Math.round(usdPerMillion * multiplier * MICROCENTS_PER_DOLLAR);\n}\n\nfunction ceilDiv(numerator: number, divisor: number): number {\n return Math.ceil(numerator / divisor);\n}\n\nexport function getAnthropicModelPricing(modelId: string | null | undefined): AnthropicModelPricing | null {\n const normalized = normalizeModelId(modelId);\n let best: { prefix: string; pricing: AnthropicModelPricing } | null = null;\n for (const [prefix, pricing] of ANTHROPIC_MODEL_PRICING) {\n if (normalized.startsWith(prefix) && (!best || prefix.length > best.prefix.length)) {\n best = { prefix, pricing };\n }\n }\n return best ? { ...best.pricing } : null;\n}\n\nexport function calculateAnthropicUsageCost(\n modelId: string | null | undefined,\n buckets: AnthropicUsageBuckets\n): number | undefined {\n const pricing = getAnthropicModelPricing(modelId);\n if (!pricing) return undefined;\n\n const inputRate = pricing.inputPerMillion / TOKENS_PER_MILLION;\n const outputRate = pricing.outputPerMillion / TOKENS_PER_MILLION;\n\n return roundCost(\n buckets.inputTokens * inputRate +\n buckets.cacheWrite5mTokens * inputRate * 1.25 +\n buckets.cacheWrite1hTokens * inputRate * 2 +\n buckets.cacheReadTokens * (pricing.cachedInputPerMillion ?? pricing.inputPerMillion * 0.1) / TOKENS_PER_MILLION +\n buckets.outputTokens * outputRate\n );\n}\n\nexport function getCerebrasModelPricing(modelId: string | null | undefined): CerebrasModelPricing | undefined {\n const pricing = CEREBRAS_MODEL_PRICING[normalizeModelId(modelId)];\n return pricing ? { ...pricing } : undefined;\n}\n\nexport function getNovitaModelPricing(modelId: string | null | undefined): OpenAICompatibleModelPricing | undefined {\n const pricing = NOVITA_MODEL_PRICING[normalizeModelId(modelId)];\n return pricing ? { ...pricing } : undefined;\n}\n\nexport function getBasetenModelPricing(modelId: string | null | undefined): OpenAICompatibleModelPricing | undefined {\n const pricing = BASETEN_MODEL_PRICING[normalizeModelId(modelId)];\n return pricing ? { ...pricing } : undefined;\n}\n\nexport function calculateCerebrasUsageCost(\n modelId: string | null | undefined,\n usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens'>\n): number | undefined {\n const pricing = getCerebrasModelPricing(modelId);\n if (!pricing) return undefined;\n\n return roundCost(\n (usage.promptTokens * pricing.inputPerMillion +\n usage.completionTokens * pricing.outputPerMillion) /\n TOKENS_PER_MILLION\n );\n}\n\nexport function getGoogleModelPricing(modelId: string): GoogleModelPricing | undefined {\n const normalizedModelId = normalizeGoogleModelId(modelId);\n const exact = GOOGLE_MODEL_PRICING[normalizedModelId];\n if (exact) return { ...exact };\n\n const prefix = GOOGLE_MODEL_PRICING_PREFIXES.find((entry) => normalizedModelId.startsWith(entry.prefix));\n return prefix ? { ...prefix.pricing } : undefined;\n}\n\nexport function calculateGoogleUsageCost(\n modelId: string,\n usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens' | 'reasoningTokens' | 'cachedTokens'> & {\n promptTokenDetails?: GoogleModalityTokenCount[];\n completionTokenDetails?: GoogleModalityTokenCount[];\n cachedTokenDetails?: GoogleModalityTokenCount[];\n },\n imageCount = 0\n): number | undefined {\n const pricing = getGoogleModelPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);\n const useLongContext = pricing.longContextThreshold != null && usage.promptTokens > pricing.longContextThreshold;\n\n const inputRate = useLongContext ? (pricing.longInputPerMillion ?? pricing.inputPerMillion) : pricing.inputPerMillion;\n const outputRate = useLongContext\n ? (pricing.longOutputPerMillion ?? pricing.outputPerMillion ?? 0)\n : (pricing.outputPerMillion ?? 0);\n const cachedRate = useLongContext\n ? (pricing.longCachedInputPerMillion ?? pricing.cachedInputPerMillion ?? 0)\n : (pricing.cachedInputPerMillion ?? 0);\n const billableOutputTokens = usage.completionTokens + (usage.reasoningTokens ?? 0);\n const promptModalityCounts = toModalityCounts(usage.promptTokenDetails);\n const cachedModalityCounts = toModalityCounts(usage.cachedTokenDetails);\n const uncachedPromptModalityCounts: Partial<Record<GooglePricingModality, number>> = {};\n\n for (const modality of new Set<GooglePricingModality>([\n ...(Object.keys(promptModalityCounts) as GooglePricingModality[]),\n ...(Object.keys(cachedModalityCounts) as GooglePricingModality[]),\n ])) {\n uncachedPromptModalityCounts[modality] = Math.max(\n (promptModalityCounts[modality] ?? 0) - (cachedModalityCounts[modality] ?? 0),\n 0\n );\n }\n\n const completionModalityCounts = toModalityCounts(usage.completionTokenDetails);\n if (usage.reasoningTokens) {\n completionModalityCounts.text = (completionModalityCounts.text ?? 0) + usage.reasoningTokens;\n }\n\n const hasPromptModalityPricing = Object.keys(uncachedPromptModalityCounts).length > 0 && pricing.inputByModalityPerMillion;\n const hasCachedModalityPricing = Object.keys(cachedModalityCounts).length > 0 && pricing.cachedByModalityPerMillion;\n const hasOutputModalityPricing = Object.keys(completionModalityCounts).length > 0 && pricing.outputByModalityPerMillion;\n\n const inputCost = hasPromptModalityPricing\n ? sumModalityCosts(uncachedPromptModalityCounts, pricing.inputByModalityPerMillion, inputRate)\n : (uncachedPromptTokens / TOKENS_PER_MILLION) * inputRate;\n const cachedCost = hasCachedModalityPricing\n ? sumModalityCosts(cachedModalityCounts, pricing.cachedByModalityPerMillion, cachedRate)\n : (cachedTokens / TOKENS_PER_MILLION) * cachedRate;\n const outputCost = hasOutputModalityPricing\n ? sumModalityCosts(completionModalityCounts, pricing.outputByModalityPerMillion, outputRate)\n : (billableOutputTokens / TOKENS_PER_MILLION) * outputRate;\n const imageCost = imageCount * (pricing.outputImagePerImage ?? 0);\n\n return roundCost(inputCost + cachedCost + outputCost + imageCost);\n}\n\nexport function getOpenAIModelPricing(modelId: string): OpenAIModelPricing | undefined {\n const normalizedModelId = normalizeOpenAIModelId(modelId);\n const exact = OPENAI_MODEL_PRICING[normalizedModelId];\n if (exact) return { ...exact };\n\n const prefix = OPENAI_MODEL_PRICING_PREFIXES.find((entry) => normalizedModelId.startsWith(entry.prefix));\n return prefix ? { ...prefix.pricing } : undefined;\n}\n\nexport function calculateOpenAIUsageCost(\n modelId: string,\n usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens' | 'cachedTokens'>\n): number | undefined {\n const pricing = getOpenAIModelPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const promptTokens = Math.max(usage.promptTokens, 0);\n const uncachedPromptTokens = Math.max(0, promptTokens - cachedTokens);\n const useLongContext = pricing.longContextThreshold != null && promptTokens >= pricing.longContextThreshold;\n const inputRate = useLongContext ? (pricing.longInputPerMillion ?? pricing.inputPerMillion) : pricing.inputPerMillion;\n const outputRate = useLongContext ? (pricing.longOutputPerMillion ?? pricing.outputPerMillion) : pricing.outputPerMillion;\n const cachedRate = useLongContext\n ? (pricing.longCachedInputPerMillion ?? pricing.cachedInputPerMillion ?? pricing.inputPerMillion)\n : (pricing.cachedInputPerMillion ?? pricing.inputPerMillion);\n\n const inputCost = (uncachedPromptTokens / TOKENS_PER_MILLION) * inputRate;\n const cachedCost = (cachedTokens / TOKENS_PER_MILLION) * cachedRate;\n const outputCost = (Math.max(usage.completionTokens, 0) / TOKENS_PER_MILLION) * outputRate;\n\n return roundCost(inputCost + cachedCost + outputCost);\n}\n\nexport function getGroqModelPricing(modelId: string): GroqModelPricing | undefined {\n const pricing = GROQ_MODEL_PRICING[normalizeModelId(modelId)];\n return pricing ? { ...pricing } : undefined;\n}\n\nexport function calculateGroqUsageCost(\n modelId: string,\n usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens' | 'cachedTokens'>\n): number | undefined {\n const pricing = getGroqModelPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);\n const inputCost = (uncachedPromptTokens / TOKENS_PER_MILLION) * pricing.inputPerMillion;\n const cachedInputCost = pricing.cachedInputPerMillion\n ? (cachedTokens / TOKENS_PER_MILLION) * pricing.cachedInputPerMillion\n : 0;\n const outputCost = (usage.completionTokens / TOKENS_PER_MILLION) * pricing.outputPerMillion;\n\n return roundCost(inputCost + cachedInputCost + outputCost);\n}\n\nexport function getXAITextPricing(modelId: string): XAITextPricing | undefined {\n const pricing = XAI_MODEL_PRICING[normalizeModelId(modelId)];\n return pricing ? { ...pricing } : undefined;\n}\n\nexport function calculateXAIUsageCost(\n modelId: string,\n usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens' | 'cachedTokens'>\n): number | undefined {\n const pricing = getXAITextPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);\n const inputCost = (uncachedPromptTokens / TOKENS_PER_MILLION) * pricing.inputPerMillion;\n const cachedCost = pricing.cachedInputPerMillion\n ? (cachedTokens / TOKENS_PER_MILLION) * pricing.cachedInputPerMillion\n : 0;\n const outputCost = (usage.completionTokens / TOKENS_PER_MILLION) * pricing.outputPerMillion;\n\n return roundCost(inputCost + cachedCost + outputCost);\n}\n\nexport function ticksToUsd(ticks: number | undefined): number | undefined {\n if (typeof ticks !== 'number') return undefined;\n return roundCost(ticks / XAI_TICKS_PER_DOLLAR);\n}\n\nexport function getCloudflareModelPricing(modelId: string): CloudflareModelPricing | undefined {\n const pricing = CLOUDFLARE_MODEL_PRICING[normalizeCloudflareModelId(modelId)];\n return pricing ? { ...pricing } : undefined;\n}\n\nexport function calculateCloudflareUsageCost(\n modelId: string,\n usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens' | 'cachedTokens'>\n): number | undefined {\n const pricing = getCloudflareModelPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);\n const inputCost = (uncachedPromptTokens / TOKENS_PER_MILLION) * pricing.inputPerMillion;\n const cachedInputCost = pricing.cachedInputPerMillion\n ? (cachedTokens / TOKENS_PER_MILLION) * pricing.cachedInputPerMillion\n : 0;\n const outputCost = (usage.completionTokens / TOKENS_PER_MILLION) * pricing.outputPerMillion;\n\n return roundCost(inputCost + cachedInputCost + outputCost);\n}\n\n/** TypeSafe Jev 1.13 prices verified at https://docs.typesafe.ai/models (2026-10-06).\n * Input usage is authoritative across all questions; output tokens are free.\n */\nexport function getTypeSafeModelPricing(modelId: string | null | undefined): ProviderModelPricing | undefined {\n const id = normalizeModelId(modelId);\n if (id !== 'jev-1.13.0' && id !== 'jev-latest' && id !== 'jev-preview') return undefined;\n return { inputPerMillion: 0.042, outputPerMillion: 0, maxTokens: 64_000, source: 'typesafe-static' };\n}\n\nexport function calculateTypeSafeUsageCost(\n modelId: string,\n usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens'>\n): number | undefined {\n const pricing = getTypeSafeModelPricing(modelId);\n return pricing ? roundCost((usage.promptTokens / TOKENS_PER_MILLION) * pricing.inputPerMillion) : undefined;\n}\n\nexport function getProviderModelPricing(\n provider: ProviderPricingName,\n modelId: string | null | undefined\n): ProviderModelPricing | undefined {\n if (provider === 'typesafe') return getTypeSafeModelPricing(modelId);\n\n if (provider === 'anthropic') {\n const pricing = getAnthropicModelPricing(modelId);\n return pricing\n ? {\n inputPerMillion: pricing.inputPerMillion,\n outputPerMillion: pricing.outputPerMillion,\n cachedInputPerMillion: pricing.cachedInputPerMillion ?? roundCost(pricing.inputPerMillion * 0.1),\n source: 'anthropic-static',\n }\n : undefined;\n }\n\n if (provider === 'cerebras') {\n const pricing = getCerebrasModelPricing(modelId);\n return pricing ? { ...pricing, source: 'cerebras-static' } : undefined;\n }\n\n if (provider === 'novita') {\n const pricing = getNovitaModelPricing(modelId);\n return pricing ? { ...pricing, source: 'novita-static' } : undefined;\n }\n\n if (provider === 'baseten') {\n const pricing = getBasetenModelPricing(modelId);\n return pricing ? { ...pricing, source: 'baseten-static' } : undefined;\n }\n\n if (provider === 'google') {\n const pricing = getGoogleModelPricing(modelId || '');\n return pricing\n ? {\n inputPerMillion: pricing.inputPerMillion,\n outputPerMillion: pricing.outputPerMillion ?? 0,\n cachedInputPerMillion: pricing.cachedInputPerMillion,\n longInputPerMillion: pricing.longInputPerMillion,\n longOutputPerMillion: pricing.longOutputPerMillion,\n longCachedInputPerMillion: pricing.longCachedInputPerMillion,\n longContextThreshold: pricing.longContextThreshold,\n source: 'google-static',\n }\n : undefined;\n }\n\n if (provider === 'groq') {\n const pricing = getGroqModelPricing(modelId || '');\n return pricing ? { ...pricing, source: 'groq-static' } : undefined;\n }\n\n if (provider === 'openai') {\n const pricing = getOpenAIModelPricing(modelId || '');\n return pricing ? { ...pricing, source: 'openai-static' } : undefined;\n }\n\n if (provider === 'xai') {\n const pricing = getXAITextPricing(modelId || '');\n return pricing ? { ...pricing, source: 'xai-static' } : undefined;\n }\n\n if (provider === 'cloudflare') {\n const pricing = getCloudflareModelPricing(modelId || '');\n return pricing ? { ...pricing, source: 'cloudflare-static' } : undefined;\n }\n\n return undefined;\n}\n\nfunction costFromStandardBuckets(\n usage: PlatformTokenUsageLike,\n pricing: ProviderModelPricing,\n options: { billReasoningAsOutput?: boolean } = {}\n): number {\n const cachedTokens = Math.max(usage.cached_tokens ?? 0, 0);\n const inputTokens = Math.max(usage.input_tokens, 0);\n const uncachedInputTokens = Math.max(inputTokens - cachedTokens, 0);\n const outputTokens = Math.max(usage.output_tokens, 0);\n const reasoningTokens = options.billReasoningAsOutput ? Math.max(usage.reasoning_tokens ?? 0, 0) : 0;\n const useLongContext = pricing.longContextThreshold != null && inputTokens >= pricing.longContextThreshold;\n const inputRate = useLongContext ? (pricing.longInputPerMillion ?? pricing.inputPerMillion) : pricing.inputPerMillion;\n const outputRate = useLongContext ? (pricing.longOutputPerMillion ?? pricing.outputPerMillion) : pricing.outputPerMillion;\n const cachedRate = useLongContext\n ? (pricing.longCachedInputPerMillion ?? pricing.cachedInputPerMillion ?? pricing.inputPerMillion)\n : (pricing.cachedInputPerMillion ?? pricing.inputPerMillion);\n\n return ceilDiv(\n uncachedInputTokens * ratePerMillionMicrocents(inputRate) +\n cachedTokens * ratePerMillionMicrocents(cachedRate) +\n (outputTokens + reasoningTokens) * ratePerMillionMicrocents(outputRate),\n TOKENS_PER_MILLION\n );\n}\n\nfunction costFromAnthropicBuckets(usage: PlatformTokenUsageLike, pricing: ProviderModelPricing): number {\n const cacheCreationTokens = Math.max(usage.cache_creation_input_tokens ?? 0, 0);\n const cacheReadTokens = Math.max(usage.cache_read_input_tokens ?? 0, 0);\n const cacheWrite1hTokens = Math.max(usage.cache_creation_1h_input_tokens ?? 0, 0);\n const cacheWrite5mTokens = Math.max(\n usage.cache_creation_5m_input_tokens ?? cacheCreationTokens - cacheWrite1hTokens,\n 0\n );\n const uncachedInputTokens = Math.max(usage.input_tokens - cacheCreationTokens - cacheReadTokens, 0);\n\n return ceilDiv(\n uncachedInputTokens * ratePerMillionMicrocents(pricing.inputPerMillion) +\n cacheWrite5mTokens * ratePerMillionMicrocents(pricing.inputPerMillion, 1.25) +\n cacheWrite1hTokens * ratePerMillionMicrocents(pricing.inputPerMillion, 2) +\n cacheReadTokens * ratePerMillionMicrocents(pricing.cachedInputPerMillion ?? pricing.inputPerMillion * 0.1) +\n Math.max(usage.output_tokens, 0) * ratePerMillionMicrocents(pricing.outputPerMillion),\n TOKENS_PER_MILLION\n );\n}\n\nfunction costFromGoogleBuckets(usage: PlatformTokenUsageLike, pricing: GoogleModelPricing): number {\n const cachedTokens = Math.max(usage.cached_tokens ?? 0, 0);\n const inputTokens = Math.max(usage.input_tokens, 0);\n const outputTokens = Math.max(usage.output_tokens, 0);\n const reasoningTokens = Math.max(usage.reasoning_tokens ?? 0, 0);\n const uncachedInputTokens = Math.max(inputTokens - cachedTokens, 0);\n const useLongContext = pricing.longContextThreshold != null && inputTokens > pricing.longContextThreshold;\n\n const inputRate = useLongContext ? (pricing.longInputPerMillion ?? pricing.inputPerMillion) : pricing.inputPerMillion;\n const outputRate = useLongContext\n ? (pricing.longOutputPerMillion ?? pricing.outputPerMillion ?? 0)\n : (pricing.outputPerMillion ?? 0);\n const cachedRate = useLongContext\n ? (pricing.longCachedInputPerMillion ?? pricing.cachedInputPerMillion ?? 0)\n : (pricing.cachedInputPerMillion ?? 0);\n\n const promptModalityCounts = toModalityCounts(usage.prompt_token_details);\n const cachedModalityCounts = toModalityCounts(usage.cached_token_details);\n const uncachedPromptModalityCounts: Partial<Record<GooglePricingModality, number>> = {};\n\n for (const modality of new Set<GooglePricingModality>([\n ...(Object.keys(promptModalityCounts) as GooglePricingModality[]),\n ...(Object.keys(cachedModalityCounts) as GooglePricingModality[]),\n ])) {\n uncachedPromptModalityCounts[modality] = Math.max(\n (promptModalityCounts[modality] ?? 0) - (cachedModalityCounts[modality] ?? 0),\n 0\n );\n }\n\n const completionModalityCounts = toModalityCounts(usage.completion_token_details);\n if (reasoningTokens) {\n completionModalityCounts.text = (completionModalityCounts.text ?? 0) + reasoningTokens;\n }\n\n const hasPromptModalityPricing =\n Object.keys(uncachedPromptModalityCounts).length > 0 && pricing.inputByModalityPerMillion;\n const hasCachedModalityPricing = Object.keys(cachedModalityCounts).length > 0 && pricing.cachedByModalityPerMillion;\n const hasOutputModalityPricing =\n Object.keys(completionModalityCounts).length > 0 && pricing.outputByModalityPerMillion;\n\n const tokenNumerator =\n (hasPromptModalityPricing\n ? sumModalityCostNumerator(uncachedPromptModalityCounts, pricing.inputByModalityPerMillion, inputRate)\n : uncachedInputTokens * ratePerMillionMicrocents(inputRate)) +\n (hasCachedModalityPricing\n ? sumModalityCostNumerator(cachedModalityCounts, pricing.cachedByModalityPerMillion, cachedRate)\n : cachedTokens * ratePerMillionMicrocents(cachedRate)) +\n (hasOutputModalityPricing\n ? sumModalityCostNumerator(completionModalityCounts, pricing.outputByModalityPerMillion, outputRate)\n : (outputTokens + reasoningTokens) * ratePerMillionMicrocents(outputRate));\n const imageMicrocents =\n Math.max(usage.image_count ?? 0, 0) * Math.round((pricing.outputImagePerImage ?? 0) * MICROCENTS_PER_DOLLAR);\n\n return ceilDiv(tokenNumerator, TOKENS_PER_MILLION) + imageMicrocents;\n}\n\nexport function calculateProviderUsageCostMicrocents(\n provider: ProviderPricingName,\n modelId: string,\n usage: PlatformTokenUsageLike\n): number | undefined {\n const pricing = getProviderModelPricing(provider, modelId);\n if (!pricing) return undefined;\n\n if (provider === 'anthropic') {\n return costFromAnthropicBuckets(usage, pricing);\n }\n\n if (provider === 'google') {\n const googlePricing = getGoogleModelPricing(modelId);\n return googlePricing ? costFromGoogleBuckets(usage, googlePricing) : undefined;\n }\n\n return costFromStandardBuckets(usage, pricing, {\n billReasoningAsOutput: false,\n });\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["const TOKENS_PER_MILLION = 1_000_000;\nexport const MICROCENTS_PER_DOLLAR = 100_000_000;\nconst XAI_TICKS_PER_DOLLAR = 10_000_000_000;\n\nexport type ProviderPricingName =\n | 'anthropic'\n | 'baseten'\n | 'cerebras'\n | 'cloudflare'\n | 'google'\n | 'groq'\n | 'novita'\n | 'openai'\n | 'typesafe'\n | 'xai';\n\nexport interface ProviderUsageLike {\n promptTokens: number;\n completionTokens: number;\n cachedTokens?: number;\n reasoningTokens?: number;\n}\n\nexport interface PlatformTokenUsageLike {\n input_tokens: number;\n output_tokens: number;\n cached_tokens?: number;\n reasoning_tokens?: number;\n prompt_token_details?: GoogleModalityTokenCount[];\n completion_token_details?: GoogleModalityTokenCount[];\n cached_token_details?: GoogleModalityTokenCount[];\n image_count?: number;\n cache_creation_input_tokens?: number;\n cache_creation_5m_input_tokens?: number;\n cache_creation_1h_input_tokens?: number;\n cache_read_input_tokens?: number;\n}\n\nexport interface ProviderModelPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n longInputPerMillion?: number;\n longOutputPerMillion?: number;\n longCachedInputPerMillion?: number;\n longContextThreshold?: number;\n maxTokens?: number;\n source: `${ProviderPricingName}-static`;\n}\n\nexport interface AnthropicModelPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n}\n\nexport interface AnthropicUsageBuckets {\n inputTokens: number;\n outputTokens: number;\n cacheReadTokens: number;\n cacheWrite5mTokens: number;\n cacheWrite1hTokens: number;\n}\n\nconst ANTHROPIC_MODEL_PRICING: Array<[prefix: string, pricing: AnthropicModelPricing]> = [\n ['claude-fable-5-2', { inputPerMillion: 8, cachedInputPerMillion: 0.2, outputPerMillion: 40 }],\n ['claude-mythos-5-2', { inputPerMillion: 8, cachedInputPerMillion: 0.2, outputPerMillion: 40 }],\n ['claude-opus-5-5', { inputPerMillion: 4, cachedInputPerMillion: 0.2, outputPerMillion: 20 }],\n ['claude-sonnet-5-5', { inputPerMillion: 2, cachedInputPerMillion: 0.1, outputPerMillion: 10 }],\n // Fable/Mythos 5.1 cache hits use a model-specific 0.025x input rate.\n ['claude-fable-5-1', { inputPerMillion: 10, cachedInputPerMillion: 0.25, outputPerMillion: 50 }],\n ['claude-mythos-5-1', { inputPerMillion: 10, cachedInputPerMillion: 0.25, outputPerMillion: 50 }],\n ['claude-fable-5', { inputPerMillion: 10, outputPerMillion: 50 }],\n ['claude-mythos', { inputPerMillion: 10, outputPerMillion: 50 }],\n ['claude-opus-5', { inputPerMillion: 5, outputPerMillion: 25 }],\n ['claude-opus-4-8', { inputPerMillion: 5, outputPerMillion: 25 }],\n ['claude-opus-4-7', { inputPerMillion: 5, outputPerMillion: 25 }],\n ['claude-opus-4-6', { inputPerMillion: 5, outputPerMillion: 25 }],\n ['claude-opus-4-5', { inputPerMillion: 5, outputPerMillion: 25 }],\n ['claude-opus-4-1', { inputPerMillion: 15, outputPerMillion: 75 }],\n ['claude-opus-4', { inputPerMillion: 15, outputPerMillion: 75 }],\n // Current list pricing reconfirmed from Anthropic's Sonnet 5 model page on 2026-09-01.\n ['claude-sonnet-5', { inputPerMillion: 2, outputPerMillion: 10 }],\n ['claude-sonnet-4-6', { inputPerMillion: 3, outputPerMillion: 15 }],\n ['claude-sonnet-4-5', { inputPerMillion: 3, outputPerMillion: 15 }],\n ['claude-sonnet-4', { inputPerMillion: 3, outputPerMillion: 15 }],\n ['claude-haiku-4-5', { inputPerMillion: 1, outputPerMillion: 5 }],\n ['claude-3-7-sonnet', { inputPerMillion: 3, outputPerMillion: 15 }],\n ['claude-3-5-sonnet', { inputPerMillion: 3, outputPerMillion: 15 }],\n ['claude-3-5-haiku', { inputPerMillion: 0.8, outputPerMillion: 4 }],\n ['claude-3-opus', { inputPerMillion: 15, outputPerMillion: 75 }],\n ['claude-3-haiku', { inputPerMillion: 0.25, outputPerMillion: 1.25 }],\n];\n\nexport interface CerebrasModelPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n maxTokens?: number;\n}\n\nconst CEREBRAS_MODEL_PRICING: Record<string, CerebrasModelPricing> = {\n 'qwen-3.8-27b': { inputPerMillion: 0.99, outputPerMillion: 1.49, maxTokens: 131_072 },\n // Retain documented/enterprise models even when the public catalog omits them.\n 'zai-glm-4.7': { inputPerMillion: 2.25, outputPerMillion: 2.75, maxTokens: 64_000 },\n 'gpt-oss-120b': { inputPerMillion: 0.35, outputPerMillion: 0.75, maxTokens: 64_000 },\n 'llama3.1-8b': { inputPerMillion: 0.1, outputPerMillion: 0.1, maxTokens: 8_192 },\n 'qwen-3-235b-a22b-instruct-2507': { inputPerMillion: 0.6, outputPerMillion: 1.2, maxTokens: 40_960 },\n 'gemma-4-31b': { inputPerMillion: 0.99, outputPerMillion: 1.49, maxTokens: 4_096 },\n};\n\n// Novita and Baseten are OpenAI-compatible \"custom\" providers with no built-in\n// runtime pricing, so unpriced requests on them log $0. Prices are USD per\n// million tokens sourced from each provider's live catalog\n// (GET api.novita.ai/openai/v1/models, GET api.baseten.co/v1/model_apis).\n// Keep model keys lowercase to match normalizeModelId. These tables are a\n// static fallback; provider packages that can report exact per-request cost\n// (usage.cost) still take precedence in the request-log math.\nexport interface OpenAICompatibleModelPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n /** Rates for prompts of at least `longContextThreshold` tokens. */\n longInputPerMillion?: number;\n longOutputPerMillion?: number;\n longCachedInputPerMillion?: number;\n longContextThreshold?: number;\n maxTokens?: number;\n}\n\nconst NOVITA_MODEL_PRICING: Record<string, OpenAICompatibleModelPricing> = {\n 'tencent/hy4': { inputPerMillion: 0.417, cachedInputPerMillion: 0.021, outputPerMillion: 1.2505, maxTokens: 1_000_000 },\n 'deepseek/deepseek-v4.1-flash-1017': { inputPerMillion: 0.3, cachedInputPerMillion: 0.006, outputPerMillion: 1.2, maxTokens: 1_048_576 },\n 'zai-org/glm-5.3-flashx': { inputPerMillion: 0.37, cachedInputPerMillion: 0.075, outputPerMillion: 1.25, maxTokens: 1_048_576 },\n 'minimax/minimax-m3.1-flash': { inputPerMillion: 0.15, cachedInputPerMillion: 0.015, outputPerMillion: 0.6, maxTokens: 1_000_000 },\n // FULL live-catalog sync 2026-09-01 (GET api.novita.ai/openai/v1/models;\n // unit price_per_m / 10000 = $/M, including pricing.input_cache_read for\n // cached-read rates — the API now reports them directly). Hosted routing\n // fails closed on missing entries, so this table must cover every model\n // Novita serves. Models without a cache-read price bill cached tokens at\n // the input rate. Catalog entries with no/zero token price (unpriced\n // previews, internal test ids) stay unlisted, as do image models\n // (per-image billing is not modeled yet).\n // Re-synced 2026-10-18 (agentbuilder-platform#22): added the newly listed\n // priced chat models (GLM-5.3-P and other `-p` variants, Ling 3.x, MiMo\n // V2.6, Step 5, HY4) and corrected rates that drifted from the catalog\n // (GLM-5.3-Flash's discount ended; DeepSeek V4 Pro 0813 cache read;\n // Macaron Venti output). Rows Novita has since retired stay listed.\n 'baichuan/baichuan-m2-32b': { inputPerMillion: 0.07, outputPerMillion: 0.07 },\n 'baidu/cobuddy': { inputPerMillion: 0.28, cachedInputPerMillion: 0.07, outputPerMillion: 1.13 },\n 'baidu/ernie-4.5-21b-a3b': { inputPerMillion: 0.07, outputPerMillion: 0.28 },\n 'baidu/ernie-4.5-21b-a3b-thinking': { inputPerMillion: 0.07, outputPerMillion: 0.28 },\n 'baidu/ernie-4.5-300b-a47b-paddle': { inputPerMillion: 0.28, outputPerMillion: 1.1 },\n 'baidu/ernie-4.5-vl-28b-a3b': { inputPerMillion: 0.14, outputPerMillion: 0.56 },\n 'baidu/ernie-4.5-vl-28b-a3b-thinking': { inputPerMillion: 0.39, outputPerMillion: 0.39 },\n 'baidu/ernie-4.5-vl-424b-a47b': { inputPerMillion: 0.42, outputPerMillion: 1.25 },\n 'deepseek/deepseek-ocr': { inputPerMillion: 0.03, outputPerMillion: 0.03 },\n 'deepseek/deepseek-ocr-2': { inputPerMillion: 0.03, outputPerMillion: 0.03 },\n 'deepseek/deepseek-prover-v2-671b': { inputPerMillion: 0.7, outputPerMillion: 2.5 },\n 'deepseek/deepseek-r1': { inputPerMillion: 4, outputPerMillion: 4 },\n 'deepseek/deepseek-r1-0528': { inputPerMillion: 0.7, cachedInputPerMillion: 0.35, outputPerMillion: 2.5 },\n 'deepseek/deepseek-r1-0528-qwen3-8b': { inputPerMillion: 0.06, outputPerMillion: 0.09 },\n 'deepseek/deepseek-r1-distill-llama-70b': { inputPerMillion: 0.8, outputPerMillion: 0.8 },\n 'deepseek/deepseek-r1-distill-qwen-14b': { inputPerMillion: 0.15, outputPerMillion: 0.15 },\n 'deepseek/deepseek-r1-distill-qwen-32b': { inputPerMillion: 0.3, outputPerMillion: 0.3 },\n 'deepseek/deepseek-r1-turbo': { inputPerMillion: 0.7, outputPerMillion: 2.5 },\n 'deepseek/deepseek-r1/community': { inputPerMillion: 4, outputPerMillion: 4 },\n 'deepseek/deepseek-v3-0324': { inputPerMillion: 0.27, cachedInputPerMillion: 0.135, outputPerMillion: 1.12 },\n 'deepseek/deepseek-v3-turbo': { inputPerMillion: 0.4, outputPerMillion: 1.3 },\n 'deepseek/deepseek-v3.1': { inputPerMillion: 0.27, cachedInputPerMillion: 0.135, outputPerMillion: 1 },\n 'deepseek/deepseek-v3.1-terminus': { inputPerMillion: 0.27, cachedInputPerMillion: 0.135, outputPerMillion: 1 },\n 'deepseek/deepseek-v3.2': { inputPerMillion: 0.269, cachedInputPerMillion: 0.1345, outputPerMillion: 0.4 },\n 'deepseek/deepseek-v3.2-exp': { inputPerMillion: 0.27, outputPerMillion: 0.41 },\n 'deepseek/deepseek-v3/community': { inputPerMillion: 0.89, outputPerMillion: 0.89 },\n 'deepseek/deepseek-v4-flash': { inputPerMillion: 0.14, cachedInputPerMillion: 0.028, outputPerMillion: 0.28, maxTokens: 1_048_576 },\n 'deepseek/deepseek-v4-flash-0731': { inputPerMillion: 0.44, cachedInputPerMillion: 0.028, outputPerMillion: 1.32, maxTokens: 1_048_576 },\n 'deepseek/deepseek-v4-flash-0731-p': { inputPerMillion: 0.44, cachedInputPerMillion: 0.0148, outputPerMillion: 1.32, maxTokens: 1_048_576 },\n 'deepseek/deepseek-v4-flash-vision-exp': { inputPerMillion: 0.44, cachedInputPerMillion: 0.028, outputPerMillion: 1.32, maxTokens: 1_048_576 },\n 'deepseek/deepseek-v4-pro': { inputPerMillion: 1.6, cachedInputPerMillion: 0.135, outputPerMillion: 3.2 },\n 'deepseek/deepseek-v4-pro-0813': { inputPerMillion: 1.32, cachedInputPerMillion: 0.044, outputPerMillion: 3.96, maxTokens: 1_048_576 },\n 'deepseek/deepseek-v4-pro-0813-p': { inputPerMillion: 1.32, cachedInputPerMillion: 0.044, outputPerMillion: 3.96, maxTokens: 1_048_576 },\n // Added 2026-10-01 from the live catalog (price_per_m_decimal: 0.30 / 1.20,\n // input_cache_read 0.006; 1,048,576 context, 393,216 max output).\n 'deepseek/deepseek-v4.1-flash': { inputPerMillion: 0.3, cachedInputPerMillion: 0.006, outputPerMillion: 1.2, maxTokens: 1_048_576 },\n 'deepseek/deepseek-v4.1-flash-dst': { inputPerMillion: 0.3, cachedInputPerMillion: 0.006, outputPerMillion: 1.2, maxTokens: 1_048_576 },\n 'deepseek/deepseek-v4.1-flash-p': { inputPerMillion: 0.3, cachedInputPerMillion: 0.006, outputPerMillion: 1.2, maxTokens: 1_048_576 },\n 'deepseek/deepseek_v3': { inputPerMillion: 0.89, outputPerMillion: 0.89 },\n 'elephant': { inputPerMillion: 0.1, cachedInputPerMillion: 0.02, outputPerMillion: 0.3 },\n 'google/gemma-3-12b-it': { inputPerMillion: 0.05, outputPerMillion: 0.1 },\n 'google/gemma-3-27b-it': { inputPerMillion: 0.119, outputPerMillion: 0.2 },\n 'google/gemma-4-26b-a4b-it': { inputPerMillion: 0.13, outputPerMillion: 0.4 },\n 'google/gemma-4-31b-it': { inputPerMillion: 0.14, outputPerMillion: 0.4 },\n 'gryphe/mythomax-l2-13b': { inputPerMillion: 0.09, outputPerMillion: 0.09 },\n 'inclusionai/ling-2.6-1t': { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 2.5 },\n 'inclusionai/ling-2.6-flash': { inputPerMillion: 0.1, cachedInputPerMillion: 0.02, outputPerMillion: 0.3, maxTokens: 262_144 },\n 'inclusionai/ling-3.0-flash': { inputPerMillion: 0.06, cachedInputPerMillion: 0.012, outputPerMillion: 0.18, maxTokens: 262_144 },\n 'inclusionai/ling-3.0-flash-fast': { inputPerMillion: 0.06, cachedInputPerMillion: 0.012, outputPerMillion: 0.18, maxTokens: 262_144 },\n 'inclusionai/ling-3.0-flash-fin': { inputPerMillion: 0.075, cachedInputPerMillion: 0.015, outputPerMillion: 0.22, maxTokens: 262_144 },\n 'inclusionai/ling-3.0-flash-sante': { inputPerMillion: 0.075, cachedInputPerMillion: 0.015, outputPerMillion: 0.22, maxTokens: 262_144 },\n 'inclusionai/ling-3.0-flash-vl': { inputPerMillion: 0.075, cachedInputPerMillion: 0.015, outputPerMillion: 0.22, maxTokens: 262_144 },\n 'inclusionai/ling-3.1-flash': { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 0.9, maxTokens: 1_000_000 },\n 'inclusionai/ring-2.6-1t': { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 2.5 },\n 'kwaipilot/kat-coder-pro': { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 1.2 },\n 'meta-llama/llama-3-70b-instruct': { inputPerMillion: 0.51, outputPerMillion: 0.74 },\n 'meta-llama/llama-3-8b-instruct': { inputPerMillion: 0.04, outputPerMillion: 0.04 },\n 'meta-llama/llama-3.1-8b-instruct': { inputPerMillion: 0.02, outputPerMillion: 0.05 },\n 'meta-llama/llama-3.2-1b-instruct': { inputPerMillion: 0.02, outputPerMillion: 0.02 },\n 'meta-llama/llama-3.2-3b-instruct': { inputPerMillion: 0.03, outputPerMillion: 0.05 },\n 'meta-llama/llama-3.3-70b-instruct': { inputPerMillion: 0.135, outputPerMillion: 0.4 },\n 'meta-llama/llama-4-maverick-17b-128e-instruct-fp8': { inputPerMillion: 0.27, outputPerMillion: 0.85 },\n 'meta-llama/llama-4-scout-17b-16e-instruct': { inputPerMillion: 0.18, outputPerMillion: 0.59 },\n 'microsoft/wizardlm-2-8x22b': { inputPerMillion: 0.62, outputPerMillion: 0.62 },\n 'mindai/macaron-v1-tall': { inputPerMillion: 0.2475, cachedInputPerMillion: 0.044, outputPerMillion: 1.43, maxTokens: 262_144 },\n 'mindai/macaron-v1-venti': { inputPerMillion: 0.825, cachedInputPerMillion: 0.165, outputPerMillion: 2.475, maxTokens: 1_048_576 },\n 'minimax/minimax-m2': { inputPerMillion: 0.3, cachedInputPerMillion: 0.03, outputPerMillion: 1.2 },\n 'minimax/minimax-m2.1': { inputPerMillion: 0.3, cachedInputPerMillion: 0.03, outputPerMillion: 1.2 },\n 'minimax/minimax-m2.5': { inputPerMillion: 0.3, cachedInputPerMillion: 0.03, outputPerMillion: 1.2 },\n 'minimax/minimax-m2.5-highspeed': { inputPerMillion: 0.6, cachedInputPerMillion: 0.03, outputPerMillion: 2.4 },\n 'minimax/minimax-m2.7': { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 1.2 },\n 'minimax/minimax-m2.7-highspeed': { inputPerMillion: 0.6, cachedInputPerMillion: 0.06, outputPerMillion: 2.4 },\n // Tiered in the catalog (is_tiered_billing): prompts of 524,288+ tokens\n // bill every rate at double the base tier.\n 'minimax/minimax-m3': { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 1.2, longInputPerMillion: 0.6, longCachedInputPerMillion: 0.12, longOutputPerMillion: 2.4, longContextThreshold: 524_288 },\n 'minimaxai/minimax-m1-80k': { inputPerMillion: 0.55, outputPerMillion: 2.2 },\n 'mistralai/mistral-nemo': { inputPerMillion: 0.04, outputPerMillion: 0.17 },\n 'moonshotai/kimi-k2-0905': { inputPerMillion: 0.6, outputPerMillion: 2.5 },\n 'moonshotai/kimi-k2-instruct': { inputPerMillion: 0.57, outputPerMillion: 2.3 },\n 'moonshotai/kimi-k2-thinking': { inputPerMillion: 0.6, cachedInputPerMillion: 0.15, outputPerMillion: 2.5 },\n 'moonshotai/kimi-k2.5': { inputPerMillion: 0.6, cachedInputPerMillion: 0.1, outputPerMillion: 3 },\n 'moonshotai/kimi-k2.6': { inputPerMillion: 0.8, cachedInputPerMillion: 0.16, outputPerMillion: 3.4 },\n 'moonshotai/kimi-k2.7-code': { inputPerMillion: 0.95, cachedInputPerMillion: 0.19, outputPerMillion: 4 },\n 'moonshotai/kimi-k3': { inputPerMillion: 3, cachedInputPerMillion: 0.3, outputPerMillion: 15 },\n 'moonshotai/kimi-k3-p': { inputPerMillion: 3, cachedInputPerMillion: 0.3, outputPerMillion: 15, maxTokens: 1_048_576 },\n 'nousresearch/hermes-2-pro-llama-3-8b': { inputPerMillion: 0.14, outputPerMillion: 0.14 },\n 'nousresearch/nous-hermes-llama2-13b': { inputPerMillion: 0.17, outputPerMillion: 0.17 },\n 'nvidia/nemotron-3-nano-30b-a3b': { inputPerMillion: 0.05, outputPerMillion: 0.2 },\n 'openai/gpt-oss-120b': { inputPerMillion: 0.05, outputPerMillion: 0.25 },\n 'openai/gpt-oss-20b': { inputPerMillion: 0.04, outputPerMillion: 0.15 },\n 'openchat/openchat-7b': { inputPerMillion: 0.06, outputPerMillion: 0.06 },\n 'paddlepaddle/paddleocr-vl': { inputPerMillion: 0.02, outputPerMillion: 0.02 },\n 'qwen/qwen-2-7b-instruct': { inputPerMillion: 0.054, outputPerMillion: 0.054 },\n 'qwen/qwen-2-vl-72b-instruct': { inputPerMillion: 0.45, outputPerMillion: 0.45 },\n 'qwen/qwen-2.5-72b-instruct': { inputPerMillion: 0.38, outputPerMillion: 0.4 },\n 'qwen/qwen-mt-plus': { inputPerMillion: 0.25, outputPerMillion: 0.75 },\n 'qwen/qwen2.5-7b-instruct': { inputPerMillion: 0.07, outputPerMillion: 0.07 },\n 'qwen/qwen2.5-vl-72b-instruct': { inputPerMillion: 0.8, outputPerMillion: 0.8 },\n 'qwen/qwen3-235b-a22b-fp8': { inputPerMillion: 0.2, outputPerMillion: 0.8 },\n 'qwen/qwen3-235b-a22b-instruct-2507': { inputPerMillion: 0.09, outputPerMillion: 0.58 },\n 'qwen/qwen3-235b-a22b-thinking-2507': { inputPerMillion: 0.3, outputPerMillion: 3 },\n 'qwen/qwen3-30b-a3b-fp8': { inputPerMillion: 0.09, outputPerMillion: 0.45 },\n 'qwen/qwen3-32b-fp8': { inputPerMillion: 0.1, outputPerMillion: 0.45 },\n 'qwen/qwen3-4b-fp8': { inputPerMillion: 0.03, outputPerMillion: 0.03 },\n 'qwen/qwen3-8b-fp8': { inputPerMillion: 0.035, outputPerMillion: 0.138 },\n 'qwen/qwen3-coder-30b-a3b-instruct': { inputPerMillion: 0.07, outputPerMillion: 0.27 },\n 'qwen/qwen3-coder-480b-a35b-instruct': { inputPerMillion: 0.38, outputPerMillion: 1.55 },\n 'qwen/qwen3-coder-next': { inputPerMillion: 0.2, outputPerMillion: 1.5 },\n 'qwen/qwen3-max': { inputPerMillion: 2.11, outputPerMillion: 8.45 },\n 'qwen/qwen3-next-80b-a3b-instruct': { inputPerMillion: 0.15, outputPerMillion: 1.5 },\n 'qwen/qwen3-next-80b-a3b-thinking': { inputPerMillion: 0.15, outputPerMillion: 1.5 },\n 'qwen/qwen3-omni-30b-a3b-instruct': { inputPerMillion: 0.25, outputPerMillion: 0.97 },\n 'qwen/qwen3-omni-30b-a3b-thinking': { inputPerMillion: 0.25, outputPerMillion: 0.97 },\n 'qwen/qwen3-vl-235b-a22b-instruct': { inputPerMillion: 0.3, outputPerMillion: 1.5 },\n 'qwen/qwen3-vl-235b-a22b-thinking': { inputPerMillion: 0.98, outputPerMillion: 3.95 },\n 'qwen/qwen3-vl-30b-a3b-instruct': { inputPerMillion: 0.2, outputPerMillion: 0.7 },\n 'qwen/qwen3-vl-30b-a3b-thinking': { inputPerMillion: 0.2, outputPerMillion: 1 },\n 'qwen/qwen3-vl-8b-instruct': { inputPerMillion: 0.08, outputPerMillion: 0.5 },\n 'qwen/qwen3.5-122b-a10b': { inputPerMillion: 0.4, outputPerMillion: 3.2 },\n 'qwen/qwen3.5-27b': { inputPerMillion: 0.3, outputPerMillion: 2.4 },\n 'qwen/qwen3.5-35b-a3b': { inputPerMillion: 0.25, outputPerMillion: 2 },\n 'qwen/qwen3.5-397b-a17b': { inputPerMillion: 0.6, outputPerMillion: 3.6 },\n 'qwen/qwen3.6-27b': { inputPerMillion: 0.6, outputPerMillion: 3.6 },\n 'qwen/qwen3.6-35b-a3b': { inputPerMillion: 0.248, outputPerMillion: 1.485 },\n 'qwen/qwen3.7-max': { inputPerMillion: 1.25, cachedInputPerMillion: 0.25, outputPerMillion: 3.75 },\n 'qwen/qwen3.8-2.4t-a95b': { inputPerMillion: 2, cachedInputPerMillion: 0.25, outputPerMillion: 6, maxTokens: 1_000_000 },\n 'qwen/qwen3.8-27b': { inputPerMillion: 0.42, cachedInputPerMillion: 0.085, outputPerMillion: 3, maxTokens: 1_000_000 },\n 'qwen/qwen3.8-flash': { inputPerMillion: 0.15, cachedInputPerMillion: 0.016, outputPerMillion: 0.47, maxTokens: 1_000_000 },\n 'qwen/qwen3.8-max': { inputPerMillion: 2, cachedInputPerMillion: 0.25, outputPerMillion: 6, maxTokens: 1_000_000 },\n 'sao10k/l3-70b-euryale-v2.1': { inputPerMillion: 1.48, outputPerMillion: 1.48 },\n 'sao10k/l3-8b-lunaris': { inputPerMillion: 0.05, outputPerMillion: 0.05 },\n 'sao10k/l3-8b-stheno-v3.2': { inputPerMillion: 0.05, outputPerMillion: 0.05 },\n 'sao10k/l31-70b-euryale-v2.2': { inputPerMillion: 1.48, outputPerMillion: 1.48 },\n 'stepfun/step-3.7-flash': { inputPerMillion: 0.2, cachedInputPerMillion: 0.04, outputPerMillion: 1.15 },\n 'stepfun/step-5-preview': { inputPerMillion: 1, cachedInputPerMillion: 0.1, outputPerMillion: 2.7, maxTokens: 1_000_000 },\n 'teknium/openhermes-2.5-mistral-7b': { inputPerMillion: 0.17, outputPerMillion: 0.17 },\n 'tencent/hy3': { inputPerMillion: 0.14, cachedInputPerMillion: 0.035, outputPerMillion: 0.58, maxTokens: 262_144 },\n 'tencent/hy4-preview': { inputPerMillion: 0.834, cachedInputPerMillion: 0.042, outputPerMillion: 2.501, maxTokens: 1_000_000 },\n 'thudm/glm-4-32b-0414': { inputPerMillion: 0.55, outputPerMillion: 1.66 },\n 'xiaomimimo/mimo-v2-flash': { inputPerMillion: 0.11, cachedInputPerMillion: 0.024, outputPerMillion: 0.33 },\n 'xiaomimimo/mimo-v2-pro': { inputPerMillion: 2, cachedInputPerMillion: 0.4, outputPerMillion: 6 },\n 'xiaomimimo/mimo-v2.5': { inputPerMillion: 0.168, cachedInputPerMillion: 0.0034, outputPerMillion: 0.336 },\n 'xiaomimimo/mimo-v2.5-pro': { inputPerMillion: 0.522, cachedInputPerMillion: 0.0043, outputPerMillion: 1.044 },\n 'xiaomimimo/mimo-v2.6-flash': { inputPerMillion: 0.14, cachedInputPerMillion: 0.0028, outputPerMillion: 0.28, maxTokens: 1_048_576 },\n 'xiaomimimo/mimo-v2.6-pro': { inputPerMillion: 0.435, cachedInputPerMillion: 0.0036, outputPerMillion: 0.87, maxTokens: 1_048_576 },\n 'zai-org/autoglm-phone-9b-multilingual': { inputPerMillion: 0.035, outputPerMillion: 0.138 },\n 'zai-org/glm-4.5': { inputPerMillion: 0.6, cachedInputPerMillion: 0.11, outputPerMillion: 2.2 },\n 'zai-org/glm-4.5-air': { inputPerMillion: 0.13, cachedInputPerMillion: 0.025, outputPerMillion: 0.85 },\n 'zai-org/glm-4.5v': { inputPerMillion: 0.6, cachedInputPerMillion: 0.11, outputPerMillion: 1.8 },\n 'zai-org/glm-4.6': { inputPerMillion: 0.55, cachedInputPerMillion: 0.11, outputPerMillion: 2.2 },\n 'zai-org/glm-4.6v': { inputPerMillion: 0.3, cachedInputPerMillion: 0.055, outputPerMillion: 0.9 },\n 'zai-org/glm-4.7': { inputPerMillion: 0.6, cachedInputPerMillion: 0.11, outputPerMillion: 2.2 },\n 'zai-org/glm-4.7-flash': { inputPerMillion: 0.07, cachedInputPerMillion: 0.01, outputPerMillion: 0.4, maxTokens: 200_000 },\n 'zai-org/glm-4.7-h': { inputPerMillion: 0.6, cachedInputPerMillion: 0.11, outputPerMillion: 2.2 },\n 'zai-org/glm-5': { inputPerMillion: 1, cachedInputPerMillion: 0.2, outputPerMillion: 3.2 },\n 'zai-org/glm-5-turbo': { inputPerMillion: 1.2, cachedInputPerMillion: 0.24, outputPerMillion: 4 },\n 'zai-org/glm-5.1': { inputPerMillion: 1.38, cachedInputPerMillion: 0.26, outputPerMillion: 4.4 },\n 'zai-org/glm-5.2': { inputPerMillion: 1.4, cachedInputPerMillion: 0.26, outputPerMillion: 4.4, maxTokens: 1_048_576 },\n 'zai-org/glm-5.3': { inputPerMillion: 1.4, cachedInputPerMillion: 0.26, outputPerMillion: 4.4, maxTokens: 1_048_576 },\n 'zai-org/glm-5.3-flash': { inputPerMillion: 0.15, cachedInputPerMillion: 0.03, outputPerMillion: 0.5, maxTokens: 1_048_576 },\n 'zai-org/glm-5.3-p': { inputPerMillion: 1.4, cachedInputPerMillion: 0.26, outputPerMillion: 4.4, maxTokens: 1_048_576 },\n 'zai-org/glm-5v-turbo': { inputPerMillion: 1.2, cachedInputPerMillion: 0.24, outputPerMillion: 4 },\n};\n\nconst BASETEN_MODEL_PRICING: Record<string, OpenAICompatibleModelPricing> = {\n 'moonshotai/kimi-k3.1-pro': { inputPerMillion: 2, cachedInputPerMillion: 0.2, outputPerMillion: 10, maxTokens: 1_000_000 },\n 'decision-models/baseten-joey-2b-latest': { inputPerMillion: 0.01, cachedInputPerMillion: 0, outputPerMillion: 0, maxTokens: 16_384 },\n 'decision-models/baseten-mammoth-27b-latest': { inputPerMillion: 0.1, cachedInputPerMillion: 0, outputPerMillion: 0, maxTokens: 16_384 },\n 'decision-models/baseten-elephant-9b-latest': { inputPerMillion: 0.035, cachedInputPerMillion: 0, outputPerMillion: 0, maxTokens: 16_384 },\n 'deepseek-ai/deepseek-v4.1-flash-1017-fast': { inputPerMillion: 0.6, cachedInputPerMillion: 0.014, outputPerMillion: 2.4, maxTokens: 1_048_576 },\n 'deepseek-ai/deepseek-v4.1-flash-1017': { inputPerMillion: 0.3, cachedInputPerMillion: 0.007, outputPerMillion: 1.2, maxTokens: 1_048_576 },\n 'meta-models/muse-spark-open': { inputPerMillion: 1.25, cachedInputPerMillion: 0.15, outputPerMillion: 4.25, maxTokens: 1_048_576 },\n 'reflection/beam-1.0': { inputPerMillion: 0.4, cachedInputPerMillion: 0.04, outputPerMillion: 1.2, maxTokens: 1_048_576 },\n 'nvidia/nvidia-nemotron-3.5-super-vl-120b-a12b': { inputPerMillion: 0.2, cachedInputPerMillion: 0.04, outputPerMillion: 0.5, maxTokens: 1_048_576 },\n 'deepseek-ai/deepseek-v4.1-flash-fast': { inputPerMillion: 0.6, cachedInputPerMillion: 0.014, outputPerMillion: 2.4, maxTokens: 1_048_576 },\n 'deepseek-ai/deepseek-v4.1-flash': { inputPerMillion: 0.3, cachedInputPerMillion: 0.007, outputPerMillion: 1.2, maxTokens: 1_048_576 },\n 'zai-org/glm-5.3-fast': { inputPerMillion: 2.1, cachedInputPerMillion: 0.21, outputPerMillion: 6.6, maxTokens: 1_048_576 },\n // FULL live-catalog sync 2026-08-28 (GET api.baseten.co/v1/model_apis).\n 'deepseek-ai/deepseek-v4-flash-0731': { inputPerMillion: 0.13, cachedInputPerMillion: 0.028, outputPerMillion: 0.26, maxTokens: 1_048_576 },\n 'deepseek-ai/deepseek-v4-pro': { inputPerMillion: 1.74, outputPerMillion: 3.48 },\n 'deepseek-ai/deepseek-v4-pro-0813': { inputPerMillion: 1.32, cachedInputPerMillion: 0.132, outputPerMillion: 3.96, maxTokens: 1_048_576 },\n 'moonshotai/kimi-k2.5': { inputPerMillion: 0.6, outputPerMillion: 3 },\n 'moonshotai/kimi-k2.6': { inputPerMillion: 0.95, outputPerMillion: 4 },\n 'moonshotai/kimi-k2.7-code': { inputPerMillion: 0.95, outputPerMillion: 4 },\n 'moonshotai/kimi-k3': { inputPerMillion: 3, cachedInputPerMillion: 0.3, outputPerMillion: 15, maxTokens: 1_048_576 },\n 'nvidia/nemotron-120b-a12b': { inputPerMillion: 0.3, outputPerMillion: 0.75 },\n 'nvidia/nvidia-nemotron-3-ultra-550b-a55b': { inputPerMillion: 0.6, cachedInputPerMillion: 0.12, outputPerMillion: 2.4 },\n 'openai/gpt-oss-120b': { inputPerMillion: 0.1, cachedInputPerMillion: 0.1, outputPerMillion: 0.5 },\n 'thinkingmachines/inkling': { inputPerMillion: 1, outputPerMillion: 4.05, maxTokens: 1_048_576 },\n 'thinkingmachines/inkling-small': { inputPerMillion: 0.5, outputPerMillion: 1.2, maxTokens: 1_048_576 },\n 'zai-org/glm-4.7': { inputPerMillion: 0.6, outputPerMillion: 2.2 },\n 'zai-org/glm-5': { inputPerMillion: 0.95, outputPerMillion: 3.15 },\n 'zai-org/glm-5.1': { inputPerMillion: 1.3, outputPerMillion: 4.3 },\n 'zai-org/glm-5.2': { inputPerMillion: 1.4, cachedInputPerMillion: 0.14, outputPerMillion: 4.4 },\n 'zai-org/glm-5.2-fast': { inputPerMillion: 2.1, cachedInputPerMillion: 0.21, outputPerMillion: 6.6, maxTokens: 1_048_576 },\n 'zai-org/glm-5.3': { inputPerMillion: 1.4, cachedInputPerMillion: 0.14, outputPerMillion: 4.4, maxTokens: 1_048_576 },\n 'zai-org/glm-5.3-flash': { inputPerMillion: 0.15, cachedInputPerMillion: 0.03, outputPerMillion: 0.5, maxTokens: 1_048_576 },\n};\n\ntype GooglePricingModality = 'text' | 'image' | 'video' | 'audio' | 'document' | 'unspecified';\n\nexport interface GoogleModalityTokenCount {\n modality?: string;\n tokenCount?: number;\n}\n\nexport interface GoogleModelPricing {\n inputPerMillion: number;\n longInputPerMillion?: number;\n outputPerMillion?: number;\n longOutputPerMillion?: number;\n cachedInputPerMillion?: number;\n longCachedInputPerMillion?: number;\n outputImagePerImage?: number;\n inputByModalityPerMillion?: Partial<Record<GooglePricingModality, number>>;\n outputByModalityPerMillion?: Partial<Record<GooglePricingModality, number>>;\n cachedByModalityPerMillion?: Partial<Record<GooglePricingModality, number>>;\n longContextThreshold?: number;\n}\n\nconst GOOGLE_MODEL_PRICING: Record<string, GoogleModelPricing> = {\n // Promotional rates through 2026-11-30; double from 2026-12-01.\n 'gemini-4-carbon': { inputPerMillion: 2, cachedInputPerMillion: 0.1, outputPerMillion: 10 },\n 'gemini-4-argon': { inputPerMillion: 2, cachedInputPerMillion: 0.1, outputPerMillion: 10 },\n 'gemini-omni-1.2-flash': { inputPerMillion: 1.5, outputPerMillion: 9, outputByModalityPerMillion: { video: 12 } },\n 'gemini-nano-banana-2.1': { inputPerMillion: 1.5, outputPerMillion: 7.5, outputByModalityPerMillion: { image: 30 } },\n 'gemini-3.8-flash-tts': { inputPerMillion: 0.5, outputPerMillion: 9, outputByModalityPerMillion: { audio: 9 } },\n 'gemini-3.8-flash-lite-tts': { inputPerMillion: 0.5, outputPerMillion: 6, outputByModalityPerMillion: { audio: 6 } },\n 'gemini-3-pro-preview': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n cachedInputPerMillion: 0.2,\n },\n 'gemini-3.1-pro-preview': {\n inputPerMillion: 2,\n longInputPerMillion: 4,\n outputPerMillion: 12,\n longOutputPerMillion: 18,\n cachedInputPerMillion: 0.2,\n longCachedInputPerMillion: 0.4,\n longContextThreshold: 200000,\n },\n 'gemini-2.5-pro': {\n inputPerMillion: 1.25,\n longInputPerMillion: 2.5,\n outputPerMillion: 10,\n longOutputPerMillion: 15,\n cachedInputPerMillion: 0.125,\n longCachedInputPerMillion: 0.25,\n longContextThreshold: 200000,\n },\n 'gemini-2.5-flash': {\n inputPerMillion: 0.3,\n outputPerMillion: 2.5,\n cachedInputPerMillion: 0.03,\n },\n 'gemini-2.5-flash-lite': {\n inputPerMillion: 0.1,\n outputPerMillion: 0.4,\n cachedInputPerMillion: 0.01,\n },\n 'gemini-3-flash-preview': {\n inputPerMillion: 0.5,\n outputPerMillion: 3,\n cachedInputPerMillion: 0.05,\n inputByModalityPerMillion: {\n text: 0.5,\n image: 0.5,\n video: 0.5,\n audio: 1,\n },\n cachedByModalityPerMillion: {\n text: 0.05,\n image: 0.05,\n video: 0.05,\n audio: 0.1,\n },\n },\n 'gemini-3.1-flash-lite-preview': {\n inputPerMillion: 0.25,\n outputPerMillion: 1.5,\n cachedInputPerMillion: 0.025,\n inputByModalityPerMillion: {\n text: 0.25,\n image: 0.25,\n video: 0.25,\n audio: 0.5,\n },\n cachedByModalityPerMillion: {\n text: 0.025,\n image: 0.025,\n video: 0.025,\n audio: 0.05,\n },\n },\n 'deep-research-pro-preview-12-2025': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n cachedInputPerMillion: 0.2,\n },\n 'gemini-2.0-flash': {\n inputPerMillion: 0.1,\n outputPerMillion: 0.4,\n cachedInputPerMillion: 0.025,\n inputByModalityPerMillion: {\n text: 0.1,\n image: 0.1,\n video: 0.1,\n audio: 0.7,\n },\n cachedByModalityPerMillion: {\n text: 0.025,\n image: 0.025,\n video: 0.025,\n audio: 0.175,\n },\n },\n 'gemini-2.0-flash-001': {\n inputPerMillion: 0.1,\n outputPerMillion: 0.4,\n cachedInputPerMillion: 0.025,\n inputByModalityPerMillion: {\n text: 0.1,\n image: 0.1,\n video: 0.1,\n audio: 0.7,\n },\n cachedByModalityPerMillion: {\n text: 0.025,\n image: 0.025,\n video: 0.025,\n audio: 0.175,\n },\n },\n 'gemini-2.0-flash-lite': {\n inputPerMillion: 0.075,\n outputPerMillion: 0.3,\n },\n 'gemini-2.0-flash-lite-001': {\n inputPerMillion: 0.075,\n outputPerMillion: 0.3,\n },\n 'gemini-2.5-computer-use-preview-10-2025': {\n inputPerMillion: 1.25,\n longInputPerMillion: 2.5,\n outputPerMillion: 10,\n longOutputPerMillion: 15,\n longContextThreshold: 200000,\n },\n 'gemini-2.5-flash-preview-tts': {\n inputPerMillion: 0.5,\n outputPerMillion: 10,\n outputByModalityPerMillion: {\n audio: 10,\n },\n },\n 'gemini-2.5-pro-preview-tts': {\n inputPerMillion: 1,\n outputPerMillion: 20,\n outputByModalityPerMillion: {\n audio: 20,\n },\n },\n 'gemini-robotics-er-1.5-preview': {\n inputPerMillion: 0.3,\n outputPerMillion: 2.5,\n inputByModalityPerMillion: {\n text: 0.3,\n image: 0.3,\n video: 0.3,\n audio: 1,\n },\n },\n 'gemini-robotics-er-1.6-preview': {\n inputPerMillion: 1,\n outputPerMillion: 5,\n inputByModalityPerMillion: {\n text: 1,\n image: 1,\n video: 1,\n audio: 2,\n },\n },\n 'gemini-robotics-er-2-preview': {\n inputPerMillion: 2,\n cachedInputPerMillion: 0.2,\n outputPerMillion: 10,\n },\n // ai.google.dev/gemini-api/docs/pricing 2026-07-08\n 'gemini-3.5-flash': {\n inputPerMillion: 1.5,\n cachedInputPerMillion: 0.15,\n outputPerMillion: 9,\n },\n // Promotional standard pricing through 2026-12-31.\n 'gemini-3.6-flash': { inputPerMillion: 0.75, cachedInputPerMillion: 0.075, outputPerMillion: 3.75 },\n 'gemini-3.7-flash': { inputPerMillion: 0.75, cachedInputPerMillion: 0.075, outputPerMillion: 3.75 },\n 'gemini-3.8-flash': { inputPerMillion: 0.75, cachedInputPerMillion: 0.075, outputPerMillion: 3.75 },\n 'gemini-3.5-flash-lite': { inputPerMillion: 0.3, cachedInputPerMillion: 0.03, outputPerMillion: 2.5 },\n 'gemini-3.5-transcribe': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n inputByModalityPerMillion: { audio: 2 },\n outputByModalityPerMillion: { text: 12 },\n },\n 'gemini-3.1-flash-lite': {\n inputPerMillion: 0.25,\n cachedInputPerMillion: 0.025,\n outputPerMillion: 1.5,\n },\n 'gemini-3.1-flash-tts-preview': {\n inputPerMillion: 1,\n outputPerMillion: 20,\n outputByModalityPerMillion: { audio: 20 },\n },\n 'gemini-omni-1.1-flash': {\n inputPerMillion: 1.5,\n outputPerMillion: 9,\n outputByModalityPerMillion: { text: 9, video: 17.5 },\n },\n 'gemini-omni-flash-preview': {\n inputPerMillion: 1.5,\n outputPerMillion: 9,\n outputByModalityPerMillion: { text: 9, video: 17.5 },\n },\n 'gemini-2.5-flash-image': {\n inputPerMillion: 0.3,\n outputImagePerImage: 0.039,\n },\n 'gemini-3.1-flash-image-preview': {\n inputPerMillion: 0.5,\n outputPerMillion: 3,\n outputImagePerImage: 0.045,\n },\n // GA ids for the image models (the catalog now lists them without -preview).\n 'gemini-3.1-flash-image': {\n inputPerMillion: 0.5,\n outputPerMillion: 3,\n outputImagePerImage: 0.045,\n },\n 'gemini-3.1-flash-lite-image': {\n inputPerMillion: 0.25,\n outputPerMillion: 1.5,\n outputImagePerImage: 0.0336,\n },\n 'gemini-3-pro-image-preview': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n outputImagePerImage: 0.134,\n },\n 'gemini-3-pro-image': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n outputImagePerImage: 0.134,\n },\n 'nano-banana-pro-preview': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n outputImagePerImage: 0.134,\n },\n 'imagen-4.0-generate-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.04,\n },\n 'imagen-4.0-fast-generate-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.02,\n },\n 'imagen-4.0-ultra-generate-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.06,\n },\n 'imagen-3.0-capability-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.04,\n },\n 'gemma-4-31b-it': {\n inputPerMillion: 0,\n outputPerMillion: 0,\n cachedInputPerMillion: 0,\n },\n};\n\nconst GOOGLE_MODEL_PRICING_PREFIXES: Array<{ prefix: string; pricing: GoogleModelPricing }> = [\n { prefix: 'gemini-3.1-pro-preview', pricing: GOOGLE_MODEL_PRICING['gemini-3.1-pro-preview']! },\n { prefix: 'gemini-3-pro-preview', pricing: GOOGLE_MODEL_PRICING['gemini-3-pro-preview']! },\n { prefix: 'gemini-3-flash-preview', pricing: GOOGLE_MODEL_PRICING['gemini-3-flash-preview']! },\n { prefix: 'gemini-3.1-flash-lite-preview', pricing: GOOGLE_MODEL_PRICING['gemini-3.1-flash-lite-preview']! },\n { prefix: 'gemini-2.5-flash-lite-preview-', pricing: GOOGLE_MODEL_PRICING['gemini-2.5-flash-lite']! },\n { prefix: 'gemini-flash-latest', pricing: GOOGLE_MODEL_PRICING['gemini-2.5-flash']! },\n { prefix: 'gemini-flash-lite-latest', pricing: GOOGLE_MODEL_PRICING['gemini-2.5-flash-lite']! },\n { prefix: 'gemini-pro-latest', pricing: GOOGLE_MODEL_PRICING['gemini-2.5-pro']! },\n {\n prefix: 'gemma-4-',\n pricing: { inputPerMillion: 0, outputPerMillion: 0, cachedInputPerMillion: 0 },\n },\n {\n prefix: 'gemma-3-',\n pricing: { inputPerMillion: 0, outputPerMillion: 0, cachedInputPerMillion: 0 },\n },\n {\n prefix: 'gemma-3n-',\n pricing: { inputPerMillion: 0, outputPerMillion: 0, cachedInputPerMillion: 0 },\n },\n];\n\nexport interface GroqModelPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n}\n\nexport interface OpenAIModelPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n longInputPerMillion?: number;\n longOutputPerMillion?: number;\n longCachedInputPerMillion?: number;\n longContextThreshold?: number;\n}\n\nconst OPENAI_LONG_CONTEXT_THRESHOLD = 272_000;\n\n// Standard token pricing from https://developers.openai.com/api/docs/pricing.md.\nconst OPENAI_MODEL_PRICING: Record<string, OpenAIModelPricing> = {\n 'gpt-6.1-terra': { inputPerMillion: 1, cachedInputPerMillion: 0.05, outputPerMillion: 5, longInputPerMillion: 2, longCachedInputPerMillion: 0.1, longOutputPerMillion: 7.5, longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD },\n 'chat-latest': { inputPerMillion: 5, cachedInputPerMillion: 0.5, outputPerMillion: 30 },\n 'gpt-5.3-codex': { inputPerMillion: 1.75, cachedInputPerMillion: 0.175, outputPerMillion: 14 },\n // GPT-6 family — synced 2026-10-01 against developers.openai.com/api/docs/pricing\n // and /docs/models. The family is exactly gpt-6-astra, gpt-6-sol, gpt-6-luna,\n // and gpt-6.1-sol (no mini/nano/pro variants, no 6.1 Luna or Astra). All\n // share the 272k long-context threshold. The Batch/Flex, Fast, and Astra\n // Ultrafast tiers are intentionally not modelled (standard tier only).\n 'gpt-6.1-sol': {\n inputPerMillion: 2,\n cachedInputPerMillion: 0.1,\n outputPerMillion: 10,\n longInputPerMillion: 4,\n longCachedInputPerMillion: 0.2,\n longOutputPerMillion: 15,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-6-astra': {\n inputPerMillion: 10,\n cachedInputPerMillion: 1,\n outputPerMillion: 50,\n longInputPerMillion: 20,\n longCachedInputPerMillion: 2,\n longOutputPerMillion: 75,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-6-sol': {\n inputPerMillion: 2,\n cachedInputPerMillion: 0.2,\n outputPerMillion: 10,\n longInputPerMillion: 4,\n longCachedInputPerMillion: 0.4,\n longOutputPerMillion: 15,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-6-luna': {\n inputPerMillion: 0.1,\n cachedInputPerMillion: 0.01,\n outputPerMillion: 0.5,\n longInputPerMillion: 0.2,\n longCachedInputPerMillion: 0.02,\n longOutputPerMillion: 0.75,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n // GPT-5.6 family — synced 2026-07-31 (the \"price-performance frontier\"\n // announcement dropped Luna ~80%). Without explicit entries these ids fell\n // through to the generic 'gpt-5' prefix and were mispriced.\n 'gpt-5.6-sol': {\n inputPerMillion: 4,\n cachedInputPerMillion: 0.4,\n outputPerMillion: 20,\n longInputPerMillion: 8,\n longCachedInputPerMillion: 0.8,\n longOutputPerMillion: 30,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-5.6-terra': {\n inputPerMillion: 2,\n cachedInputPerMillion: 0.2,\n outputPerMillion: 12,\n longInputPerMillion: 4,\n longCachedInputPerMillion: 0.4,\n longOutputPerMillion: 18,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-5.6-luna': {\n inputPerMillion: 0.2,\n cachedInputPerMillion: 0.02,\n outputPerMillion: 1.2,\n longInputPerMillion: 0.4,\n longCachedInputPerMillion: 0.04,\n longOutputPerMillion: 1.8,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-5.5': {\n inputPerMillion: 5,\n cachedInputPerMillion: 0.5,\n outputPerMillion: 30,\n longInputPerMillion: 10,\n longCachedInputPerMillion: 1,\n longOutputPerMillion: 45,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-5.5-pro': {\n inputPerMillion: 30,\n outputPerMillion: 180,\n longInputPerMillion: 60,\n longOutputPerMillion: 270,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-5.4': {\n inputPerMillion: 2.5,\n cachedInputPerMillion: 0.25,\n outputPerMillion: 15,\n longInputPerMillion: 5,\n longCachedInputPerMillion: 0.5,\n longOutputPerMillion: 22.5,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-5.4-mini': { inputPerMillion: 0.75, cachedInputPerMillion: 0.075, outputPerMillion: 4.5 },\n 'gpt-5.4-nano': { inputPerMillion: 0.2, cachedInputPerMillion: 0.02, outputPerMillion: 1.25 },\n 'gpt-5.4-pro': {\n inputPerMillion: 30,\n outputPerMillion: 180,\n longInputPerMillion: 60,\n longOutputPerMillion: 270,\n longContextThreshold: OPENAI_LONG_CONTEXT_THRESHOLD,\n },\n 'gpt-5.2': { inputPerMillion: 1.75, cachedInputPerMillion: 0.175, outputPerMillion: 14 },\n 'gpt-5.2-pro': { inputPerMillion: 21, outputPerMillion: 168 },\n 'gpt-5.1': { inputPerMillion: 1.25, cachedInputPerMillion: 0.125, outputPerMillion: 10 },\n 'gpt-5': { inputPerMillion: 1.25, cachedInputPerMillion: 0.125, outputPerMillion: 10 },\n 'gpt-5-mini': { inputPerMillion: 0.25, cachedInputPerMillion: 0.025, outputPerMillion: 2 },\n 'gpt-5-nano': { inputPerMillion: 0.05, cachedInputPerMillion: 0.005, outputPerMillion: 0.4 },\n 'gpt-5-pro': { inputPerMillion: 15, outputPerMillion: 120 },\n 'gpt-4.1': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 8 },\n 'gpt-4.1-mini': { inputPerMillion: 0.4, cachedInputPerMillion: 0.1, outputPerMillion: 1.6 },\n 'gpt-4.1-nano': { inputPerMillion: 0.1, cachedInputPerMillion: 0.025, outputPerMillion: 0.4 },\n 'gpt-4o': { inputPerMillion: 2.5, cachedInputPerMillion: 1.25, outputPerMillion: 10 },\n 'gpt-4o-2024-05-13': { inputPerMillion: 5, outputPerMillion: 15 },\n 'gpt-4o-mini': { inputPerMillion: 0.15, cachedInputPerMillion: 0.075, outputPerMillion: 0.6 },\n o1: { inputPerMillion: 15, cachedInputPerMillion: 7.5, outputPerMillion: 60 },\n 'o1-pro': { inputPerMillion: 150, outputPerMillion: 600 },\n 'o3-pro': { inputPerMillion: 20, outputPerMillion: 80 },\n o3: { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 8 },\n 'o4-mini': { inputPerMillion: 1.1, cachedInputPerMillion: 0.275, outputPerMillion: 4.4 },\n 'o3-mini': { inputPerMillion: 1.1, cachedInputPerMillion: 0.55, outputPerMillion: 4.4 },\n 'o1-mini': { inputPerMillion: 1.1, cachedInputPerMillion: 0.55, outputPerMillion: 4.4 },\n 'gpt-4-turbo': { inputPerMillion: 10, outputPerMillion: 30 },\n 'gpt-4-turbo-2024-04-09': { inputPerMillion: 10, outputPerMillion: 30 },\n 'gpt-4-0125-preview': { inputPerMillion: 10, outputPerMillion: 30 },\n 'gpt-4-1106-preview': { inputPerMillion: 10, outputPerMillion: 30 },\n 'gpt-4-1106-vision-preview': { inputPerMillion: 10, outputPerMillion: 30 },\n 'gpt-4': { inputPerMillion: 30, outputPerMillion: 60 },\n 'gpt-4-0613': { inputPerMillion: 30, outputPerMillion: 60 },\n 'gpt-4-0314': { inputPerMillion: 30, outputPerMillion: 60 },\n 'gpt-4-32k': { inputPerMillion: 60, outputPerMillion: 120 },\n 'gpt-3.5-turbo': { inputPerMillion: 0.5, outputPerMillion: 1.5 },\n 'gpt-3.5-turbo-0125': { inputPerMillion: 0.5, outputPerMillion: 1.5 },\n 'gpt-3.5-turbo-1106': { inputPerMillion: 1, outputPerMillion: 2 },\n 'gpt-3.5-turbo-0613': { inputPerMillion: 1.5, outputPerMillion: 2 },\n 'gpt-3.5-0301': { inputPerMillion: 1.5, outputPerMillion: 2 },\n 'gpt-3.5-turbo-instruct': { inputPerMillion: 1.5, outputPerMillion: 2 },\n 'gpt-3.5-turbo-16k-0613': { inputPerMillion: 3, outputPerMillion: 4 },\n 'davinci-002': { inputPerMillion: 2, outputPerMillion: 2 },\n 'babbage-002': { inputPerMillion: 0.4, outputPerMillion: 0.4 },\n};\n\nconst OPENAI_MODEL_PRICING_PREFIXES: Array<{ prefix: string; pricing: OpenAIModelPricing }> = [\n // 'gpt-6.1-sol' and 'gpt-6-sol' differ at the sixth character ('.' vs '-'),\n // so dated 6.1 ids never fall through to the 6 Sol row (cached rates differ).\n { prefix: 'gpt-6.1-sol', pricing: OPENAI_MODEL_PRICING['gpt-6.1-sol']! },\n { prefix: 'gpt-6-astra', pricing: OPENAI_MODEL_PRICING['gpt-6-astra']! },\n { prefix: 'gpt-6-sol', pricing: OPENAI_MODEL_PRICING['gpt-6-sol']! },\n { prefix: 'gpt-6-luna', pricing: OPENAI_MODEL_PRICING['gpt-6-luna']! },\n { prefix: 'gpt-5.6-sol', pricing: OPENAI_MODEL_PRICING['gpt-5.6-sol']! },\n { prefix: 'gpt-5.6-terra', pricing: OPENAI_MODEL_PRICING['gpt-5.6-terra']! },\n { prefix: 'gpt-5.6-luna', pricing: OPENAI_MODEL_PRICING['gpt-5.6-luna']! },\n { prefix: 'gpt-5.5-pro', pricing: OPENAI_MODEL_PRICING['gpt-5.5-pro']! },\n { prefix: 'gpt-5.5', pricing: OPENAI_MODEL_PRICING['gpt-5.5']! },\n { prefix: 'gpt-5.4-mini', pricing: OPENAI_MODEL_PRICING['gpt-5.4-mini']! },\n { prefix: 'gpt-5.4-nano', pricing: OPENAI_MODEL_PRICING['gpt-5.4-nano']! },\n { prefix: 'gpt-5.4-pro', pricing: OPENAI_MODEL_PRICING['gpt-5.4-pro']! },\n { prefix: 'gpt-5.4', pricing: OPENAI_MODEL_PRICING['gpt-5.4']! },\n { prefix: 'gpt-5.2-pro', pricing: OPENAI_MODEL_PRICING['gpt-5.2-pro']! },\n { prefix: 'gpt-5.2', pricing: OPENAI_MODEL_PRICING['gpt-5.2']! },\n { prefix: 'gpt-5.1', pricing: OPENAI_MODEL_PRICING['gpt-5.1']! },\n { prefix: 'gpt-5-mini', pricing: OPENAI_MODEL_PRICING['gpt-5-mini']! },\n { prefix: 'gpt-5-nano', pricing: OPENAI_MODEL_PRICING['gpt-5-nano']! },\n { prefix: 'gpt-5-pro', pricing: OPENAI_MODEL_PRICING['gpt-5-pro']! },\n { prefix: 'gpt-5', pricing: OPENAI_MODEL_PRICING['gpt-5']! },\n { prefix: 'gpt-4.1-mini', pricing: OPENAI_MODEL_PRICING['gpt-4.1-mini']! },\n { prefix: 'gpt-4.1-nano', pricing: OPENAI_MODEL_PRICING['gpt-4.1-nano']! },\n { prefix: 'gpt-4.1', pricing: OPENAI_MODEL_PRICING['gpt-4.1']! },\n { prefix: 'gpt-4o-mini', pricing: OPENAI_MODEL_PRICING['gpt-4o-mini']! },\n { prefix: 'gpt-4o', pricing: OPENAI_MODEL_PRICING['gpt-4o']! },\n { prefix: 'o3-pro', pricing: OPENAI_MODEL_PRICING['o3-pro']! },\n { prefix: 'o3-mini', pricing: OPENAI_MODEL_PRICING['o3-mini']! },\n { prefix: 'o4-mini', pricing: OPENAI_MODEL_PRICING['o4-mini']! },\n { prefix: 'o1-pro', pricing: OPENAI_MODEL_PRICING['o1-pro']! },\n { prefix: 'o1-mini', pricing: OPENAI_MODEL_PRICING['o1-mini']! },\n { prefix: 'o3', pricing: OPENAI_MODEL_PRICING.o3! },\n { prefix: 'o1', pricing: OPENAI_MODEL_PRICING.o1! },\n { prefix: 'gpt-4-turbo', pricing: OPENAI_MODEL_PRICING['gpt-4-turbo']! },\n { prefix: 'gpt-4-32k', pricing: OPENAI_MODEL_PRICING['gpt-4-32k']! },\n { prefix: 'gpt-4', pricing: OPENAI_MODEL_PRICING['gpt-4']! },\n { prefix: 'gpt-3.5-turbo', pricing: OPENAI_MODEL_PRICING['gpt-3.5-turbo']! },\n];\n\nconst GROQ_MODEL_PRICING: Record<string, GroqModelPricing> = {\n 'meta-llama/llama-prompt-guard-2-22m': { inputPerMillion: 0.03, cachedInputPerMillion: 0.015, outputPerMillion: 0.03 },\n 'meta-llama/llama-prompt-guard-2-86m': { inputPerMillion: 0.04, cachedInputPerMillion: 0.02, outputPerMillion: 0.04 },\n 'openai/gpt-oss-120b': { inputPerMillion: 0.15, cachedInputPerMillion: 0.075, outputPerMillion: 0.6 },\n 'openai/gpt-oss-20b': { inputPerMillion: 0.075, cachedInputPerMillion: 0.0375, outputPerMillion: 0.3 },\n 'openai/gpt-oss-safeguard-20b': { inputPerMillion: 0.075, cachedInputPerMillion: 0.0375, outputPerMillion: 0.3 },\n 'qwen/qwen3.6-27b': { inputPerMillion: 0.6, cachedInputPerMillion: 0.3, outputPerMillion: 3 },\n 'qwen/qwen3.8-27b': { inputPerMillion: 0.8, cachedInputPerMillion: 0.4, outputPerMillion: 4 },\n};\n\nexport interface XAITextPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n longInputPerMillion?: number;\n longOutputPerMillion?: number;\n longCachedInputPerMillion?: number;\n longContextThreshold?: number;\n}\n\n// Re-verified against the live xAI catalog 2026-07-08\n// (GET api.x.ai/v1/language-models; field unit price_per_m/10000 = $/M) and\n// docs.x.ai/docs/models. The previous table was systematically ~10x high\n// (e.g. grok-4 at 30/150 vs the real 3/15) — with hosted billing now using\n// xAI's exact cost_in_usd_ticks these values only drive reservation\n// estimates and request-log display, but they must still be right.\nconst XAI_MODEL_PRICING: Record<string, XAITextPricing> = {\n 'grok-4.7': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 6, longInputPerMillion: 4, longCachedInputPerMillion: 1, longOutputPerMillion: 12, longContextThreshold: 200_000 },\n 'grok-4-0709': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 15 },\n 'grok-4': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 15 },\n 'grok-4-latest': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 15 },\n 'grok-4-fast-reasoning': { inputPerMillion: 0.2, cachedInputPerMillion: 0.05, outputPerMillion: 0.5 },\n 'grok-4-fast-non-reasoning': { inputPerMillion: 0.2, cachedInputPerMillion: 0.05, outputPerMillion: 0.5 },\n 'grok-4-1-fast-reasoning': { inputPerMillion: 0.2, cachedInputPerMillion: 0.05, outputPerMillion: 0.5 },\n 'grok-4-1-fast-non-reasoning': { inputPerMillion: 0.2, cachedInputPerMillion: 0.05, outputPerMillion: 0.5 },\n 'grok-4.20-0309-reasoning': { inputPerMillion: 1.25, cachedInputPerMillion: 0.2, outputPerMillion: 2.5, longInputPerMillion: 2.5, longCachedInputPerMillion: 0.4, longOutputPerMillion: 5, longContextThreshold: 200_000 },\n 'grok-4.20-0309-non-reasoning': { inputPerMillion: 1.25, cachedInputPerMillion: 0.2, outputPerMillion: 2.5, longInputPerMillion: 2.5, longCachedInputPerMillion: 0.4, longOutputPerMillion: 5, longContextThreshold: 200_000 },\n 'grok-4.20-multi-agent-0309': { inputPerMillion: 1.25, cachedInputPerMillion: 0.2, outputPerMillion: 2.5, longInputPerMillion: 2.5, longCachedInputPerMillion: 0.4, longOutputPerMillion: 5, longContextThreshold: 200_000 },\n 'grok-4.20': { inputPerMillion: 1.25, cachedInputPerMillion: 0.2, outputPerMillion: 2.5, longInputPerMillion: 2.5, longCachedInputPerMillion: 0.4, longOutputPerMillion: 5, longContextThreshold: 200_000 },\n 'grok-4.3': { inputPerMillion: 1.25, cachedInputPerMillion: 0.2, outputPerMillion: 2.5, longInputPerMillion: 2.5, longCachedInputPerMillion: 0.4, longOutputPerMillion: 5, longContextThreshold: 200_000 },\n 'grok-4.3-latest': { inputPerMillion: 1.25, cachedInputPerMillion: 0.2, outputPerMillion: 2.5, longInputPerMillion: 2.5, longCachedInputPerMillion: 0.4, longOutputPerMillion: 5, longContextThreshold: 200_000 },\n 'grok-latest': { inputPerMillion: 1.25, cachedInputPerMillion: 0.2, outputPerMillion: 2.5 },\n 'grok-4.5': { inputPerMillion: 2, cachedInputPerMillion: 0.3, outputPerMillion: 6, longInputPerMillion: 4, longCachedInputPerMillion: 0.6, longOutputPerMillion: 12, longContextThreshold: 200_000 },\n 'grok-4.6': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 6, longInputPerMillion: 4, longCachedInputPerMillion: 1, longOutputPerMillion: 12, longContextThreshold: 200_000 },\n 'grok-4.5-latest': { inputPerMillion: 2, cachedInputPerMillion: 0.3, outputPerMillion: 6, longInputPerMillion: 4, longCachedInputPerMillion: 0.6, longOutputPerMillion: 12, longContextThreshold: 200_000 },\n 'grok-build-latest': { inputPerMillion: 2, cachedInputPerMillion: 0.3, outputPerMillion: 6, longInputPerMillion: 4, longCachedInputPerMillion: 0.6, longOutputPerMillion: 12, longContextThreshold: 200_000 },\n 'grok-build-0.1': { inputPerMillion: 1, cachedInputPerMillion: 0.2, outputPerMillion: 2, longInputPerMillion: 2, longCachedInputPerMillion: 0.4, longOutputPerMillion: 4, longContextThreshold: 200_000 },\n 'grok-code-fast-1': { inputPerMillion: 1, cachedInputPerMillion: 0.2, outputPerMillion: 2, longInputPerMillion: 2, longCachedInputPerMillion: 0.4, longOutputPerMillion: 4, longContextThreshold: 200_000 },\n 'grok-3': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 15 },\n 'grok-3-latest': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 15 },\n 'grok-3-mini': { inputPerMillion: 0.3, cachedInputPerMillion: 0.075, outputPerMillion: 0.5 },\n 'grok-3-mini-latest': { inputPerMillion: 0.3, cachedInputPerMillion: 0.075, outputPerMillion: 0.5 },\n};\n\nexport interface CloudflareModelPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n}\n\nconst CLOUDFLARE_MODEL_PRICING: Record<string, CloudflareModelPricing> = {\n '@cf/meta/m2m100-1.2b': { inputPerMillion: 0.342, outputPerMillion: 0.342 },\n '@cf/ai4bharat/indictrans2-en-indic-1b': { inputPerMillion: 0.342, outputPerMillion: 0.342 },\n '@cf/moondream/moondream3.1-9b-a2b': { inputPerMillion: 0.3, outputPerMillion: 1 },\n '@cf/deepseek-ai/deepseek-v4.1-flash-1017': { inputPerMillion: 0.3, cachedInputPerMillion: 0.006, outputPerMillion: 1.2 },\n '@cf/meta/llama-3.2-1b-instruct': { inputPerMillion: 0.027, outputPerMillion: 0.201 },\n '@cf/meta/llama-3.2-3b-instruct': { inputPerMillion: 0.0509, outputPerMillion: 0.335 },\n '@cf/meta/llama-3.1-8b-instruct-fp8-fast': { inputPerMillion: 0.045, outputPerMillion: 0.384 },\n '@cf/meta/llama-3.2-11b-vision-instruct': { inputPerMillion: 0.0485, outputPerMillion: 0.676 },\n '@cf/meta/llama-3.1-70b-instruct-fp8-fast': { inputPerMillion: 0.293, outputPerMillion: 2.253 },\n '@cf/meta/llama-3.3-70b-instruct-fp8-fast': { inputPerMillion: 0.293, outputPerMillion: 2.253 },\n '@cf/deepseek-ai/deepseek-r1-distill-qwen-32b': { inputPerMillion: 0.497, outputPerMillion: 4.881 },\n '@cf/mistral/mistral-7b-instruct-v0.1': { inputPerMillion: 0.11, outputPerMillion: 0.19 },\n '@cf/mistralai/mistral-small-3.1-24b-instruct': { inputPerMillion: 0.351, outputPerMillion: 0.555 },\n '@cf/meta/llama-3.1-8b-instruct': { inputPerMillion: 0.282, outputPerMillion: 0.827 },\n '@cf/meta/llama-3.1-8b-instruct-fp8': { inputPerMillion: 0.152, outputPerMillion: 0.287 },\n '@cf/meta/llama-3.1-8b-instruct-awq': { inputPerMillion: 0.123, outputPerMillion: 0.266 },\n '@cf/meta/llama-3-8b-instruct': { inputPerMillion: 0.282, outputPerMillion: 0.827 },\n '@cf/meta/llama-3-8b-instruct-awq': { inputPerMillion: 0.123, outputPerMillion: 0.266 },\n '@cf/meta/llama-2-7b-chat-fp16': { inputPerMillion: 0.556, outputPerMillion: 6.667 },\n '@cf/meta/llama-guard-3-8b': { inputPerMillion: 0.484, outputPerMillion: 0.03 },\n '@cf/meta/llama-4-scout-17b-16e-instruct': { inputPerMillion: 0.27, outputPerMillion: 0.85 },\n '@cf/google/gemma-3-12b-it': { inputPerMillion: 0.345, outputPerMillion: 0.556 },\n '@cf/qwen/qwq-32b': { inputPerMillion: 0.66, outputPerMillion: 1.0 },\n '@cf/qwen/qwen2.5-coder-32b-instruct': { inputPerMillion: 0.66, outputPerMillion: 1.0 },\n '@cf/qwen/qwen3-30b-a3b-fp8': { inputPerMillion: 0.0509, outputPerMillion: 0.335 },\n '@cf/openai/gpt-oss-120b': { inputPerMillion: 0.35, outputPerMillion: 0.75 },\n '@cf/openai/gpt-oss-20b': { inputPerMillion: 0.2, outputPerMillion: 0.3 },\n '@cf/aisingapore/gemma-sea-lion-v4-27b-it': { inputPerMillion: 0.351, outputPerMillion: 0.555 },\n '@cf/ibm-granite/granite-4.0-h-micro': { inputPerMillion: 0.017, outputPerMillion: 0.112 },\n '@cf/zai-org/glm-4.7-flash': { inputPerMillion: 0.0605, outputPerMillion: 0.4 },\n '@cf/nvidia/nemotron-3-120b-a12b': { inputPerMillion: 0.5, outputPerMillion: 1.5 },\n '@cf/moonshotai/kimi-k2.5': { inputPerMillion: 0.6, cachedInputPerMillion: 0.1, outputPerMillion: 3.0 },\n '@cf/deepseek-ai/deepseek-v4-flash-0731': { inputPerMillion: 0.44, cachedInputPerMillion: 0.014, outputPerMillion: 1.32 },\n '@cf/deepseek-ai/deepseek-v4-pro-0813': { inputPerMillion: 1.32, cachedInputPerMillion: 0.044, outputPerMillion: 3.96 },\n '@cf/google/gemma-4-26b-a4b-it': { inputPerMillion: 0.1, cachedInputPerMillion: 0.05, outputPerMillion: 0.3 },\n '@cf/moonshotai/kimi-k2.6': { inputPerMillion: 0.95, cachedInputPerMillion: 0.16, outputPerMillion: 4 },\n '@cf/moonshotai/kimi-k2.7-code': { inputPerMillion: 0.95, cachedInputPerMillion: 0.19, outputPerMillion: 4 },\n '@cf/qwen/qwen3.8-27b': { inputPerMillion: 0.45, cachedInputPerMillion: 0.05, outputPerMillion: 3.2 },\n '@cf/zai-org/glm-5.2': { inputPerMillion: 1.4, cachedInputPerMillion: 0.26, outputPerMillion: 4.4 },\n '@cf/zai-org/glm-5.3': { inputPerMillion: 1.4, cachedInputPerMillion: 0.26, outputPerMillion: 4.4 },\n '@cf/zai-org/glm-5.3-flash': { inputPerMillion: 0.15, cachedInputPerMillion: 0.03, outputPerMillion: 0.5 },\n};\n\nfunction normalizeModelId(modelId: string | null | undefined): string {\n return (modelId || '').trim().toLowerCase();\n}\n\nfunction normalizeOpenAIModelId(modelId: string | null | undefined): string {\n return normalizeModelId(modelId).replace(/^openai\\//, '');\n}\n\nfunction normalizeGoogleModelId(modelId: string | null | undefined): string {\n return normalizeModelId(modelId)\n .replace(/^google\\//, '')\n .replace(/^models\\//, '')\n .replace(/^publishers\\/google\\/models\\//, '');\n}\n\nfunction normalizeCloudflareModelId(modelId: string | null | undefined): string {\n const trimmed = (modelId || '').trim();\n if (trimmed.startsWith('@cf/')) return trimmed;\n return `@cf/${trimmed.replace(/^@cf\\//, '')}`;\n}\n\nfunction roundCost(value: number): number {\n return Number(value.toFixed(12));\n}\n\nfunction normalizeModality(modality: string | undefined): GooglePricingModality {\n const normalized = (modality || '').trim().toLowerCase();\n\n if (normalized === 'text') return 'text';\n if (normalized === 'image') return 'image';\n if (normalized === 'video') return 'video';\n if (normalized === 'audio') return 'audio';\n if (normalized === 'document') return 'document';\n return 'unspecified';\n}\n\nfunction toModalityCounts(\n details: GoogleModalityTokenCount[] | undefined\n): Partial<Record<GooglePricingModality, number>> {\n const counts: Partial<Record<GooglePricingModality, number>> = {};\n\n for (const detail of details || []) {\n const modality = normalizeModality(detail.modality);\n const tokenCount = Math.max(detail.tokenCount ?? 0, 0);\n counts[modality] = (counts[modality] ?? 0) + tokenCount;\n }\n\n return counts;\n}\n\nfunction sumModalityCosts(\n counts: Partial<Record<GooglePricingModality, number>>,\n modalityRates: Partial<Record<GooglePricingModality, number>> | undefined,\n defaultRate: number\n): number {\n let total = 0;\n\n for (const [modality, tokenCount] of Object.entries(counts)) {\n if (!tokenCount) continue;\n const rate = modalityRates?.[modality as GooglePricingModality] ?? defaultRate;\n total += (tokenCount / TOKENS_PER_MILLION) * rate;\n }\n\n return total;\n}\n\nfunction sumModalityCostNumerator(\n counts: Partial<Record<GooglePricingModality, number>>,\n modalityRates: Partial<Record<GooglePricingModality, number>> | undefined,\n defaultRate: number\n): number {\n let total = 0;\n\n for (const [modality, tokenCount] of Object.entries(counts)) {\n if (!tokenCount) continue;\n const rate = modalityRates?.[modality as GooglePricingModality] ?? defaultRate;\n total += tokenCount * ratePerMillionMicrocents(rate);\n }\n\n return total;\n}\n\nfunction ratePerMillionMicrocents(usdPerMillion: number, multiplier = 1): number {\n return Math.round(usdPerMillion * multiplier * MICROCENTS_PER_DOLLAR);\n}\n\nfunction ceilDiv(numerator: number, divisor: number): number {\n return Math.ceil(numerator / divisor);\n}\n\nexport function getAnthropicModelPricing(modelId: string | null | undefined): AnthropicModelPricing | null {\n const normalized = normalizeModelId(modelId);\n let best: { prefix: string; pricing: AnthropicModelPricing } | null = null;\n for (const [prefix, pricing] of ANTHROPIC_MODEL_PRICING) {\n if (normalized.startsWith(prefix) && (!best || prefix.length > best.prefix.length)) {\n best = { prefix, pricing };\n }\n }\n return best ? { ...best.pricing } : null;\n}\n\nexport function calculateAnthropicUsageCost(\n modelId: string | null | undefined,\n buckets: AnthropicUsageBuckets\n): number | undefined {\n const pricing = getAnthropicModelPricing(modelId);\n if (!pricing) return undefined;\n\n const inputRate = pricing.inputPerMillion / TOKENS_PER_MILLION;\n const outputRate = pricing.outputPerMillion / TOKENS_PER_MILLION;\n\n return roundCost(\n buckets.inputTokens * inputRate +\n buckets.cacheWrite5mTokens * inputRate * 1.25 +\n buckets.cacheWrite1hTokens * inputRate * 2 +\n buckets.cacheReadTokens * (pricing.cachedInputPerMillion ?? pricing.inputPerMillion * 0.1) / TOKENS_PER_MILLION +\n buckets.outputTokens * outputRate\n );\n}\n\nexport function getCerebrasModelPricing(modelId: string | null | undefined): CerebrasModelPricing | undefined {\n const pricing = CEREBRAS_MODEL_PRICING[normalizeModelId(modelId)];\n return pricing ? { ...pricing } : undefined;\n}\n\nexport function getNovitaModelPricing(modelId: string | null | undefined): OpenAICompatibleModelPricing | undefined {\n const pricing = NOVITA_MODEL_PRICING[normalizeModelId(modelId)];\n return pricing ? { ...pricing } : undefined;\n}\n\nexport function getBasetenModelPricing(modelId: string | null | undefined): OpenAICompatibleModelPricing | undefined {\n const pricing = BASETEN_MODEL_PRICING[normalizeModelId(modelId)];\n return pricing ? { ...pricing } : undefined;\n}\n\nexport function calculateCerebrasUsageCost(\n modelId: string | null | undefined,\n usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens'>\n): number | undefined {\n const pricing = getCerebrasModelPricing(modelId);\n if (!pricing) return undefined;\n\n return roundCost(\n (usage.promptTokens * pricing.inputPerMillion +\n usage.completionTokens * pricing.outputPerMillion) /\n TOKENS_PER_MILLION\n );\n}\n\nexport function getGoogleModelPricing(modelId: string): GoogleModelPricing | undefined {\n const normalizedModelId = normalizeGoogleModelId(modelId);\n const exact = GOOGLE_MODEL_PRICING[normalizedModelId];\n if (exact) return { ...exact };\n\n const prefix = GOOGLE_MODEL_PRICING_PREFIXES.find((entry) => normalizedModelId.startsWith(entry.prefix));\n return prefix ? { ...prefix.pricing } : undefined;\n}\n\nexport function calculateGoogleUsageCost(\n modelId: string,\n usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens' | 'reasoningTokens' | 'cachedTokens'> & {\n promptTokenDetails?: GoogleModalityTokenCount[];\n completionTokenDetails?: GoogleModalityTokenCount[];\n cachedTokenDetails?: GoogleModalityTokenCount[];\n },\n imageCount = 0\n): number | undefined {\n const pricing = getGoogleModelPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);\n const useLongContext = pricing.longContextThreshold != null && usage.promptTokens > pricing.longContextThreshold;\n\n const inputRate = useLongContext ? (pricing.longInputPerMillion ?? pricing.inputPerMillion) : pricing.inputPerMillion;\n const outputRate = useLongContext\n ? (pricing.longOutputPerMillion ?? pricing.outputPerMillion ?? 0)\n : (pricing.outputPerMillion ?? 0);\n const cachedRate = useLongContext\n ? (pricing.longCachedInputPerMillion ?? pricing.cachedInputPerMillion ?? 0)\n : (pricing.cachedInputPerMillion ?? 0);\n const billableOutputTokens = usage.completionTokens + (usage.reasoningTokens ?? 0);\n const promptModalityCounts = toModalityCounts(usage.promptTokenDetails);\n const cachedModalityCounts = toModalityCounts(usage.cachedTokenDetails);\n const uncachedPromptModalityCounts: Partial<Record<GooglePricingModality, number>> = {};\n\n for (const modality of new Set<GooglePricingModality>([\n ...(Object.keys(promptModalityCounts) as GooglePricingModality[]),\n ...(Object.keys(cachedModalityCounts) as GooglePricingModality[]),\n ])) {\n uncachedPromptModalityCounts[modality] = Math.max(\n (promptModalityCounts[modality] ?? 0) - (cachedModalityCounts[modality] ?? 0),\n 0\n );\n }\n\n const completionModalityCounts = toModalityCounts(usage.completionTokenDetails);\n if (usage.reasoningTokens) {\n completionModalityCounts.text = (completionModalityCounts.text ?? 0) + usage.reasoningTokens;\n }\n\n const hasPromptModalityPricing = Object.keys(uncachedPromptModalityCounts).length > 0 && pricing.inputByModalityPerMillion;\n const hasCachedModalityPricing = Object.keys(cachedModalityCounts).length > 0 && pricing.cachedByModalityPerMillion;\n const hasOutputModalityPricing = Object.keys(completionModalityCounts).length > 0 && pricing.outputByModalityPerMillion;\n\n const inputCost = hasPromptModalityPricing\n ? sumModalityCosts(uncachedPromptModalityCounts, pricing.inputByModalityPerMillion, inputRate)\n : (uncachedPromptTokens / TOKENS_PER_MILLION) * inputRate;\n const cachedCost = hasCachedModalityPricing\n ? sumModalityCosts(cachedModalityCounts, pricing.cachedByModalityPerMillion, cachedRate)\n : (cachedTokens / TOKENS_PER_MILLION) * cachedRate;\n const outputCost = hasOutputModalityPricing\n ? sumModalityCosts(completionModalityCounts, pricing.outputByModalityPerMillion, outputRate)\n : (billableOutputTokens / TOKENS_PER_MILLION) * outputRate;\n const imageCost = imageCount * (pricing.outputImagePerImage ?? 0);\n\n return roundCost(inputCost + cachedCost + outputCost + imageCost);\n}\n\nexport function getOpenAIModelPricing(modelId: string): OpenAIModelPricing | undefined {\n const normalizedModelId = normalizeOpenAIModelId(modelId);\n const exact = OPENAI_MODEL_PRICING[normalizedModelId];\n if (exact) return { ...exact };\n\n const prefix = OPENAI_MODEL_PRICING_PREFIXES.find((entry) => normalizedModelId.startsWith(entry.prefix));\n return prefix ? { ...prefix.pricing } : undefined;\n}\n\nexport function calculateOpenAIUsageCost(\n modelId: string,\n usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens' | 'cachedTokens'>\n): number | undefined {\n const pricing = getOpenAIModelPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const promptTokens = Math.max(usage.promptTokens, 0);\n const uncachedPromptTokens = Math.max(0, promptTokens - cachedTokens);\n const useLongContext = pricing.longContextThreshold != null && promptTokens >= pricing.longContextThreshold;\n const inputRate = useLongContext ? (pricing.longInputPerMillion ?? pricing.inputPerMillion) : pricing.inputPerMillion;\n const outputRate = useLongContext ? (pricing.longOutputPerMillion ?? pricing.outputPerMillion) : pricing.outputPerMillion;\n const cachedRate = useLongContext\n ? (pricing.longCachedInputPerMillion ?? pricing.cachedInputPerMillion ?? pricing.inputPerMillion)\n : (pricing.cachedInputPerMillion ?? pricing.inputPerMillion);\n\n const inputCost = (uncachedPromptTokens / TOKENS_PER_MILLION) * inputRate;\n const cachedCost = (cachedTokens / TOKENS_PER_MILLION) * cachedRate;\n const outputCost = (Math.max(usage.completionTokens, 0) / TOKENS_PER_MILLION) * outputRate;\n\n return roundCost(inputCost + cachedCost + outputCost);\n}\n\nexport function getGroqModelPricing(modelId: string): GroqModelPricing | undefined {\n const pricing = GROQ_MODEL_PRICING[normalizeModelId(modelId)];\n return pricing ? { ...pricing } : undefined;\n}\n\nexport function calculateGroqUsageCost(\n modelId: string,\n usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens' | 'cachedTokens'>\n): number | undefined {\n const pricing = getGroqModelPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);\n const inputCost = (uncachedPromptTokens / TOKENS_PER_MILLION) * pricing.inputPerMillion;\n const cachedInputCost = pricing.cachedInputPerMillion\n ? (cachedTokens / TOKENS_PER_MILLION) * pricing.cachedInputPerMillion\n : 0;\n const outputCost = (usage.completionTokens / TOKENS_PER_MILLION) * pricing.outputPerMillion;\n\n return roundCost(inputCost + cachedInputCost + outputCost);\n}\n\nexport function getXAITextPricing(modelId: string): XAITextPricing | undefined {\n const pricing = XAI_MODEL_PRICING[normalizeModelId(modelId)];\n return pricing ? { ...pricing } : undefined;\n}\n\nexport function calculateXAIUsageCost(\n modelId: string,\n usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens' | 'cachedTokens'>\n): number | undefined {\n const pricing = getXAITextPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);\n const inputCost = (uncachedPromptTokens / TOKENS_PER_MILLION) * pricing.inputPerMillion;\n const cachedCost = pricing.cachedInputPerMillion\n ? (cachedTokens / TOKENS_PER_MILLION) * pricing.cachedInputPerMillion\n : 0;\n const outputCost = (usage.completionTokens / TOKENS_PER_MILLION) * pricing.outputPerMillion;\n\n return roundCost(inputCost + cachedCost + outputCost);\n}\n\nexport function ticksToUsd(ticks: number | undefined): number | undefined {\n if (typeof ticks !== 'number') return undefined;\n return roundCost(ticks / XAI_TICKS_PER_DOLLAR);\n}\n\nexport function getCloudflareModelPricing(modelId: string): CloudflareModelPricing | undefined {\n const pricing = CLOUDFLARE_MODEL_PRICING[normalizeCloudflareModelId(modelId)];\n return pricing ? { ...pricing } : undefined;\n}\n\nexport function calculateCloudflareUsageCost(\n modelId: string,\n usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens' | 'cachedTokens'>\n): number | undefined {\n const pricing = getCloudflareModelPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);\n const inputCost = (uncachedPromptTokens / TOKENS_PER_MILLION) * pricing.inputPerMillion;\n const cachedInputCost = pricing.cachedInputPerMillion\n ? (cachedTokens / TOKENS_PER_MILLION) * pricing.cachedInputPerMillion\n : 0;\n const outputCost = (usage.completionTokens / TOKENS_PER_MILLION) * pricing.outputPerMillion;\n\n return roundCost(inputCost + cachedInputCost + outputCost);\n}\n\n/** TypeSafe Jev 1.13 prices verified at https://docs.typesafe.ai/models (2026-10-06).\n * Input usage is authoritative across all questions; output tokens are free.\n */\nexport function getTypeSafeModelPricing(modelId: string | null | undefined): ProviderModelPricing | undefined {\n const id = normalizeModelId(modelId);\n if (id !== 'jev-1.14.0' && id !== 'jev-1.13.0' && id !== 'jev-latest' && id !== 'jev-preview') return undefined;\n return { inputPerMillion: 0.042, outputPerMillion: 0, maxTokens: 64_000, source: 'typesafe-static' };\n}\n\nexport function calculateTypeSafeUsageCost(\n modelId: string,\n usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens'>\n): number | undefined {\n const pricing = getTypeSafeModelPricing(modelId);\n return pricing ? roundCost((usage.promptTokens / TOKENS_PER_MILLION) * pricing.inputPerMillion) : undefined;\n}\n\nexport function getProviderModelPricing(\n provider: ProviderPricingName,\n modelId: string | null | undefined\n): ProviderModelPricing | undefined {\n if (provider === 'typesafe') return getTypeSafeModelPricing(modelId);\n\n if (provider === 'anthropic') {\n const pricing = getAnthropicModelPricing(modelId);\n return pricing\n ? {\n inputPerMillion: pricing.inputPerMillion,\n outputPerMillion: pricing.outputPerMillion,\n cachedInputPerMillion: pricing.cachedInputPerMillion ?? roundCost(pricing.inputPerMillion * 0.1),\n source: 'anthropic-static',\n }\n : undefined;\n }\n\n if (provider === 'cerebras') {\n const pricing = getCerebrasModelPricing(modelId);\n return pricing ? { ...pricing, source: 'cerebras-static' } : undefined;\n }\n\n if (provider === 'novita') {\n const pricing = getNovitaModelPricing(modelId);\n return pricing ? { ...pricing, source: 'novita-static' } : undefined;\n }\n\n if (provider === 'baseten') {\n const pricing = getBasetenModelPricing(modelId);\n return pricing ? { ...pricing, source: 'baseten-static' } : undefined;\n }\n\n if (provider === 'google') {\n const pricing = getGoogleModelPricing(modelId || '');\n return pricing\n ? {\n inputPerMillion: pricing.inputPerMillion,\n outputPerMillion: pricing.outputPerMillion ?? 0,\n cachedInputPerMillion: pricing.cachedInputPerMillion,\n longInputPerMillion: pricing.longInputPerMillion,\n longOutputPerMillion: pricing.longOutputPerMillion,\n longCachedInputPerMillion: pricing.longCachedInputPerMillion,\n longContextThreshold: pricing.longContextThreshold,\n source: 'google-static',\n }\n : undefined;\n }\n\n if (provider === 'groq') {\n const pricing = getGroqModelPricing(modelId || '');\n return pricing ? { ...pricing, source: 'groq-static' } : undefined;\n }\n\n if (provider === 'openai') {\n const pricing = getOpenAIModelPricing(modelId || '');\n return pricing ? { ...pricing, source: 'openai-static' } : undefined;\n }\n\n if (provider === 'xai') {\n const pricing = getXAITextPricing(modelId || '');\n return pricing ? { ...pricing, source: 'xai-static' } : undefined;\n }\n\n if (provider === 'cloudflare') {\n const pricing = getCloudflareModelPricing(modelId || '');\n return pricing ? { ...pricing, source: 'cloudflare-static' } : undefined;\n }\n\n return undefined;\n}\n\nfunction costFromStandardBuckets(\n usage: PlatformTokenUsageLike,\n pricing: ProviderModelPricing,\n options: { billReasoningAsOutput?: boolean } = {}\n): number {\n const cachedTokens = Math.max(usage.cached_tokens ?? 0, 0);\n const inputTokens = Math.max(usage.input_tokens, 0);\n const uncachedInputTokens = Math.max(inputTokens - cachedTokens, 0);\n const outputTokens = Math.max(usage.output_tokens, 0);\n const reasoningTokens = options.billReasoningAsOutput ? Math.max(usage.reasoning_tokens ?? 0, 0) : 0;\n const useLongContext = pricing.longContextThreshold != null && inputTokens >= pricing.longContextThreshold;\n const inputRate = useLongContext ? (pricing.longInputPerMillion ?? pricing.inputPerMillion) : pricing.inputPerMillion;\n const outputRate = useLongContext ? (pricing.longOutputPerMillion ?? pricing.outputPerMillion) : pricing.outputPerMillion;\n const cachedRate = useLongContext\n ? (pricing.longCachedInputPerMillion ?? pricing.cachedInputPerMillion ?? pricing.inputPerMillion)\n : (pricing.cachedInputPerMillion ?? pricing.inputPerMillion);\n\n return ceilDiv(\n uncachedInputTokens * ratePerMillionMicrocents(inputRate) +\n cachedTokens * ratePerMillionMicrocents(cachedRate) +\n (outputTokens + reasoningTokens) * ratePerMillionMicrocents(outputRate),\n TOKENS_PER_MILLION\n );\n}\n\nfunction costFromAnthropicBuckets(usage: PlatformTokenUsageLike, pricing: ProviderModelPricing): number {\n const cacheCreationTokens = Math.max(usage.cache_creation_input_tokens ?? 0, 0);\n const cacheReadTokens = Math.max(usage.cache_read_input_tokens ?? 0, 0);\n const cacheWrite1hTokens = Math.max(usage.cache_creation_1h_input_tokens ?? 0, 0);\n const cacheWrite5mTokens = Math.max(\n usage.cache_creation_5m_input_tokens ?? cacheCreationTokens - cacheWrite1hTokens,\n 0\n );\n const uncachedInputTokens = Math.max(usage.input_tokens - cacheCreationTokens - cacheReadTokens, 0);\n\n return ceilDiv(\n uncachedInputTokens * ratePerMillionMicrocents(pricing.inputPerMillion) +\n cacheWrite5mTokens * ratePerMillionMicrocents(pricing.inputPerMillion, 1.25) +\n cacheWrite1hTokens * ratePerMillionMicrocents(pricing.inputPerMillion, 2) +\n cacheReadTokens * ratePerMillionMicrocents(pricing.cachedInputPerMillion ?? pricing.inputPerMillion * 0.1) +\n Math.max(usage.output_tokens, 0) * ratePerMillionMicrocents(pricing.outputPerMillion),\n TOKENS_PER_MILLION\n );\n}\n\nfunction costFromGoogleBuckets(usage: PlatformTokenUsageLike, pricing: GoogleModelPricing): number {\n const cachedTokens = Math.max(usage.cached_tokens ?? 0, 0);\n const inputTokens = Math.max(usage.input_tokens, 0);\n const outputTokens = Math.max(usage.output_tokens, 0);\n const reasoningTokens = Math.max(usage.reasoning_tokens ?? 0, 0);\n const uncachedInputTokens = Math.max(inputTokens - cachedTokens, 0);\n const useLongContext = pricing.longContextThreshold != null && inputTokens > pricing.longContextThreshold;\n\n const inputRate = useLongContext ? (pricing.longInputPerMillion ?? pricing.inputPerMillion) : pricing.inputPerMillion;\n const outputRate = useLongContext\n ? (pricing.longOutputPerMillion ?? pricing.outputPerMillion ?? 0)\n : (pricing.outputPerMillion ?? 0);\n const cachedRate = useLongContext\n ? (pricing.longCachedInputPerMillion ?? pricing.cachedInputPerMillion ?? 0)\n : (pricing.cachedInputPerMillion ?? 0);\n\n const promptModalityCounts = toModalityCounts(usage.prompt_token_details);\n const cachedModalityCounts = toModalityCounts(usage.cached_token_details);\n const uncachedPromptModalityCounts: Partial<Record<GooglePricingModality, number>> = {};\n\n for (const modality of new Set<GooglePricingModality>([\n ...(Object.keys(promptModalityCounts) as GooglePricingModality[]),\n ...(Object.keys(cachedModalityCounts) as GooglePricingModality[]),\n ])) {\n uncachedPromptModalityCounts[modality] = Math.max(\n (promptModalityCounts[modality] ?? 0) - (cachedModalityCounts[modality] ?? 0),\n 0\n );\n }\n\n const completionModalityCounts = toModalityCounts(usage.completion_token_details);\n if (reasoningTokens) {\n completionModalityCounts.text = (completionModalityCounts.text ?? 0) + reasoningTokens;\n }\n\n const hasPromptModalityPricing =\n Object.keys(uncachedPromptModalityCounts).length > 0 && pricing.inputByModalityPerMillion;\n const hasCachedModalityPricing = Object.keys(cachedModalityCounts).length > 0 && pricing.cachedByModalityPerMillion;\n const hasOutputModalityPricing =\n Object.keys(completionModalityCounts).length > 0 && pricing.outputByModalityPerMillion;\n\n const tokenNumerator =\n (hasPromptModalityPricing\n ? sumModalityCostNumerator(uncachedPromptModalityCounts, pricing.inputByModalityPerMillion, inputRate)\n : uncachedInputTokens * ratePerMillionMicrocents(inputRate)) +\n (hasCachedModalityPricing\n ? sumModalityCostNumerator(cachedModalityCounts, pricing.cachedByModalityPerMillion, cachedRate)\n : cachedTokens * ratePerMillionMicrocents(cachedRate)) +\n (hasOutputModalityPricing\n ? sumModalityCostNumerator(completionModalityCounts, pricing.outputByModalityPerMillion, outputRate)\n : (outputTokens + reasoningTokens) * ratePerMillionMicrocents(outputRate));\n const imageMicrocents =\n Math.max(usage.image_count ?? 0, 0) * Math.round((pricing.outputImagePerImage ?? 0) * MICROCENTS_PER_DOLLAR);\n\n return ceilDiv(tokenNumerator, TOKENS_PER_MILLION) + imageMicrocents;\n}\n\nexport function calculateProviderUsageCostMicrocents(\n provider: ProviderPricingName,\n modelId: string,\n usage: PlatformTokenUsageLike\n): number | undefined {\n const pricing = getProviderModelPricing(provider, modelId);\n if (!pricing) return undefined;\n\n if (provider === 'anthropic') {\n return costFromAnthropicBuckets(usage, pricing);\n }\n\n if (provider === 'google') {\n const googlePricing = getGoogleModelPricing(modelId);\n return googlePricing ? costFromGoogleBuckets(usage, googlePricing) : undefined;\n }\n\n return costFromStandardBuckets(usage, pricing, {\n billReasoningAsOutput: false,\n });\n}\n"],"mappings":"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","names":[]}
|