anonymoussssssss's picture
Initial commit
672654b verified
import gradio as gr
from apscheduler.schedulers.background import BackgroundScheduler
from huggingface_hub import snapshot_download
from src.about import (
CITATION_BUTTON_LABEL,
CITATION_BUTTON_TEXT,
INTRODUCTION_TEXT,
LLM_BENCHMARKS_TEXT,
TITLE,
SUBMIT_TEXT
)
from src.display.css_html_js import custom_css
from src.display.utils import (
BENCHMARK_COLS,
COLS,
AutoEvalColumn,
fields,
)
from src.envs import API, EVAL_RESULTS_PATH, REPO_ID, RESULTS_REPO, TOKEN
from src.populate import get_leaderboard_df
def restart_space():
API.restart_space(repo_id=REPO_ID)
### Space initialisation
try:
snapshot_download(
repo_id=RESULTS_REPO, local_dir=EVAL_RESULTS_PATH, repo_type="dataset", tqdm_class=None, etag_timeout=30, token=TOKEN
)
except Exception:
restart_space()
LEADERBOARD_DF = get_leaderboard_df(EVAL_RESULTS_PATH, COLS, BENCHMARK_COLS)
def init_leaderboard(dataframe, css):
if dataframe is None or dataframe.empty:
raise ValueError("Leaderboard DataFrame is empty or None.")
with gr.Blocks(css=css) as app:
# Title
gr.Markdown("# Leaderboard")
# Select Columns - Full width, as CheckboxGroup
select_columns = gr.CheckboxGroup(
label="Select Columns to Display:",
choices=[c.name for c in fields(AutoEvalColumn)],
value=[c.name for c in fields(AutoEvalColumn) if c.displayed_by_default],
elem_id="select-columns"
)
# Search Columns - Full width
search_columns = gr.Textbox(
label="Search",
placeholder=f"Search in {', '.join([AutoEvalColumn.model_name.name])}...",
lines=1,
elem_id="search-columns"
)
# Initialize DataFrame with only default-selected columns
default_columns = [c.name for c in fields(AutoEvalColumn) if c.displayed_by_default]
initial_dataframe = dataframe[default_columns].copy()
# Leaderboard Component
leaderboard = gr.Dataframe(
value=initial_dataframe,
datatype=[c.type for c in fields(AutoEvalColumn) if c.name in default_columns],
headers=default_columns,
wrap=True,
interactive=False,
max_height=800
)
# Update function
def update_leaderboard(search, selected_cols):
df = dataframe.copy()
# Apply search
if search:
df = df[df[AutoEvalColumn.model_name.name].str.contains(search, case=False, na=False)]
# Filter columns to display
visible_cols = [col for col in selected_cols if col in df.columns]
df = df[visible_cols]
return df
# Connect inputs to update leaderboard
search_columns.change(
fn=update_leaderboard,
inputs=[search_columns, select_columns],
outputs=leaderboard
)
select_columns.change(
fn=update_leaderboard,
inputs=[search_columns, select_columns],
outputs=leaderboard
)
return app
demo = gr.Blocks(fill_height=False, css=custom_css)
with demo:
gr.HTML(TITLE)
gr.Markdown(INTRODUCTION_TEXT, elem_classes="markdown-text")
with gr.Tabs(elem_classes="tab-buttons") as tabs:
with gr.TabItem("πŸ… LLM Benchmark", elem_id="llm-benchmark-tab-table", id=0):
leaderboard = init_leaderboard(LEADERBOARD_DF, css=custom_css)
with gr.TabItem("πŸ“ About", elem_id="llm-benchmark-tab-table", id=2):
gr.Markdown(LLM_BENCHMARKS_TEXT, elem_classes="markdown-text")
with gr.TabItem("πŸš€ Submit here! ", elem_id="llm-benchmark-tab-table", id=3):
with gr.Row():
gr.Markdown("# βœ‰οΈβœ¨ Submit your model here!", elem_classes="markdown-text")
with gr.Row():
gr.Markdown(SUBMIT_TEXT, 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_copy_button=True,
)
scheduler = BackgroundScheduler()
scheduler.add_job(restart_space, "interval", seconds=1800)
scheduler.start()
demo.queue(default_concurrency_limit=40).launch()