File size: 2,047 Bytes
bf80dbc
 
 
1ab1abd
dacee7e
7ba6910
 
63c13c0
dacee7e
bf80dbc
7ba6910
1ab1abd
 
 
7ba6910
 
1ab1abd
7ba6910
bf80dbc
dacee7e
 
1ab1abd
 
 
 
 
 
 
 
 
 
 
 
7ba6910
 
 
 
 
1ab1abd
 
7ba6910
1ab1abd
 
 
 
 
7ba6910
1ab1abd
 
7ba6910
1ab1abd
 
 
 
 
 
7ba6910
1ab1abd
bf80dbc
 
 
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
import gradio as gr
import pandas as pd

# Expanded dataframe with hidden columns
leaderboard_df = (
    pd.read_csv("results.csv", usecols=["dataset", "modality", "model", "score", "se", "metric"])
    .rename(columns={"dataset": "Dataset", "modality": "Approach", "model": "Model", "metric": "Metric"})
    .round(3)
)

def filter_leaderboard(dataset_choice, approach_choice, metric_choice):
    """Filter dataframe based on selections and drop filter columns"""
    filtered_df = leaderboard_df[
        (leaderboard_df['Dataset'] == dataset_choice) &
        (leaderboard_df['Approach'] == approach_choice) &
        (leaderboard_df['Metric'] == metric_choice)
    ]
    return filtered_df.drop(columns=['Dataset', 'Approach', 'Metric']).sort_values('score', ascending=False)

with gr.Blocks(title="TraitGym Leaderboard") as demo:
    gr.Markdown("## πŸ† TraitGym Leaderboard")
    
    with gr.Row():
        dataset_filter = gr.Radio(
            choices=["Mendelian traits", "Complex traits"],
            value="Mendelian traits",
            label="Select Dataset"
        )
        approach_filter = gr.Radio(
            choices=["Zero-shot", "Linear probing"],
            value="Zero-shot",
            label="Select Approach"
        )
        metric_filter = gr.Radio(
            choices=["AUPRC", "AUPRC_by_chrom_weighted_average"],
            value="AUPRC",
            label="Select Metric"
        )
    
    leaderboard = gr.Dataframe(
        headers=["Model", "score", "se"],
        datatype=["str", "number", "number"],
        interactive=False,
    )
    
    # Connect filters to update the table
    for filter in [dataset_filter, approach_filter, metric_filter]:
        filter.change(
            fn=filter_leaderboard,
            inputs=[dataset_filter, approach_filter, metric_filter],
            outputs=leaderboard
        )
    
    # Initial load
    demo.load(
        fn=filter_leaderboard,
        inputs=[dataset_filter, approach_filter, metric_filter],
        outputs=leaderboard
    )

demo.launch()