diff --git a/src/modules/usage.js b/src/modules/usage.js index 9dc9dfa..aa1e523 100644 --- a/src/modules/usage.js +++ b/src/modules/usage.js @@ -1283,6 +1283,29 @@ export function updateApiStatsTable(data) { return; } + const hasPrices = Object.keys(this.modelPrices || {}).length > 0; + const calculateEndpointCost = (apiData) => { + if (!hasPrices) return 0; + let cost = 0; + const models = apiData.models || {}; + Object.entries(models).forEach(([modelName, modelData]) => { + const price = this.modelPrices?.[modelName]; + if (!price) return; + const details = Array.isArray(modelData.details) ? modelData.details : []; + details.forEach(detail => { + const tokens = detail?.tokens || {}; + const promptTokens = Number(tokens.input_tokens) || 0; + const completionTokens = Number(tokens.output_tokens) || 0; + const detailCost = (promptTokens / TOKENS_PER_PRICE_UNIT) * (Number(price.prompt) || 0) + + (completionTokens / TOKENS_PER_PRICE_UNIT) * (Number(price.completion) || 0); + if (Number.isFinite(detailCost) && detailCost > 0) { + cost += detailCost; + } + }); + }); + return Number(cost.toFixed(4)); + }; + let tableHtml = ` @@ -1290,7 +1313,7 @@ export function updateApiStatsTable(data) { - + @@ -1299,10 +1322,7 @@ export function updateApiStatsTable(data) { Object.entries(apis).forEach(([endpoint, apiData]) => { const totalRequests = apiData.total_requests || 0; - const successCount = apiData.success_count ?? null; - const successRate = successCount !== null && totalRequests > 0 - ? Math.round((successCount / totalRequests) * 100) - : null; + const endpointCost = calculateEndpointCost(apiData); // 构建模型详情 let modelsHtml = ''; @@ -1326,7 +1346,7 @@ export function updateApiStatsTable(data) { - + `;
${i18n.t('usage_stats.api_endpoint')} ${i18n.t('usage_stats.requests_count')} ${i18n.t('usage_stats.tokens_count')}${i18n.t('usage_stats.success_rate')}${i18n.t('usage_stats.total_cost')} ${i18n.t('usage_stats.models')}
${endpoint} ${totalRequests} ${this.formatTokensInMillions(apiData.total_tokens || 0)}${successRate !== null ? successRate + '%' : '-'}${hasPrices && endpointCost > 0 ? this.formatUsd(endpointCost) : '--'} ${modelsHtml || '-'}