From aaddf337b1e53f93b3c05b50a12c134a6c8c4ef9 Mon Sep 17 00:00:00 2001 From: saivishal1999 Date: Tue, 9 Jun 2026 12:32:17 -0700 Subject: [PATCH] fix aiperf CSV parsing in report_generation_strategy Accept any aiperf metric dynamically via _AnyMetricSet and skip malformed CSV lines with on_bad_lines='skip' to handle the multi-section aiperf report format. --- .../ai_dynamo/report_generation_strategy.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/cloudai/workloads/ai_dynamo/report_generation_strategy.py b/src/cloudai/workloads/ai_dynamo/report_generation_strategy.py index a0ef92005..de663ca55 100644 --- a/src/cloudai/workloads/ai_dynamo/report_generation_strategy.py +++ b/src/cloudai/workloads/ai_dynamo/report_generation_strategy.py @@ -18,17 +18,28 @@ import logging from pathlib import Path +from typing import ClassVar from cloudai.core import METRIC_ERROR, MetricValue, ReportGenerationStrategy from cloudai.util.lazy_imports import lazy from cloudai.workloads.ai_dynamo.ai_dynamo import AIDynamoTestDefinition, parse_aiperf_accuracy +class _AnyMetricSet(list): + """List subclass that reports containment for any item; used to mark a reporter as handling all metrics.""" + + def __contains__(self, item: object) -> bool: + return True + + class AIDynamoReportGenerationStrategy(ReportGenerationStrategy): """Strategy for generating reports from AI Dynamo run directories.""" + # Accepts any metric string — get_metric parses "benchmark:metric_name:column" dynamically. + metrics: ClassVar[list[str]] = _AnyMetricSet() + def extract_metric_from_csv(self, csv_file: Path, metric_name: str, metric_type: str) -> MetricValue: - df = lazy.pd.read_csv(csv_file) + df = lazy.pd.read_csv(csv_file, on_bad_lines="skip") if "Metric" not in df.columns or metric_type not in df.columns: logging.info(f"Metric type: {metric_type} not in CSV file: {df.columns}")