UNPKG

@microfox/usage-pricing

Version:

A TypeScript SDK for Tracking Pricing & Usage of any LLM and TypeScript AI SDK internally.

1,470 lines (1,462 loc) 35.9 kB
// src/pricing/ai-provider-openai.ts var commonPricingPrompt = { dataUnit: "token", per: 1e6, description: "Per 1 million prompt token" }; var commonPricingCompletion = { dataUnit: "token", per: 1e6, description: "Per 1 million completion token" }; var OpenAIPricingConfig = { ["ai-provider-openai"]: { type: "llm", // GPT-4.1 Models ["gpt-4.1"]: { promptToken: { basePriceUSD: 2, ...commonPricingPrompt }, completionToken: { basePriceUSD: 8, ...commonPricingCompletion } }, ["gpt-4.1-2025-04-14"]: { promptToken: { basePriceUSD: 2, ...commonPricingPrompt }, completionToken: { basePriceUSD: 8, ...commonPricingCompletion } }, ["gpt-4.1-mini"]: { promptToken: { basePriceUSD: 0.4, ...commonPricingPrompt }, completionToken: { basePriceUSD: 1.6, ...commonPricingCompletion } }, ["gpt-4.1-mini-2025-04-14"]: { promptToken: { basePriceUSD: 0.4, ...commonPricingPrompt }, completionToken: { basePriceUSD: 1.6, ...commonPricingCompletion } }, ["gpt-4.1-nano"]: { promptToken: { basePriceUSD: 0.1, ...commonPricingPrompt }, completionToken: { basePriceUSD: 0.4, ...commonPricingCompletion } }, ["gpt-4.1-nano-2025-04-14"]: { promptToken: { basePriceUSD: 0.1, ...commonPricingPrompt }, completionToken: { basePriceUSD: 0.4, ...commonPricingCompletion } }, // GPT-4.5 Models ["gpt-4.5-preview"]: { promptToken: { basePriceUSD: 75, ...commonPricingPrompt }, completionToken: { basePriceUSD: 150, ...commonPricingCompletion } }, ["gpt-4.5-preview-2025-02-27"]: { promptToken: { basePriceUSD: 75, ...commonPricingPrompt }, completionToken: { basePriceUSD: 150, ...commonPricingCompletion } }, // GPT-4o Models ["gpt-4o"]: { promptToken: { basePriceUSD: 2.5, ...commonPricingPrompt }, completionToken: { basePriceUSD: 10, ...commonPricingCompletion } }, ["gpt-4o-2024-08-06"]: { promptToken: { basePriceUSD: 2.5, ...commonPricingPrompt }, completionToken: { basePriceUSD: 10, ...commonPricingCompletion } }, ["gpt-4o-2024-11-20"]: { promptToken: { basePriceUSD: 2.5, ...commonPricingPrompt }, completionToken: { basePriceUSD: 10, ...commonPricingCompletion } }, ["gpt-4o-2024-05-13"]: { promptToken: { basePriceUSD: 5, ...commonPricingPrompt }, completionToken: { basePriceUSD: 15, ...commonPricingCompletion } }, ["gpt-4o-mini"]: { promptToken: { basePriceUSD: 0.15, ...commonPricingPrompt }, completionToken: { basePriceUSD: 0.6, ...commonPricingCompletion } }, ["gpt-4-0613"]: { promptToken: { basePriceUSD: 0.15, ...commonPricingPrompt }, completionToken: { basePriceUSD: 0.6, ...commonPricingCompletion } }, ["gpt-4o-mini-2024-07-18"]: { promptToken: { basePriceUSD: 0.15, ...commonPricingPrompt }, completionToken: { basePriceUSD: 0.6, ...commonPricingCompletion } }, // Audio Models ["gpt-4o-audio-preview"]: { promptToken: { basePriceUSD: 2.5, ...commonPricingPrompt }, completionToken: { basePriceUSD: 10, ...commonPricingCompletion } }, ["gpt-4o-audio-preview-2024-12-17"]: { promptToken: { basePriceUSD: 2.5, ...commonPricingPrompt }, completionToken: { basePriceUSD: 10, ...commonPricingCompletion } }, ["gpt-4o-audio-preview-2024-10-01"]: { promptToken: { basePriceUSD: 2.5, ...commonPricingPrompt }, completionToken: { basePriceUSD: 10, ...commonPricingCompletion } }, ["gpt-4o-mini-audio-preview"]: { promptToken: { basePriceUSD: 0.15, ...commonPricingPrompt }, completionToken: { basePriceUSD: 0.6, ...commonPricingCompletion } }, ["gpt-4o-mini-audio-preview-2024-12-17"]: { promptToken: { basePriceUSD: 0.15, ...commonPricingPrompt }, completionToken: { basePriceUSD: 0.6, ...commonPricingCompletion } }, // Realtime Models ["gpt-4o-realtime-preview"]: { promptToken: { basePriceUSD: 5, ...commonPricingPrompt }, completionToken: { basePriceUSD: 20, ...commonPricingCompletion } }, ["gpt-4o-realtime-preview-2024-12-17"]: { promptToken: { basePriceUSD: 5, ...commonPricingPrompt }, completionToken: { basePriceUSD: 20, ...commonPricingCompletion } }, ["gpt-4o-realtime-preview-2024-10-01"]: { promptToken: { basePriceUSD: 5, ...commonPricingPrompt }, completionToken: { basePriceUSD: 20, ...commonPricingCompletion } }, ["gpt-4o-mini-realtime-preview"]: { promptToken: { basePriceUSD: 0.6, ...commonPricingPrompt }, completionToken: { basePriceUSD: 2.4, ...commonPricingCompletion } }, ["gpt-4o-mini-realtime-preview-2024-12-17"]: { promptToken: { basePriceUSD: 0.6, ...commonPricingPrompt }, completionToken: { basePriceUSD: 2.4, ...commonPricingCompletion } }, // O1 Models ["o1"]: { promptToken: { basePriceUSD: 15, ...commonPricingPrompt }, completionToken: { basePriceUSD: 60, ...commonPricingCompletion } }, ["o1-2024-12-17"]: { promptToken: { basePriceUSD: 15, ...commonPricingPrompt }, completionToken: { basePriceUSD: 60, ...commonPricingCompletion } }, ["o1-preview-2024-09-12"]: { promptToken: { basePriceUSD: 15, ...commonPricingPrompt }, completionToken: { basePriceUSD: 60, ...commonPricingCompletion } }, ["o1-pro"]: { promptToken: { basePriceUSD: 150, ...commonPricingPrompt }, completionToken: { basePriceUSD: 600, ...commonPricingCompletion } }, ["o1-pro-2025-03-19"]: { promptToken: { basePriceUSD: 150, ...commonPricingPrompt }, completionToken: { basePriceUSD: 600, ...commonPricingCompletion } }, // O3 Models ["o3"]: { promptToken: { basePriceUSD: 10, ...commonPricingPrompt }, completionToken: { basePriceUSD: 40, ...commonPricingCompletion } }, ["o3-2025-04-16"]: { promptToken: { basePriceUSD: 10, ...commonPricingPrompt }, completionToken: { basePriceUSD: 40, ...commonPricingCompletion } }, ["o3-mini"]: { promptToken: { basePriceUSD: 1.1, ...commonPricingPrompt }, completionToken: { basePriceUSD: 4.4, ...commonPricingCompletion } }, ["o3-mini-2025-01-31"]: { promptToken: { basePriceUSD: 1.1, ...commonPricingPrompt }, completionToken: { basePriceUSD: 4.4, ...commonPricingCompletion } }, // O4 Models ["o4-mini"]: { promptToken: { basePriceUSD: 1.1, ...commonPricingPrompt }, completionToken: { basePriceUSD: 4.4, ...commonPricingCompletion } }, ["o4-mini-2025-04-16"]: { promptToken: { basePriceUSD: 1.1, ...commonPricingPrompt }, completionToken: { basePriceUSD: 4.4, ...commonPricingCompletion } }, // GPT-3.5 Models ["gpt-3.5-turbo"]: { promptToken: { basePriceUSD: 0.5, ...commonPricingPrompt }, completionToken: { basePriceUSD: 1.5, ...commonPricingCompletion } }, ["gpt-3.5-turbo-0125"]: { promptToken: { basePriceUSD: 0.5, ...commonPricingPrompt }, completionToken: { basePriceUSD: 1.5, ...commonPricingCompletion } }, ["gpt-3.5-turbo-1106"]: { promptToken: { basePriceUSD: 1, ...commonPricingPrompt }, completionToken: { basePriceUSD: 2, ...commonPricingCompletion } }, ["gpt-3.5-turbo-0613"]: { promptToken: { basePriceUSD: 1.5, ...commonPricingPrompt }, completionToken: { basePriceUSD: 2, ...commonPricingCompletion } }, ["gpt-3.5-turbo-16k-0613"]: { promptToken: { basePriceUSD: 3, ...commonPricingPrompt }, completionToken: { basePriceUSD: 4, ...commonPricingCompletion } }, // Embeddings Models ["text-embedding-3-small"]: { promptToken: { basePriceUSD: 0.02, dataUnit: "token", per: 1e6, description: "Per 1 million tokens" } }, ["text-embedding-3-large"]: { promptToken: { basePriceUSD: 0.13, dataUnit: "token", per: 1e6, description: "Per 1 million tokens" } }, ["text-embedding-ada-002"]: { promptToken: { basePriceUSD: 0.1, dataUnit: "token", per: 1e6, description: "Per 1 million tokens" } } } }; // src/pricing/aws-ses.ts var AwsSesPricingConfig = { ["aws-ses"]: { type: "api_1", outboundEmail: { requestCount: { basePriceUSD: 0.1, dataUnit: "email", per: 1e3, description: "Per email sent" }, requestData: { basepriceUSD: 0.12, // per GB per: 1, dataUnit: "GB", // "GB, MB, KB, B" description: "Per byte of data in the attachments you send" } } } }; // src/pricing/brave.ts var BravePricingConfig = { ["brave"]: { type: "api_1", dataForSearch: { requestCount: { basePriceUSD: 5, dataUnit: "search", per: 1e3, description: "Per 1000 search requests" } } } }; // src/pricing/ai-provider-anthropic.ts var commonPricingPrompt2 = { dataUnit: "token", per: 1e6, description: "Per 1 million prompt token" }; var commonPricingCompletion2 = { dataUnit: "token", per: 1e6, description: "Per 1 million completion token" }; var commonPricingCache5m = { dataUnit: "token", per: 1e6, description: "Per 1 million tokens for 5-minute cache writes" }; var commonPricingCache1h = { dataUnit: "token", per: 1e6, description: "Per 1 million tokens for 1-hour cache writes" }; var commonPricingCacheHits = { dataUnit: "token", per: 1e6, description: "Per 1 million tokens for cache hits & refreshes" }; var AnthropicAIPricingConfig = { ["ai-provider-anthropic"]: { type: "llm", // Claude 4 Models ["claude-4-opus-20250514"]: { promptToken: { basePriceUSD: 15, ...commonPricingPrompt2 }, completionToken: { basePriceUSD: 75, ...commonPricingCompletion2 }, cache5mToken: { basePriceUSD: 18.75, ...commonPricingCache5m }, cache1hToken: { basePriceUSD: 30, ...commonPricingCache1h }, cacheHitsToken: { basePriceUSD: 1.5, ...commonPricingCacheHits } }, ["claude-4-sonnet-20250514"]: { promptToken: { basePriceUSD: 3, ...commonPricingPrompt2 }, completionToken: { basePriceUSD: 15, ...commonPricingCompletion2 }, cache5mToken: { basePriceUSD: 3.75, ...commonPricingCache5m }, cache1hToken: { basePriceUSD: 6, ...commonPricingCache1h }, cacheHitsToken: { basePriceUSD: 0.3, ...commonPricingCacheHits } }, // Claude 3.7 Models ["claude-3-7-sonnet-20250219"]: { promptToken: { basePriceUSD: 3, ...commonPricingPrompt2 }, completionToken: { basePriceUSD: 15, ...commonPricingCompletion2 }, cache5mToken: { basePriceUSD: 3.75, ...commonPricingCache5m }, cache1hToken: { basePriceUSD: 6, ...commonPricingCache1h }, cacheHitsToken: { basePriceUSD: 0.3, ...commonPricingCacheHits } }, // Claude 3.5 Models ["claude-3-5-sonnet-20241022"]: { promptToken: { basePriceUSD: 3, ...commonPricingPrompt2 }, completionToken: { basePriceUSD: 15, ...commonPricingCompletion2 }, cache5mToken: { basePriceUSD: 3.75, ...commonPricingCache5m }, cache1hToken: { basePriceUSD: 6, ...commonPricingCache1h }, cacheHitsToken: { basePriceUSD: 0.3, ...commonPricingCacheHits } }, ["claude-3-5-sonnet-20240620"]: { promptToken: { basePriceUSD: 3, ...commonPricingPrompt2 }, completionToken: { basePriceUSD: 15, ...commonPricingCompletion2 }, cache5mToken: { basePriceUSD: 3.75, ...commonPricingCache5m }, cache1hToken: { basePriceUSD: 6, ...commonPricingCache1h }, cacheHitsToken: { basePriceUSD: 0.3, ...commonPricingCacheHits } }, ["claude-3-5-haiku-20241022"]: { promptToken: { basePriceUSD: 0.8, ...commonPricingPrompt2 }, completionToken: { basePriceUSD: 4, ...commonPricingCompletion2 }, cache5mToken: { basePriceUSD: 1, ...commonPricingCache5m }, cache1hToken: { basePriceUSD: 1.6, ...commonPricingCache1h }, cacheHitsToken: { basePriceUSD: 0.08, ...commonPricingCacheHits } }, // Claude 3 Models ["claude-3-opus-20240229"]: { promptToken: { basePriceUSD: 15, ...commonPricingPrompt2 }, completionToken: { basePriceUSD: 75, ...commonPricingCompletion2 }, cache5mToken: { basePriceUSD: 18.75, ...commonPricingCache5m }, cache1hToken: { basePriceUSD: 30, ...commonPricingCache1h }, cacheHitsToken: { basePriceUSD: 1.5, ...commonPricingCacheHits } }, ["claude-3-sonnet-20240229"]: { promptToken: { basePriceUSD: 3, ...commonPricingPrompt2 }, completionToken: { basePriceUSD: 15, ...commonPricingCompletion2 }, cache5mToken: { basePriceUSD: 3.75, ...commonPricingCache5m }, cache1hToken: { basePriceUSD: 6, ...commonPricingCache1h }, cacheHitsToken: { basePriceUSD: 0.3, ...commonPricingCacheHits } }, ["claude-3-haiku-20240307"]: { promptToken: { basePriceUSD: 0.25, ...commonPricingPrompt2 }, completionToken: { basePriceUSD: 1.25, ...commonPricingCompletion2 }, cache5mToken: { basePriceUSD: 0.3, ...commonPricingCache5m }, cache1hToken: { basePriceUSD: 0.5, ...commonPricingCache1h }, cacheHitsToken: { basePriceUSD: 0.03, ...commonPricingCacheHits } } } }; // src/pricing/ai-provider-google.ts var commonPricingPrompt3 = { dataUnit: "token", per: 1e6, description: "Per 1 million prompt token" }; var commonPricingCompletion3 = { dataUnit: "token", per: 1e6, description: "Per 1 million completion token" }; var GoogleAIPricingConfig = { ["ai-provider-google"]: { type: "llm", // Gemini 2.5 Models ["gemini-2.5-pro-preview-05-06"]: { promptToken: { basePriceUSD: 1.25, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 10, ...commonPricingCompletion3 } }, ["gemini-2.5-pro-preview-05-06-long-context"]: { promptToken: { basePriceUSD: 2.5, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 15, ...commonPricingCompletion3 } }, ["gemini-2.5-flash-preview-05-20"]: { promptToken: { basePriceUSD: 0.15, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 0.6, ...commonPricingCompletion3 } }, ["gemini-2.5-flash-preview-05-20-thinking"]: { promptToken: { basePriceUSD: 0.15, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 3.5, ...commonPricingCompletion3 } }, ["gemini-2.5-flash-preview-native-audio-dialog"]: { promptToken: { basePriceUSD: 1, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 0.6, ...commonPricingCompletion3 } }, ["gemini-2.5-flash-exp-native-audio-thinking-dialog"]: { // Pricing unsure, needs to be checked promptToken: { basePriceUSD: 1, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 0.6, ...commonPricingCompletion3 } }, ["gemini-2.5-flash-preview-tts"]: { promptToken: { basePriceUSD: 0.5, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 10, ...commonPricingCompletion3 } }, ["gemini-2.5-pro-preview-tts"]: { promptToken: { basePriceUSD: 1, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 20, ...commonPricingCompletion3 } }, // Gemini 2.0 Models ["gemini-2.0-flash"]: { promptToken: { basePriceUSD: 0.1, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 0.4, ...commonPricingCompletion3 } }, ["gemini-2.0-flash-audio"]: { promptToken: { basePriceUSD: 0.7, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 0.4, ...commonPricingCompletion3 } }, ["gemini-2.0-flash-live-001"]: { promptToken: { basePriceUSD: 0.35, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 1.5, ...commonPricingCompletion3 } }, ["gemini-2.0-flash-live-001-audio"]: { promptToken: { basePriceUSD: 2.1, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 8.5, ...commonPricingCompletion3 } }, ["gemini-2.0-flash-lite"]: { promptToken: { basePriceUSD: 0.075, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 0.3, ...commonPricingCompletion3 } }, ["gemini-2.0-flash-preview-image-generation"]: { promptToken: { basePriceUSD: 0.039, dataUnit: "image", per: 1, description: "Per image" } }, // Gemini 1.5 Models ["gemini-1.5-pro"]: { promptToken: { basePriceUSD: 1.25, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 5, ...commonPricingCompletion3 } }, ["gemini-1.5-pro-long-context"]: { promptToken: { basePriceUSD: 2.5, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 10, ...commonPricingCompletion3 } }, ["gemini-1.5-flash"]: { promptToken: { basePriceUSD: 0.075, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 0.3, ...commonPricingCompletion3 } }, ["gemini-1.5-flash-long-context"]: { promptToken: { basePriceUSD: 0.15, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 0.6, ...commonPricingCompletion3 } }, ["gemini-1.5-flash-8b"]: { promptToken: { basePriceUSD: 0.0375, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 0.15, ...commonPricingCompletion3 } }, ["gemini-1.5-flash-8b-long-context"]: { promptToken: { basePriceUSD: 0.075, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 0.3, ...commonPricingCompletion3 } }, // Image Generation Models ["imagen-3.0-generate-002"]: { promptToken: { basePriceUSD: 0.03, dataUnit: "image", per: 1, description: "Per image" } }, // Video Generation Models ["veo-2.0-generate-001"]: { promptToken: { basePriceUSD: 0.35, dataUnit: "second", per: 1, description: "Per second of video" } }, // Embeddings Models ["gemini-embedding-exp"]: { promptToken: { basePriceUSD: 0.15, dataUnit: "token", per: 1e3, description: "Per 1,000 tokens" } }, ["text-embedding-004"]: { promptToken: { basePriceUSD: 0.025, dataUnit: "token", per: 1e3, description: "Per 1,000 tokens" } }, ["embedding-001"]: { // Pricing unsure, needs to be checked promptToken: { basePriceUSD: 0.025, dataUnit: "token", per: 1e3, description: "Per 1,000 tokens" } }, // Experimental Models ["gemini-2.0-pro-exp-02-05"]: { // Pricing unsure, needs to be checked promptToken: { basePriceUSD: 1.25, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 5, ...commonPricingCompletion3 } }, ["gemini-2.0-flash-thinking-exp-01-21"]: { // Pricing unsure, needs to be checked promptToken: { basePriceUSD: 0.15, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 3.5, ...commonPricingCompletion3 } }, ["gemini-exp-1206"]: { // Pricing unsure, needs to be checked promptToken: { basePriceUSD: 1.25, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 5, ...commonPricingCompletion3 } }, ["gemini-exp-1121"]: { // Pricing unsure, needs to be checked promptToken: { basePriceUSD: 1.25, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 5, ...commonPricingCompletion3 } }, ["gemini-exp-1114"]: { // Pricing unsure, needs to be checked promptToken: { basePriceUSD: 1.25, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 5, ...commonPricingCompletion3 } }, ["gemini-1.5-pro-exp-0827"]: { // Pricing unsure, needs to be checked promptToken: { basePriceUSD: 1.25, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 5, ...commonPricingCompletion3 } }, ["gemini-1.5-pro-exp-0801"]: { // Pricing unsure, needs to be checked promptToken: { basePriceUSD: 1.25, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 5, ...commonPricingCompletion3 } }, ["gemini-1.5-flash-8b-exp-0924"]: { // Pricing unsure, needs to be checked promptToken: { basePriceUSD: 0.0375, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 0.15, ...commonPricingCompletion3 } }, ["gemini-1.5-flash-8b-exp-0827"]: { // Pricing unsure, needs to be checked promptToken: { basePriceUSD: 0.0375, ...commonPricingPrompt3 }, completionToken: { basePriceUSD: 0.15, ...commonPricingCompletion3 } } } }; // src/pricing/ai-provider-deepseek.ts var commonPricingInputCacheHit = { dataUnit: "token", per: 1e6, description: "Per 1 million input tokens (cache hit)" }; var commonPricingInputCacheMiss = { dataUnit: "token", per: 1e6, description: "Per 1 million input tokens (cache miss)" }; var commonPricingOutput = { dataUnit: "token", per: 1e6, description: "Per 1 million output tokens" }; var DeepSeekAIPricingConfig = { ["ai-provider-deepseek"]: { type: "llm", // DeepSeek Chat Models ["deepseek-chat"]: { promptToken: { basePriceUSD: 0.07, ...commonPricingInputCacheHit }, promptTokenCacheMiss: { basePriceUSD: 0.27, ...commonPricingInputCacheMiss }, completionToken: { basePriceUSD: 1.1, ...commonPricingOutput }, discountHours: { start: "16:30", // UTC end: "00:30" // UTC }, discountRates: { promptToken: 0.5, // 50% off promptTokenCacheMiss: 0.5, // 50% off completionToken: 0.5 // 50% off }, features: { jsonOutput: true, functionCalling: true, chatPrefixCompletion: true, fimCompletion: true } }, // DeepSeek Reasoner Models ["deepseek-reasoner"]: { promptToken: { basePriceUSD: 0.14, ...commonPricingInputCacheHit }, promptTokenCacheMiss: { basePriceUSD: 0.55, ...commonPricingInputCacheMiss }, completionToken: { basePriceUSD: 2.19, ...commonPricingOutput }, discountHours: { start: "16:30", // UTC end: "00:30" // UTC }, discountRates: { promptToken: 0.75, // 75% off promptTokenCacheMiss: 0.75, // 75% off completionToken: 0.75 // 75% off }, features: { jsonOutput: true, functionCalling: true, chatPrefixCompletion: true, fimCompletion: false } } } }; // src/pricing/pricing.ts var PricingConfig = { ...AwsSesPricingConfig, ...OpenAIPricingConfig, ...GoogleAIPricingConfig, ...AnthropicAIPricingConfig, ...DeepSeekAIPricingConfig, ...BravePricingConfig }; var attachPricingApi1 = (usage) => { var _a; if (usage.type !== "api_1" || !usage.requestKey) { return { ...usage, priceUSD: 0, originalPriceUSD: 0 }; } const pricingPkgConfig = PricingConfig[usage.package]; if (!pricingPkgConfig) { return { ...usage, priceUSD: 0, originalPriceUSD: 0 }; } const pricingKeyConfig = pricingPkgConfig[usage.requestKey]; if (!pricingKeyConfig) { return { ...usage, priceUSD: 0, originalPriceUSD: 0 }; } let usagePriceUSD = 0; if (usage.type === "api_1" && usage.requestCount && pricingKeyConfig.requestCount) { usagePriceUSD += pricingKeyConfig.requestCount.basePriceUSD * (usage.requestCount / pricingKeyConfig.requestCount.per); } if (usage.type === "api_1" && usage.requestData && pricingKeyConfig.requestData) { usagePriceUSD += pricingKeyConfig.requestData.basePriceUSD * (usage.requestData / pricingKeyConfig.requestData.per); } return { ...usage, priceUSD: usagePriceUSD * (1 - ((_a = usage.markup) != null ? _a : 0) / 100), originalPriceUSD: usagePriceUSD }; }; var fetchProviderPackage = (model) => { var _a; const allLLmConfigs = Object.entries(PricingConfig).map(([key, config]) => ({ key, config })).filter(({ config }) => config.type === "llm"); const pricingConfigPackage = (_a = allLLmConfigs.find( ({ config }) => Object.keys(config).includes(model) )) == null ? void 0 : _a.key; return pricingConfigPackage; }; var attachPricingLLM = (usage) => { var _a, _b, _c; let _package = usage.package; if (!usage.model) { return { ...usage, priceUSD: 0, originalPriceUSD: 0 }; } if (!usage.package) { _package = fetchProviderPackage(usage.model); } if (!_package) { return { ...usage, priceUSD: 0, originalPriceUSD: 0 }; } const pricingConfig = PricingConfig[_package]; if (!pricingConfig) { return { ...usage, priceUSD: 0, originalPriceUSD: 0 }; } let usagePriceUSD = 0; let modelPricingConfig = pricingConfig[usage.model]; if (!modelPricingConfig) { return { ...usage, priceUSD: 0, originalPriceUSD: 0 }; } usagePriceUSD += modelPricingConfig.promptToken.basePriceUSD * (((_a = usage.promptTokens) != null ? _a : 0) / modelPricingConfig.promptToken.per); usagePriceUSD += modelPricingConfig.completionToken.basePriceUSD * (((_b = usage.completionTokens) != null ? _b : 0) / modelPricingConfig.completionToken.per); return { ...usage, package: _package, priceUSD: usagePriceUSD * (1 - ((_c = usage.markup) != null ? _c : 0) / 100), originalPriceUSD: usagePriceUSD }; }; var attachPricing = (usage) => { if (usage.type === "llm") { return attachPricingLLM(usage); } if (usage.type === "api_1") { return attachPricingApi1(usage); } return usage; }; var getPricingForLLM = (props) => { var _a; const _package = fetchProviderPackage(props.model); if (!_package) { return { priceUSD: 0, originalPriceUSD: 0 }; } const pricingConfig = PricingConfig[_package]; if (!pricingConfig || !pricingConfig[props.model]) { return { priceUSD: 0, originalPriceUSD: 0 }; } const modelPricingConfig = pricingConfig[props.model]; const usagePriceUSD = modelPricingConfig.promptToken.basePriceUSD * (props.promptTokens / modelPricingConfig.promptToken.per) + modelPricingConfig.completionToken.basePriceUSD * (props.completionTokens / modelPricingConfig.completionToken.per); return { provider: _package == null ? void 0 : _package.replace("ai-provider-", ""), priceUSD: usagePriceUSD * (1 - ((_a = props.markup) != null ? _a : 0) / 100), originalPriceUSD: usagePriceUSD }; }; // src/sdk.ts import { Redis } from "@upstash/redis"; var getDateKey = () => { return (/* @__PURE__ */ new Date()).toISOString().split("T")[0]; }; var getDateKeyUntilMonth = () => { const date = /* @__PURE__ */ new Date(); return date.toISOString().split("T")[0].split("-").slice(0, 2).join("-"); }; var getDateKeyUntilYear = () => { const date = /* @__PURE__ */ new Date(); return date.toISOString().split("T")[0].split("-")[0]; }; var cleanPackageName = (packageName) => { return packageName.replace("@microfox/", "").replace("#", "/").replace("@ext_", ""); }; var MicrofoxUsagePricing = class { constructor(config) { var _a, _b, _c, _d, _e, _f; this.redis = new Redis({ url: (_b = (_a = config.redisOptions) == null ? void 0 : _a.url) != null ? _b : process.env.MICROFOX_REDIS_URL_TRACKER, token: (_d = (_c = config.redisOptions) == null ? void 0 : _c.token) != null ? _d : process.env.MICROFOX_REDIS_TOKEN_TRACKER }); this.prefix = (_f = (_e = config.prefix) != null ? _e : process.env.MICROFOX_CLIENT_REQUEST_ID) != null ? _f : process.env.MICROFOX_BOT_PROJECT_ID; } processUsageEntries(usage, packageName) { return Object.entries(usage).map(([key, value]) => { try { let json = typeof value === "string" ? JSON.parse(value) : value; if ("model" in json) { json.type = "llm"; } if ("requestKey" in json) { json.type = "api_1"; } return { ...json, timestamp: key }; } catch (e) { console.error("Failed to parse usage entry", value); return null; } }).filter((entry) => entry != null && entry !== void 0).filter( (entry) => packageName ? entry.package === cleanPackageName(packageName) : true ); } async getUsage(packageName, prefixDateKey, options) { var _a, _b; const usageKey = `${this.prefix}:${prefixDateKey != null ? prefixDateKey : "*"}`; const limit = (_a = options == null ? void 0 : options.limit) != null ? _a : 100; const offset = (_b = options == null ? void 0 : options.offset) != null ? _b : 0; let cursor = "0"; const keys = []; let totalItems = 0; do { const [nextCursor, matchedKeys] = await this.redis.scan(cursor, { match: usageKey, count: limit }); cursor = nextCursor; keys.push(...matchedKeys); totalItems += matchedKeys.length; } while (cursor !== "0" && keys.length < offset + limit); const pageKeys = keys.slice(offset, offset + limit); const usages = (await Promise.all( pageKeys.map(async (usageKey2) => { const usage = await this.redis.hgetall(usageKey2); if (!usage) return []; return this.processUsageEntries(usage, packageName); }) )).flat(); return { data: usages.map(attachPricing), total: totalItems, limit, offset, hasMore: totalItems > offset + limit }; } async getDailyUsage(packageName, options) { return this.getUsage(packageName, `${getDateKey()}:*`, options); } async getMonthlyUsage(packageName, options) { return this.getUsage(packageName, `${getDateKeyUntilMonth()}*`, options); } async getYearlyUsage(packageName, options) { return this.getUsage(packageName, `${getDateKeyUntilYear()}*`, options); } async getFullUsage(packageName, prefixDateKey) { const usageKey = `${this.prefix}:${prefixDateKey != null ? prefixDateKey : "*"}`; const keys = await this.redis.keys(usageKey); const usages = (await Promise.all( keys.map(async (usageKey2) => { const usage = await this.redis.hgetall(usageKey2); if (!usage) return []; return this.processUsageEntries(usage, packageName); }) )).flat(); return usages.map(attachPricing); } async getFullDailyUsage(packageName) { return this.getFullUsage(packageName, `${getDateKey()}:*`); } async getFullMonthlyUsage(packageName) { return this.getFullUsage(packageName, `${getDateKeyUntilMonth()}*`); } async getFullYearlyUsage(packageName) { return this.getFullUsage(packageName, `${getDateKeyUntilYear()}*`); } }; var createMicrofoxUsagePricing = (config) => { return new MicrofoxUsagePricing(config); }; var createDefaultMicrofoxUsagePricing = () => { if (!process.env.MICROFOX_REDIS_URL_TRACKER || !process.env.MICROFOX_REDIS_TOKEN_TRACKER) { return; } if (!process.env.MICROFOX_CLIENT_REQUEST_ID) { return; } return new MicrofoxUsagePricing({}); }; // src/types/index.ts import { UsageSchema } from "@microfox/usage-tracker"; import { z } from "zod"; var UsageWithPricingSchema = z.object({ priceUSD: z.number(), originalPriceUSD: z.number().optional() }).and(UsageSchema); export { MicrofoxUsagePricing, PricingConfig, UsageWithPricingSchema, attachPricing, attachPricingApi1, attachPricingLLM, createDefaultMicrofoxUsagePricing, createMicrofoxUsagePricing, fetchProviderPackage, getPricingForLLM }; //# sourceMappingURL=index.mjs.map