Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import pandas as pd | |
| import json | |
| import os | |
| DATA_FILE = "benchmark_results.json" | |
| def load_data(): | |
| if not os.path.exists(DATA_FILE): | |
| return pd.DataFrame([{"error": f"{DATA_FILE} not found!", "timestamp": "N/A"}]) | |
| try: | |
| with open(DATA_FILE, "r") as f: | |
| data = json.load(f) | |
| df = pd.DataFrame(data) | |
| if "timestamp" in df.columns: | |
| df = df.sort_values(by="timestamp", ascending=False) | |
| return df | |
| except Exception as e: | |
| return pd.DataFrame([{"error": str(e)}]) | |
| df_initial = load_data() | |
| all_columns = list(df_initial.columns) if not df_initial.empty else [] | |
| default_x = "seq_len" if "seq_len" in all_columns else (all_columns[0] if all_columns else None) | |
| default_y = "avg_wall_time_ms" if "avg_wall_time_ms" in all_columns else (all_columns[1] if len(all_columns) > 1 else None) | |
| def update_plot(x_col, y_col): | |
| df = load_data() | |
| if df.empty or "error" in df.columns: | |
| return gr.ScatterPlot(visible=False) | |
| return gr.ScatterPlot( | |
| value=df, | |
| x=x_col, | |
| y=y_col, | |
| color="device" if "device" in df.columns else None, | |
| title=f"{y_col} vs {x_col}", | |
| tooltip=list(df.columns), | |
| height=400 | |
| ) | |
| with gr.Blocks(title="Benchmark Leaderboard") as demo: | |
| gr.Markdown("# Benchmark Leaderboard") | |
| with gr.Row(): | |
| experiment_count = len(df_initial) | |
| time_cols = [c for c in all_columns if "time" in c and "avg" in c] | |
| best_time_col = time_cols[0] if time_cols else None | |
| if best_time_col and not df_initial.empty and "error" not in df_initial.columns: | |
| best_val = df_initial[best_time_col].min() | |
| best_metric_label = f"{best_val:.4f} ms" | |
| else: | |
| best_metric_label = "N/A" | |
| gr.Label(experiment_count, label="Total Experiments") | |
| gr.Label(best_metric_label, label=f"Best {best_time_col or 'Time'}") | |
| gr.Markdown("### Analysis") | |
| with gr.Row(): | |
| x_axis_dropdown = gr.Dropdown( | |
| choices=all_columns, | |
| value=default_x, | |
| label="X Axis" | |
| ) | |
| y_axis_dropdown = gr.Dropdown( | |
| choices=all_columns, | |
| value=default_y, | |
| label="Y Axis" | |
| ) | |
| refresh_btn = gr.Button("Refresh") | |
| plot_component = gr.ScatterPlot( | |
| value=df_initial, | |
| x=default_x, | |
| y=default_y, | |
| color="device" if "device" in df_initial.columns else None, | |
| tooltip=all_columns, | |
| height=400 | |
| ) | |
| gr.Markdown("#### Results") | |
| data_table = gr.DataFrame(value=df_initial, interactive=False) | |
| x_axis_dropdown.change(fn=update_plot, inputs=[x_axis_dropdown, y_axis_dropdown], outputs=plot_component) | |
| y_axis_dropdown.change(fn=update_plot, inputs=[x_axis_dropdown, y_axis_dropdown], outputs=plot_component) | |
| def refresh_all(x, y): | |
| df = load_data() | |
| cols = list(df.columns) | |
| new_plot = update_plot(x, y) | |
| return new_plot, df, gr.Dropdown(choices=cols), gr.Dropdown(choices=cols) | |
| refresh_btn.click( | |
| fn=refresh_all, | |
| inputs=[x_axis_dropdown, y_axis_dropdown], | |
| outputs=[plot_component, data_table, x_axis_dropdown, y_axis_dropdown] | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch(theme=gr.themes.Soft()) | |