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() | |