Spaces:
Sleeping
Sleeping
File size: 5,683 Bytes
0893185 d35349d 38ee4b2 d35349d 0893185 d35349d 0893185 d35349d 0893185 d35349d 0893185 d35349d 0893185 d35349d 0893185 d35349d b026a94 d35349d 0893185 d35349d 0893185 d35349d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
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 build_overall_tab_cols(df, categories):
# Overall 页面希望把 Real/Game 的 '-Overall' 放在子项之后
real = categories.get("Real-World", {"overall": None, "subs": []})
game = categories.get("Game-World", {"overall": None, "subs": []})
base = FIXED_COLUMNS.copy()
rest = [c for c in df.columns if c not in base]
ordered = base + ["Overall"]
# real: 子项 -> overall
ordered += [c for c in real.get("subs", []) if c in df.columns]
if real.get("overall") in df.columns:
ordered += [real["overall"]]
# game: 子项 -> overall
ordered += [c for c in game.get("subs", []) if c in df.columns]
if game.get("overall") in df.columns:
ordered += [game["overall"]]
# 其它剩余列
ordered += [c for c in rest if c not in ordered]
return ordered
# 初始化
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]
# Gradio interface
demo = gr.Blocks(css=custom_css, title="UniREditBench 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:
# Overall leaderboard
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
)
overall_cols = build_overall_tab_cols(df, categories)
leaderboard_table = gr.Dataframe(
value=df[overall_cols],
headers=list(df[overall_cols].columns),
datatype=["html" if col in ["Model Name (clickable)","HF Model"] else "str" for col in df[overall_cols].columns],
interactive=False,
wrap=False
)
selected_columns_overall.change(
fn=lambda selected, d: d[[*FIXED_COLUMNS, *[c for c in d.columns if c in selected and c not in FIXED_COLUMNS]]],
inputs=[selected_columns_overall, gr.State(value=df[overall_cols])],
outputs=leaderboard_table
)
# 每个大类 leaderboard(保持 overall 在前,便于分组)
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=lambda selected, d: d[[*FIXED_COLUMNS, *[c for c in d.columns if c in selected and c not in FIXED_COLUMNS]]],
inputs=[selected_columns_cat, gr.State(value=cat_df)],
outputs=leaderboard_table_cat
)
# Citation
with gr.Row():
with gr.Column():
gr.Markdown("## 📙 Citation")
gr.Markdown("If you use UniREditBench 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()
|