moe-experts-benchmarks / src /components /benchmark-chart.tsx
stevhliu's picture
stevhliu HF Staff
final updates
0158b7b
Raw
History Blame Contribute Delete
5.24 kB
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 (
<Card className="border-0 shadow-none gap-0">
<CardContent className="px-0 pr-6 pt-0">
<ChartContainer config={chartConfig} style={{ height: 350, width: '100%' }}>
<BarChart accessibilityLayer data={data}>
<CartesianGrid vertical={false} />
<XAxis
dataKey="compileGroup"
tickLine={false}
tickMargin={10}
axisLine={false}
/>
<YAxis
tickLine={false}
axisLine={false}
width={90}
tickFormatter={(value) => `${value}ms`}
label={{
value: "generation latency (ms)",
angle: -90,
position: "left",
offset: 70,
dx: -28,
}}
/>
<ChartTooltip
cursor={false}
shared={false}
isAnimationActive={false}
content={<ChartTooltipContent indicator="dashed" />}
/>
<Bar
dataKey="eagerPrefill"
fill="var(--color-eagerPrefill)"
stackId="eager"
radius={[0, 0, 4, 4]}
/>
<Bar
dataKey="eagerDecode"
fill="var(--color-eagerDecode)"
stackId="eager"
radius={[4, 4, 0, 0]}
>
<LabelList
dataKey="eagerTotal"
position="top"
formatter={(value) =>
value == null ? "" : Math.round(Number(value)).toString()
}
/>
</Bar>
<Bar
dataKey="groupedMmPrefill"
fill="var(--color-groupedMmPrefill)"
stackId="groupedMm"
radius={[0, 0, 4, 4]}
/>
<Bar
dataKey="groupedMmDecode"
fill="var(--color-groupedMmDecode)"
stackId="groupedMm"
radius={[4, 4, 0, 0]}
>
<LabelList
dataKey="groupedMmTotal"
position="top"
formatter={(value) =>
value == null ? "" : Math.round(Number(value)).toString()
}
/>
</Bar>
<Bar
dataKey="batchedMmPrefill"
fill="var(--color-batchedMmPrefill)"
stackId="batchedMm"
radius={[0, 0, 4, 4]}
/>
<Bar
dataKey="batchedMmDecode"
fill="var(--color-batchedMmDecode)"
stackId="batchedMm"
radius={[4, 4, 0, 0]}
>
<LabelList
dataKey="batchedMmTotal"
position="top"
formatter={(value) =>
value == null ? "" : Math.round(Number(value)).toString()
}
/>
</Bar>
<Bar
dataKey="groupedBatchedPrefill"
fill="var(--color-groupedBatchedPrefill)"
stackId="groupedBatched"
radius={[0, 0, 4, 4]}
/>
<Bar
dataKey="groupedBatchedDecode"
fill="var(--color-groupedBatchedDecode)"
stackId="groupedBatched"
radius={[4, 4, 0, 0]}
>
<LabelList
dataKey="groupedBatchedTotal"
position="top"
formatter={(value) =>
value == null ? "" : Math.round(Number(value)).toString()
}
/>
</Bar>
</BarChart>
</ChartContainer>
</CardContent>
</Card>
);
}