from apscheduler.schedulers.background import BackgroundScheduler from content import ( TITLE, BANNER, INTRO, INTRO2, CITATION_BUTTON_LABEL, CITATION_BUTTON_TEXT, ) import gradio as gr import pandas as pd import json df = pd.DataFrame() def update_data(): global df with open("leaderboard/leaderboard.json", "r") as f: data = json.load(f) df = create_dataframe(data) def filter_columns(df, show_all): if show_all: return df else: mean_columns = [col for col in df.columns if "Mean" in col or col == "Model"] return df[mean_columns] def create_dataframe(data): rows = [] for model in data["models"]: name_with_link = f'{model["name"]}' row = {"Model": name_with_link} row.update(model["scores"]) rows.append(row) df = pd.DataFrame(rows) df = df.sort_values(by="Mean", ascending=False) for col in df.columns: if "Mean" in col: df[col] = df[col].apply(lambda x: f"{x}") return df def update_display(show_all, df): filtered_df = filter_columns(df, show_all) legend_visibility = gr.update(visible=show_all) return filtered_df, legend_visibility update_data() demo = gr.Blocks() with demo: gr.HTML(TITLE) gr.HTML(BANNER) gr.Markdown(INTRO, elem_classes="markdown-text") gr.Markdown(INTRO2, elem_classes="markdown-text") show_all_columns = gr.Checkbox(label="Show all datasets", value=True) column_widths = ["125px"] + [None] * (len(df.columns) - 1) data_display = gr.Dataframe(df, datatype="markdown", column_widths=column_widths) legend_accordion = gr.Accordion("Legend:", open=False, visible=True) with legend_accordion: gr.Markdown( """ - Exist.: Existence - Count: Count - Posi.: Position - Col.: Color - Post.: Poster - Cel.: Celebrity - Sce.: Scene - Lan.: Landmark - Art.: Artwork - Com. R.: Commonsense Reasoning - Code: Code Reasoning - Num.: Numerical Calculation - Tran.: Text Translation - OCR: OCR """ ) with gr.Row(): with gr.Accordion("📙 Citation", open=False): citation_button = gr.Textbox( value=CITATION_BUTTON_TEXT, label=CITATION_BUTTON_LABEL, elem_id="citation-button", lines=10, show_copy_button=True, ) show_all_columns.change( update_display, inputs=[show_all_columns, gr.State(df)], outputs=[data_display, legend_accordion], ) scheduler = BackgroundScheduler() scheduler.add_job(update_data, "cron", hour=0) # Update data once a day at midnight scheduler.start() demo.queue(default_concurrency_limit=40).launch()