@standardagents/provider-pricing 0.25.1 → 0.25.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/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  declare const MICROCENTS_PER_DOLLAR = 100000000;
2
- type ProviderPricingName = 'anthropic' | 'cerebras' | 'cloudflare' | 'google' | 'groq' | 'openai' | 'xai';
2
+ type ProviderPricingName = 'anthropic' | 'baseten' | 'cerebras' | 'cloudflare' | 'google' | 'groq' | 'novita' | 'openai' | 'xai';
3
3
  interface ProviderUsageLike {
4
4
  promptTokens: number;
5
5
  completionTokens: number;
@@ -47,6 +47,12 @@ interface CerebrasModelPricing {
47
47
  outputPerMillion: number;
48
48
  maxTokens?: number;
49
49
  }
50
+ interface OpenAICompatibleModelPricing {
51
+ inputPerMillion: number;
52
+ outputPerMillion: number;
53
+ cachedInputPerMillion?: number;
54
+ maxTokens?: number;
55
+ }
50
56
  type GooglePricingModality = 'text' | 'image' | 'video' | 'audio' | 'document' | 'unspecified';
51
57
  interface GoogleModalityTokenCount {
52
58
  modality?: string;
@@ -92,6 +98,8 @@ interface CloudflareModelPricing {
92
98
  declare function getAnthropicModelPricing(modelId: string | null | undefined): AnthropicModelPricing | null;
93
99
  declare function calculateAnthropicUsageCost(modelId: string | null | undefined, buckets: AnthropicUsageBuckets): number | undefined;
94
100
  declare function getCerebrasModelPricing(modelId: string | null | undefined): CerebrasModelPricing | undefined;
101
+ declare function getNovitaModelPricing(modelId: string | null | undefined): OpenAICompatibleModelPricing | undefined;
102
+ declare function getBasetenModelPricing(modelId: string | null | undefined): OpenAICompatibleModelPricing | undefined;
95
103
  declare function calculateCerebrasUsageCost(modelId: string | null | undefined, usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens'>): number | undefined;
96
104
  declare function getGoogleModelPricing(modelId: string): GoogleModelPricing | undefined;
97
105
  declare function calculateGoogleUsageCost(modelId: string, usage: Pick<ProviderUsageLike, 'promptTokens' | 'completionTokens' | 'reasoningTokens' | 'cachedTokens'> & {
@@ -111,4 +119,4 @@ declare function calculateCloudflareUsageCost(modelId: string, usage: Pick<Provi
111
119
  declare function getProviderModelPricing(provider: ProviderPricingName, modelId: string | null | undefined): ProviderModelPricing | undefined;
112
120
  declare function calculateProviderUsageCostMicrocents(provider: ProviderPricingName, modelId: string, usage: PlatformTokenUsageLike): number | undefined;
113
121
 
114
- export { type AnthropicModelPricing, type AnthropicUsageBuckets, type CerebrasModelPricing, type CloudflareModelPricing, type GoogleModalityTokenCount, type GoogleModelPricing, type GroqModelPricing, MICROCENTS_PER_DOLLAR, type OpenAIModelPricing, type PlatformTokenUsageLike, type ProviderModelPricing, type ProviderPricingName, type ProviderUsageLike, type XAITextPricing, calculateAnthropicUsageCost, calculateCerebrasUsageCost, calculateCloudflareUsageCost, calculateGoogleUsageCost, calculateGroqUsageCost, calculateOpenAIUsageCost, calculateProviderUsageCostMicrocents, calculateXAIUsageCost, getAnthropicModelPricing, getCerebrasModelPricing, getCloudflareModelPricing, getGoogleModelPricing, getGroqModelPricing, getOpenAIModelPricing, getProviderModelPricing, getXAITextPricing, ticksToUsd };
122
+ export { type AnthropicModelPricing, type AnthropicUsageBuckets, type CerebrasModelPricing, type CloudflareModelPricing, type GoogleModalityTokenCount, type GoogleModelPricing, type GroqModelPricing, MICROCENTS_PER_DOLLAR, type OpenAICompatibleModelPricing, type OpenAIModelPricing, type PlatformTokenUsageLike, type ProviderModelPricing, type ProviderPricingName, type ProviderUsageLike, type XAITextPricing, calculateAnthropicUsageCost, calculateCerebrasUsageCost, calculateCloudflareUsageCost, calculateGoogleUsageCost, calculateGroqUsageCost, calculateOpenAIUsageCost, calculateProviderUsageCostMicrocents, calculateXAIUsageCost, getAnthropicModelPricing, getBasetenModelPricing, getCerebrasModelPricing, getCloudflareModelPricing, getGoogleModelPricing, getGroqModelPricing, getNovitaModelPricing, getOpenAIModelPricing, getProviderModelPricing, getXAITextPricing, ticksToUsd };
package/dist/index.js CHANGED
@@ -28,6 +28,13 @@ var CEREBRAS_MODEL_PRICING = {
28
28
  "qwen-3-235b-a22b-instruct-2507": { inputPerMillion: 0.6, outputPerMillion: 1.2, maxTokens: 40960 },
29
29
  "gemma-4-31b": { inputPerMillion: 0.99, outputPerMillion: 1.49, maxTokens: 4096 }
30
30
  };
31
+ var NOVITA_MODEL_PRICING = {
32
+ "inclusionai/ling-2.6-flash": { inputPerMillion: 0.1, cachedInputPerMillion: 0.02, outputPerMillion: 0.3, maxTokens: 8192 },
33
+ "minimax/minimax-m3": { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 1.2 }
34
+ };
35
+ var BASETEN_MODEL_PRICING = {
36
+ "zai-org/glm-5.2": { inputPerMillion: 1.4, cachedInputPerMillion: 0.26, outputPerMillion: 4.4 }
37
+ };
31
38
  var GOOGLE_MODEL_PRICING = {
32
39
  "gemini-3-pro-preview": {
33
40
  inputPerMillion: 2,
@@ -481,6 +488,14 @@ function getCerebrasModelPricing(modelId) {
481
488
  const pricing = CEREBRAS_MODEL_PRICING[normalizeModelId(modelId)];
482
489
  return pricing ? { ...pricing } : void 0;
483
490
  }
491
+ function getNovitaModelPricing(modelId) {
492
+ const pricing = NOVITA_MODEL_PRICING[normalizeModelId(modelId)];
493
+ return pricing ? { ...pricing } : void 0;
494
+ }
495
+ function getBasetenModelPricing(modelId) {
496
+ const pricing = BASETEN_MODEL_PRICING[normalizeModelId(modelId)];
497
+ return pricing ? { ...pricing } : void 0;
498
+ }
484
499
  function calculateCerebrasUsageCost(modelId, usage) {
485
500
  const pricing = getCerebrasModelPricing(modelId);
486
501
  if (!pricing) return void 0;
@@ -612,6 +627,14 @@ function getProviderModelPricing(provider, modelId) {
612
627
  const pricing = getCerebrasModelPricing(modelId);
613
628
  return pricing ? { ...pricing, source: "cerebras-static" } : void 0;
614
629
  }
630
+ if (provider === "novita") {
631
+ const pricing = getNovitaModelPricing(modelId);
632
+ return pricing ? { ...pricing, source: "novita-static" } : void 0;
633
+ }
634
+ if (provider === "baseten") {
635
+ const pricing = getBasetenModelPricing(modelId);
636
+ return pricing ? { ...pricing, source: "baseten-static" } : void 0;
637
+ }
615
638
  if (provider === "google") {
616
639
  const pricing = getGoogleModelPricing(modelId || "");
617
640
  return pricing ? {
@@ -730,10 +753,12 @@ export {
730
753
  calculateProviderUsageCostMicrocents,
731
754
  calculateXAIUsageCost,
732
755
  getAnthropicModelPricing,
756
+ getBasetenModelPricing,
733
757
  getCerebrasModelPricing,
734
758
  getCloudflareModelPricing,
735
759
  getGoogleModelPricing,
736
760
  getGroqModelPricing,
761
+ getNovitaModelPricing,
737
762
  getOpenAIModelPricing,
738
763
  getProviderModelPricing,
739
764
  getXAITextPricing,
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 | 'cerebras'\n | 'cloudflare'\n | 'google'\n | 'groq'\n | 'openai'\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}\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', { inputPerMillion: 10, outputPerMillion: 50 }],\n ['claude-mythos', { inputPerMillion: 10, outputPerMillion: 50 }],\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 ['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 '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\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-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 'gemini-3-pro-image-preview': {\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-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 { 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 'llama-3.1-8b-instant': { inputPerMillion: 0.05, outputPerMillion: 0.08 },\n 'llama-3.3-70b-versatile': { inputPerMillion: 0.59, outputPerMillion: 0.79 },\n 'meta-llama/llama-4-scout-17b-16e-instruct': { inputPerMillion: 0.11, outputPerMillion: 0.34 },\n 'moonshotai/kimi-k2-instruct': { inputPerMillion: 1.0, outputPerMillion: 3.0 },\n 'openai/gpt-oss-120b': { inputPerMillion: 0.15, cachedInputPerMillion: 0.075, outputPerMillion: 0.6 },\n 'openai/gpt-oss-20b': { inputPerMillion: 0.075, cachedInputPerMillion: 0.037, outputPerMillion: 0.3 },\n 'qwen/qwen3-32b': { inputPerMillion: 0.29, outputPerMillion: 0.59 },\n};\n\nexport interface XAITextPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n}\n\nconst XAI_MODEL_PRICING: Record<string, XAITextPricing> = {\n 'grok-4-0709': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-4': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-4-latest': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-4-fast-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4-fast-non-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4-1-fast-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4-1-fast-non-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4.20-0309-reasoning': { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },\n 'grok-4.20-0309-non-reasoning': { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },\n 'grok-4.20-multi-agent-0309': { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },\n 'grok-code-fast-1': { inputPerMillion: 2, cachedInputPerMillion: 0.2, outputPerMillion: 15 },\n 'grok-3': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-3-latest': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-3-mini': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 5 },\n 'grok-3-mini-latest': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 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.051, 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.049, 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.051, 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.06, 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};\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 * inputRate * 0.1 +\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 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\nexport function getProviderModelPricing(\n provider: ProviderPricingName,\n modelId: string | null | undefined\n): ProviderModelPricing | undefined {\n if (provider === 'anthropic') {\n const pricing = getAnthropicModelPricing(modelId);\n return pricing\n ? {\n inputPerMillion: pricing.inputPerMillion,\n outputPerMillion: pricing.outputPerMillion,\n 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 === '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.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":";AAAA,IAAM,qBAAqB;AACpB,IAAM,wBAAwB;AACrC,IAAM,uBAAuB;AA0D7B,IAAM,0BAAmF;AAAA,EACvF,CAAC,kBAAkB,EAAE,iBAAiB,IAAI,kBAAkB,GAAG,CAAC;AAAA,EAChE,CAAC,iBAAiB,EAAE,iBAAiB,IAAI,kBAAkB,GAAG,CAAC;AAAA,EAC/D,CAAC,mBAAmB,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,CAAC;AAAA,EAChE,CAAC,mBAAmB,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,CAAC;AAAA,EAChE,CAAC,mBAAmB,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,CAAC;AAAA,EAChE,CAAC,mBAAmB,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,CAAC;AAAA,EAChE,CAAC,mBAAmB,EAAE,iBAAiB,IAAI,kBAAkB,GAAG,CAAC;AAAA,EACjE,CAAC,iBAAiB,EAAE,iBAAiB,IAAI,kBAAkB,GAAG,CAAC;AAAA,EAC/D,CAAC,qBAAqB,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,CAAC;AAAA,EAClE,CAAC,qBAAqB,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,CAAC;AAAA,EAClE,CAAC,mBAAmB,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,CAAC;AAAA,EAChE,CAAC,oBAAoB,EAAE,iBAAiB,GAAG,kBAAkB,EAAE,CAAC;AAAA,EAChE,CAAC,qBAAqB,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,CAAC;AAAA,EAClE,CAAC,qBAAqB,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,CAAC;AAAA,EAClE,CAAC,oBAAoB,EAAE,iBAAiB,KAAK,kBAAkB,EAAE,CAAC;AAAA,EAClE,CAAC,iBAAiB,EAAE,iBAAiB,IAAI,kBAAkB,GAAG,CAAC;AAAA,EAC/D,CAAC,kBAAkB,EAAE,iBAAiB,MAAM,kBAAkB,KAAK,CAAC;AACtE;AAQA,IAAM,yBAA+D;AAAA,EACnE,eAAe,EAAE,iBAAiB,MAAM,kBAAkB,MAAM,WAAW,KAAO;AAAA,EAClF,gBAAgB,EAAE,iBAAiB,MAAM,kBAAkB,MAAM,WAAW,KAAO;AAAA,EACnF,eAAe,EAAE,iBAAiB,KAAK,kBAAkB,KAAK,WAAW,KAAM;AAAA,EAC/E,kCAAkC,EAAE,iBAAiB,KAAK,kBAAkB,KAAK,WAAW,MAAO;AAAA,EACnG,eAAe,EAAE,iBAAiB,MAAM,kBAAkB,MAAM,WAAW,KAAM;AACnF;AAuBA,IAAM,uBAA2D;AAAA,EAC/D,wBAAwB;AAAA,IACtB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,EACzB;AAAA,EACA,0BAA0B;AAAA,IACxB,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,kBAAkB;AAAA,IAClB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,IACvB,2BAA2B;AAAA,IAC3B,sBAAsB;AAAA,EACxB;AAAA,EACA,kBAAkB;AAAA,IAChB,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,kBAAkB;AAAA,IAClB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,IACvB,2BAA2B;AAAA,IAC3B,sBAAsB;AAAA,EACxB;AAAA,EACA,oBAAoB;AAAA,IAClB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,EACzB;AAAA,EACA,yBAAyB;AAAA,IACvB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,EACzB;AAAA,EACA,0BAA0B;AAAA,IACxB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,IACvB,2BAA2B;AAAA,MACzB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,4BAA4B;AAAA,MAC1B,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,iCAAiC;AAAA,IAC/B,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,IACvB,2BAA2B;AAAA,MACzB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,4BAA4B;AAAA,MAC1B,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,qCAAqC;AAAA,IACnC,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,EACzB;AAAA,EACA,oBAAoB;AAAA,IAClB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,IACvB,2BAA2B;AAAA,MACzB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,4BAA4B;AAAA,MAC1B,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,wBAAwB;AAAA,IACtB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,IACvB,2BAA2B;AAAA,MACzB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,4BAA4B;AAAA,MAC1B,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,yBAAyB;AAAA,IACvB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,EACpB;AAAA,EACA,6BAA6B;AAAA,IAC3B,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,EACpB;AAAA,EACA,2CAA2C;AAAA,IACzC,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,kBAAkB;AAAA,IAClB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,EACxB;AAAA,EACA,gCAAgC;AAAA,IAC9B,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,4BAA4B;AAAA,MAC1B,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,8BAA8B;AAAA,IAC5B,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,4BAA4B;AAAA,MAC1B,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,kCAAkC;AAAA,IAChC,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,2BAA2B;AAAA,MACzB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,0BAA0B;AAAA,IACxB,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,EACvB;AAAA,EACA,kCAAkC;AAAA,IAChC,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,EACvB;AAAA,EACA,8BAA8B;AAAA,IAC5B,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,EACvB;AAAA,EACA,2BAA2B;AAAA,IACzB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,EACvB;AAAA,EACA,2BAA2B;AAAA,IACzB,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,EACvB;AAAA,EACA,gCAAgC;AAAA,IAC9B,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,EACvB;AAAA,EACA,iCAAiC;AAAA,IAC/B,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,EACvB;AAAA,EACA,6BAA6B;AAAA,IAC3B,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,EACvB;AAAA,EACA,kBAAkB;AAAA,IAChB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,EACzB;AACF;AAEA,IAAM,gCAAwF;AAAA,EAC5F,EAAE,QAAQ,0BAA0B,SAAS,qBAAqB,wBAAwB,EAAG;AAAA,EAC7F,EAAE,QAAQ,wBAAwB,SAAS,qBAAqB,sBAAsB,EAAG;AAAA,EACzF,EAAE,QAAQ,0BAA0B,SAAS,qBAAqB,wBAAwB,EAAG;AAAA,EAC7F,EAAE,QAAQ,iCAAiC,SAAS,qBAAqB,+BAA+B,EAAG;AAAA,EAC3G,EAAE,QAAQ,kCAAkC,SAAS,qBAAqB,uBAAuB,EAAG;AAAA,EACpG,EAAE,QAAQ,uBAAuB,SAAS,qBAAqB,kBAAkB,EAAG;AAAA,EACpF,EAAE,QAAQ,4BAA4B,SAAS,qBAAqB,uBAAuB,EAAG;AAAA,EAC9F,EAAE,QAAQ,qBAAqB,SAAS,qBAAqB,gBAAgB,EAAG;AAAA,EAChF;AAAA,IACE,QAAQ;AAAA,IACR,SAAS,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,uBAAuB,EAAE;AAAA,EAC/E;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,SAAS,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,uBAAuB,EAAE;AAAA,EAC/E;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,SAAS,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,uBAAuB,EAAE;AAAA,EAC/E;AACF;AAkBA,IAAM,gCAAgC;AAGtC,IAAM,uBAA2D;AAAA,EAC/D,WAAW;AAAA,IACT,iBAAiB;AAAA,IACjB,uBAAuB;AAAA,IACvB,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,IACrB,2BAA2B;AAAA,IAC3B,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,EACxB;AAAA,EACA,eAAe;AAAA,IACb,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,EACxB;AAAA,EACA,WAAW;AAAA,IACT,iBAAiB;AAAA,IACjB,uBAAuB;AAAA,IACvB,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,IACrB,2BAA2B;AAAA,IAC3B,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,EACxB;AAAA,EACA,gBAAgB,EAAE,iBAAiB,MAAM,uBAAuB,OAAO,kBAAkB,IAAI;AAAA,EAC7F,gBAAgB,EAAE,iBAAiB,KAAK,uBAAuB,MAAM,kBAAkB,KAAK;AAAA,EAC5F,eAAe;AAAA,IACb,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,EACxB;AAAA,EACA,WAAW,EAAE,iBAAiB,MAAM,uBAAuB,OAAO,kBAAkB,GAAG;AAAA,EACvF,eAAe,EAAE,iBAAiB,IAAI,kBAAkB,IAAI;AAAA,EAC5D,WAAW,EAAE,iBAAiB,MAAM,uBAAuB,OAAO,kBAAkB,GAAG;AAAA,EACvF,SAAS,EAAE,iBAAiB,MAAM,uBAAuB,OAAO,kBAAkB,GAAG;AAAA,EACrF,cAAc,EAAE,iBAAiB,MAAM,uBAAuB,OAAO,kBAAkB,EAAE;AAAA,EACzF,cAAc,EAAE,iBAAiB,MAAM,uBAAuB,MAAO,kBAAkB,IAAI;AAAA,EAC3F,aAAa,EAAE,iBAAiB,IAAI,kBAAkB,IAAI;AAAA,EAC1D,WAAW,EAAE,iBAAiB,GAAG,uBAAuB,KAAK,kBAAkB,EAAE;AAAA,EACjF,gBAAgB,EAAE,iBAAiB,KAAK,uBAAuB,KAAK,kBAAkB,IAAI;AAAA,EAC1F,gBAAgB,EAAE,iBAAiB,KAAK,uBAAuB,OAAO,kBAAkB,IAAI;AAAA,EAC5F,UAAU,EAAE,iBAAiB,KAAK,uBAAuB,MAAM,kBAAkB,GAAG;AAAA,EACpF,qBAAqB,EAAE,iBAAiB,GAAG,kBAAkB,GAAG;AAAA,EAChE,eAAe,EAAE,iBAAiB,MAAM,uBAAuB,OAAO,kBAAkB,IAAI;AAAA,EAC5F,IAAI,EAAE,iBAAiB,IAAI,uBAAuB,KAAK,kBAAkB,GAAG;AAAA,EAC5E,UAAU,EAAE,iBAAiB,KAAK,kBAAkB,IAAI;AAAA,EACxD,UAAU,EAAE,iBAAiB,IAAI,kBAAkB,GAAG;AAAA,EACtD,IAAI,EAAE,iBAAiB,GAAG,uBAAuB,KAAK,kBAAkB,EAAE;AAAA,EAC1E,WAAW,EAAE,iBAAiB,KAAK,uBAAuB,OAAO,kBAAkB,IAAI;AAAA,EACvF,WAAW,EAAE,iBAAiB,KAAK,uBAAuB,MAAM,kBAAkB,IAAI;AAAA,EACtF,WAAW,EAAE,iBAAiB,KAAK,uBAAuB,MAAM,kBAAkB,IAAI;AAAA,EACtF,eAAe,EAAE,iBAAiB,IAAI,kBAAkB,GAAG;AAAA,EAC3D,0BAA0B,EAAE,iBAAiB,IAAI,kBAAkB,GAAG;AAAA,EACtE,sBAAsB,EAAE,iBAAiB,IAAI,kBAAkB,GAAG;AAAA,EAClE,sBAAsB,EAAE,iBAAiB,IAAI,kBAAkB,GAAG;AAAA,EAClE,6BAA6B,EAAE,iBAAiB,IAAI,kBAAkB,GAAG;AAAA,EACzE,SAAS,EAAE,iBAAiB,IAAI,kBAAkB,GAAG;AAAA,EACrD,cAAc,EAAE,iBAAiB,IAAI,kBAAkB,GAAG;AAAA,EAC1D,cAAc,EAAE,iBAAiB,IAAI,kBAAkB,GAAG;AAAA,EAC1D,aAAa,EAAE,iBAAiB,IAAI,kBAAkB,IAAI;AAAA,EAC1D,iBAAiB,EAAE,iBAAiB,KAAK,kBAAkB,IAAI;AAAA,EAC/D,sBAAsB,EAAE,iBAAiB,KAAK,kBAAkB,IAAI;AAAA,EACpE,sBAAsB,EAAE,iBAAiB,GAAG,kBAAkB,EAAE;AAAA,EAChE,sBAAsB,EAAE,iBAAiB,KAAK,kBAAkB,EAAE;AAAA,EAClE,gBAAgB,EAAE,iBAAiB,KAAK,kBAAkB,EAAE;AAAA,EAC5D,0BAA0B,EAAE,iBAAiB,KAAK,kBAAkB,EAAE;AAAA,EACtE,0BAA0B,EAAE,iBAAiB,GAAG,kBAAkB,EAAE;AAAA,EACpE,eAAe,EAAE,iBAAiB,GAAG,kBAAkB,EAAE;AAAA,EACzD,eAAe,EAAE,iBAAiB,KAAK,kBAAkB,IAAI;AAC/D;AAEA,IAAM,gCAAwF;AAAA,EAC5F,EAAE,QAAQ,eAAe,SAAS,qBAAqB,aAAa,EAAG;AAAA,EACvE,EAAE,QAAQ,WAAW,SAAS,qBAAqB,SAAS,EAAG;AAAA,EAC/D,EAAE,QAAQ,gBAAgB,SAAS,qBAAqB,cAAc,EAAG;AAAA,EACzE,EAAE,QAAQ,gBAAgB,SAAS,qBAAqB,cAAc,EAAG;AAAA,EACzE,EAAE,QAAQ,eAAe,SAAS,qBAAqB,aAAa,EAAG;AAAA,EACvE,EAAE,QAAQ,WAAW,SAAS,qBAAqB,SAAS,EAAG;AAAA,EAC/D,EAAE,QAAQ,eAAe,SAAS,qBAAqB,aAAa,EAAG;AAAA,EACvE,EAAE,QAAQ,WAAW,SAAS,qBAAqB,SAAS,EAAG;AAAA,EAC/D,EAAE,QAAQ,WAAW,SAAS,qBAAqB,SAAS,EAAG;AAAA,EAC/D,EAAE,QAAQ,cAAc,SAAS,qBAAqB,YAAY,EAAG;AAAA,EACrE,EAAE,QAAQ,cAAc,SAAS,qBAAqB,YAAY,EAAG;AAAA,EACrE,EAAE,QAAQ,aAAa,SAAS,qBAAqB,WAAW,EAAG;AAAA,EACnE,EAAE,QAAQ,SAAS,SAAS,qBAAqB,OAAO,EAAG;AAAA,EAC3D,EAAE,QAAQ,gBAAgB,SAAS,qBAAqB,cAAc,EAAG;AAAA,EACzE,EAAE,QAAQ,gBAAgB,SAAS,qBAAqB,cAAc,EAAG;AAAA,EACzE,EAAE,QAAQ,WAAW,SAAS,qBAAqB,SAAS,EAAG;AAAA,EAC/D,EAAE,QAAQ,eAAe,SAAS,qBAAqB,aAAa,EAAG;AAAA,EACvE,EAAE,QAAQ,UAAU,SAAS,qBAAqB,QAAQ,EAAG;AAAA,EAC7D,EAAE,QAAQ,UAAU,SAAS,qBAAqB,QAAQ,EAAG;AAAA,EAC7D,EAAE,QAAQ,WAAW,SAAS,qBAAqB,SAAS,EAAG;AAAA,EAC/D,EAAE,QAAQ,WAAW,SAAS,qBAAqB,SAAS,EAAG;AAAA,EAC/D,EAAE,QAAQ,UAAU,SAAS,qBAAqB,QAAQ,EAAG;AAAA,EAC7D,EAAE,QAAQ,WAAW,SAAS,qBAAqB,SAAS,EAAG;AAAA,EAC/D,EAAE,QAAQ,MAAM,SAAS,qBAAqB,GAAI;AAAA,EAClD,EAAE,QAAQ,MAAM,SAAS,qBAAqB,GAAI;AAAA,EAClD,EAAE,QAAQ,eAAe,SAAS,qBAAqB,aAAa,EAAG;AAAA,EACvE,EAAE,QAAQ,aAAa,SAAS,qBAAqB,WAAW,EAAG;AAAA,EACnE,EAAE,QAAQ,SAAS,SAAS,qBAAqB,OAAO,EAAG;AAAA,EAC3D,EAAE,QAAQ,iBAAiB,SAAS,qBAAqB,eAAe,EAAG;AAC7E;AAEA,IAAM,qBAAuD;AAAA,EAC3D,wBAAwB,EAAE,iBAAiB,MAAM,kBAAkB,KAAK;AAAA,EACxE,2BAA2B,EAAE,iBAAiB,MAAM,kBAAkB,KAAK;AAAA,EAC3E,6CAA6C,EAAE,iBAAiB,MAAM,kBAAkB,KAAK;AAAA,EAC7F,+BAA+B,EAAE,iBAAiB,GAAK,kBAAkB,EAAI;AAAA,EAC7E,uBAAuB,EAAE,iBAAiB,MAAM,uBAAuB,OAAO,kBAAkB,IAAI;AAAA,EACpG,sBAAsB,EAAE,iBAAiB,OAAO,uBAAuB,OAAO,kBAAkB,IAAI;AAAA,EACpG,kBAAkB,EAAE,iBAAiB,MAAM,kBAAkB,KAAK;AACpE;AAQA,IAAM,oBAAoD;AAAA,EACxD,eAAe,EAAE,iBAAiB,IAAI,uBAAuB,KAAK,kBAAkB,IAAI;AAAA,EACxF,UAAU,EAAE,iBAAiB,IAAI,uBAAuB,KAAK,kBAAkB,IAAI;AAAA,EACnF,iBAAiB,EAAE,iBAAiB,IAAI,uBAAuB,KAAK,kBAAkB,IAAI;AAAA,EAC1F,yBAAyB,EAAE,iBAAiB,GAAG,uBAAuB,KAAK,kBAAkB,EAAE;AAAA,EAC/F,6BAA6B,EAAE,iBAAiB,GAAG,uBAAuB,KAAK,kBAAkB,EAAE;AAAA,EACnG,2BAA2B,EAAE,iBAAiB,GAAG,uBAAuB,KAAK,kBAAkB,EAAE;AAAA,EACjG,+BAA+B,EAAE,iBAAiB,GAAG,uBAAuB,KAAK,kBAAkB,EAAE;AAAA,EACrG,4BAA4B,EAAE,iBAAiB,IAAI,uBAAuB,GAAG,kBAAkB,GAAG;AAAA,EAClG,gCAAgC,EAAE,iBAAiB,IAAI,uBAAuB,GAAG,kBAAkB,GAAG;AAAA,EACtG,8BAA8B,EAAE,iBAAiB,IAAI,uBAAuB,GAAG,kBAAkB,GAAG;AAAA,EACpG,oBAAoB,EAAE,iBAAiB,GAAG,uBAAuB,KAAK,kBAAkB,GAAG;AAAA,EAC3F,UAAU,EAAE,iBAAiB,IAAI,uBAAuB,KAAK,kBAAkB,IAAI;AAAA,EACnF,iBAAiB,EAAE,iBAAiB,IAAI,uBAAuB,KAAK,kBAAkB,IAAI;AAAA,EAC1F,eAAe,EAAE,iBAAiB,GAAG,uBAAuB,MAAM,kBAAkB,EAAE;AAAA,EACtF,sBAAsB,EAAE,iBAAiB,GAAG,uBAAuB,MAAM,kBAAkB,EAAE;AAC/F;AAQA,IAAM,2BAAmE;AAAA,EACvE,kCAAkC,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EACpF,kCAAkC,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EACpF,2CAA2C,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EAC7F,0CAA0C,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EAC5F,4CAA4C,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EAC9F,4CAA4C,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EAC9F,gDAAgD,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EAClG,wCAAwC,EAAE,iBAAiB,MAAM,kBAAkB,KAAK;AAAA,EACxF,gDAAgD,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EAClG,kCAAkC,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EACpF,sCAAsC,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EACxF,sCAAsC,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EACxF,gCAAgC,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EAClF,oCAAoC,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EACtF,iCAAiC,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EACnF,6BAA6B,EAAE,iBAAiB,OAAO,kBAAkB,KAAK;AAAA,EAC9E,2CAA2C,EAAE,iBAAiB,MAAM,kBAAkB,KAAK;AAAA,EAC3F,6BAA6B,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EAC/E,oBAAoB,EAAE,iBAAiB,MAAM,kBAAkB,EAAI;AAAA,EACnE,uCAAuC,EAAE,iBAAiB,MAAM,kBAAkB,EAAI;AAAA,EACtF,8BAA8B,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EAChF,2BAA2B,EAAE,iBAAiB,MAAM,kBAAkB,KAAK;AAAA,EAC3E,0BAA0B,EAAE,iBAAiB,KAAK,kBAAkB,IAAI;AAAA,EACxE,4CAA4C,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EAC9F,uCAAuC,EAAE,iBAAiB,OAAO,kBAAkB,MAAM;AAAA,EACzF,6BAA6B,EAAE,iBAAiB,MAAM,kBAAkB,IAAI;AAAA,EAC5E,mCAAmC,EAAE,iBAAiB,KAAK,kBAAkB,IAAI;AAAA,EACjF,4BAA4B,EAAE,iBAAiB,KAAK,uBAAuB,KAAK,kBAAkB,EAAI;AACxG;AAEA,SAAS,iBAAiB,SAA4C;AACpE,UAAQ,WAAW,IAAI,KAAK,EAAE,YAAY;AAC5C;AAEA,SAAS,uBAAuB,SAA4C;AAC1E,SAAO,iBAAiB,OAAO,EAAE,QAAQ,aAAa,EAAE;AAC1D;AAEA,SAAS,uBAAuB,SAA4C;AAC1E,SAAO,iBAAiB,OAAO,EAC5B,QAAQ,aAAa,EAAE,EACvB,QAAQ,aAAa,EAAE,EACvB,QAAQ,iCAAiC,EAAE;AAChD;AAEA,SAAS,2BAA2B,SAA4C;AAC9E,QAAM,WAAW,WAAW,IAAI,KAAK;AACrC,MAAI,QAAQ,WAAW,MAAM,EAAG,QAAO;AACvC,SAAO,OAAO,QAAQ,QAAQ,UAAU,EAAE,CAAC;AAC7C;AAEA,SAAS,UAAU,OAAuB;AACxC,SAAO,OAAO,MAAM,QAAQ,EAAE,CAAC;AACjC;AAEA,SAAS,kBAAkB,UAAqD;AAC9E,QAAM,cAAc,YAAY,IAAI,KAAK,EAAE,YAAY;AAEvD,MAAI,eAAe,OAAQ,QAAO;AAClC,MAAI,eAAe,QAAS,QAAO;AACnC,MAAI,eAAe,QAAS,QAAO;AACnC,MAAI,eAAe,QAAS,QAAO;AACnC,MAAI,eAAe,WAAY,QAAO;AACtC,SAAO;AACT;AAEA,SAAS,iBACP,SACgD;AAChD,QAAM,SAAyD,CAAC;AAEhE,aAAW,UAAU,WAAW,CAAC,GAAG;AAClC,UAAM,WAAW,kBAAkB,OAAO,QAAQ;AAClD,UAAM,aAAa,KAAK,IAAI,OAAO,cAAc,GAAG,CAAC;AACrD,WAAO,QAAQ,KAAK,OAAO,QAAQ,KAAK,KAAK;AAAA,EAC/C;AAEA,SAAO;AACT;AAEA,SAAS,iBACP,QACA,eACA,aACQ;AACR,MAAI,QAAQ;AAEZ,aAAW,CAAC,UAAU,UAAU,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC3D,QAAI,CAAC,WAAY;AACjB,UAAM,OAAO,gBAAgB,QAAiC,KAAK;AACnE,aAAU,aAAa,qBAAsB;AAAA,EAC/C;AAEA,SAAO;AACT;AAEA,SAAS,yBACP,QACA,eACA,aACQ;AACR,MAAI,QAAQ;AAEZ,aAAW,CAAC,UAAU,UAAU,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC3D,QAAI,CAAC,WAAY;AACjB,UAAM,OAAO,gBAAgB,QAAiC,KAAK;AACnE,aAAS,aAAa,yBAAyB,IAAI;AAAA,EACrD;AAEA,SAAO;AACT;AAEA,SAAS,yBAAyB,eAAuB,aAAa,GAAW;AAC/E,SAAO,KAAK,MAAM,gBAAgB,aAAa,qBAAqB;AACtE;AAEA,SAAS,QAAQ,WAAmB,SAAyB;AAC3D,SAAO,KAAK,KAAK,YAAY,OAAO;AACtC;AAEO,SAAS,yBAAyB,SAAkE;AACzG,QAAM,aAAa,iBAAiB,OAAO;AAC3C,MAAI,OAAkE;AACtE,aAAW,CAAC,QAAQ,OAAO,KAAK,yBAAyB;AACvD,QAAI,WAAW,WAAW,MAAM,MAAM,CAAC,QAAQ,OAAO,SAAS,KAAK,OAAO,SAAS;AAClF,aAAO,EAAE,QAAQ,QAAQ;AAAA,IAC3B;AAAA,EACF;AACA,SAAO,OAAO,EAAE,GAAG,KAAK,QAAQ,IAAI;AACtC;AAEO,SAAS,4BACd,SACA,SACoB;AACpB,QAAM,UAAU,yBAAyB,OAAO;AAChD,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,YAAY,QAAQ,kBAAkB;AAC5C,QAAM,aAAa,QAAQ,mBAAmB;AAE9C,SAAO;AAAA,IACL,QAAQ,cAAc,YACpB,QAAQ,qBAAqB,YAAY,OACzC,QAAQ,qBAAqB,YAAY,IACzC,QAAQ,kBAAkB,YAAY,MACtC,QAAQ,eAAe;AAAA,EAC3B;AACF;AAEO,SAAS,wBAAwB,SAAsE;AAC5G,QAAM,UAAU,uBAAuB,iBAAiB,OAAO,CAAC;AAChE,SAAO,UAAU,EAAE,GAAG,QAAQ,IAAI;AACpC;AAEO,SAAS,2BACd,SACA,OACoB;AACpB,QAAM,UAAU,wBAAwB,OAAO;AAC/C,MAAI,CAAC,QAAS,QAAO;AAErB,SAAO;AAAA,KACJ,MAAM,eAAe,QAAQ,kBAC5B,MAAM,mBAAmB,QAAQ,oBACjC;AAAA,EACJ;AACF;AAEO,SAAS,sBAAsB,SAAiD;AACrF,QAAM,oBAAoB,uBAAuB,OAAO;AACxD,QAAM,QAAQ,qBAAqB,iBAAiB;AACpD,MAAI,MAAO,QAAO,EAAE,GAAG,MAAM;AAE7B,QAAM,SAAS,8BAA8B,KAAK,CAAC,UAAU,kBAAkB,WAAW,MAAM,MAAM,CAAC;AACvG,SAAO,SAAS,EAAE,GAAG,OAAO,QAAQ,IAAI;AAC1C;AAEO,SAAS,yBACd,SACA,OAKA,aAAa,GACO;AACpB,QAAM,UAAU,sBAAsB,OAAO;AAC7C,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,eAAe,MAAM,gBAAgB;AAC3C,QAAM,uBAAuB,KAAK,IAAI,GAAG,MAAM,eAAe,YAAY;AAC1E,QAAM,iBAAiB,QAAQ,wBAAwB,QAAQ,MAAM,eAAe,QAAQ;AAE5F,QAAM,YAAY,iBAAkB,QAAQ,uBAAuB,QAAQ,kBAAmB,QAAQ;AACtG,QAAM,aAAa,iBACd,QAAQ,wBAAwB,QAAQ,oBAAoB,IAC5D,QAAQ,oBAAoB;AACjC,QAAM,aAAa,iBACd,QAAQ,6BAA6B,QAAQ,yBAAyB,IACtE,QAAQ,yBAAyB;AACtC,QAAM,uBAAuB,MAAM,oBAAoB,MAAM,mBAAmB;AAChF,QAAM,uBAAuB,iBAAiB,MAAM,kBAAkB;AACtE,QAAM,uBAAuB,iBAAiB,MAAM,kBAAkB;AACtE,QAAM,+BAA+E,CAAC;AAEtF,aAAW,YAAY,oBAAI,IAA2B;AAAA,IACpD,GAAI,OAAO,KAAK,oBAAoB;AAAA,IACpC,GAAI,OAAO,KAAK,oBAAoB;AAAA,EACtC,CAAC,GAAG;AACF,iCAA6B,QAAQ,IAAI,KAAK;AAAA,OAC3C,qBAAqB,QAAQ,KAAK,MAAM,qBAAqB,QAAQ,KAAK;AAAA,MAC3E;AAAA,IACF;AAAA,EACF;AAEA,QAAM,2BAA2B,iBAAiB,MAAM,sBAAsB;AAC9E,MAAI,MAAM,iBAAiB;AACzB,6BAAyB,QAAQ,yBAAyB,QAAQ,KAAK,MAAM;AAAA,EAC/E;AAEA,QAAM,2BAA2B,OAAO,KAAK,4BAA4B,EAAE,SAAS,KAAK,QAAQ;AACjG,QAAM,2BAA2B,OAAO,KAAK,oBAAoB,EAAE,SAAS,KAAK,QAAQ;AACzF,QAAM,2BAA2B,OAAO,KAAK,wBAAwB,EAAE,SAAS,KAAK,QAAQ;AAE7F,QAAM,YAAY,2BACd,iBAAiB,8BAA8B,QAAQ,2BAA2B,SAAS,IAC1F,uBAAuB,qBAAsB;AAClD,QAAM,aAAa,2BACf,iBAAiB,sBAAsB,QAAQ,4BAA4B,UAAU,IACpF,eAAe,qBAAsB;AAC1C,QAAM,aAAa,2BACf,iBAAiB,0BAA0B,QAAQ,4BAA4B,UAAU,IACxF,uBAAuB,qBAAsB;AAClD,QAAM,YAAY,cAAc,QAAQ,uBAAuB;AAE/D,SAAO,UAAU,YAAY,aAAa,aAAa,SAAS;AAClE;AAEO,SAAS,sBAAsB,SAAiD;AACrF,QAAM,oBAAoB,uBAAuB,OAAO;AACxD,QAAM,QAAQ,qBAAqB,iBAAiB;AACpD,MAAI,MAAO,QAAO,EAAE,GAAG,MAAM;AAE7B,QAAM,SAAS,8BAA8B,KAAK,CAAC,UAAU,kBAAkB,WAAW,MAAM,MAAM,CAAC;AACvG,SAAO,SAAS,EAAE,GAAG,OAAO,QAAQ,IAAI;AAC1C;AAEO,SAAS,yBACd,SACA,OACoB;AACpB,QAAM,UAAU,sBAAsB,OAAO;AAC7C,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,eAAe,MAAM,gBAAgB;AAC3C,QAAM,eAAe,KAAK,IAAI,MAAM,cAAc,CAAC;AACnD,QAAM,uBAAuB,KAAK,IAAI,GAAG,eAAe,YAAY;AACpE,QAAM,iBAAiB,QAAQ,wBAAwB,QAAQ,gBAAgB,QAAQ;AACvF,QAAM,YAAY,iBAAkB,QAAQ,uBAAuB,QAAQ,kBAAmB,QAAQ;AACtG,QAAM,aAAa,iBAAkB,QAAQ,wBAAwB,QAAQ,mBAAoB,QAAQ;AACzG,QAAM,aAAa,iBACd,QAAQ,6BAA6B,QAAQ,yBAAyB,QAAQ,kBAC9E,QAAQ,yBAAyB,QAAQ;AAE9C,QAAM,YAAa,uBAAuB,qBAAsB;AAChE,QAAM,aAAc,eAAe,qBAAsB;AACzD,QAAM,aAAc,KAAK,IAAI,MAAM,kBAAkB,CAAC,IAAI,qBAAsB;AAEhF,SAAO,UAAU,YAAY,aAAa,UAAU;AACtD;AAEO,SAAS,oBAAoB,SAA+C;AACjF,QAAM,UAAU,mBAAmB,iBAAiB,OAAO,CAAC;AAC5D,SAAO,UAAU,EAAE,GAAG,QAAQ,IAAI;AACpC;AAEO,SAAS,uBACd,SACA,OACoB;AACpB,QAAM,UAAU,oBAAoB,OAAO;AAC3C,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,eAAe,MAAM,gBAAgB;AAC3C,QAAM,uBAAuB,KAAK,IAAI,GAAG,MAAM,eAAe,YAAY;AAC1E,QAAM,YAAa,uBAAuB,qBAAsB,QAAQ;AACxE,QAAM,kBAAkB,QAAQ,wBAC3B,eAAe,qBAAsB,QAAQ,wBAC9C;AACJ,QAAM,aAAc,MAAM,mBAAmB,qBAAsB,QAAQ;AAE3E,SAAO,UAAU,YAAY,kBAAkB,UAAU;AAC3D;AAEO,SAAS,kBAAkB,SAA6C;AAC7E,QAAM,UAAU,kBAAkB,iBAAiB,OAAO,CAAC;AAC3D,SAAO,UAAU,EAAE,GAAG,QAAQ,IAAI;AACpC;AAEO,SAAS,sBACd,SACA,OACoB;AACpB,QAAM,UAAU,kBAAkB,OAAO;AACzC,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,eAAe,MAAM,gBAAgB;AAC3C,QAAM,uBAAuB,KAAK,IAAI,GAAG,MAAM,eAAe,YAAY;AAC1E,QAAM,YAAa,uBAAuB,qBAAsB,QAAQ;AACxE,QAAM,aAAa,QAAQ,wBACtB,eAAe,qBAAsB,QAAQ,wBAC9C;AACJ,QAAM,aAAc,MAAM,mBAAmB,qBAAsB,QAAQ;AAE3E,SAAO,UAAU,YAAY,aAAa,UAAU;AACtD;AAEO,SAAS,WAAW,OAA+C;AACxE,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,SAAO,UAAU,QAAQ,oBAAoB;AAC/C;AAEO,SAAS,0BAA0B,SAAqD;AAC7F,QAAM,UAAU,yBAAyB,2BAA2B,OAAO,CAAC;AAC5E,SAAO,UAAU,EAAE,GAAG,QAAQ,IAAI;AACpC;AAEO,SAAS,6BACd,SACA,OACoB;AACpB,QAAM,UAAU,0BAA0B,OAAO;AACjD,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,eAAe,MAAM,gBAAgB;AAC3C,QAAM,uBAAuB,KAAK,IAAI,GAAG,MAAM,eAAe,YAAY;AAC1E,QAAM,YAAa,uBAAuB,qBAAsB,QAAQ;AACxE,QAAM,kBAAkB,QAAQ,wBAC3B,eAAe,qBAAsB,QAAQ,wBAC9C;AACJ,QAAM,aAAc,MAAM,mBAAmB,qBAAsB,QAAQ;AAE3E,SAAO,UAAU,YAAY,kBAAkB,UAAU;AAC3D;AAEO,SAAS,wBACd,UACA,SACkC;AAClC,MAAI,aAAa,aAAa;AAC5B,UAAM,UAAU,yBAAyB,OAAO;AAChD,WAAO,UACH;AAAA,MACE,iBAAiB,QAAQ;AAAA,MACzB,kBAAkB,QAAQ;AAAA,MAC1B,uBAAuB,UAAU,QAAQ,kBAAkB,GAAG;AAAA,MAC9D,QAAQ;AAAA,IACV,IACA;AAAA,EACN;AAEA,MAAI,aAAa,YAAY;AAC3B,UAAM,UAAU,wBAAwB,OAAO;AAC/C,WAAO,UAAU,EAAE,GAAG,SAAS,QAAQ,kBAAkB,IAAI;AAAA,EAC/D;AAEA,MAAI,aAAa,UAAU;AACzB,UAAM,UAAU,sBAAsB,WAAW,EAAE;AACnD,WAAO,UACH;AAAA,MACE,iBAAiB,QAAQ;AAAA,MACzB,kBAAkB,QAAQ,oBAAoB;AAAA,MAC9C,uBAAuB,QAAQ;AAAA,MAC/B,qBAAqB,QAAQ;AAAA,MAC7B,sBAAsB,QAAQ;AAAA,MAC9B,2BAA2B,QAAQ;AAAA,MACnC,sBAAsB,QAAQ;AAAA,MAC9B,QAAQ;AAAA,IACV,IACA;AAAA,EACN;AAEA,MAAI,aAAa,QAAQ;AACvB,UAAM,UAAU,oBAAoB,WAAW,EAAE;AACjD,WAAO,UAAU,EAAE,GAAG,SAAS,QAAQ,cAAc,IAAI;AAAA,EAC3D;AAEA,MAAI,aAAa,UAAU;AACzB,UAAM,UAAU,sBAAsB,WAAW,EAAE;AACnD,WAAO,UAAU,EAAE,GAAG,SAAS,QAAQ,gBAAgB,IAAI;AAAA,EAC7D;AAEA,MAAI,aAAa,OAAO;AACtB,UAAM,UAAU,kBAAkB,WAAW,EAAE;AAC/C,WAAO,UAAU,EAAE,GAAG,SAAS,QAAQ,aAAa,IAAI;AAAA,EAC1D;AAEA,MAAI,aAAa,cAAc;AAC7B,UAAM,UAAU,0BAA0B,WAAW,EAAE;AACvD,WAAO,UAAU,EAAE,GAAG,SAAS,QAAQ,oBAAoB,IAAI;AAAA,EACjE;AAEA,SAAO;AACT;AAEA,SAAS,wBACP,OACA,SACA,UAA+C,CAAC,GACxC;AACR,QAAM,eAAe,KAAK,IAAI,MAAM,iBAAiB,GAAG,CAAC;AACzD,QAAM,cAAc,KAAK,IAAI,MAAM,cAAc,CAAC;AAClD,QAAM,sBAAsB,KAAK,IAAI,cAAc,cAAc,CAAC;AAClE,QAAM,eAAe,KAAK,IAAI,MAAM,eAAe,CAAC;AACpD,QAAM,kBAAkB,QAAQ,wBAAwB,KAAK,IAAI,MAAM,oBAAoB,GAAG,CAAC,IAAI;AACnG,QAAM,iBAAiB,QAAQ,wBAAwB,QAAQ,eAAe,QAAQ;AACtF,QAAM,YAAY,iBAAkB,QAAQ,uBAAuB,QAAQ,kBAAmB,QAAQ;AACtG,QAAM,aAAa,iBAAkB,QAAQ,wBAAwB,QAAQ,mBAAoB,QAAQ;AACzG,QAAM,aAAa,iBACd,QAAQ,6BAA6B,QAAQ,yBAAyB,QAAQ,kBAC9E,QAAQ,yBAAyB,QAAQ;AAE9C,SAAO;AAAA,IACL,sBAAsB,yBAAyB,SAAS,IACtD,eAAe,yBAAyB,UAAU,KACjD,eAAe,mBAAmB,yBAAyB,UAAU;AAAA,IACxE;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,OAA+B,SAAuC;AACtG,QAAM,sBAAsB,KAAK,IAAI,MAAM,+BAA+B,GAAG,CAAC;AAC9E,QAAM,kBAAkB,KAAK,IAAI,MAAM,2BAA2B,GAAG,CAAC;AACtE,QAAM,qBAAqB,KAAK,IAAI,MAAM,kCAAkC,GAAG,CAAC;AAChF,QAAM,qBAAqB,KAAK;AAAA,IAC9B,MAAM,kCAAkC,sBAAsB;AAAA,IAC9D;AAAA,EACF;AACA,QAAM,sBAAsB,KAAK,IAAI,MAAM,eAAe,sBAAsB,iBAAiB,CAAC;AAElG,SAAO;AAAA,IACL,sBAAsB,yBAAyB,QAAQ,eAAe,IACpE,qBAAqB,yBAAyB,QAAQ,iBAAiB,IAAI,IAC3E,qBAAqB,yBAAyB,QAAQ,iBAAiB,CAAC,IACxE,kBAAkB,yBAAyB,QAAQ,iBAAiB,GAAG,IACvE,KAAK,IAAI,MAAM,eAAe,CAAC,IAAI,yBAAyB,QAAQ,gBAAgB;AAAA,IACtF;AAAA,EACF;AACF;AAEA,SAAS,sBAAsB,OAA+B,SAAqC;AACjG,QAAM,eAAe,KAAK,IAAI,MAAM,iBAAiB,GAAG,CAAC;AACzD,QAAM,cAAc,KAAK,IAAI,MAAM,cAAc,CAAC;AAClD,QAAM,eAAe,KAAK,IAAI,MAAM,eAAe,CAAC;AACpD,QAAM,kBAAkB,KAAK,IAAI,MAAM,oBAAoB,GAAG,CAAC;AAC/D,QAAM,sBAAsB,KAAK,IAAI,cAAc,cAAc,CAAC;AAClE,QAAM,iBAAiB,QAAQ,wBAAwB,QAAQ,cAAc,QAAQ;AAErF,QAAM,YAAY,iBAAkB,QAAQ,uBAAuB,QAAQ,kBAAmB,QAAQ;AACtG,QAAM,aAAa,iBACd,QAAQ,wBAAwB,QAAQ,oBAAoB,IAC5D,QAAQ,oBAAoB;AACjC,QAAM,aAAa,iBACd,QAAQ,6BAA6B,QAAQ,yBAAyB,IACtE,QAAQ,yBAAyB;AAEtC,QAAM,uBAAuB,iBAAiB,MAAM,oBAAoB;AACxE,QAAM,uBAAuB,iBAAiB,MAAM,oBAAoB;AACxE,QAAM,+BAA+E,CAAC;AAEtF,aAAW,YAAY,oBAAI,IAA2B;AAAA,IACpD,GAAI,OAAO,KAAK,oBAAoB;AAAA,IACpC,GAAI,OAAO,KAAK,oBAAoB;AAAA,EACtC,CAAC,GAAG;AACF,iCAA6B,QAAQ,IAAI,KAAK;AAAA,OAC3C,qBAAqB,QAAQ,KAAK,MAAM,qBAAqB,QAAQ,KAAK;AAAA,MAC3E;AAAA,IACF;AAAA,EACF;AAEA,QAAM,2BAA2B,iBAAiB,MAAM,wBAAwB;AAChF,MAAI,iBAAiB;AACnB,6BAAyB,QAAQ,yBAAyB,QAAQ,KAAK;AAAA,EACzE;AAEA,QAAM,2BACJ,OAAO,KAAK,4BAA4B,EAAE,SAAS,KAAK,QAAQ;AAClE,QAAM,2BAA2B,OAAO,KAAK,oBAAoB,EAAE,SAAS,KAAK,QAAQ;AACzF,QAAM,2BACJ,OAAO,KAAK,wBAAwB,EAAE,SAAS,KAAK,QAAQ;AAE9D,QAAM,kBACH,2BACG,yBAAyB,8BAA8B,QAAQ,2BAA2B,SAAS,IACnG,sBAAsB,yBAAyB,SAAS,MAC3D,2BACG,yBAAyB,sBAAsB,QAAQ,4BAA4B,UAAU,IAC7F,eAAe,yBAAyB,UAAU,MACrD,2BACG,yBAAyB,0BAA0B,QAAQ,4BAA4B,UAAU,KAChG,eAAe,mBAAmB,yBAAyB,UAAU;AAC5E,QAAM,kBACJ,KAAK,IAAI,MAAM,eAAe,GAAG,CAAC,IAAI,KAAK,OAAO,QAAQ,uBAAuB,KAAK,qBAAqB;AAE7G,SAAO,QAAQ,gBAAgB,kBAAkB,IAAI;AACvD;AAEO,SAAS,qCACd,UACA,SACA,OACoB;AACpB,QAAM,UAAU,wBAAwB,UAAU,OAAO;AACzD,MAAI,CAAC,QAAS,QAAO;AAErB,MAAI,aAAa,aAAa;AAC5B,WAAO,yBAAyB,OAAO,OAAO;AAAA,EAChD;AAEA,MAAI,aAAa,UAAU;AACzB,UAAM,gBAAgB,sBAAsB,OAAO;AACnD,WAAO,gBAAgB,sBAAsB,OAAO,aAAa,IAAI;AAAA,EACvE;AAEA,SAAO,wBAAwB,OAAO,SAAS;AAAA,IAC7C,uBAAuB;AAAA,EACzB,CAAC;AACH;","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 | '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}\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', { inputPerMillion: 10, outputPerMillion: 50 }],\n ['claude-mythos', { inputPerMillion: 10, outputPerMillion: 50 }],\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 ['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 '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 maxTokens?: number;\n}\n\nconst NOVITA_MODEL_PRICING: Record<string, OpenAICompatibleModelPricing> = {\n 'inclusionai/ling-2.6-flash': { inputPerMillion: 0.1, cachedInputPerMillion: 0.02, outputPerMillion: 0.3, maxTokens: 8_192 },\n 'minimax/minimax-m3': { inputPerMillion: 0.3, cachedInputPerMillion: 0.06, outputPerMillion: 1.2 },\n};\n\nconst BASETEN_MODEL_PRICING: Record<string, OpenAICompatibleModelPricing> = {\n 'zai-org/glm-5.2': { inputPerMillion: 1.4, cachedInputPerMillion: 0.26, outputPerMillion: 4.4 },\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-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 'gemini-3-pro-image-preview': {\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-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 { 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 'llama-3.1-8b-instant': { inputPerMillion: 0.05, outputPerMillion: 0.08 },\n 'llama-3.3-70b-versatile': { inputPerMillion: 0.59, outputPerMillion: 0.79 },\n 'meta-llama/llama-4-scout-17b-16e-instruct': { inputPerMillion: 0.11, outputPerMillion: 0.34 },\n 'moonshotai/kimi-k2-instruct': { inputPerMillion: 1.0, outputPerMillion: 3.0 },\n 'openai/gpt-oss-120b': { inputPerMillion: 0.15, cachedInputPerMillion: 0.075, outputPerMillion: 0.6 },\n 'openai/gpt-oss-20b': { inputPerMillion: 0.075, cachedInputPerMillion: 0.037, outputPerMillion: 0.3 },\n 'qwen/qwen3-32b': { inputPerMillion: 0.29, outputPerMillion: 0.59 },\n};\n\nexport interface XAITextPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n}\n\nconst XAI_MODEL_PRICING: Record<string, XAITextPricing> = {\n 'grok-4-0709': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-4': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-4-latest': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-4-fast-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4-fast-non-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4-1-fast-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4-1-fast-non-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4.20-0309-reasoning': { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },\n 'grok-4.20-0309-non-reasoning': { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },\n 'grok-4.20-multi-agent-0309': { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },\n 'grok-code-fast-1': { inputPerMillion: 2, cachedInputPerMillion: 0.2, outputPerMillion: 15 },\n 'grok-3': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-3-latest': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-3-mini': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 5 },\n 'grok-3-mini-latest': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 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.051, 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.049, 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.051, 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.06, 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};\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 * inputRate * 0.1 +\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\nexport function getProviderModelPricing(\n provider: ProviderPricingName,\n modelId: string | null | undefined\n): ProviderModelPricing | undefined {\n if (provider === 'anthropic') {\n const pricing = getAnthropicModelPricing(modelId);\n return pricing\n ? {\n inputPerMillion: pricing.inputPerMillion,\n outputPerMillion: pricing.outputPerMillion,\n 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.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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@standardagents/provider-pricing",
3
- "version": "0.25.1",
3
+ "version": "0.25.3",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public",