UNPKG

capsule-ai-cli

Version:

The AI Model Orchestrator - Intelligent multi-model workflows with device-locked licensing

53 lines • 2.44 kB
import { contextManager } from '../../services/context.js'; import chalk from 'chalk'; export const costCommand = { name: 'cost', description: 'Show cost summary', async execute() { const allContexts = contextManager.contexts; let totalCost = 0; let totalTokens = 0; let totalMessages = 0; const providerCosts = {}; const modelCosts = {}; allContexts.forEach((context) => { totalCost += context.metadata.totalCost || 0; totalTokens += context.metadata.totalTokens || 0; totalMessages += context.messages.length; context.messages.forEach((msg) => { if (msg.role === 'assistant' && msg.metadata?.cost) { const provider = msg.metadata.provider || 'unknown'; const model = msg.metadata.model || 'unknown'; providerCosts[provider] = (providerCosts[provider] || 0) + msg.metadata.cost; modelCosts[model] = (modelCosts[model] || 0) + msg.metadata.cost; } }); }); let message = `${chalk.bold('šŸ’° Total Cost Summary')} ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Total Cost: $${totalCost.toFixed(4)} Total Tokens: ${totalTokens.toLocaleString()} Total Messages: ${totalMessages} Total Chats: ${allContexts.size}`; if (Object.keys(providerCosts).length > 0) { message += '\n\nšŸ“Š Cost by Provider:\n'; Object.entries(providerCosts).sort(([, a], [, b]) => b - a).forEach(([provider, cost]) => { const percentage = (cost / totalCost * 100).toFixed(1); message += ` ${provider.padEnd(12)} $${cost.toFixed(4)} (${percentage}%)\n`; }); } if (Object.keys(modelCosts).length > 0) { message += '\nšŸ¤– Cost by Model:\n'; Object.entries(modelCosts).sort(([, a], [, b]) => b - a).slice(0, 5).forEach(([model, cost]) => { const percentage = (cost / totalCost * 100).toFixed(1); message += ` ${model.padEnd(12)} $${cost.toFixed(4)} (${percentage}%)\n`; }); } message += '\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'; return { success: true, message }; } }; //# sourceMappingURL=cost.js.map