import { Bar, BarChart, CartesianGrid, LabelList, XAxis, YAxis } from "recharts"; import { Card, CardContent } from "@/components/ui/card"; import type { ChartConfig } from "@/components/ui/chart"; import { ChartContainer, ChartTooltip, ChartTooltipContent, } from "@/components/ui/chart"; export interface BenchmarkRow { compileGroup: string; eagerPrefill: number; eagerDecode: number; eagerTotal: number; groupedMmPrefill: number; groupedMmDecode: number; groupedMmTotal: number; batchedMmPrefill: number; batchedMmDecode: number; batchedMmTotal: number; groupedBatchedPrefill: number; groupedBatchedDecode: number; groupedBatchedTotal: number; } interface BenchmarkChartProps { data: BenchmarkRow[]; } const chartConfig = { eagerPrefill: { label: "eager prefill", color: "#2563eb", }, eagerDecode: { label: "eager decode", color: "#93c5fd", }, groupedMmPrefill: { label: "grouped_mm prefill", color: "#16a34a", }, groupedMmDecode: { label: "grouped_mm decode", color: "#86efac", }, batchedMmPrefill: { label: "batched_mm prefill", color: "#7c3aed", }, batchedMmDecode: { label: "batched_mm decode", color: "#d8b4fe", }, groupedBatchedPrefill: { label: "grouped+batched prefill", color: "#ea580c", }, groupedBatchedDecode: { label: "grouped+batched decode", color: "#fdba74", }, } satisfies ChartConfig; export function BenchmarkChart({ data, }: BenchmarkChartProps) { return ( `${value}ms`} label={{ value: "generation latency (ms)", angle: -90, position: "left", offset: 70, dx: -28, }} /> } /> value == null ? "" : Math.round(Number(value)).toString() } /> value == null ? "" : Math.round(Number(value)).toString() } /> value == null ? "" : Math.round(Number(value)).toString() } /> value == null ? "" : Math.round(Number(value)).toString() } /> ); }