import html import json import gradio as gr import pandas as pd # Function to create HTML tooltips def create_html_with_tooltip(id, base_url): return f'{id}' # Load prompts from JSON with open("prompt/prompt.json", "r") as file: json_data = file.read() prompts = json.loads(json_data) # Prepare leaderboard data winning_rate = [prompt["metric"]["winning_number"] for prompt in prompts] winning_rate = [round(num / sum(winning_rate), 4) for num in winning_rate] data = { "Rank": [i + 1 for i in range(len(prompts))], "Methods": [ create_html_with_tooltip(prompt["id"], prompt["url"]) for prompt in prompts ], "Rouge Score": [prompt["metric"]["Rouge"] for prompt in prompts], "Winning Rate": winning_rate, "Authors": [prompt["author"] for prompt in prompts], } # Create DataFrame and sort by Rouge Score df = pd.DataFrame(data) df.sort_values(by="Rouge Score", ascending=False, inplace=True, ignore_index=True) df["Rank"] = range(1, len(df) + 1) # Assign medals for top 3 authors medals = ["🏅", "🥈", "🥉"] for i in range(3): df.loc[i, "Authors"] = f"{medals[i]} {df.loc[i, 'Authors']}" # Function to update the leaderboard def update_leaderboard(sort_by): sorted_df = df.sort_values(by=sort_by, ascending=False, ignore_index=True) sorted_df["Rank"] = range(1, len(sorted_df) + 1) # Convert DataFrame to HTML with clickable headers for sorting table_html = sorted_df.to_html(index=False, escape=False) # Add sorting links to column headers for column in sorted_df.columns: table_html = table_html.replace( f"