import gradio as gr import pandas as pd from utils import load_all_results def filter_and_sort_leaderboard(category_filters, sort_by="Video-MME", descending=True): df = load_all_results() filtered_df = df[df["Category"].isin(category_filters)] filtered_df = filtered_df.sort_values(by=sort_by, ascending=not descending).reset_index(drop=True) filtered_df.insert(0, "Rank", filtered_df.index + 1) return filtered_df.fillna("-") def render_html_leaderboard(df): def row_color(category): if category == "Proprietary Models": return "background-color: rgba(255, 255, 153, 0.3);" elif category == "Open-source Transformer-based LMMs": return "background-color: rgba(153, 255, 204, 0.3);" elif category == "Open-source Efficient LMMs": return "background-color: rgba(204, 229, 255, 0.3);" return "" table_html = "" table_html += "" + "".join(f"" for col in df.columns) + "" for _, row in df.iterrows(): style = row_color(row['Category']) row_html = "".join(f"" for col in df.columns) table_html += f"{row_html}" table_html += "
{col}
{row[col]}
" return table_html def build_interface(): with gr.Blocks() as demo: gr.Markdown("## 🎥 LVU VLM Leaderboard") gr.Markdown("Benchmarks: Video-MME, MLVU, LVBench, LongVideoBench") with gr.Row(): sort_metric = gr.Dropdown(choices=["Video-MME", "MLVU", "LVBench", "LongVideoBench"], label="Sort by", value="Video-MME") descending = gr.Checkbox(label="Descending", value=True) with gr.Row(): proprietary = gr.Checkbox(label="Proprietary Models", value=True) transformer = gr.Checkbox(label="Open-source Transformer-based LMMs", value=True) efficient = gr.Checkbox(label="Open-source Efficient LMMs", value=True) default_df = filter_and_sort_leaderboard( ["Proprietary Models", "Open-source Transformer-based LMMs", "Open-source Efficient LMMs"], "Video-MME", True ) leaderboard = gr.HTML(value=render_html_leaderboard(default_df)) def update_board(sort_by, descending, proprietary, transformer, efficient): filters = [] if proprietary: filters.append("Proprietary Models") if transformer: filters.append("Open-source Transformer-based LMMs") if efficient: filters.append("Open-source Efficient LMMs") df = filter_and_sort_leaderboard(filters, sort_by, descending) return render_html_leaderboard(df) inputs = [sort_metric, descending, proprietary, transformer, efficient] for inp in inputs: inp.change(fn=update_board, inputs=inputs, outputs=leaderboard) return demo if __name__ == "__main__": demo = build_interface() demo.launch()