import gradio as gr import pandas as pd LEADERBOARD_FILE = "results.csv" def load_leaderboard(): return pd.read_csv(LEADERBOARD_FILE) def display_leaderboard(score_type="Overall", open_filter="Both"): df = load_leaderboard() if open_filter != "Both": if open_filter == "Open": df = df[df["Open"] == True] elif open_filter == "Closed": df = df[df["Open"] == False] if score_type == "Human-Generated Split": df = df[["Model", "Human-Generated Safe Tasks Score", "Human-Generated Harm Tasks Score"]] sort_col = "Human-Generated Safe Tasks Score" elif score_type == "HITL Split": df = df[["Model", "HITL Safe Tasks Score", "HITL Harm Tasks Score"]] sort_col = "HITL Safe Tasks Score" else: df = df[["Model", "Overall Safe Tasks Score", "Overall Harm Tasks Score", "Refusal Rate", "Normalized Safety Score"]] sort_col = "Overall Safe Tasks Score" return df.sort_values(by=sort_col, ascending=False) def display_category_scores(open_filter="Both"): df = load_leaderboard() if open_filter != "Both": if open_filter == "Open": df = df[df["Open"] == True] elif open_filter == "Closed": df = df[df["Open"] == False] df = df[["Model", "Bias", "Cybercrime", "Harassment", "Misinformation", "Illegal Activity"]] return df with gr.Blocks() as demo: gr.Markdown("# SafeArena Leaderboard") score_filter = gr.Dropdown(label="Data Split", choices=["Full Split", "Human-Generated Split", "HITL Split"], value="Overall") open_state = gr.State("Both") with gr.Row(): gr.Markdown("### Filter Models") open_both = gr.Button("Both", variant="primary") open_open = gr.Button("Open") open_closed = gr.Button("Closed") table_overall = gr.Dataframe(value=display_leaderboard("Overall", "Both"), interactive=False) table_categories = gr.Dataframe(value=display_category_scores("Both"), interactive=False) open_both.click( lambda score: (display_leaderboard(score, "Both"), display_category_scores("Both"), "Both"), inputs=[score_filter], outputs=[table_overall, table_categories, open_state] ) open_open.click( lambda score: (display_leaderboard(score, "Open"), display_category_scores("Open"), "Open"), inputs=[score_filter], outputs=[table_overall, table_categories, open_state] ) open_closed.click( lambda score: (display_leaderboard(score, "Closed"), display_category_scores("Closed"), "Closed"), inputs=[score_filter], outputs=[table_overall, table_categories, open_state] ) score_filter.change( lambda score, open_val: (display_leaderboard(score, open_val), display_category_scores(open_val)), inputs=[score_filter, open_state], outputs=[table_overall, table_categories] ) demo.launch(share=True)