mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-16 08:10:46 -07:00
Co-authored-by: Keith Guerin <keithguerin@gmail.com> Co-authored-by: Jacob Richman <jacob314@gmail.com>
50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import { Text } from 'ink';
|
|
import { theme } from '../semantic-colors.js';
|
|
import { getContextUsagePercentage } from '../utils/contextUsage.js';
|
|
import { useSettings } from '../contexts/SettingsContext.js';
|
|
import {
|
|
MIN_TERMINAL_WIDTH_FOR_FULL_LABEL,
|
|
DEFAULT_COMPRESSION_THRESHOLD,
|
|
} from '../constants.js';
|
|
|
|
export const ContextUsageDisplay = ({
|
|
promptTokenCount,
|
|
model,
|
|
terminalWidth,
|
|
}: {
|
|
promptTokenCount: number;
|
|
model: string | undefined;
|
|
terminalWidth: number;
|
|
}) => {
|
|
const settings = useSettings();
|
|
const percentage = getContextUsagePercentage(promptTokenCount, model);
|
|
const percentageUsed = (percentage * 100).toFixed(0);
|
|
|
|
const threshold =
|
|
settings.merged.model?.compressionThreshold ??
|
|
DEFAULT_COMPRESSION_THRESHOLD;
|
|
|
|
let textColor = theme.text.secondary;
|
|
if (percentage >= 1.0) {
|
|
textColor = theme.status.error;
|
|
} else if (percentage >= threshold) {
|
|
textColor = theme.status.warning;
|
|
}
|
|
|
|
const label =
|
|
terminalWidth < MIN_TERMINAL_WIDTH_FOR_FULL_LABEL ? '%' : '% used';
|
|
|
|
return (
|
|
<Text color={textColor}>
|
|
{percentageUsed}
|
|
{label}
|
|
</Text>
|
|
);
|
|
};
|