import type { ReactNode } from "react"; import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover.js"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "../ui/tooltip.js"; import { cn } from "../utils.js"; import { formatContextTokens } from "./format.js"; import type { ContextManifestViewData } from "./types.js"; function ContextDonut({ pct, advisory }: { pct: number; advisory: boolean }) { const radius = 7.5; const circumference = 2 * Math.PI * radius; const displayPct = Math.max(3, Math.min(100, pct)); const dashOffset = circumference - (displayPct / 100) * circumference; return ( ); } export function ContextMeterView({ manifest, contextWindow, open, onOpenChange, children, }: { manifest: ContextManifestViewData; contextWindow: number; open: boolean; onOpenChange: (open: boolean) => void; children: ReactNode; }) { const pct = Math.min( 100, Math.round((manifest.totalTokens / contextWindow) * 100), ); const { conversationTokens, systemTokens } = manifest; return ( Context {pct}% ยท {formatContextTokens(manifest.totalTokens)} {systemTokens > 0 ? ` (${formatContextTokens(systemTokens)} system + ${formatContextTokens(conversationTokens)} conversation)` : ""} {children} ); }