import gradio as gr from gradio_leaderboard import Leaderboard, SelectColumns import pandas as pd from pathlib import Path from src.about import ( CITATION_BUTTON_LABEL, CITATION_BUTTON_TEXT, INTRODUCTION_TEXT, LLM_BENCHMARKS_TEXT, TITLE, ) from src.display.css_html_js import custom_css # ----------------------------- # Load your local JSON # ----------------------------- USER_JSON = Path(__file__).parent / "leaderboard_data.json" try: USER_DF = pd.read_json(USER_JSON) except Exception: # Build with an empty frame if file missing so the Space still loads USER_DF = pd.DataFrame( columns=[ "Model", "Average", "Assistant Traits", "Relationship & Intimacy", "Emotional Investment", "User Vulnerabilities", ] ) # Ensure types (Model=str, others=float) if "Model" in USER_DF.columns: USER_DF["Model"] = USER_DF["Model"].astype(str) for col in USER_DF.columns: if col != "Model": USER_DF[col] = pd.to_numeric(USER_DF[col], errors="coerce") def init_simple_leaderboard(df: pd.DataFrame): # Show Model + up to 6 metrics by default metrics = [c for c in df.columns if c != "Model"] default_cols = ["Model"] + metrics[:6] if "Model" in df.columns else list(df.columns)[:7] cant_hide = ["Model"] if "Model" in df.columns else [] return Leaderboard( value=df, select_columns=SelectColumns( default_selection=default_cols if default_cols else list(df.columns), cant_deselect=cant_hide, label="Select Columns to Display:", ), search_columns=["Model"] if "Model" in df.columns else [], hide_columns=[], # keep everything visible filter_columns=[], # add later if you introduce typed columns to filter on interactive=False, ) # ----------------------------- # UI # ----------------------------- demo = gr.Blocks(css=custom_css) with demo: gr.HTML(TITLE) gr.Markdown(INTRODUCTION_TEXT, elem_classes="markdown-text") with gr.Tabs(elem_classes="tab-buttons"): with gr.TabItem("📊 INTIMA Leaderboard", elem_id="intima-leaderboard-tab", id=0): _ = init_simple_leaderboard(USER_DF) with gr.TabItem("📝 About", elem_id="about-tab", id=1): gr.Markdown(LLM_BENCHMARKS_TEXT, elem_classes="markdown-text") with gr.Row(): with gr.Accordion("📙 Citation", open=False): gr.Textbox( value=CITATION_BUTTON_TEXT, label=CITATION_BUTTON_LABEL, lines=20, elem_id="citation-button", show_copy_button=True, ) if __name__ == "__main__": demo.launch()