From b8f007fd5c45cb464e8062b014c3afd1146db941 Mon Sep 17 00:00:00 2001 From: Gahow Wang Date: Thu, 25 Jun 2026 11:25:42 +0800 Subject: [PATCH] Align compact GPU metrics --- mm/cli.py | 17 +++++------------ tests/test_cli.py | 25 ++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/mm/cli.py b/mm/cli.py index c382446..86dc92d 100644 --- a/mm/cli.py +++ b/mm/cli.py @@ -328,8 +328,8 @@ def gpu_memory_percent(gpu: GPUStat) -> float | None: def format_percent(value: float | None) -> str: if value is None: - return "??" - return f"{value:.0f}" + return " ?.?" + return f"{value:5.1f}" def metric_style(value: float | None) -> str: @@ -357,18 +357,11 @@ def format_memory_pair(gpu: GPUStat) -> str: used = gpu.memory_used_mib total = gpu.memory_total_mib if used is None or total is None or total <= 0: - return "??" + return " ?.?/ ?.?G" if used >= 1024 or total >= 1024: - return f"{format_gib(used)}/{format_gib(total)}G" - return f"{used:.0f}/{total:.0f}M" - - -def format_gib(value: float) -> str: - gib = value / 1024 - if gib >= 10 or gib.is_integer(): - return f"{gib:.0f}" - return f"{gib:.1f}" + return f"{used / 1024:5.1f}/{total / 1024:5.1f}G" + return f"{used:5.1f}/{total:5.1f}M" def build_parser() -> argparse.ArgumentParser: diff --git a/tests/test_cli.py b/tests/test_cli.py index 8fd9bc1..9390943 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -2,7 +2,14 @@ from pathlib import Path from tempfile import TemporaryDirectory import unittest -from mm.cli import load_machines, parse_nvidia_smi_csv +from mm.cli import ( + GPUStat, + MachineConfig, + MachineResult, + gpu_summary, + load_machines, + parse_nvidia_smi_csv, +) class ConfigTests(unittest.TestCase): @@ -59,5 +66,21 @@ class NvidiaSmiParsingTests(unittest.TestCase): self.assertEqual(gpus[1].power_draw_w, 49.8) +class RenderingTests(unittest.TestCase): + def test_gpu_summary_uses_fixed_width_decimal_metrics(self) -> None: + result = MachineResult( + machine=MachineConfig(alias="dash0", label="dash0"), + gpus=( + GPUStat("0", "GPU", 88 * 1024, 96 * 1024, 0, None, None, None), + GPUStat("1", "GPU", 0, 96 * 1024, 0, None, None, None), + ), + ) + + self.assertEqual( + gpu_summary(result).plain, + "0 88.0/ 96.0G 0.0% 1 0.0/ 96.0G 0.0%", + ) + + if __name__ == "__main__": unittest.main()