File size: 6,440 Bytes
c78ecd5
 
952c4f4
 
 
 
 
 
 
 
 
 
c78ecd5
 
 
 
 
952c4f4
 
 
 
c78ecd5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
952c4f4
 
 
c78ecd5
 
 
 
 
 
 
 
952c4f4
 
46bec0c
952c4f4
bd81d17
424b04d
 
06fad3c
c78ecd5
46bec0c
952c4f4
bd81d17
424b04d
 
06fad3c
c78ecd5
46bec0c
c78ecd5
bd81d17
424b04d
 
06fad3c
c78ecd5
46bec0c
c78ecd5
bd81d17
424b04d
 
06fad3c
c78ecd5
46bec0c
c78ecd5
bd81d17
424b04d
 
06fad3c
c78ecd5
46bec0c
c78ecd5
bd81d17
424b04d
 
06fad3c
c78ecd5
46bec0c
c78ecd5
bd81d17
424b04d
 
06fad3c
c78ecd5
46bec0c
c78ecd5
bd81d17
424b04d
6144248
06fad3c
c78ecd5
46bec0c
c78ecd5
bd81d17
424b04d
 
06fad3c
c78ecd5
952c4f4
 
 
c78ecd5
952c4f4
 
 
c78ecd5
952c4f4
 
 
 
 
 
 
 
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
import os 
import base64
import gradio as gr
import pandas as pd
from apscheduler.schedulers.background import BackgroundScheduler

from src.about import (
    CITATION_BUTTON_LABEL,
    CITATION_BUTTON_TEXT,
)
from src.display.css_html_js import custom_css

from src.envs import API, REPO_ID
current_dir = os.path.dirname(os.path.realpath(__file__))

with open(os.path.join(current_dir, "images/pb_logo.png"), "rb") as image_file:
    main_logo = base64.b64encode(image_file.read()).decode('utf-8')

def restart_space():
    API.restart_space(repo_id=REPO_ID)

TITLE="""
# ProteinBench: A Holistic Evaluation of Protein Foundation Models"""

INTRO_TEXT="""
Recent years have witnessed a surge in the development of protein foundation models, 
significantly improving performance in protein prediction and generative tasks 
ranging from 3D structure prediction and protein design to conformational dynamics. 
However, the capabilities and limitations associated with these models remain poorly understood due to the absence of a unified evaluation framework.
To fill this gap, we introduce <b>ProteinBench</b>, 
a holistic evaluation framework designed to enhance the transparency of protein foundation models. 
Our approach consists of three key components: 
(i) A taxonomic classification of tasks that broadly encompass the main challenges in the protein domain, 
based on the relationships between different protein modalities; 
(ii) A multi-metric evaluation approach that assesses performance across four key dimensions: quality, novelty, diversity, and robustness; 
and (iii) In-depth analyses from various user objectives, providing a holistic view of model performance. 
Our comprehensive evaluation of protein foundation models reveals several key findings that shed light on their current capabilities and limitations. 
To promote transparency and facilitate further research, we release the evaluation dataset, code, and a public leaderboard publicly for further analysis 
and a general modular toolkit. We intend for ProteinBench to be a living benchmark for establishing a standardized, 
in-depth evaluation framework for protein foundation models, driving their development and application while fostering collaboration within the field.

## [Paper](https://www.arxiv.org/pdf/2409.06744) | [Website](https://proteinbench.github.io/)
"""

# ### Space initialisation

demo = gr.Blocks(css=custom_css)
with demo:
    with gr.Row():
        with gr.Column(scale=6):
            gr.Markdown(TITLE)
    with gr.Row():
        with gr.Column(scale=6):
            gr.Markdown(INTRO_TEXT)
        with gr.Column(scale=1):
            gr.HTML(f'<img src="data:image/jpeg;base64,{main_logo}" style="width:16em;vertical-align: middle"/>')

    with gr.Tabs(elem_classes="tab-buttons") as tabs:
        with gr.TabItem("πŸ† Inverse Folding Leaderboard", elem_id='inverse-folding-table', id=0,):
            with gr.Row():
                inverse_folding_table = gr.components.DataFrame(
                    pd.read_csv('data/inverse_folding.csv'),
                    height=1000,
                    interactive=False,
                )
        with gr.TabItem("πŸ† Structure Design Leaderboard", elem_id='structure-design-table', id=1,):
            with gr.Row():
                inverse_folding_table = gr.components.DataFrame(
                    pd.read_csv('data/structure_design.csv'),
                    height=1000,
                    interactive=False,
                )
        with gr.TabItem("πŸ† Sequence Design Leaderboard", elem_id='sequence-design-table', id=2,):
            with gr.Row():
                inverse_folding_table = gr.components.DataFrame(
                    pd.read_csv('data/sequence_design.csv'),
                    height=1000,
                    interactive=False,
                )
        with gr.TabItem("πŸ† Sequence-Structure Co-Design Leaderboard", elem_id='co-design-table', id=3,):
            with gr.Row():
                inverse_folding_table = gr.components.DataFrame(
                    pd.read_csv('data/co_design.csv'),
                    height=1000,
                    interactive=False,
                )
        with gr.TabItem("πŸ† Motif Scaffolding Leaderboard", elem_id='motif-scaffolding-table', id=4,):
            with gr.Row():
                inverse_folding_table = gr.components.DataFrame(
                    pd.read_csv('data/motif_scaffolding.csv'),
                    height=1000,
                    interactive=False,
                )
        with gr.TabItem("πŸ† Antibody Design Leaderboard", elem_id='antibody-design-table', id=5,):
            with gr.Row():
                inverse_folding_table = gr.components.DataFrame(
                    pd.read_csv('data/antibody_design.csv'),
                    height=1000,
                    interactive=False,
                )
        with gr.TabItem("πŸ… Protein Folding Leaderboard", elem_id='protein-folding-table', id=6,):
            with gr.Row():
                inverse_folding_table = gr.components.DataFrame(
                    pd.read_csv('data/protein_folding.csv'),
                    height=1000,
                    interactive=False,
                )
        with gr.TabItem("πŸ… Multi-State Prediction Leaderboard", elem_id='multi-state-prediction-table', id=7,):
            with gr.Row():
                inverse_folding_table = gr.components.DataFrame(
                    pd.read_csv('data/multi_state_prediction.csv'),
                    height=100000,
                    interactive=False,
                )
        with gr.TabItem("πŸ… Conformation Prediction Leaderboard", elem_id='conformation-prediction-table', id=8,):
            with gr.Row():
                inverse_folding_table = gr.components.DataFrame(
                    pd.read_csv('data/conformation_prediction.csv'),
                    height=1000,
                    interactive=False,
                )


    with gr.Row():
        with gr.Accordion("πŸ“™ Citation", open=True):
            citation_button = gr.Textbox(
                value=CITATION_BUTTON_TEXT,
                label=CITATION_BUTTON_LABEL,
                lines=9,
                elem_id="citation-button",
                show_copy_button=True,
            )

scheduler = BackgroundScheduler()
scheduler.add_job(restart_space, "interval", seconds=1800)
scheduler.start()
demo.queue(default_concurrency_limit=40).launch()