From abfd7298d9143c998be27876f41e0fd16eacfe83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=EC=8B=9C=EC=9B=90?= Date: Thu, 7 May 2026 16:44:19 +0900 Subject: [PATCH] Surface eval cost in iteration summary Append eval_seconds and its share of iteration_seconds to the per-iteration console summary when evaluation actually ran, so users watching the log can see how much wall time eval is consuming without parsing JSON metrics. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/coolrl_lost_cities/games/classic/deep_cfr/trainer.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/coolrl_lost_cities/games/classic/deep_cfr/trainer.py b/src/coolrl_lost_cities/games/classic/deep_cfr/trainer.py index 22af2d5..7465c89 100644 --- a/src/coolrl_lost_cities/games/classic/deep_cfr/trainer.py +++ b/src/coolrl_lost_cities/games/classic/deep_cfr/trainer.py @@ -139,6 +139,11 @@ def _format_iteration_summary(metrics: IterationMetrics, data: dict[str, float | f"strategy_loss={_format_summary_value(metrics.strategy_loss)}", f"iteration_seconds={_format_summary_value(data['iteration_seconds'])}", ] + if metrics.eval_metrics: + eval_seconds = float(data.get("evaluation_seconds", 0.0) or 0.0) + iter_seconds = float(data.get("iteration_seconds", 0.0) or 0.0) + fraction = eval_seconds / iter_seconds if iter_seconds > 0.0 else 0.0 + parts.append(f"eval_seconds={_format_summary_value(eval_seconds)}({fraction * 100:.0f}%)") for key in sorted(metrics.eval_metrics): if key.endswith("_win_rate0") or key.endswith("_avg_score_diff0"): parts.append(f"{key}={_format_summary_value(metrics.eval_metrics[key])}")