import gradio as gr from gradio_leaderboard import Leaderboard, ColumnFilter, SelectColumns import pandas as pd from apscheduler.schedulers.background import BackgroundScheduler from huggingface_hub import snapshot_download from gradio.components.textbox import Textbox from gradio.components.dataframe import Dataframe from gradio.components.checkboxgroup import CheckboxGroup # from fastchat.serve.monitor.monitor import build_leaderboard_tab, build_basic_stats_tab, basic_component_values, leader_component_values from src.about import ( CITATION_BUTTON_LABEL, CITATION_BUTTON_TEXT, EVALUATION_QUEUE_TEXT, INTRODUCTION_TEXT, LLM_BENCHMARKS_TEXT, TITLE, LINKS, ) from src.display.css_html_js import ( custom_css, CSS_EXTERNAL, JS_EXTERNAL, ) from src.display.utils import ( AutoEvalColumn, fields, ) from src.envs import ( API, EVAL_DETAILED_RESULTS_PATH, EVAL_RESULTS_PATH, EVAL_DETAILED_RESULTS_REPO, 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: print(EVAL_DETAILED_RESULTS_REPO) snapshot_download( repo_id=EVAL_DETAILED_RESULTS_REPO, local_dir=EVAL_DETAILED_RESULTS_PATH, repo_type="dataset", tqdm_class=None, etag_timeout=30, token=TOKEN, ) except Exception: restart_space() try: print(EVAL_RESULTS_PATH) 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(RESULTS_REPO) def GET_DEFAULT_TEXTBOX(): return gr.Textbox("", placeholder="🔍 Search Models... [press enter]", label="Filter Models by Name") def GET_DEFAULT_CHECKBOX(): print("Choices:", [c.name for c in fields(AutoEvalColumn) if not c.hidden]) return gr.CheckboxGroup( choices=[c.name for c in fields(AutoEvalColumn) if not c.hidden], label="Select Columns to Display", value=[c.name for c in fields(AutoEvalColumn) if c.displayed_by_default], ) def init_leaderboard(dataframes): subsets = list(dataframes.keys()) with gr.Row(): selected_subset = gr.Dropdown(choices=subsets, label="Select Dataset Subset", value=subsets[-1]) research_textbox = GET_DEFAULT_TEXTBOX() selected_columns = GET_DEFAULT_CHECKBOX() data = dataframes[subsets[-1]] with gr.Row(): datatype = [c.type for c in fields(AutoEvalColumn)] df = gr.Dataframe(data, datatype=datatype, type="pandas") def refresh(subset): global LEADERBOARD_DF LEADERBOARD_DF = get_leaderboard_df(RESULTS_REPO) default_columns = [c.name for c in fields(AutoEvalColumn) if c.displayed_by_default] return update_data(subset, None, default_columns), GET_DEFAULT_TEXTBOX(), GET_DEFAULT_CHECKBOX() def update_data(subset, search_term, selected_columns): print("Subset:", subset) print("Search Term:", search_term) print("Selected Columns:", selected_columns) filtered_data = dataframes[subset] if search_term: filtered_data = filtered_data[dataframes[subset]["Model Name"].str.contains(search_term, case=False)] filtered_data.sort_values(by="Total", ascending=False, inplace=True) selected_columns = [c.name for c in fields(AutoEvalColumn) if c.name in selected_columns] selected_data = filtered_data[selected_columns] return gr.DataFrame( selected_data, type="pandas", datatype=[c.type for c in fields(AutoEvalColumn) if c.name in selected_columns], ) with gr.Row(): refresh_button = gr.Button("Refresh") refresh_button.click( refresh, inputs=[ selected_subset, ], outputs=[df, research_textbox, selected_columns], concurrency_limit=20, ) selected_subset.change(update_data, inputs=[selected_subset, research_textbox, selected_columns], outputs=df) research_textbox.submit(update_data, inputs=[selected_subset, research_textbox, selected_columns], outputs=df) selected_columns.change(update_data, inputs=[selected_subset, research_textbox, selected_columns], outputs=df) def init_detailed_results(): with gr.Row(): gr.HTML( """\ """ ) HEAD = "".join( [f'' for css in CSS_EXTERNAL] + [f'' for js in JS_EXTERNAL] ) demo = gr.Blocks(css=custom_css, head=HEAD) with demo: gr.HTML(TITLE) gr.HTML(LINKS) gr.Markdown(INTRODUCTION_TEXT, elem_classes="markdown-text") with gr.Tabs(elem_classes="tab-buttons") as tabs: with gr.TabItem("🏅 LiveBench Results", elem_id="llm-benchmark-tab-table", id=0): init_leaderboard(LEADERBOARD_DF) with gr.TabItem("📝 Detailed Results", elem_id="llm-benchmark-tab-table", id=2): init_detailed_results() # with gr.Row(): # with gr.Accordion("📙 Citation", open=False): # citation_button = gr.Textbox( # value=CITATION_BUTTON_TEXT, # label=CITATION_BUTTON_LABEL, # lines=20, # 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()