UNPKG

@bobmatnyc/ai-code-review

Version:

A TypeScript-based tool for automated code reviews using AI models from Google Gemini, Anthropic Claude, and OpenRouter

155 lines (154 loc) 5.41 kB
/** * @fileoverview Token tracking service for multi-pass reviews. * * This module provides detailed token tracking and reporting functionality * for multi-pass reviews, recording token usage across passes and providing * comprehensive statistics for reporting. */ /** * Token usage for a single pass in a multi-pass review */ export interface PassTokenUsage { /** Pass number */ passNumber: number; /** Number of input tokens for this pass */ inputTokens: number; /** Number of output tokens for this pass */ outputTokens: number; /** Total tokens for this pass */ totalTokens: number; /** Estimated cost for this pass */ estimatedCost: number; /** Time taken for this pass in milliseconds */ timeTakenMs: number; /** Files processed in this pass */ files: string[]; /** Whether this was a consolidation pass */ isConsolidation: boolean; } /** * Consolidated token usage across all passes */ export interface ConsolidatedTokenUsage { /** Total input tokens across all passes */ totalInputTokens: number; /** Total output tokens across all passes */ totalOutputTokens: number; /** Total tokens across all passes */ totalTokens: number; /** Total estimated cost across all passes */ totalEstimatedCost: number; /** Formatted total cost */ formattedTotalCost: string; /** Token usage for each pass */ passTokenUsage: PassTokenUsage[]; /** Total time taken across all passes in milliseconds */ totalTimeTakenMs: number; /** Average tokens per file */ averageTokensPerFile: number; /** Total number of files processed */ totalFiles: number; /** Number of passes */ passCount: number; /** Context maintenance factor used in multi-pass reviews */ contextMaintenanceFactor: number; /** Model name used for review */ modelName: string; /** Whether a consolidation pass was included */ includedConsolidation: boolean; } /** * Real-time token statistics for monitoring */ export interface TokenStatistics { /** Current token usage rate (tokens per second) */ currentTokenRate: number; /** Average token usage rate (tokens per second) */ averageTokenRate: number; /** Estimated tokens remaining */ estimatedTokensRemaining: number; /** Estimated time remaining in milliseconds */ estimatedTimeRemainingMs: number; /** Estimated total cost so far */ estimatedCostSoFar: number; /** Formatted estimated cost so far */ formattedEstimatedCostSoFar: string; } /** * Service for tracking and reporting token usage in multi-pass reviews */ export declare class TokenTracker { /** Token usage for each pass */ private passTokenUsage; /** Start time of tracking */ private startTime; /** Model name for cost estimation */ private modelName; /** Context maintenance factor used in multi-pass reviews */ private contextMaintenanceFactor; /** Whether the tracker is active */ private isActive; /** Pass currently being tracked */ private currentPass; /** Current pass start time */ private currentPassStartTime; /** * Create a new token tracker * @param modelName Model name * @param contextMaintenanceFactor Context maintenance factor (0-1) */ constructor(modelName: string, contextMaintenanceFactor?: number); /** * Start tracking a new pass * @param passNumber Pass number * @param files Files being processed in this pass * @param isConsolidation Whether this is a consolidation pass */ startPass(passNumber: number, files: string[], isConsolidation?: boolean): void; /** * Record token usage for the current pass * @param inputText Input text sent to the model * @param outputText Output text received from the model * @param passNumber Optional specific pass number (defaults to current pass) * @returns Updated token usage for the pass */ recordTokenUsage(inputText: string, outputText: string, passNumber?: number): PassTokenUsage; /** * Complete the current pass * @param passNumber Optional specific pass number (defaults to current pass) * @returns Token usage for the completed pass */ completePass(passNumber?: number): PassTokenUsage; /** * Start a consolidation pass * @param files Files being consolidated (typically just the review file) * @returns Pass number for the consolidation pass */ startConsolidationPass(files: string[]): number; /** * Get token usage for a specific pass * @param passNumber Pass number * @returns Token usage for the pass */ getPassTokenUsage(passNumber: number): PassTokenUsage | undefined; /** * Get consolidated token usage across all passes * @returns Consolidated token usage */ getConsolidatedTokenUsage(): ConsolidatedTokenUsage; /** * Get current token statistics for real-time monitoring * @returns Current token statistics */ getTokenStatistics(): TokenStatistics; /** * Generate a formatted report of token usage * @returns Formatted token usage report in Markdown format */ generateTokenUsageReport(): string; /** * Stop the tracker * @returns Final consolidated token usage */ stop(): ConsolidatedTokenUsage; }