UNPKG

cline-sdk

Version:

Comprehensive SDK for Cline - AI-powered development assistant with database integration, execution modes, and custom functions

193 lines 6.63 kB
"use strict"; /** * Token Cost Calculator * * Calculates costs for different AI providers and models based on token usage */ Object.defineProperty(exports, "__esModule", { value: true }); exports.CostCalculator = exports.PROVIDER_PRICING = void 0; // Current pricing as of 2024 (prices may change) exports.PROVIDER_PRICING = { anthropic: { "claude-3-5-sonnet-20241022": { input_cost_per_1k: 0.003, output_cost_per_1k: 0.015, }, "claude-3-5-sonnet-20240620": { input_cost_per_1k: 0.003, output_cost_per_1k: 0.015, }, "claude-3-5-haiku-20241022": { input_cost_per_1k: 0.001, output_cost_per_1k: 0.005, }, "claude-3-opus-20240229": { input_cost_per_1k: 0.015, output_cost_per_1k: 0.075, }, "claude-3-haiku-20240307": { input_cost_per_1k: 0.00025, output_cost_per_1k: 0.00125, }, }, openai: { "gpt-4o": { input_cost_per_1k: 0.005, output_cost_per_1k: 0.015, }, "gpt-4o-mini": { input_cost_per_1k: 0.00015, output_cost_per_1k: 0.0006, }, "gpt-4-turbo": { input_cost_per_1k: 0.01, output_cost_per_1k: 0.03, }, "gpt-4": { input_cost_per_1k: 0.03, output_cost_per_1k: 0.06, }, "gpt-3.5-turbo": { input_cost_per_1k: 0.0015, output_cost_per_1k: 0.002, }, }, "openai-compatible": { // Default pricing for OpenAI-compatible APIs (can be overridden) default: { input_cost_per_1k: 0.001, output_cost_per_1k: 0.002, }, }, deepseek: { "deepseek-chat": { input_cost_per_1k: 0.00014, output_cost_per_1k: 0.00028, }, "deepseek-coder": { input_cost_per_1k: 0.00014, output_cost_per_1k: 0.00028, }, }, ollama: { // Local models - no cost default: { input_cost_per_1k: 0, output_cost_per_1k: 0, }, }, "vscode-lm": { // VS Code Language Models - typically free or included default: { input_cost_per_1k: 0, output_cost_per_1k: 0, }, }, }; class CostCalculator { /** * Calculate the cost for a given token usage */ static calculateCost(provider, model, tokenUsage) { const providerPricing = exports.PROVIDER_PRICING[provider]; if (!providerPricing) { console.warn(`Unknown provider: ${provider}. Using default pricing.`); return this.getDefaultCostCalculation(provider, model, tokenUsage); } // Try to find exact model match first let modelPricing = providerPricing[model]; // If no exact match, try to find a partial match or use default if (!modelPricing) { // For OpenAI-compatible APIs, try to match known patterns if (provider === "openai-compatible") { if (model.includes("gpt-4")) { modelPricing = exports.PROVIDER_PRICING.openai["gpt-4o"] || providerPricing["default"]; } else if (model.includes("gpt-3.5")) { modelPricing = exports.PROVIDER_PRICING.openai["gpt-3.5-turbo"] || providerPricing["default"]; } else { modelPricing = providerPricing["default"]; } } else { // Use default pricing for the provider or fallback modelPricing = providerPricing["default"] || { input_cost_per_1k: 0.001, output_cost_per_1k: 0.002, }; } } const input_cost_usd = (tokenUsage.input_tokens / 1000) * modelPricing.input_cost_per_1k; const output_cost_usd = (tokenUsage.output_tokens / 1000) * modelPricing.output_cost_per_1k; const total_cost_usd = input_cost_usd + output_cost_usd; return { provider, model, input_tokens: tokenUsage.input_tokens, output_tokens: tokenUsage.output_tokens, total_tokens: tokenUsage.total_tokens, input_cost_usd, output_cost_usd, total_cost_usd, cost_per_1k_input: modelPricing.input_cost_per_1k, cost_per_1k_output: modelPricing.output_cost_per_1k, timestamp: Date.now(), }; } /** * Get default cost calculation for unknown providers/models */ static getDefaultCostCalculation(provider, model, tokenUsage) { const defaultInputCost = 0.001; const defaultOutputCost = 0.002; const input_cost_usd = (tokenUsage.input_tokens / 1000) * defaultInputCost; const output_cost_usd = (tokenUsage.output_tokens / 1000) * defaultOutputCost; const total_cost_usd = input_cost_usd + output_cost_usd; return { provider, model, input_tokens: tokenUsage.input_tokens, output_tokens: tokenUsage.output_tokens, total_tokens: tokenUsage.total_tokens, input_cost_usd, output_cost_usd, total_cost_usd, cost_per_1k_input: defaultInputCost, cost_per_1k_output: defaultOutputCost, timestamp: Date.now(), }; } /** * Format cost as a readable string */ static formatCost(cost) { if (cost.total_cost_usd === 0) { return "Free"; } if (cost.total_cost_usd < 0.001) { return `$${(cost.total_cost_usd * 1000).toFixed(3)}k`; // Show in thousandths } return `$${cost.total_cost_usd.toFixed(4)}`; } /** * Get pricing info for a provider and model */ static getPricingInfo(provider, model) { const providerPricing = exports.PROVIDER_PRICING[provider]; if (!providerPricing) return null; return providerPricing[model] || providerPricing["default"] || null; } /** * Add or update pricing for a custom provider/model */ static setCustomPricing(provider, model, pricing) { if (!exports.PROVIDER_PRICING[provider]) { exports.PROVIDER_PRICING[provider] = {}; } exports.PROVIDER_PRICING[provider][model] = pricing; } } exports.CostCalculator = CostCalculator; //# sourceMappingURL=cost-calculator.js.map