(
currentUsage: {
input_tokens: number
cache_creation_input_tokens: number
cache_read_input_tokens: number
} | null,
contextWindowSize: number,
)
| 116 | * Returns used and remaining percentages, or null values if no usage data. |
| 117 | */ |
| 118 | export function calculateContextPercentages( |
| 119 | currentUsage: { |
| 120 | input_tokens: number |
| 121 | cache_creation_input_tokens: number |
| 122 | cache_read_input_tokens: number |
| 123 | } | null, |
| 124 | contextWindowSize: number, |
| 125 | ): { used: number | null; remaining: number | null } { |
| 126 | if (!currentUsage) { |
| 127 | return { used: null, remaining: null } |
| 128 | } |
| 129 | |
| 130 | const totalInputTokens = |
| 131 | currentUsage.input_tokens + |
| 132 | currentUsage.cache_creation_input_tokens + |
| 133 | currentUsage.cache_read_input_tokens |
| 134 | |
| 135 | const usedPercentage = Math.round( |
| 136 | (totalInputTokens / contextWindowSize) * 100, |
| 137 | ) |
| 138 | const clampedUsed = Math.min(100, Math.max(0, usedPercentage)) |
| 139 | |
| 140 | return { |
| 141 | used: clampedUsed, |
| 142 | remaining: 100 - clampedUsed, |
| 143 | } |
| 144 | } |
| 145 | |
| 146 | /** |
| 147 | * Returns the model's default and upper limit for max output tokens. |
no test coverage detected