diff --git a/src/multi_swarm/dashboard/nicegui_app.py b/src/multi_swarm/dashboard/nicegui_app.py index 701b152..56bcf2d 100644 --- a/src/multi_swarm/dashboard/nicegui_app.py +++ b/src/multi_swarm/dashboard/nicegui_app.py @@ -402,6 +402,11 @@ def _snapshot(run_id: str) -> dict[str, Any]: evals_total = max(pop_size * n_gens, 1) evals_done = len(evals) gens_done = int(gens["completed_at"].notna().sum()) if not gens.empty else 0 + # runs.total_cost_usd è 0 finché complete_run non viene chiamato. + # Per le run in corso leggiamo la somma live da cost_records. + live_cost = float(repo.total_cost(run_id)) if ov["status"] == "running" else float( + ov["total_cost_usd"] + ) top_fit = float(evals["fitness"].max()) if evals_done else float("nan") median_fit = float(evals["fitness"].median()) if evals_done else float("nan") @@ -414,7 +419,7 @@ def _snapshot(run_id: str) -> dict[str, Any]: "name": cfg.get("run_name", "—"), "started_at": ov["started_at"], "completed_at": ov["completed_at"] or "—", - "cost_usd": ov["total_cost_usd"], + "cost_usd": live_cost, "pop_size": pop_size, "n_gens": n_gens, "evals_done": evals_done,