Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -202,71 +202,84 @@ with block:
|
|
| 202 |
# 1οΈβ£ Leaderboard tab
|
| 203 |
# ------------------------------------------------------------------
|
| 204 |
with gr.TabItem("π
PROBE Leaderboard", elem_id="probe-benchmark-tab-table", id=1):
|
| 205 |
-
|
|
|
|
| 206 |
gr.Image(
|
| 207 |
value="./src/data/PROBE_workflow_figure.jpg",
|
| 208 |
show_label=False,
|
| 209 |
height=1000,
|
| 210 |
container=False,
|
| 211 |
)
|
| 212 |
-
|
| 213 |
gr.Markdown(
|
| 214 |
"## For detailed explanations of the metrics and benchmarks, please refer to the π About tab.",
|
| 215 |
elem_classes="leaderboard-note",
|
| 216 |
)
|
| 217 |
-
|
| 218 |
-
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 222 |
benchmark_metric_mapping = {
|
| 223 |
-
"Semantic Similarity Inference":
|
| 224 |
-
"Ontology-based Protein Function Prediction": [m for m in metric_names if m.startswith(
|
| 225 |
-
"Drug Target Protein Family Classification":
|
| 226 |
-
"Protein-Protein Binding Affinity Estimation":
|
| 227 |
}
|
| 228 |
-
|
| 229 |
-
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 236 |
benchmark_type_selector_lb = gr.CheckboxGroup(
|
| 237 |
choices=list(benchmark_metric_mapping.keys()),
|
| 238 |
-
label="
|
| 239 |
-
value=
|
| 240 |
interactive=True,
|
| 241 |
)
|
| 242 |
-
|
| 243 |
-
|
| 244 |
-
|
| 245 |
-
|
| 246 |
-
|
| 247 |
-
|
| 248 |
-
|
| 249 |
-
|
| 250 |
-
|
| 251 |
-
|
| 252 |
-
baseline_header = ["Method"] + metric_names
|
| 253 |
-
baseline_datatype = ['markdown'] + ['number'] * len(metric_names)
|
| 254 |
-
|
| 255 |
-
styler = build_leaderboard_styler()
|
| 256 |
-
|
| 257 |
with gr.Row():
|
| 258 |
with gr.Column(scale=1):
|
| 259 |
gr.Markdown(
|
| 260 |
"""
|
| 261 |
## Method-name colours
|
| 262 |
<span style='color:green; font-weight:bold; font-size:1.1rem;'>π’β Classical representations
|
| 263 |
-
<span style='color:blue; font-weight:bold; font-size:1.1rem;'>π΅β Small-scale Protein
|
| 264 |
-
<span style='color:red; font-weight:bold; font-size:1.1rem;'>π΄β Large-scale Protein
|
| 265 |
-
<span style='color:orange;font-weight:bold; font-size:1.1rem;'>π β Multimodal Protein
|
| 266 |
""",
|
| 267 |
elem_classes="leaderboard-note",
|
| 268 |
)
|
| 269 |
-
|
| 270 |
with gr.Column(scale=1):
|
| 271 |
gr.Markdown(
|
| 272 |
"""
|
|
@@ -287,23 +300,36 @@ with block:
|
|
| 287 |
elem_classes="leaderboard-note",
|
| 288 |
)
|
| 289 |
|
| 290 |
-
|
| 291 |
-
|
| 292 |
-
|
| 293 |
-
|
| 294 |
-
|
| 295 |
-
|
| 296 |
-
|
| 297 |
-
|
| 298 |
-
|
| 299 |
-
|
| 300 |
-
|
| 301 |
-
|
| 302 |
-
|
| 303 |
-
|
| 304 |
-
|
| 305 |
-
|
| 306 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 307 |
outputs=data_component,
|
| 308 |
)
|
| 309 |
benchmark_type_selector_lb.change(
|
|
@@ -311,12 +337,6 @@ with block:
|
|
| 311 |
inputs=[benchmark_type_selector_lb],
|
| 312 |
outputs=leaderboard_metric_selector,
|
| 313 |
)
|
| 314 |
-
leaderboard_metric_selector.change(
|
| 315 |
-
update_leaderboard,
|
| 316 |
-
inputs=[leaderboard_method_selector, leaderboard_metric_selector],
|
| 317 |
-
outputs=data_component,
|
| 318 |
-
)
|
| 319 |
-
|
| 320 |
# ------------------------------------------------------------------
|
| 321 |
# 2οΏ½οΏ½β£ Visualisation tab
|
| 322 |
# ------------------------------------------------------------------
|
|
|
|
| 202 |
# 1οΈβ£ Leaderboard tab
|
| 203 |
# ------------------------------------------------------------------
|
| 204 |
with gr.TabItem("π
PROBE Leaderboard", elem_id="probe-benchmark-tab-table", id=1):
|
| 205 |
+
|
| 206 |
+
# ββ header ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 207 |
gr.Image(
|
| 208 |
value="./src/data/PROBE_workflow_figure.jpg",
|
| 209 |
show_label=False,
|
| 210 |
height=1000,
|
| 211 |
container=False,
|
| 212 |
)
|
|
|
|
| 213 |
gr.Markdown(
|
| 214 |
"## For detailed explanations of the metrics and benchmarks, please refer to the π About tab.",
|
| 215 |
elem_classes="leaderboard-note",
|
| 216 |
)
|
| 217 |
+
|
| 218 |
+
# ββ data prep ββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 219 |
+
leaderboard = get_baseline_df(None, None)
|
| 220 |
+
method_names = leaderboard["Method"].unique().tolist()
|
| 221 |
+
metric_names = leaderboard.columns.tolist(); metric_names.remove("Method")
|
| 222 |
+
|
| 223 |
+
base_method_names = [m for m in method_names if m in base_methods]
|
| 224 |
+
user_method_names = [m for m in method_names if m not in base_methods]
|
| 225 |
+
|
| 226 |
benchmark_metric_mapping = {
|
| 227 |
+
"Semantic Similarity Inference": [m for m in metric_names if m.startswith("sim_")],
|
| 228 |
+
"Ontology-based Protein Function Prediction": [m for m in metric_names if m.startswith("func")],
|
| 229 |
+
"Drug Target Protein Family Classification": [m for m in metric_names if m.startswith("fam_")],
|
| 230 |
+
"Protein-Protein Binding Affinity Estimation": [m for m in metric_names if m.startswith("aff_")],
|
| 231 |
}
|
| 232 |
+
|
| 233 |
+
# ββ callback helper ββββββββββββββββββββββββββββββββββββββββββ
|
| 234 |
+
def update_leaderboard_combined(selected_base, selected_user, selected_metrics):
|
| 235 |
+
selected_methods = (selected_base or []) + (selected_user or [])
|
| 236 |
+
return build_leaderboard_styler(selected_methods, selected_metrics)
|
| 237 |
+
|
| 238 |
+
# ββ collapsible selectors ββββββββββββββββββββββββββββββββββββ
|
| 239 |
+
with gr.Accordion("π¦ Base methods", open=False):
|
| 240 |
+
leaderboard_method_selector_base = gr.CheckboxGroup(
|
| 241 |
+
choices=base_method_names,
|
| 242 |
+
label="Base Methods",
|
| 243 |
+
value=base_method_names, # β all selected
|
| 244 |
+
interactive=True,
|
| 245 |
+
)
|
| 246 |
+
|
| 247 |
+
with gr.Accordion("π οΈ User-defined methods", open=False):
|
| 248 |
+
leaderboard_method_selector_user = gr.CheckboxGroup(
|
| 249 |
+
choices=user_method_names,
|
| 250 |
+
label="User Methods",
|
| 251 |
+
value=[], # β none selected
|
| 252 |
+
interactive=True,
|
| 253 |
+
)
|
| 254 |
+
|
| 255 |
benchmark_type_selector_lb = gr.CheckboxGroup(
|
| 256 |
choices=list(benchmark_metric_mapping.keys()),
|
| 257 |
+
label="Benchmark Types",
|
| 258 |
+
value=list(benchmark_metric_mapping.keys()), # β all selected
|
| 259 |
interactive=True,
|
| 260 |
)
|
| 261 |
+
|
| 262 |
+
with gr.Accordion("π Metrics", open=False):
|
| 263 |
+
leaderboard_metric_selector = gr.CheckboxGroup(
|
| 264 |
+
choices=metric_names,
|
| 265 |
+
label="Select Metrics",
|
| 266 |
+
value=metric_names, # β all selected
|
| 267 |
+
interactive=True,
|
| 268 |
+
)
|
| 269 |
+
|
| 270 |
+
# ββ colour / shading legend (unchanged) ββββββββββββββββββββββ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 271 |
with gr.Row():
|
| 272 |
with gr.Column(scale=1):
|
| 273 |
gr.Markdown(
|
| 274 |
"""
|
| 275 |
## Method-name colours
|
| 276 |
<span style='color:green; font-weight:bold; font-size:1.1rem;'>π’β Classical representations
|
| 277 |
+
<span style='color:blue; font-weight:bold; font-size:1.1rem;'>π΅β Small-scale Protein LMs
|
| 278 |
+
<span style='color:red; font-weight:bold; font-size:1.1rem;'>π΄β Large-scale Protein LMs
|
| 279 |
+
<span style='color:orange;font-weight:bold; font-size:1.1rem;'>π β Multimodal Protein LMs
|
| 280 |
""",
|
| 281 |
elem_classes="leaderboard-note",
|
| 282 |
)
|
|
|
|
| 283 |
with gr.Column(scale=1):
|
| 284 |
gr.Markdown(
|
| 285 |
"""
|
|
|
|
| 300 |
elem_classes="leaderboard-note",
|
| 301 |
)
|
| 302 |
|
| 303 |
+
gr.Markdown("### If a method name ends with (`^`), it suggests potential suspicions of data leakage related to **similarity**, **function**, or **family** benchmarks.")
|
| 304 |
+
# ββ dataframe ββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 305 |
+
styler = build_leaderboard_styler(base_method_names, metric_names)
|
| 306 |
+
|
| 307 |
+
data_component = gr.Dataframe(
|
| 308 |
+
value=styler,
|
| 309 |
+
headers=["Method"] + metric_names,
|
| 310 |
+
type="pandas",
|
| 311 |
+
datatype=["markdown"] + ["number"] * len(metric_names),
|
| 312 |
+
interactive=False,
|
| 313 |
+
elem_id="leaderboard-table",
|
| 314 |
+
pinned_columns=1,
|
| 315 |
+
max_height=1000,
|
| 316 |
+
show_fullscreen_button=True,
|
| 317 |
+
)
|
| 318 |
+
|
| 319 |
+
# ββ callbacks ββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 320 |
+
leaderboard_method_selector_base.change(
|
| 321 |
+
update_leaderboard_combined,
|
| 322 |
+
inputs=[leaderboard_method_selector_base, leaderboard_method_selector_user, leaderboard_metric_selector],
|
| 323 |
+
outputs=data_component,
|
| 324 |
+
)
|
| 325 |
+
leaderboard_method_selector_user.change(
|
| 326 |
+
update_leaderboard_combined,
|
| 327 |
+
inputs=[leaderboard_method_selector_base, leaderboard_method_selector_user, leaderboard_metric_selector],
|
| 328 |
+
outputs=data_component,
|
| 329 |
+
)
|
| 330 |
+
leaderboard_metric_selector.change(
|
| 331 |
+
update_leaderboard_combined,
|
| 332 |
+
inputs=[leaderboard_method_selector_base, leaderboard_method_selector_user, leaderboard_metric_selector],
|
| 333 |
outputs=data_component,
|
| 334 |
)
|
| 335 |
benchmark_type_selector_lb.change(
|
|
|
|
| 337 |
inputs=[benchmark_type_selector_lb],
|
| 338 |
outputs=leaderboard_metric_selector,
|
| 339 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 340 |
# ------------------------------------------------------------------
|
| 341 |
# 2οΏ½οΏ½β£ Visualisation tab
|
| 342 |
# ------------------------------------------------------------------
|