import gradio as gr import json import os import random import datasets #load_dataset, save_to_disk, load_from_disk HF_TOKEN = os.getenv('HF_DIPROMATS2024_T2_LEADERBOARD-TOKEN') # Use the Hugging Face dataset DATASET_NAME = "NLP-UNED/dipromats2024-t2_leaderboard-data" SPLIT = 'results' try: dataset = datasets.load_dataset(DATASET_NAME, token=HF_TOKEN) except Exception as e: print(f"Error loading dataset: {e}") dataset = datasets.Dataset.from_dict({"email": [], "team_name": [], "run_id": [], "description": [], "lenient_f1": [], "strict_f1": [], "average_f1": []}) dataset = datasets.DatasetDict({SPLIT: dataset}) # Función para convertir el dataset en tabla def data_to_table(): global dataset table_data = [] for item in dataset[SPLIT]: table_data.append([item.get("team_name", ""), item.get("run_id", ""), item.get("lenient_f1", ""), item.get("strict_f1", ""), item.get("average_f1", "")]) return table_data # Función para subir los resultados al leaderboard def update_leaderboard(email, team_input, run_id, description, lenient_f1, strict_f1, average_f1): global datataset new_data = dataset[SPLIT].add_item({ "email": email, "team_name": team_input, "run_id": run_id, "description": description, "lenient_f1": lenient_f1, "strict_f1": strict_f1, "average_f1": average_f1 }) dataset[SPLIT] = new_data new_data.push_to_hub(DATASET_NAME, split=SPLIT, token=HF_TOKEN) return data_to_table(), gr.Tabs(selected=0), gr.Button(visible=True), gr.Button(visible=False), "", "", "", "", None, None, None, None # Función para evaluar los resultados def evaluate_results(file_path): lenient_f1 = random.random() strict_f1 = random.random() average_f1 = (lenient_f1 + strict_f1) / 2 return lenient_f1, strict_f1, average_f1 # Función para procesar el archivo de resultados def process_file(file_path, team_input, run_id, description, email): warn = False if not file_path: gr.Warning("File cannot be blank") warn=True if not team_input: gr.Warning("Team name cannot be blank") warn=True if not run_id: gr.Warning("Run ID cannot be blank") warn=True if not file_path: gr.Warning("File cannot be blank") warn=True if not description: gr.Warning("Description cannot be blank") warn=True if not email: gr.Warning("Email cannot be blank") warn=True if warn: return gr.Button(visible=True), gr.Button(visible=False), None, None, None lenient_f1, strict_f1, average_f1 = evaluate_results(file_path) return gr.Button(visible=False), gr.Button(visible=True), lenient_f1, strict_f1, average_f1 # Main with gr.Blocks() as leaderboard: gr.Markdown( """ # Dipromats 2024 Task 2 Leaderboard # Automatic Detection of Narratives from Diplomats of Major Powers This is... You can... """) with gr.Tabs() as tabs: # Tab Leaderboard with gr.TabItem("Leaderboard", id=0): gr.Markdown( """ # # Leaderboard """) leaderboard_table = gr.Dataframe(headers=["Team", "Run ID", "Lenient F1", "Strict F1", "Average F1"], value=data_to_table(), interactive=False) # Tab Evaluate with gr.TabItem("Evaluate your results", id=1): gr.Markdown( """ # Upload your results and get evaluated Then you can decide to submit your results to the leaderboard or not. Make sure that you upload a file with the json format described in... """) # Submission Form with gr.Row(): with gr.Column(): with gr.Row(): team_input = gr.Textbox(label="Team Name") run_id = gr.Textbox(label="Run ID") email_input = gr.Textbox(label="Email (only for submission verification, it won't be shown)") description_input = gr.Textbox(label="System description", lines=6) file_input = gr.File(label="Upload a JSON file", file_types=[".json"], type="filepath", file_count="single") evaluate_button = gr.Button("Evaluate") # System results table with gr.Row(visible=True): lenient_f1 = gr.Number(label="Lenient F1", interactive=False) strict_f1 = gr.Number(label="Strict F1", interactive=False) average_f1 = gr.Number(label="Average F1", interactive=False) # Submit to leaderboard submit_button = gr.Button("Submit to leaderboard", visible=False) evaluate_button.click(process_file, inputs=[file_input, team_input, run_id, description_input, email_input], outputs=[evaluate_button,submit_button,lenient_f1, strict_f1, average_f1]) submit_button.click(update_leaderboard, inputs=[email_input, team_input, run_id, description_input, lenient_f1, strict_f1, average_f1], outputs=[leaderboard_table, tabs, evaluate_button, submit_button, team_input, run_id, description_input, email_input, file_input,lenient_f1, strict_f1, average_f1]) leaderboard.launch()