From 188a1f0ef06785863bcbc8c2f181564b28799182 Mon Sep 17 00:00:00 2001 From: AdrianoDev Date: Sat, 9 May 2026 20:35:10 +0200 Subject: [PATCH] feat(dashboard): Genomes page (top-10 + inspection) Co-Authored-By: Claude Opus 4.7 (1M context) --- src/multi_swarm/dashboard/pages/03_genomes.py | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/multi_swarm/dashboard/pages/03_genomes.py diff --git a/src/multi_swarm/dashboard/pages/03_genomes.py b/src/multi_swarm/dashboard/pages/03_genomes.py new file mode 100644 index 0000000..4a4538a --- /dev/null +++ b/src/multi_swarm/dashboard/pages/03_genomes.py @@ -0,0 +1,72 @@ +from __future__ import annotations + +import streamlit as st + +from multi_swarm.dashboard.data import ( + evaluations_df, + genomes_df, + get_repo, + list_runs_df, +) + +st.title("Genomes") + +db_path = st.session_state.get("db_path", "./runs.db") +repo = get_repo(db_path) + +runs = list_runs_df(repo) +if runs.empty: + st.info("Nessuna run.") + st.stop() + +selected = st.selectbox("Run", runs["id"].tolist()) +evals = evaluations_df(repo, selected) +genomes = genomes_df(repo, selected) + +if evals.empty: + st.warning("Nessuna evaluation.") + st.stop() + +merged = evals.merge( + genomes, left_on="genome_id", right_on="id", how="left", suffixes=("", "_g") +) +top = merged.sort_values("fitness", ascending=False).head(10) + +st.subheader("Top-10 genomi (per fitness)") +display_cols = [ + "genome_id", + "fitness", + "dsr", + "sharpe", + "max_dd", + "n_trades", + "cognitive_style", + "temperature", + "lookback_window", + "feature_access", +] +existing = [c for c in display_cols if c in top.columns] +st.dataframe(top[existing]) + +st.subheader("Ispezione genoma") +gid = st.selectbox("Seleziona genome_id", top["genome_id"].tolist()) +row = merged[merged["genome_id"] == gid].iloc[0] + +col1, col2 = st.columns(2) +with col1: + st.metric("fitness", f"{row['fitness']:.3f}") + st.metric("DSR", f"{row['dsr']:.3f}") + st.metric("Sharpe", f"{row['sharpe']:.3f}") +with col2: + st.metric("max DD", f"{row['max_dd']:.3f}") + st.metric("trades", int(row["n_trades"])) + st.metric("style", str(row.get("cognitive_style", "—"))) + +st.subheader("System prompt") +st.code(row.get("system_prompt", "—")) + +st.subheader("Raw LLM output") +st.code(row.get("raw_text", "—")) + +if row.get("parse_error"): + st.error(f"Parse error: {row['parse_error']}")