| | import gradio as gr |
| | import pandas as pd |
| | from pathlib import Path |
| |
|
| | from src.json_leaderboard import create_leaderboard_df |
| | from src.about import ( |
| | CITATION_BUTTON_TEXT, |
| | INTRODUCTION_TEXT, |
| | LINKS_AND_INFO, |
| | TITLE, |
| | ) |
| | from src.display.css_html_js import custom_css |
| |
|
| | |
| | FIXED_COLUMNS = ["Model Name (clickable)", "Release Date", "HF Model", "Open Source"] |
| |
|
| | def get_json_df(): |
| | """Load the leaderboard DataFrame""" |
| | json_path = Path(__file__).parent / "leaderboard_data.json" |
| | df = create_leaderboard_df(str(json_path)) |
| | return df |
| |
|
| | |
| | def extract_categories_and_subs(df): |
| | """ |
| | 返回 {大类: {"overall": 大类列, "subs": [子类列]}} |
| | 大类列以 '-Overall' 结尾,紧跟其后的列为子类 |
| | """ |
| | category_dict = {} |
| | all_cols = list(df.columns) |
| | skip_cols = set(FIXED_COLUMNS + ["Overall"]) |
| |
|
| | i = 0 |
| | while i < len(all_cols): |
| | col = all_cols[i] |
| | if col.endswith("-Overall") and col not in skip_cols: |
| | cat_name = col.replace("-Overall", "") |
| | subs = [] |
| | j = i + 1 |
| | while j < len(all_cols): |
| | next_col = all_cols[j] |
| | if next_col.endswith("-Overall") or next_col in skip_cols: |
| | break |
| | subs.append(next_col) |
| | j += 1 |
| | category_dict[cat_name] = {"overall": col, "subs": subs} |
| | i += 1 |
| | return category_dict |
| |
|
| | |
| | def filtered_leaderboard(df, selected_columns): |
| | selected_columns = selected_columns or [] |
| | final_cols = FIXED_COLUMNS + [col for col in df.columns if col in selected_columns and col not in FIXED_COLUMNS] |
| | return df[final_cols] |
| |
|
| | |
| | def update_leaderboard_overall(selected_cols, df_overall): |
| | return filtered_leaderboard(df_overall, selected_cols) |
| |
|
| | def update_leaderboard_cat(selected_cols, df_cat): |
| | return filtered_leaderboard(df_cat, selected_cols) |
| |
|
| | |
| | df = get_json_df() |
| | ALL_COLUMNS_ORDERED = list(df.columns) |
| | categories = extract_categories_and_subs(df) |
| |
|
| | |
| | optional_columns = [col for col in df.columns if col not in FIXED_COLUMNS] |
| |
|
| | |
| | demo = gr.Blocks(css=custom_css, title="UniGenBench Leaderboard") |
| |
|
| | with demo: |
| | gr.HTML(TITLE) |
| | gr.HTML(LINKS_AND_INFO) |
| | gr.Markdown(INTRODUCTION_TEXT, elem_classes="markdown-text") |
| |
|
| | with gr.Tabs(elem_classes="tab-buttons") as tabs: |
| | |
| | with gr.TabItem("🏅 Overall Leaderboard", elem_id="tab-overall"): |
| | selected_columns_overall = gr.CheckboxGroup( |
| | choices=optional_columns, |
| | label="Select additional columns to display", |
| | value=optional_columns |
| | ) |
| | leaderboard_table = gr.Dataframe( |
| | value=df[ALL_COLUMNS_ORDERED], |
| | headers=list(df.columns), |
| | datatype=["html" if col in ["Model Name (clickable)","HF Model"] else "str" for col in df.columns], |
| | interactive=False, |
| | wrap=False |
| | ) |
| | selected_columns_overall.change( |
| | fn=update_leaderboard_overall, |
| | inputs=[selected_columns_overall, gr.State(value=df)], |
| | outputs=leaderboard_table |
| | ) |
| |
|
| | |
| | for cat_name, info in categories.items(): |
| | with gr.TabItem(f"🏆 {cat_name}", elem_id=f"tab-{cat_name}"): |
| | cat_cols = [info["overall"]] + info["subs"] |
| | cat_df = df[FIXED_COLUMNS + cat_cols] |
| |
|
| | optional_columns_cat = [col for col in cat_cols if col not in FIXED_COLUMNS] |
| | selected_columns_cat = gr.CheckboxGroup( |
| | choices=optional_columns_cat, |
| | label=f"Select additional columns for {cat_name}", |
| | value=optional_columns_cat |
| | ) |
| | leaderboard_table_cat = gr.Dataframe( |
| | value=cat_df, |
| | headers=list(cat_df.columns), |
| | datatype=["html" if col in ["Model Name (clickable)","HF Model"] else "str" for col in cat_df.columns], |
| | interactive=False, |
| | wrap=False |
| | ) |
| | selected_columns_cat.change( |
| | fn=update_leaderboard_cat, |
| | inputs=[selected_columns_cat, gr.State(value=cat_df)], |
| | outputs=leaderboard_table_cat |
| | ) |
| |
|
| | |
| | with gr.Row(): |
| | with gr.Column(): |
| | gr.Markdown("## 📙 Citation") |
| | gr.Markdown("If you use [UniGenBench]() in your research, please cite our work:") |
| | citation_textbox = gr.Textbox( |
| | value=CITATION_BUTTON_TEXT, |
| | elem_id="citation-textbox", |
| | show_label=False, |
| | interactive=False, |
| | lines=8, |
| | show_copy_button=True |
| | ) |
| |
|
| | if __name__ == "__main__": |
| | demo.launch() |
| |
|