|
"""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}` |
|
* **Created:** {created} by {username} |
|
""" |
|
|
|
with gr.Blocks() as run_detail_page: |
|
with gr.Sidebar() as sidebar: |
|
logo = gr.Markdown( |
|
f""" |
|
<img src='/gradio_api/file={utils.TRACKIO_LOGO_DIR}/trackio_logo_type_light_transparent.png' width='80%' class='logo-light'> |
|
<img src='/gradio_api/file={utils.TRACKIO_LOGO_DIR}/trackio_logo_type_dark_transparent.png' 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"), {} |
|
|
|
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, 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, |
|
) |
|
|