anselp's picture
Update app.py
cfed2a3 verified
raw
history blame
5.5 kB
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()