fix(dashboard): cost live durante run (era 0 fino a complete_run)

Bug: la dashboard mostrava \$0.0000 per Cost (USD) durante i run in corso
perché leggeva runs.total_cost_usd, che viene aggiornato solo dentro
Repository.complete_run a fine run. I record per-call esistevano già in
cost_records (124 record / \$0.019 sul run phase2-qwen3-001 attivo).

Fix: in _snapshot() se il run è status=running uso Repository.total_cost(run_id)
che fa SUM(cost_usd) live su cost_records. Per i run completed/failed continuo
a leggere total_cost_usd dal record runs (storico autoritativo).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-11 22:58:03 +02:00
parent 6f6fbb30a0
commit 9344395760
+6 -1
View File
@@ -402,6 +402,11 @@ def _snapshot(run_id: str) -> dict[str, Any]:
evals_total = max(pop_size * n_gens, 1) evals_total = max(pop_size * n_gens, 1)
evals_done = len(evals) evals_done = len(evals)
gens_done = int(gens["completed_at"].notna().sum()) if not gens.empty else 0 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") top_fit = float(evals["fitness"].max()) if evals_done else float("nan")
median_fit = float(evals["fitness"].median()) 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", ""), "name": cfg.get("run_name", ""),
"started_at": ov["started_at"], "started_at": ov["started_at"],
"completed_at": ov["completed_at"] or "", "completed_at": ov["completed_at"] or "",
"cost_usd": ov["total_cost_usd"], "cost_usd": live_cost,
"pop_size": pop_size, "pop_size": pop_size,
"n_gens": n_gens, "n_gens": n_gens,
"evals_done": evals_done, "evals_done": evals_done,