Spaces:
Sleeping
Sleeping
import gradio as gr | |
import pandas as pd | |
import requests | |
from pathlib import Path | |
from datetime import datetime | |
import logging | |
import os | |
logging.basicConfig(level=logging.INFO) | |
QUEUE_SPACE_URL = os.getenv( | |
'QUEUE_SPACE_URL', | |
'https://koellabs-ipa-transcription-en-queue.hf.space/api' | |
).rstrip('/') | |
def load_leaderboard_data(): | |
try: | |
response = requests.get(f"{QUEUE_SPACE_URL}/leaderboard", timeout=10) | |
logging.info(f"Leaderboard request URL: {QUEUE_SPACE_URL}/leaderboard") | |
response.raise_for_status() | |
return pd.DataFrame(response.json()) | |
except requests.RequestException as e: | |
logging.error(f"Error loading leaderboard: {e}") | |
try: | |
return pd.read_json(Path("fake_queue/leaderboard.json")) | |
except: | |
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'<a href="{x}" target="_blank">Repository</a>' 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 create_html_table(df): | |
return df.to_html(escape=False, index=False, classes="styled-table") | |
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"{QUEUE_SPACE_URL}/evaluate", | |
json=request_data, | |
timeout=10 | |
) | |
logging.info(f"Submit request URL: {QUEUE_SPACE_URL}/evaluate") | |
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"{QUEUE_SPACE_URL}/tasks/{task_id}", | |
timeout=10 | |
) | |
logging.info(f"Status check URL: {QUEUE_SPACE_URL}/tasks/{task_id}") | |
response.raise_for_status() | |
return response.json() | |
except requests.RequestException as e: | |
return f"Error checking status: {str(e)}" | |
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_leaderboard_data()))) | |
refresh_btn = gr.Button("π Refresh") | |
refresh_btn.click( | |
lambda: gr.HTML.update(value=create_html_table(format_leaderboard_df(load_leaderboard_data()))), | |
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( | |
fn=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") | |
# Use a simple function wrapper to ensure direct HTTP request | |
def check_status_wrapper(task_id): | |
return check_task_status(task_id) | |
status_btn.click( | |
fn=check_status_wrapper, | |
inputs=task_id, | |
outputs=status_output | |
) | |
demo.launch() |