|
import gradio as gr |
|
|
|
__all__ = ["block", "make_clickable_model", "make_clickable_user", "get_submissions"] |
|
|
|
|
|
import numpy as np |
|
import pandas as pd |
|
|
|
from constants import * |
|
from src.auto_leaderboard.model_metadata_type import ModelType |
|
|
|
global data_component, filter_component, ref_dic |
|
|
|
|
|
def upload_file(files): |
|
file_paths = [file.name for file in files] |
|
return file_paths |
|
|
|
|
|
def read_xlsx_leaderboard(): |
|
df_dict = pd.read_excel(XLSX_DIR, sheet_name=None) |
|
return df_dict |
|
|
|
|
|
def get_specific_df(sheet_name): |
|
df = read_xlsx_leaderboard()[sheet_name].sort_values(by="Overall", ascending=False) |
|
return df |
|
|
|
|
|
ref_df = get_specific_df("base_order") |
|
ref_dic = {} |
|
for id, row in ref_df.iterrows(): |
|
|
|
ref_dic[ |
|
str(row["Model"]) |
|
] = f'<a href="{row["Link"]}" target="_blank" style="color: var(--link-text-color); text-decoration: underline;text-decoration-style: dotted;">{row["Model"]}</a>' |
|
|
|
def wrap_model(func): |
|
def wrapper(*args, **kwargs): |
|
df = func(*args, **kwargs) |
|
df["Model"] = df["Model"].apply(lambda x: ref_dic[x]) |
|
cols_to_round = df.select_dtypes(include=[np.number]).columns.difference( |
|
["Model"] |
|
) |
|
df[cols_to_round] = df[cols_to_round].apply(lambda x: np.round(x, 2)) |
|
return df |
|
|
|
return wrapper |
|
|
|
|
|
@wrap_model |
|
def get_base_zh_df(): |
|
return get_specific_df("base-zh") |
|
|
|
|
|
@wrap_model |
|
def get_base_en_df(): |
|
return get_specific_df("base-en") |
|
|
|
|
|
@wrap_model |
|
def get_attack_zh_df(): |
|
return get_specific_df("attack-zh") |
|
|
|
|
|
@wrap_model |
|
def get_attack_en_df(): |
|
return get_specific_df("attack-en") |
|
|
|
|
|
def build_leaderboard( |
|
TABLE_INTRODUCTION, TAX_COLUMNS, get_chinese_df, get_english_df |
|
): |
|
|
|
gr.Markdown(TABLE_INTRODUCTION, elem_classes="markdown-text") |
|
data_spilt_radio = gr.Radio( |
|
choices=["Chinses", "English"], |
|
value="base", |
|
label=SELECT_SET_INTRO, |
|
) |
|
|
|
|
|
data_component = gr.components.Dataframe( |
|
value=get_chinese_df, |
|
headers=OVERALL_INFO + TAX_COLUMNS, |
|
type="pandas", |
|
datatype=["markdown"] + ["number"] + ["number"] * len(TAX_COLUMNS), |
|
interactive=False, |
|
visible=True, |
|
wrap=True, |
|
column_widths=[300] + [100] + [200] * len(TAX_COLUMNS), |
|
) |
|
|
|
def on_data_split_radio(seleted_split): |
|
if "Chinese" in seleted_split: |
|
updated_data = get_chinese_df() |
|
if "English" in seleted_split: |
|
updated_data = get_english_df() |
|
current_columns = data_component.headers |
|
current_datatype = data_component.datatype |
|
filter_component = gr.components.Dataframe( |
|
value=updated_data, |
|
headers=current_columns, |
|
type="pandas", |
|
datatype=current_datatype, |
|
interactive=False, |
|
visible=True, |
|
wrap=True, |
|
column_widths=[300] + [100] + [200] * (len(current_columns) - 2), |
|
) |
|
return filter_component |
|
|
|
|
|
data_spilt_radio.change( |
|
fn=on_data_split_radio, inputs=data_spilt_radio, outputs=data_component |
|
) |
|
|
|
|
|
def build_demo(): |
|
block = gr.Blocks() |
|
|
|
with block: |
|
gr.Markdown(LEADERBOARD_INTRODUCTION) |
|
|
|
with gr.Tabs(elem_classes="tab-buttons") as tabs: |
|
|
|
with gr.TabItem( |
|
"Base Risk Prompt Set Results", |
|
elem_id="evalcrafter-benchmark-tab-table", |
|
id=0, |
|
): |
|
build_leaderboard( |
|
TABLE_INTRODUCTION_1, |
|
get_base_zh_df, |
|
get_base_en_df |
|
) |
|
|
|
with gr.TabItem( |
|
"Base Risk Prompt Set Results", |
|
elem_id="evalcrafter-benchmark-tab-table", |
|
id=1, |
|
): |
|
build_leaderboard( |
|
TABLE_INTRODUCTION_2, |
|
get_attack_zh_df, |
|
get_attack_en_df |
|
) |
|
|
|
with gr.TabItem("📝 About", elem_id="evalcrafter-benchmark-tab-table", id=3): |
|
gr.Markdown(LEADERBORAD_INFO, elem_classes="markdown-text") |
|
|
|
with gr.Row(): |
|
with gr.Accordion("📙 Citation", open=True): |
|
citation_button = gr.Textbox( |
|
value=CITATION_BUTTON_TEXT, |
|
label=CITATION_BUTTON_LABEL, |
|
lines=10, |
|
elem_id="citation-button", |
|
show_label=True, |
|
show_copy_button=True, |
|
) |
|
|
|
block.launch(share=True) |
|
|
|
if __name__ == "__main__": |
|
build_demo() |
|
|