@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
TypeScript
/**
* @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;
}