| """The Runs page for the Trackio UI.""" |
|
|
| import gradio as gr |
|
|
| try: |
| import trackio.utils as utils |
| from trackio.sqlite_storage import SQLiteStorage |
| from trackio.ui import fns |
| except ImportError: |
| import utils |
| from sqlite_storage import SQLiteStorage |
| from ui import fns |
|
|
| RUN_DETAILS_TEMPLATE = """ |
| ## Run Details |
| * **Run Name:** `{run_name}` |
| * **Group:** `{group}` |
| * **Created:** {created} by {username} |
| """ |
|
|
| with gr.Blocks() as run_detail_page: |
| with gr.Sidebar() as sidebar: |
| logo_urls = utils.get_logo_urls() |
| logo = gr.Markdown( |
| f""" |
| <img src='{logo_urls["light"]}' width='80%' class='logo-light'> |
| <img src='{logo_urls["dark"]}' width='80%' class='logo-dark'> |
| """ |
| ) |
| project_dd = gr.Dropdown( |
| label="Project", allow_custom_value=True, interactive=False |
| ) |
| run_dd = gr.Dropdown(label="Run") |
|
|
| navbar = gr.Navbar(value=[("Metrics", ""), ("Runs", "/runs")], main_page_name=False) |
|
|
| run_details = gr.Markdown(RUN_DETAILS_TEMPLATE) |
|
|
| run_config = gr.JSON(label="Run Config") |
|
|
| def configure(request: gr.Request): |
| project = request.query_params.get("selected_project") |
| run = request.query_params.get("selected_run") |
| runs = SQLiteStorage.get_runs(project) |
| return project, gr.Dropdown(choices=runs, value=run) |
|
|
| def update_run_details(project, run): |
| config = SQLiteStorage.get_run_config(project, run) |
| if not config: |
| return gr.Markdown("No run details available"), {} |
|
|
| group = config.get("_Group", "None") |
|
|
| created = config.get("_Created", "Unknown") |
| if created != "Unknown": |
| created = utils.format_timestamp(created) |
|
|
| username = config.get("_Username", "Unknown") |
| if username and username != "None" and username != "Unknown": |
| username = f"[{username}](https://huggingface.co/{username})" |
|
|
| details_md = RUN_DETAILS_TEMPLATE.format( |
| run_name=run, group=group, created=created, username=username |
| ) |
|
|
| config_display = {k: v for k, v in config.items() if not k.startswith("_")} |
|
|
| return gr.Markdown(details_md), config_display |
|
|
| gr.on( |
| [run_detail_page.load], |
| fn=configure, |
| outputs=[project_dd, run_dd], |
| show_progress="hidden", |
| queue=False, |
| api_name=False, |
| ).then( |
| fns.update_navbar_value, |
| inputs=[project_dd], |
| outputs=[navbar], |
| show_progress="hidden", |
| api_name=False, |
| queue=False, |
| ) |
|
|
| gr.on( |
| [run_dd.change], |
| update_run_details, |
| inputs=[project_dd, run_dd], |
| outputs=[run_details, run_config], |
| show_progress="hidden", |
| api_name=False, |
| queue=False, |
| ) |
|
|