Spaces:
Sleeping
Prompt β expand "The GP's group" to the GP's top 10 programs
Right now the Result panel's "The GP's group" block shows only the #1 winner (its genes' individual ranks + confound survival). Expand it to the GP's top 10 programs, ranked by the engine's own fitness β each with the same treatment. Verified against the code. Presentation + frontend data-flow only; no engine/API/airgap change. tsc after.
What "top 10" means here (keep it distinct from Coordinated modules)
Rank by the GP's own fitness (what the search actually preferred) β NOT by the combined-AUROC re-score. This is deliberately different from the Coordinated modules leaderboard (which re-scores all explored groups by a different metric). Label it so the two don't blur: e.g. heading "The GP's top programs" with a one-line note "ranked by the engine's own fitness β what the search preferred. (The Coordinated modules panel below re-scores all explored groups by a different metric.)"
Data sources (verified)
- The GP's programs + fitness live in the persisted population:
GET /runs/{id}/population/{generation}returnscandidateseach withfitness,gene_ids,program_repr(engine_v2/gp.py builds these).GET /runs/{id}exposesgenerations_persisted. - Per-gene single-gene ranks come from the full-rank diagnostic (
getFullRankDiagnostic(dataset, target)βdiag.ranks) β already fetched in the Result panel after the consolidation change. - Confound survival comes from the module ranking (
getModuleRanking(runId)) β match a program to its module by unordered gene-set equality (the same notionModuleRankingPanel.isWinnerSetuses).
Build the top-10 list (web/app/Lab.tsx, ResultPanel)
- Fetch the last persisted generation's population (
generations_persisted - 1). Sort itscandidatesbyfitnessdescending, dedupe by gene-set (unordered), take the top 10 distinct programs. (#1 should be the winner β keep it visually highlighted as today.) - Render each of the 10 as a compact row reusing the existing "GP's group" treatment:
- Genes, each on its own: for each gene id, look it up in
diag.ranksβSYMBOL #rank / N(reveal symbols via the existing bounded reveal; reveal only these displayed programs' genes β never the whole map). - Confound survival: find the program's module in the module data by gene-set equality β render
SurvivalChips(the preβpostfull β subgroupchips). Omit gracefully where survival isn't available. - Show the program's GP fitness (and gene count) so the ordering is legible.
- Genes, each on its own: for each gene id, look it up in
- Keep it compact (10 rows); the winner (#1) stays highlighted. Bounded reveal: only the genes of these β€10 programs.
Part β rewrite the Coordinated modules caption + "?" in plain language
The current copy is dense and circular. Rewrite both, in plain English, to clearly say what this panel is and how it differs from "The GP's top programs" above.
- Inline subtitle (web/app/Lab.tsx ~line 3861): replace with:
"Not the engine's picks. After the run, this re-scores every gene group the engine tried β using one simple number (the group's average expression, measured on held-out patients) instead of how the engine judged groups during the search. So this list can rank groups differently from The GP's top programs above, and its #1 can even beat the engine's winner."
- The "?" tooltip
TIPS.moduleRanking(~line 217): replace with plain copy covering three things:"What this is: after the run finishes, we take every group of genes the engine explored, ignore how the engine combined them, and give each group one score β the average of its genes, on patients held out of training. How it differs from 'The GP's top programs' above: that panel is the engine's actual choices, ranked the way the engine judged them during the search. This panel is a separate, after-the-fact re-scoring with a simpler yardstick β so the order differs, and a group here scoring higher than the engine's winner does NOT mean the engine was wrong. Caveat: this tries ~2,900 groups on the same small held-out set and shows the best, so the very top scores are optimistically biased (the luckiest of thousands) β trust the engine's own picks above as the reliable choice."
- Check the related line ~200 (the single-gene/highlighted tip that references the modules leaderboard) and make sure its wording is consistent with the above.
CONSTRAINTS
- Presentation + frontend data-flow only; no engine/API/airgap change. Reveal stays bounded to the displayed programs' genes.
- Do not re-introduce group/individual mixing: each program's group identity is the row; the per-gene
#rankvalues are clearly that program's individual genes' solo ranks β labelled as such, exactly like the current single-program block.
Checkpoint
- "The GP's group" becomes "The GP's top programs" showing 10 rows ranked by GP fitness, #1 = winner (highlighted).
- Each row shows its genes' individual single-gene ranks + its confound-survival chips.
- A one-line note distinguishes this (GP fitness) from the Coordinated modules leaderboard (combined-AUROC re-score).
- Reveal bounded to the β€10 displayed programs;
tscclean; no API/airgap change.