File size: 6,722 Bytes
1c33a6b
281711d
2982a51
281711d
 
1bcb06b
281711d
 
1bcb06b
 
956b725
1c33a6b
c6e6b77
f2bcfea
1c33a6b
 
 
3c0df4a
 
 
 
 
8e2e988
1c33a6b
 
 
1bcb06b
 
 
 
be51a4e
1bcb06b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2982a51
82c5741
50e75cf
82c5741
1bcb06b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b8be656
1bcb06b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
281711d
 
 
1bcb06b
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
from pathlib import Path
import json
import pandas as pd

import gradio as gr
from gradio_leaderboard import Leaderboard
from evaluation import evaluate_problem

from utils import read_submission_from_hub, write_results
from about import ASSAY_LIST

def evaluate_boundary(filename):
    print(filename)
    local_path = read_submission_from_hub(filename)
    with Path(local_path).open("r") as f:
        raw = f.read()
        data_dict = json.loads(raw)

    try:
        result = evaluate_problem(data_dict['problem_type'], local_path)
    except Exception as e:
        raise gr.Error(f'Evaluation failed: {e}. No results written to results dataset.')
    
    write_results(data_dict, result)
    return

def get_leaderboard_table(assay: str | None = None):
    # ds = load_dataset(results_repo, split='train', download_mode="force_redownload")
    # full_df = pd.DataFrame(ds)
    # full_df['full results'] = full_df['result_filename'].apply(lambda x: make_boundary_clickable(x)).astype(str)

    # full_df.rename(columns={'submission_time': 'submission time', 'problem_type': 'problem type'}, inplace=True)
    # to_show = full_df.copy(deep=True)
    # to_show = to_show[to_show['user'] != 'test']
    # to_show = to_show[['submission time', 'problem type', 'user', 'score', 'full results']]
    # to_show['user'] = to_show['user'].apply(lambda x: make_user_clickable(x)).astype(str)
    
    # Previously hosted on HF hub, local for now
    column_order = ["model", "feature", "assay", "spearman"]
    df = pd.read_csv("data/metrics_all.csv")
    if assay is not None:
        df = df[df['assay'] == assay]
    df = df[column_order]
    print(df.head())
    return df

def get_leaderboard_object(assay: str | None = None):
    df = get_leaderboard_table(assay=assay)
    filter_columns = ["model"]
    if assay is None:
        filter_columns.append("assay")
    Leaderboard(
        value=df,
        datatype=["str", "str", "str", "number"],
        select_columns=["model", "assay", "feature", "spearman"],
        # hide_columns=["spearman_abs"],
        filter_columns=filter_columns,
        every=60,
        render=True
    )

def show_output_box(message):
    return gr.update(value=message, visible=True)

# 
# def gradio_interface() -> gr.Blocks:
with gr.Blocks() as demo:
    gr.Markdown("## Welcome to the Ginkgo Antibody Developability Benchmark Leaderboard!")
    with gr.Tabs(elem_classes="tab-buttons"):
        with gr.TabItem("🚀 Leaderboard", elem_id="abdev-benchmark-tab-table"):                
            gr.Markdown("# Antibody Developability Benchmark Leaderboard")

            get_leaderboard_object()

            # gr.Markdown("Extra info here")

        # Procedurally make these 5 tabs
        for assay in ASSAY_LIST:
            with gr.TabItem(assay, elem_id=f"abdev-benchmark-tab-table"):
                gr.Markdown(f"# {assay}")
                get_leaderboard_object(assay=assay)
        
        with gr.TabItem("❔About", elem_id="abdev-benchmark-tab-table"):
            gr.Markdown(
                """
                ## About
                Some info here
            """
            )

            # dropdown = gr.Dropdown(choices=filenames, label="Choose a file")
            # plot_output = gr.Plot()

        # with gr.TabItem("🔍 Visualize", elem_id="boundary-benchmark-tab-table"):
        #     ds = load_dataset(results_repo, split='train', download_mode="force_redownload")
        #     full_df = pd.DataFrame(ds)
        #     filenames = full_df['result_filename'].to_list()
        #     with gr.Row():
        #         with gr.Column():
        #             dropdown = gr.Dropdown(choices=filenames, label="Choose a leaderboard entry", value=filenames[0])
        #             rld_btn = gr.Button(value="Reload")

        #         with gr.Column():
        #             plot = gr.Plot()

        #     def get_boundary_vis(selected_file):
        #         local_path = read_result_from_hub(selected_file)
        #         with Path(local_path).open("r") as f:
        #             raw = f.read()
        #             data_dict = json.loads(raw)
        #             boundary_json = data_dict['boundary_json']

        #         if data_dict['problem_type'] == 'mhd_stable':
        #             raise gr.Error("Sorry this isn't implemented for mhd_stable submissions yet!")
        #         else:
        #             boundary = load_boundary(boundary_json)

        #         vis = make_visual(boundary)
        #         return vis

        #     demo.load(get_boundary_vis, dropdown, plot)
        #     rld_btn.click(get_boundary_vis, dropdown, plot)

        # with gr.TabItem("✉️ Submit", elem_id="boundary-benchmark-tab-table"):
        #     gr.Markdown(
        #         """
        #     # Plasma Boundary Evaluation Submission
        #     Upload your plasma boundary JSON and select the problem type to get your score.
        #     """
        #     )
        #     filename = gr.State(value=None) 
        #     eval_state = gr.State(value=None) 
        #     user_state = gr.State(value=None)

        #     # gr.LoginButton()

        #     with gr.Row():
        #         with gr.Column():
        #             problem_type = gr.Dropdown(PROBLEM_TYPES, label="Problem Type")
        #             username_input = gr.Textbox(
        #                 label="Username", 
        #                 placeholder="Enter your Hugging Face username",
        #                 info="This will be displayed on the leaderboard."
        #             )
        #         with gr.Column():
        #             boundary_file = gr.File(label="Boundary JSON File (.json)")

        #     username_input.change(
        #         fn=lambda x: x if x.strip() else None,
        #         inputs=username_input,
        #         outputs=user_state
        #     )                       

        #     submit_btn = gr.Button("Evaluate")
        #     message = gr.Textbox(label="Status", lines=1, visible=False)
        #     # help message
        #     gr.Markdown("If you have issues with submission or using the leaderboard, please start a discussion in the Community tab of this Space.")
            
        #     submit_btn.click(
        #         submit_boundary,
        #         inputs=[problem_type, boundary_file, user_state],
        #         outputs=[message, filename],
        #     ).then(
        #         fn=show_output_box,
        #         inputs=[message],
        #         outputs=[message],
        #     ).then(
        #         fn=evaluate_boundary,
        #         inputs=[filename],
        #         outputs=[eval_state]
        #     )


if __name__ == "__main__":
    demo.launch()