recoder-shared
Version:
Shared types, utilities, and configurations for Recoder
73 lines • 2.89 kB
JavaScript
/**
* AI API Cost Calculation Utilities
* Provides cost calculation for different AI providers
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.calculateApiCostAnthropic = calculateApiCostAnthropic;
exports.calculateApiCostOpenAI = calculateApiCostOpenAI;
exports.calculateApiCostGeneric = calculateApiCostGeneric;
exports.parseApiPrice = parseApiPrice;
// Cost per 1M tokens (in USD)
const ANTHROPIC_PRICING = {
'claude-3-opus-20240229': { input: 15.0, output: 75.0 },
'claude-3-sonnet-20240229': { input: 3.0, output: 15.0 },
'claude-3-haiku-20240307': { input: 0.25, output: 1.25 },
'claude-3-5-sonnet-20241022': { input: 3.0, output: 15.0 },
'claude-3-5-haiku-20241022': { input: 1.0, output: 5.0 },
};
const OPENAI_PRICING = {
'gpt-4': { input: 30.0, output: 60.0 },
'gpt-4-turbo': { input: 10.0, output: 30.0 },
'gpt-3.5-turbo': { input: 0.5, output: 1.5 },
};
function calculateApiCostAnthropic(model, usage) {
const pricing = ANTHROPIC_PRICING[model] ||
ANTHROPIC_PRICING['claude-3-sonnet-20240229']; // fallback
const inputCost = (usage.inputTokens / 1000000) * pricing.input;
const outputCost = (usage.outputTokens / 1000000) * pricing.output;
// Cache costs (if applicable)
const cacheReadCost = usage.cacheReadTokens
? (usage.cacheReadTokens / 1000000) * (pricing.input * 0.1) // 10% of input cost
: 0;
const cacheWriteCost = usage.cacheWriteTokens
? (usage.cacheWriteTokens / 1000000) * (pricing.input * 1.25) // 125% of input cost
: 0;
const cacheCost = cacheReadCost + cacheWriteCost;
const totalCost = inputCost + outputCost + cacheCost;
return {
totalCost,
inputCost,
outputCost,
cacheCost: cacheCost > 0 ? cacheCost : undefined,
};
}
function calculateApiCostOpenAI(model, usage) {
const pricing = OPENAI_PRICING[model] ||
OPENAI_PRICING['gpt-3.5-turbo']; // fallback
const inputCost = (usage.inputTokens / 1000000) * pricing.input;
const outputCost = (usage.outputTokens / 1000000) * pricing.output;
const totalCost = inputCost + outputCost;
return {
totalCost,
inputCost,
outputCost,
};
}
function calculateApiCostGeneric(inputPricePerMillion, outputPricePerMillion, usage) {
const inputCost = (usage.inputTokens / 1000000) * inputPricePerMillion;
const outputCost = (usage.outputTokens / 1000000) * outputPricePerMillion;
const totalCost = inputCost + outputCost;
return {
totalCost,
inputCost,
outputCost,
};
}
function parseApiPrice(priceString) {
// Remove any currency symbols and parse as float
const cleanPrice = priceString.replace(/[$€£¥,]/g, '');
const parsed = parseFloat(cleanPrice);
return isNaN(parsed) ? 0 : parsed;
}
//# sourceMappingURL=cost.js.map
;