import { TokenUsage } from "@/types/chat"; interface Props { tokenUsage: TokenUsage; modelUsed: string; primaryModel?: string; } const MODEL_LABELS: Record = { "llama-3.1-8b-instant": "Llama 3.1 · 8B", "llama-3.3-70b-versatile": "Llama 3.3 · 70B", "mixtral-8x7b-32768": "Mixtral · 8×7B", "gemma2-9b-it": "Gemma 2 · 9B", }; function shortLabel(model: string): string { return MODEL_LABELS[model] ?? model.split("-").slice(0, 3).join("-"); } export default function TokenUsageDisplay({ tokenUsage, modelUsed, primaryModel }: Props) { const isFallback = primaryModel && modelUsed !== primaryModel; const { prompt_tokens, completion_tokens, total_tokens } = tokenUsage; // Ratio bar: completion vs prompt (capped at 100%) const ratio = total_tokens > 0 ? Math.min((completion_tokens / total_tokens) * 100, 100) : 0; return (
{/* Model badge */}
{isFallback ? ( ) : ( )} {shortLabel(modelUsed)} {isFallback && ( fallback )}
{/* Token breakdown */}
{/* Mini bar */}
{prompt_tokens.toLocaleString()} + {completion_tokens.toLocaleString()} · {total_tokens.toLocaleString()} tok
); }