Background
ExperimentState (added in app/state/experiment_state.py) now persists all fine-tuning runs in SQLite with full hyperparameters, final loss, perplexity, and loss_history (the full per-step loss array).
Feature request
Build an Experiment Comparison page or panel that lets users:
- Select two or more completed runs from a table or checklist (
toggle_run_selection is already implemented).
- View overlaid loss curves on a shared axis — one line per run, color-coded.
- See a side-by-side metrics table showing final loss, perplexity, epochs, LR, LoRA rank, and dataset.
Design notes
- Use
app/components/loss_chart.py as the base — it already renders a Recharts LineChart.
- Extend it to accept a
list[list[float]] (one series per run) and a matching list[str] for labels.
- The comparison view can live as a new tab on the Experiments page.
ExperimentState.selected_runs already returns the selected ExperimentRun objects.
Acceptance criteria
Background
ExperimentState(added inapp/state/experiment_state.py) now persists all fine-tuning runs in SQLite with full hyperparameters, final loss, perplexity, andloss_history(the full per-step loss array).Feature request
Build an Experiment Comparison page or panel that lets users:
toggle_run_selectionis already implemented).Design notes
app/components/loss_chart.pyas the base — it already renders a RechartsLineChart.list[list[float]](one series per run) and a matchinglist[str]for labels.ExperimentState.selected_runsalready returns the selectedExperimentRunobjects.Acceptance criteria