| import gradio as gr |
| import pandas as pd |
| from db.store import get_runs, delete_run, get_run |
| from core.diff import render_diff_html |
|
|
| _DEFAULT_COLS = ["id", "timestamp", "model", "compression_ratio", "quality_score", "feedback"] |
| _ALL_COLS = [ |
| "id", "timestamp", "model", "tokenizer", |
| "input_tokens", "output_tokens", "target_tokens", |
| "compression_ratio", "quality_score", "duration_ms", |
| "feedback", "feedback_comment", |
| ] |
|
|
| _SESSION_WARNING = ( |
| '<div style="background:#fef9c3;border:1px solid #eab308;color:#854d0e;' |
| 'padding:8px 12px;border-radius:6px;font-size:0.9rem;margin-bottom:4px">' |
| 'β οΈ <strong>Session only</strong> β history is stored in memory and will be ' |
| 'cleared when you close or refresh this page. No data is persisted to disk.' |
| '</div>' |
| ) |
|
|
|
|
| def load_history(selected_cols, run_store): |
| cols = selected_cols if selected_cols else _DEFAULT_COLS |
| runs = get_runs(run_store, limit=100) |
| if not runs: |
| return pd.DataFrame(columns=cols), "", "", "" |
| df = pd.DataFrame(runs) |
| existing = [c for c in cols if c in df.columns] |
| df = df[existing] |
| avg_quality = f"{df['quality_score'].mean():.4f}" if "quality_score" in df.columns else "β" |
| avg_ratio = f"{df['compression_ratio'].mean():.4f}" if "compression_ratio" in df.columns else "β" |
| return df, avg_quality, avg_ratio, "" |
|
|
|
|
| def on_row_select(evt: gr.SelectData, df: pd.DataFrame, run_store: list): |
| if df is None or df.empty: |
| return None, "", "No rows available." |
| row_idx = evt.index[0] |
| run_id = int(df.iloc[row_idx]["id"]) |
| record = get_run(run_store, run_id) |
| if not record: |
| return None, "", f"Row {run_id} not found." |
| diff_html = render_diff_html(record) |
| return run_id, diff_html, f"Row {run_id} selected β click Delete to remove." |
|
|
|
|
| def delete_selected(run_id, selected_cols, run_store): |
| if run_id is None: |
| df, avg_q, avg_r, _ = load_history(selected_cols, run_store) |
| return df, avg_q, avg_r, None, "", "No row selected.", run_store |
| new_store = delete_run(run_store, run_id) |
| df, avg_q, avg_r, _ = load_history(selected_cols, new_store) |
| return df, avg_q, avg_r, None, "", f"Row {run_id} deleted.", new_store |
|
|
|
|
| def build_history_tab(run_store) -> gr.Tab: |
| with gr.Tab("History") as tab: |
| gr.Markdown("## Compression Run History") |
| gr.HTML(_SESSION_WARNING) |
|
|
| with gr.Row(): |
| refresh_btn = gr.Button("Refresh", variant="secondary") |
| delete_btn = gr.Button("Delete Selected Row", variant="stop") |
|
|
| with gr.Accordion("Column visibility", open=False): |
| col_picker = gr.CheckboxGroup( |
| choices=_ALL_COLS, |
| value=_DEFAULT_COLS, |
| label=None, |
| ) |
|
|
| with gr.Row(): |
| avg_quality = gr.Textbox(label="Avg Quality Score", interactive=False) |
| avg_ratio = gr.Textbox(label="Avg Compression Ratio", interactive=False) |
|
|
| history_table = gr.DataFrame( |
| label="Past Runs β click a row to see its diff", |
| interactive=False, |
| ) |
| delete_status = gr.Textbox( |
| label="Status", value="Click a row to select it.", interactive=False |
| ) |
|
|
| gr.Markdown("### Side-by-side Diff") |
| diff_panel = gr.HTML(value="") |
| selected_id = gr.State(value=None) |
|
|
| _outputs = [history_table, avg_quality, avg_ratio, diff_panel] |
|
|
| refresh_btn.click(fn=load_history, inputs=[col_picker, run_store], outputs=_outputs) |
| tab.select(fn=load_history, inputs=[col_picker, run_store], outputs=_outputs) |
| col_picker.change(fn=load_history, inputs=[col_picker, run_store], outputs=_outputs) |
| history_table.select( |
| fn=on_row_select, |
| inputs=[history_table, run_store], |
| outputs=[selected_id, diff_panel, delete_status], |
| ) |
| delete_btn.click( |
| fn=delete_selected, |
| inputs=[selected_id, col_picker, run_store], |
| outputs=[history_table, avg_quality, avg_ratio, selected_id, diff_panel, delete_status, run_store], |
| ) |
|
|
| return tab |
|
|