支持导入定价文档并在统计页估算费用。

把用量与单价对齐,方便对照各模型实际开销。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-14 01:14:20 +08:00
co-authored by Cursor
parent 752eaccefa
commit 6bd180bb7b
9 changed files with 1999 additions and 39 deletions
+5 -2
View File
@@ -129,7 +129,7 @@ export function readRecords(query: TokenStatsQuery = {}): TokenUsageRecord[] {
const lines = readFileSync(file, "utf8").split(/\r?\n/).filter(Boolean);
for (let j = lines.length - 1; j >= 0 && records.length < limit; j--) {
try {
const record = JSON.parse(lines[j]) as TokenUsageRecord;
const record = JSON.parse(lines[j].trim()) as TokenUsageRecord;
if (query.bookId && record.bookId !== query.bookId) continue;
if (query.orchestratorId && record.orchestratorId !== query.orchestratorId) {
continue;
@@ -171,7 +171,10 @@ function accumulateCaller(
}
export function summarizeTokenUsage(query: TokenStatsQuery = {}): TokenStatsSummary {
const records = readRecords({ ...query, limit: query.limit ?? 2000 });
return summarizeRecords(readRecords({ ...query, limit: query.limit ?? 2000 }));
}
export function summarizeRecords(records: TokenUsageRecord[]): TokenStatsSummary {
const summary: TokenStatsSummary = {
totalCalls: records.length,
promptTokens: 0,