from __future__ import annotations import gradio as gr from core.app_state import APP_STATE from tracking.trackio_client import export_traces, read_trace_rows, tracking_status_dict from ui.progress import CLICK_PROGRESS def recent_events() -> list[dict]: return APP_STATE.recent_events() def build_traces_tab() -> None: gr.Markdown( "Recent local app events with JSONL fallback tracking and optional Trackio integration." ) run_name = gr.Textbox(label="Run name", placeholder="demo-run") event = gr.Textbox(label="Event", placeholder="inference, dataset_loaded, training_step") preview = gr.Button("Preview trace event", variant="primary") refresh = gr.Button("Refresh recent events") export = gr.Button("Export local traces") output = gr.JSON(label="Trace preview") trace_rows = gr.JSON(label="Local trace rows") status = gr.JSON(tracking_status_dict(), label="Tracking status") def preview_trace(run: str, event_name: str) -> dict: return { "status": "preview", "run_name": run or "demo-run", "event": event_name or "manual_preview", "tracking": tracking_status_dict(), } preview.click( preview_trace, [run_name, event], output, show_progress=CLICK_PROGRESS, ) refresh.click(recent_events, outputs=output, show_progress=CLICK_PROGRESS) refresh.click(read_trace_rows, outputs=trace_rows, show_progress=CLICK_PROGRESS) refresh.click(tracking_status_dict, outputs=status, show_progress=CLICK_PROGRESS) def export_local_traces() -> dict: path = export_traces() return {"exported_to": str(path)} export.click(export_local_traces, outputs=output, show_progress=CLICK_PROGRESS)