| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import { ANTHROPIC_DEFAULT_MAX_TOKENS } from "@roo-code/types"
- /**
- * Result of token distribution calculation
- */
- export interface TokenDistributionResult {
- /**
- * Percentage of context window used by current tokens (0-100)
- */
- currentPercent: number
- /**
- * Percentage of context window reserved for model output (0-100)
- */
- reservedPercent: number
- /**
- * Percentage of context window still available (0-100)
- */
- availablePercent: number
- /**
- * Number of tokens reserved for model output
- */
- reservedForOutput: number
- /**
- * Number of tokens still available in the context window
- */
- availableSize: number
- }
- /**
- * Calculates distribution of tokens within the context window
- * This is used for visualizing the token distribution in the UI
- *
- * @param contextWindow The total size of the context window
- * @param contextTokens The number of tokens currently used
- * @param maxTokens Optional override for tokens reserved for model output (otherwise uses 8192)
- * @returns Distribution of tokens with percentages and raw numbers
- */
- export const calculateTokenDistribution = (
- contextWindow: number,
- contextTokens: number,
- maxTokens?: number,
- ): TokenDistributionResult => {
- // Handle potential invalid inputs with positive fallbacks
- const safeContextWindow = Math.max(0, contextWindow)
- const safeContextTokens = Math.max(0, contextTokens)
- // Get the actual max tokens value from the model
- // If maxTokens is valid (positive and not equal to context window), use it, otherwise reserve 8192 tokens as a default
- const reservedForOutput =
- maxTokens && maxTokens > 0 && maxTokens !== safeContextWindow ? maxTokens : ANTHROPIC_DEFAULT_MAX_TOKENS
- // Calculate sizes directly without buffer display
- const availableSize = Math.max(0, safeContextWindow - safeContextTokens - reservedForOutput)
- // Calculate percentages - ensure they sum to exactly 100%
- // Use the ratio of each part to the total context window
- const total = safeContextTokens + reservedForOutput + availableSize
- // Safeguard against division by zero
- if (total <= 0) {
- return {
- currentPercent: 0,
- reservedPercent: 0,
- availablePercent: 0,
- reservedForOutput,
- availableSize,
- }
- }
- return {
- currentPercent: (safeContextTokens / total) * 100,
- reservedPercent: (reservedForOutput / total) * 100,
- availablePercent: (availableSize / total) * 100,
- reservedForOutput,
- availableSize,
- }
- }
|