import { useState } from "react" import { buildTopByModel, buildTopByProvider, chartPalette, formatTokens, type EndpointUsage, } from "@/lib/usage-data" import { cn } from "@/lib/utils" import type { UsageRecord } from "@/lib/types" import { Badge } from "../ui/badge" import { ChartCard } from "./chart-primitives" import { useResolvedTheme } from "./use-resolved-theme" type GroupBy = "model" | "provider" const GROUP_OPTIONS: { key: GroupBy; label: string }[] = [ { key: "model", label: "Model" }, { key: "provider", label: "Provider" }, ] function BarListRow({ item, index, maxTokens }: { item: EndpointUsage; index: number; maxTokens: number }) { const dark = useResolvedTheme() === "dark" const color = chartPalette(dark)[index % 8] const share = maxTokens > 0 ? (item.tokens / maxTokens) * 100 : 0 return (
  • {index + 1} {item.name} {item.errors > 0 ? ( {item.errors} err ) : null} {item.requests} req {formatTokens(item.tokens)}
  • ) } export function TopEndpoints({ records }: { records: UsageRecord[] }) { const [groupBy, setGroupBy] = useState("model") const items = groupBy === "model" ? buildTopByModel(records) : buildTopByProvider(records) const maxTokens = items.length > 0 ? items[0].tokens : 0 return ( {GROUP_OPTIONS.map((option) => ( ))} } > {items.length > 0 ? (
      {items.map((item, index) => ( ))}
    ) : (

    No requests in this window yet.

    )}
    ) }