import gradio as gr import pandas as pd import requests from pathlib import Path from datetime import datetime, timezone import time import logging logging.basicConfig(level=logging.INFO) BACKEND_URL = "http://127.0.0.1:8000" LAST_UPDATED = "Dec 4th 2024" def load_static_leaderboard(): # read fake_queue/leaderboard.json return pd.read_json(Path("fake_queue/leaderboard.json")) def load_leaderboard_data(): try: response = requests.get(f"{BACKEND_URL}/leaderboard") response.raise_for_status() return pd.DataFrame(response.json()) except requests.RequestException as e: logging.error(f"Error loading leaderboard: {e}") return pd.DataFrame() def format_leaderboard_df(df): if df.empty: return df display_df = pd.DataFrame({ "Model": df["model"], "Average PER ⬇️": df["average_per"].apply(lambda x: f"{x:.4f}"), "Average PWED ⬇️": df["average_pwed"].apply(lambda x: f"{x:.4f}"), "GitHub": df["github_url"].apply(lambda x: f'Repository' if x else "N/A"), "Submission Date": pd.to_datetime(df["submission_date"]).dt.strftime("%Y-%m-%d") }) return display_df.sort_values("Average PER ⬇️") # def submit_evaluation(model_name, submission_name, github_url): # if not model_name or not submission_name: # return "⚠️ Please provide both model name and submission name." # request_data = { # "transcription_model": model_name, # "subset": "test", # "submission_name": submission_name, # "github_url": github_url if github_url else None # } # try: # response = requests.post(f"{BACKEND_URL}/evaluate", json=request_data) # response.raise_for_status() # task_id = response.json()["task_id"] # return f"✅ Evaluation submitted successfully! Task ID: {task_id}" # except requests.RequestException as e: # return f"❌ Error: {str(e)}" # def check_task_status(task_id): # if not task_id: # return "Please enter a task ID" # try: # response = requests.get(f"{BACKEND_URL}/tasks/{task_id}") # response.raise_for_status() # return response.json() # except requests.RequestException as e: # return f"Error checking status: {str(e)}" def create_html_table(df): return df.to_html(escape=False, index=False, classes="styled-table") with gr.Blocks(css=""" .styled-table { width: 100%; border-collapse: collapse; margin: 25px 0; font-size: 0.9em; font-family: sans-serif; box-shadow: 0 0 20px rgba(0, 0, 0, 0.15); } .styled-table thead tr { background-color: #009879; color: #ffffff; text-align: left; } .styled-table th, .styled-table td { padding: 12px 15px; } .styled-table tbody tr { border-bottom: 1px solid #dddddd; } """) as demo: gr.Markdown("# 🎯 Phonemic Transcription Model Evaluation Leaderboard") with gr.Tabs(): with gr.TabItem("🏆 Leaderboard"): leaderboard_html = gr.HTML(create_html_table(format_leaderboard_df(load_static_leaderboard()))) refresh_btn = gr.Button("🔄 Refresh") refresh_btn.click( lambda: create_html_table(format_leaderboard_df(load_static_leaderboard())), outputs=leaderboard_html ) with gr.TabItem("📝 Submit Model"): model_name = gr.Textbox(label="Model Name", placeholder="facebook/wav2vec2-lv-60-espeak-cv-ft") submission_name = gr.Textbox(label="Submission Name", placeholder="My Model v1.0") github_url = gr.Textbox(label="GitHub URL (optional)", placeholder="https://github.com/username/repo") submit_btn = gr.Button("Submit") result = gr.Textbox(label="Submission Status") # submit_btn.click( # submit_evaluation, # inputs=[model_name, submission_name, github_url], # outputs=result # ) with gr.TabItem("📊 Task Status"): task_id = gr.Textbox(label="Task ID") status_btn = gr.Button("Check Status") status_output = gr.JSON(label="Status") # status_btn.click( # check_task_status, # inputs=task_id, # outputs=status_output # ) if __name__ == "__main__": demo.launch()