/** * Cost Tracker — 成本追踪系统 * * 设计: * 为每次 LLM 调用记录 token 用量和 USD 成本, * 按模型分别追踪,支持会话级持久化。 * * 核心设计: * 1. 按模型名分别追踪 token 用量和成本 * 2. 支持缓存 token 计量(cache read / cache creation) * 3. 提供格式化输出和统计 API * 4. 可选的事件回调机制 */ import type { Usage } from '../types.js'; /** 单个模型的 token 用量 */ export interface ModelUsage { inputTokens: number; outputTokens: number; cacheReadInputTokens: number; cacheCreationInputTokens: number; totalCostUSD: number; requestCount: number; } /** 模型定价配置(每百万 token 的 USD 价格) */ export interface ModelPricing { inputPricePerMToken: number; outputPricePerMToken: number; cacheReadPricePerMToken?: number; cacheCreationPricePerMToken?: number; } /** 成本追踪快照 */ export interface CostSnapshot { totalCostUSD: number; totalInputTokens: number; totalOutputTokens: number; totalTokens: number; totalRequests: number; modelUsage: Record; /** 会话开始时间 */ startedAt: number; /** 最近一次更新时间 */ updatedAt: number; } /** 成本更新事件 */ export interface CostUpdateEvent { model: string; usage: Usage; costUSD: number; snapshot: CostSnapshot; } /** * 成本追踪器 * * 维护按模型分别的 token 用量和 USD 成本统计。 */ export declare class CostTracker { private modelUsage; private customPricing; private startedAt; private updatedAt; private listeners; /** * 注册自定义模型定价 */ setModelPricing(model: string, pricing: ModelPricing): void; /** * 获取模型定价(优先自定义,否则查默认表,最后返回 0) */ getModelPricing(model: string): ModelPricing; /** * 计算单次调用的 USD 成本 */ calculateCost(model: string, usage: Usage): number; /** * 添加一次 LLM 调用的用量 */ addUsage(model: string, usage: Usage): number; /** * 注册成本更新监听器 * @returns 取消注册函数 */ onUpdate(listener: (event: CostUpdateEvent) => void): () => void; /** 获取总 USD 成本 */ getTotalCost(): number; /** 获取总输入 token 数 */ getTotalInputTokens(): number; /** 获取总输出 token 数 */ getTotalOutputTokens(): number; /** 获取总请求次数 */ getTotalRequests(): number; /** 获取特定模型的用量 */ getModelUsage(model: string): ModelUsage | undefined; /** 获取所有模型用量 */ getAllModelUsage(): Record; /** 获取当前快照 */ getSnapshot(): CostSnapshot; /** * 格式化成本显示 */ static formatCost(cost: number, maxDecimalPlaces?: number): string; /** * 格式化 token 数量 */ static formatTokens(tokens: number): string; /** * 生成格式化的成本摘要 */ formatSummary(): string; /** * 重置所有统计 */ reset(): void; } //# sourceMappingURL=cost-tracker.d.ts.map