Spaces:
Running
Running
import os | |
import gradio as gr | |
from gradio_modal import Modal | |
from content import HEADER_MARKDOWN, LEADERBOARD_TAB_TITLE_MARKDOWN, SUBMISSION_TAB_TITLE_MARKDOWN | |
from leaderboard_server import LeaderboardServer | |
# Initialize server and task list | |
server = LeaderboardServer() | |
TASKS = list(server.tasks_metadata.keys()) | |
EXPECTED_TOKEN = os.environ.get("SUBMISSION_TOKEN") | |
def get_datasets_for_task(task): | |
path = os.path.join("references", task) | |
if not os.path.exists(path): | |
return [] | |
return [f.replace(".json", "") for f in os.listdir(path) if f.endswith(".json")] | |
def update_datasets(task): | |
return gr.CheckboxGroup.update(choices=get_datasets_for_task(task), value=[]) | |
def submit_model(task, datasets, hyp_file, submitted_by, model_id, token): | |
if not hyp_file: | |
return gr.update(visible=True, value="β οΈ Please upload a hypothesis file."), gr.update(), gr.update(selected=1) | |
if not submitted_by.strip() or not model_id.strip() or not token.strip(): | |
return gr.update(visible=True, value="β οΈ All fields are required."), gr.update(), gr.update(selected=1) | |
if token.strip() != EXPECTED_TOKEN: | |
return gr.update(visible=True, value="β Invalid submission token."), gr.update(), gr.update(selected=1) | |
metadata = { | |
"submitted_by": submitted_by.strip(), | |
"model_id": model_id.strip() | |
} | |
leaderboard_df = server.get_leaderboard() | |
existing = leaderboard_df[ | |
(leaderboard_df["Submitted by"] == submitted_by.strip()) & | |
(leaderboard_df["Model ID"] == model_id.strip()) | |
] | |
if not existing.empty: | |
return gr.update(value="β A submission with this name and model ID already exists.", visible=True), \ | |
gr.update(), gr.update(selected=1), gr.update(visible=False) | |
try: | |
server.prepare_model_for_submission(hyp_file.name, metadata, task, datasets) | |
server.update_leaderboard() | |
leaderboard_df = server.get_leaderboard() | |
return gr.update(visible=True, value="β Submission successful!"), leaderboard_df, gr.update(selected=0) | |
except Exception as e: | |
return gr.update(visible=True, value=f"β Error: {str(e)}"), gr.update(), gr.update(selected=1) | |
# Gradio UI | |
with gr.Blocks() as demo: | |
gr.Markdown(HEADER_MARKDOWN) | |
with gr.Tabs(selected=0) as tabs: | |
with gr.Tab("π Leaderboard"): | |
gr.Markdown(LEADERBOARD_TAB_TITLE_MARKDOWN) | |
leaderboard_output = gr.Dataframe( | |
value=server.get_leaderboard(), | |
interactive=False, | |
label="Leaderboard" | |
) | |
with gr.Tab("π€ Submit"): | |
gr.Markdown(SUBMISSION_TAB_TITLE_MARKDOWN) | |
with gr.Row(): | |
task_dropdown = gr.Dropdown(choices=TASKS, value=TASKS[0], label="Select Task") | |
dataset_checkboxes = gr.CheckboxGroup(choices=get_datasets_for_task(TASKS[0]), label="Select Datasets") | |
task_dropdown.change(fn=update_datasets, inputs=task_dropdown, outputs=dataset_checkboxes) | |
with gr.Row(): | |
submitted_by_input = gr.Text(label="Submitted by") | |
model_id_input = gr.Text(label="Model Identifier") | |
token_input = gr.Text(label="Submission Token", type="password") | |
hyp_file_upload = gr.File(label="Upload Hypothesis JSON", file_types=[".json"]) | |
submit_btn = gr.Button("Submit") | |
with Modal("Submission Feedback", visible=False) as loading_msg: | |
feedback_text = gr.Text(visible=True, label="β³ Processing your submission...") | |
with Modal("Submission Feedback", visible=False) as modal: | |
feedback_text = gr.Text(visible=True, label="") | |
submit_btn.click( | |
lambda: gr.update(visible=True), # Show loading | |
outputs=loading_msg | |
).then( | |
fn=submit_model, | |
inputs=[task_dropdown, dataset_checkboxes, hyp_file_upload, submitted_by_input, model_id_input, | |
token_input], | |
outputs=[feedback_text, leaderboard_output, tabs], | |
show_progress=True | |
).then( | |
lambda: gr.update(visible=False), | |
outputs=loading_msg | |
).then( | |
lambda: gr.update(visible=True), | |
outputs=modal | |
) | |
# submit_btn.click( | |
# fn=submit_model, | |
# inputs=[ | |
# task_dropdown, dataset_checkboxes, hyp_file_upload, | |
# submitted_by_input, model_id_input, token_input | |
# ], | |
# outputs=[feedback_text, leaderboard_output, tabs], | |
# show_progress=True | |
# ).then( | |
# lambda: gr.update(visible=True), | |
# outputs=modal | |
# ) | |
if __name__ == "__main__": | |
demo.launch() | |