From 3e88a10e6f5c512794dd22ab831390bb598bd838 Mon Sep 17 00:00:00 2001 From: Jared O'Connell <46976761+jaredoconnell@users.noreply.github.com> Date: Tue, 14 Oct 2025 15:41:37 -0400 Subject: [PATCH] Revert "Features/add tooltip to line chart (#392)" This reverts commit fcc1114a9c79e61b1c0ebe0bbae546499fea1545. --- src/guidellm/presentation/data_models.py | 24 ++-------------- .../MetricLine/MetricLine.component.tsx | 28 ++----------------- .../MetricsSummary.component.tsx | 2 +- src/ui/lib/store/benchmarksWindowData.ts | 10 ------- .../benchmarks/benchmarks.interfaces.ts | 1 - .../slices/benchmarks/benchmarks.selectors.ts | 25 +++-------------- tests/unit/presentation/test_data_models.py | 10 +------ 7 files changed, 11 insertions(+), 89 deletions(-) diff --git a/src/guidellm/presentation/data_models.py b/src/guidellm/presentation/data_models.py index 2401b3ef..ff2863b4 100644 --- a/src/guidellm/presentation/data_models.py +++ b/src/guidellm/presentation/data_models.py @@ -5,8 +5,6 @@ from pydantic import BaseModel, computed_field -from guidellm.scheduler.strategy import SchedulingStrategy - if TYPE_CHECKING: from guidellm.benchmark import GenerativeBenchmark @@ -214,30 +212,12 @@ class BenchmarkDatum(BaseModel): ttft: TabularDistributionSummary throughput: TabularDistributionSummary time_per_request: TabularDistributionSummary - strategy_display_str: str - - @classmethod - def get_strategy_display_str(cls, strategy: SchedulingStrategy): - strategy_type = strategy if isinstance(strategy, str) else strategy.type_ - strategy_instance = ( - strategy if isinstance(strategy, SchedulingStrategy) else None - ) - - if strategy_type == "concurrent": - rate = f"@{strategy.streams}" if strategy_instance else "@##" # type: ignore[attr-defined] - elif strategy_type in ("constant", "poisson"): - rate = f"@{strategy.rate:.2f}" if strategy_instance else "@#.##" # type: ignore[attr-defined] - else: - rate = "" - return f"{strategy_type}{rate}" @classmethod def from_benchmark(cls, bm: "GenerativeBenchmark"): - rps = bm.metrics.requests_per_second.successful.mean return cls( - strategy_display_str=cls.get_strategy_display_str(bm.args.strategy), - requests_per_second=rps, - itl=TabularDistributionSummary.from_distribution_summary( + requests_per_second=bm.metrics.requests_per_second.successful.mean, + tpot=TabularDistributionSummary.from_distribution_summary( bm.metrics.inter_token_latency_ms.successful ), ttft=TabularDistributionSummary.from_distribution_summary( diff --git a/src/ui/lib/components/Charts/MetricLine/MetricLine.component.tsx b/src/ui/lib/components/Charts/MetricLine/MetricLine.component.tsx index eb123593..8b1b4df2 100644 --- a/src/ui/lib/components/Charts/MetricLine/MetricLine.component.tsx +++ b/src/ui/lib/components/Charts/MetricLine/MetricLine.component.tsx @@ -1,6 +1,5 @@ -import { Typography, useTheme } from '@mui/material'; -import { PointTooltipProps, ResponsiveLine } from '@nivo/line'; -import { BasicTooltip } from '@nivo/tooltip'; +import { useTheme } from '@mui/material'; +import { ResponsiveLine } from '@nivo/line'; import React, { FC } from 'react'; import { useColor } from '@/lib/hooks/useColor'; @@ -50,30 +49,11 @@ export const Component: FC = ({ reverse: false, }; } - type PointTooltipPropsWithLabel = PointTooltipProps & { - point: { - data: { - label: string; - }; - }; - }; return ( ( - - {(point as PointTooltipPropsWithLabel).point.data.label} - - } - color={point.point.color} - enableChip={true} - /> - )} - pointSize={10} colors={[selectedColor]} margin={{ top: 20, right: 10, bottom: 20, left: 35.5 }} xScale={{ type: 'linear', min: minX }} @@ -112,6 +92,7 @@ export const Component: FC = ({ }} enableGridX={false} enableGridY={false} + pointSize={0} useMesh={true} layers={[ CustomAxes, @@ -134,9 +115,6 @@ export const Component: FC = ({ ), 'axes', 'lines', - 'points', - 'markers', - 'mesh', ]} theme={lineTheme} /> diff --git a/src/ui/lib/components/MetricsSummary/MetricsSummary.component.tsx b/src/ui/lib/components/MetricsSummary/MetricsSummary.component.tsx index 9530d9e7..0d804f5c 100644 --- a/src/ui/lib/components/MetricsSummary/MetricsSummary.component.tsx +++ b/src/ui/lib/components/MetricsSummary/MetricsSummary.component.tsx @@ -102,7 +102,7 @@ export const Component = () => { return ( <> - + diff --git a/src/ui/lib/store/benchmarksWindowData.ts b/src/ui/lib/store/benchmarksWindowData.ts index b4af5063..a589e8ed 100644 --- a/src/ui/lib/store/benchmarksWindowData.ts +++ b/src/ui/lib/store/benchmarksWindowData.ts @@ -1,6 +1,5 @@ export const benchmarksScript = `window.benchmarks = [ { - strategyDisplayStr: "synchronous", requestsPerSecond: 11.411616848282272, tpot: { mean: 8.758024845683707, @@ -172,7 +171,6 @@ export const benchmarksScript = `window.benchmarks = [ }, }, { - strategyDisplayStr: "constant@36.28", requestsPerSecond: 36.289181300710815, tpot: { mean: 588.0161376137819, @@ -344,7 +342,6 @@ export const benchmarksScript = `window.benchmarks = [ }, }, { - strategyDisplayStr: "constant@20.75", requestsPerSecond: 20.752070927855794, tpot: { mean: 116.28360712595156, @@ -516,7 +513,6 @@ export const benchmarksScript = `window.benchmarks = [ }, }, { - strategyDisplayStr: "constant@26.81", requestsPerSecond: 26.81917480361788, tpot: { mean: 299.7306064613554, @@ -688,7 +684,6 @@ export const benchmarksScript = `window.benchmarks = [ }, }, { - strategyDisplayStr: "constant@26.82", requestsPerSecond: 26.823988819498975, tpot: { mean: 683.8011571339198, @@ -860,7 +855,6 @@ export const benchmarksScript = `window.benchmarks = [ }, }, { - strategyDisplayStr: "constant@24.50", requestsPerSecond: 24.50047903792646, tpot: { mean: 742.9258901891964, @@ -1032,7 +1026,6 @@ export const benchmarksScript = `window.benchmarks = [ }, }, { - strategyDisplayStr: "constant@25.61", requestsPerSecond: 25.617829792196602, tpot: { mean: 663.3098317044122, @@ -1204,7 +1197,6 @@ export const benchmarksScript = `window.benchmarks = [ }, }, { - strategyDisplayStr: "constant@37.02", requestsPerSecond: 37.02892550982192, tpot: { mean: 606.4144710877113, @@ -1376,7 +1368,6 @@ export const benchmarksScript = `window.benchmarks = [ }, }, { - strategyDisplayStr: "constant@37.29", requestsPerSecond: 37.29183354201869, tpot: { mean: 603.3237551205925, @@ -1548,7 +1539,6 @@ export const benchmarksScript = `window.benchmarks = [ }, }, { - strategyDisplayStr: "throughput", requestsPerSecond: 37.45318312972309, tpot: { mean: 600.7204526769262, diff --git a/src/ui/lib/store/slices/benchmarks/benchmarks.interfaces.ts b/src/ui/lib/store/slices/benchmarks/benchmarks.interfaces.ts index 6c01d5e2..602ae17e 100644 --- a/src/ui/lib/store/slices/benchmarks/benchmarks.interfaces.ts +++ b/src/ui/lib/store/slices/benchmarks/benchmarks.interfaces.ts @@ -27,7 +27,6 @@ export interface BenchmarkMetrics { export interface Benchmark extends BenchmarkMetrics { requestsPerSecond: number; - strategyDisplayStr: string; } export type Benchmarks = Benchmark[]; diff --git a/src/ui/lib/store/slices/benchmarks/benchmarks.selectors.ts b/src/ui/lib/store/slices/benchmarks/benchmarks.selectors.ts index d3da9bf9..53d54f40 100644 --- a/src/ui/lib/store/slices/benchmarks/benchmarks.selectors.ts +++ b/src/ui/lib/store/slices/benchmarks/benchmarks.selectors.ts @@ -11,18 +11,6 @@ import { selectSloState } from '../slo/slo.selectors'; export const selectBenchmarks = (state: RootState) => state.benchmarks.data; -const getUnitsByMetric = (metric: string) => { - switch (metric) { - case 'ttft': - case 'tpot': - return 'ms'; - case 'timePerRequest': - return 'sec'; - case 'throughput': - return 'tok/s'; - } -}; - export const selectMetricsSummaryLineData = createSelector( [selectBenchmarks, selectSloState], (benchmarks, sloState) => { @@ -30,10 +18,8 @@ export const selectMetricsSummaryLineData = createSelector( ?.slice() ?.sort((bm1, bm2) => (bm1.requestsPerSecond > bm2.requestsPerSecond ? 1 : -1)); const selectedPercentile = sloState.enforcedPercentile; - interface PointWithLabel extends Point { - label: string; - } - const lineData: { [K in keyof BenchmarkMetrics]: PointWithLabel[] } = { + + const lineData: { [K in keyof BenchmarkMetrics]: Point[] } = { ttft: [], tpot: [], timePerRequest: [], @@ -46,17 +32,14 @@ export const selectMetricsSummaryLineData = createSelector( 'throughput', ]; metrics.forEach((metric) => { - const data: PointWithLabel[] = []; + const data: Point[] = []; sortedByRPS?.forEach((benchmark) => { const percentile = benchmark[metric].percentileRows.find( (p) => p.percentile === selectedPercentile ); - const yValue = percentile?.value ?? 0; - const units = getUnitsByMetric(metric); data.push({ x: benchmark.requestsPerSecond, - y: yValue, - label: `${benchmark.strategyDisplayStr} ${formatNumber(yValue)} ${units}`, + y: percentile?.value ?? 0, }); }); diff --git a/tests/unit/presentation/test_data_models.py b/tests/unit/presentation/test_data_models.py index e879406d..c1663c43 100644 --- a/tests/unit/presentation/test_data_models.py +++ b/tests/unit/presentation/test_data_models.py @@ -1,7 +1,6 @@ import pytest -from guidellm.presentation.data_models import BenchmarkDatum, Bucket -from tests.unit.mock_benchmark import mock_generative_benchmark +from guidellm.presentation.data_models import Bucket @pytest.mark.smoke @@ -19,10 +18,3 @@ def test_bucket_from_data(): assert buckets[1].value == 8.0 assert buckets[1].count == 5 assert bucket_width == 1 - - -@pytest.mark.smoke -def test_from_benchmark_includes_strategy_display_str(): - mock_bm = mock_generative_benchmark() - bm = BenchmarkDatum.from_benchmark(mock_bm) - assert bm.strategy_display_str == "synchronous"