File size: 3,145 Bytes
6dfe615
 
cf6dc04
6dfe615
 
e783f64
cf6dc04
e783f64
e55e1be
 
 
6dfe615
 
e55e1be
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fd5b4cf
 
cf6dc04
 
e783f64
62ef3b8
6dfe615
cf6dc04
62ef3b8
cf6dc04
6dfe615
e783f64
 
 
 
 
e55e1be
fd5b4cf
e55e1be
 
6dfe615
e783f64
 
 
 
 
 
 
 
e55e1be
 
e783f64
 
 
 
6dfe615
cf6dc04
6dfe615
 
cf6dc04
 
fd5b4cf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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 = "<style>table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #ccc; padding: 6px; text-align: center; }</style>"
    table_html += "<table><thead><tr>" + "".join(f"<th>{col}</th>" for col in df.columns) + "</tr></thead><tbody>"
    for _, row in df.iterrows():
        style = row_color(row['Category'])
        row_html = "".join(f"<td>{row[col]}</td>" for col in df.columns)
        table_html += f"<tr style='{style}'>{row_html}</tr>"
    table_html += "</tbody></table>"
    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()