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 |
# ------------------------------------------------------------------
|