mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-06-14 12:11:27 +08:00
refactor: extract estimateCost from cost-tracker to shared lib
Replace inline estimateCost() in cost-tracker.js with import from scripts/lib/cost-estimate.js. No behavior change.
This commit is contained in:
@@ -8,11 +8,8 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const {
|
const { ensureDir, appendFile, getClaudeDir } = require('../lib/utils');
|
||||||
ensureDir,
|
const { estimateCost } = require('../lib/cost-estimate');
|
||||||
appendFile,
|
|
||||||
getClaudeDir,
|
|
||||||
} = require('../lib/utils');
|
|
||||||
|
|
||||||
const MAX_STDIN = 1024 * 1024;
|
const MAX_STDIN = 1024 * 1024;
|
||||||
let raw = '';
|
let raw = '';
|
||||||
@@ -22,23 +19,6 @@ function toNumber(value) {
|
|||||||
return Number.isFinite(n) ? n : 0;
|
return Number.isFinite(n) ? n : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
function estimateCost(model, inputTokens, outputTokens) {
|
|
||||||
// Approximate per-1M-token blended rates. Conservative defaults.
|
|
||||||
const table = {
|
|
||||||
'haiku': { in: 0.8, out: 4.0 },
|
|
||||||
'sonnet': { in: 3.0, out: 15.0 },
|
|
||||||
'opus': { in: 15.0, out: 75.0 },
|
|
||||||
};
|
|
||||||
|
|
||||||
const normalized = String(model || '').toLowerCase();
|
|
||||||
let rates = table.sonnet;
|
|
||||||
if (normalized.includes('haiku')) rates = table.haiku;
|
|
||||||
if (normalized.includes('opus')) rates = table.opus;
|
|
||||||
|
|
||||||
const cost = (inputTokens / 1_000_000) * rates.in + (outputTokens / 1_000_000) * rates.out;
|
|
||||||
return Math.round(cost * 1e6) / 1e6;
|
|
||||||
}
|
|
||||||
|
|
||||||
process.stdin.setEncoding('utf8');
|
process.stdin.setEncoding('utf8');
|
||||||
process.stdin.on('data', chunk => {
|
process.stdin.on('data', chunk => {
|
||||||
if (raw.length < MAX_STDIN) {
|
if (raw.length < MAX_STDIN) {
|
||||||
@@ -66,7 +46,7 @@ process.stdin.on('end', () => {
|
|||||||
model,
|
model,
|
||||||
input_tokens: inputTokens,
|
input_tokens: inputTokens,
|
||||||
output_tokens: outputTokens,
|
output_tokens: outputTokens,
|
||||||
estimated_cost_usd: estimateCost(model, inputTokens, outputTokens),
|
estimated_cost_usd: estimateCost(model, inputTokens, outputTokens)
|
||||||
};
|
};
|
||||||
|
|
||||||
appendFile(path.join(metricsDir, 'costs.jsonl'), `${JSON.stringify(row)}\n`);
|
appendFile(path.join(metricsDir, 'costs.jsonl'), `${JSON.stringify(row)}\n`);
|
||||||
|
|||||||
Reference in New Issue
Block a user