Jasonkim8652 commited on
Commit
fab94cf
·
verified ·
1 Parent(s): c59de83

update taxonomy to 2x5 (DesignApproach x MolecularSubject), fix diversity formula, real scores

Browse files
Files changed (2) hide show
  1. app.py +49 -57
  2. leaderboard_data.json +132 -253
app.py CHANGED
@@ -28,42 +28,30 @@ ADMIN_PASSWORD = os.environ.get("BDB_ADMIN_PASSWORD", "")
28
  # ═══════════════════════════════════════════════════════════════════
29
 
30
  PAPER_URL = "#"
31
- GITHUB_URL = "https://github.com/biodesignbench/biodesignbench"
32
- HF_URL = "https://huggingface.co/spaces/biodesignbench/leaderboard"
33
 
34
 
35
  # ═══════════════════════════════════════════════════════════════════
36
  # Taxonomy & scoring constants
37
  # ═══════════════════════════════════════════════════════════════════
38
 
39
- TASK_TYPES = [
40
- "de_novo_binder",
41
- "sequence_optimization",
42
- "de_novo_backbone",
43
- "complex_engineering",
44
- "conformational_design",
45
- ]
46
- TASK_TYPE_LABELS = {
47
- "de_novo_binder": "De Novo Binder",
48
- "sequence_optimization": "Seq Optimization",
49
- "de_novo_backbone": "De Novo Backbone",
50
- "complex_engineering": "Complex Eng.",
51
- "conformational_design": "Conformational",
52
  }
53
- BIO_CONTEXTS = ["ab", "enz", "sig", "str", "flu"]
54
- BIO_CONTEXT_LABELS = {
55
- "ab": "Antibody",
56
- "enz": "Enzyme",
57
- "sig": "Signaling",
58
- "str": "Structural",
59
- "flu": "Fluorescent",
60
  }
61
  VALID_CELLS = {
62
- "de_novo_binder": {"ab", "enz", "sig"},
63
- "sequence_optimization": {"ab", "enz", "sig", "str", "flu"},
64
- "de_novo_backbone": {"str"},
65
- "complex_engineering": {"enz", "sig", "str"},
66
- "conformational_design": {"enz", "sig", "str", "flu"},
67
  }
68
  COMPONENTS = [
69
  "approach",
@@ -415,7 +403,7 @@ def build_leaderboard_table(
415
 
416
 
417
  def build_heatmap(entry: dict) -> str:
418
- """HTML heatmap table for one agent across 17 taxonomy cells."""
419
  ts = entry.get("taxonomy_scores", {})
420
  TH = (
421
  "background:#0f172a;color:white;padding:0.6rem 0.8rem;"
@@ -427,15 +415,15 @@ def build_heatmap(entry: dict) -> str:
427
  )
428
 
429
  rows = []
430
- for tt in TASK_TYPES:
431
  cells = [
432
  f'<td style="{TD};text-align:left;font-weight:600;'
433
- f'background:#f8fafc">{TASK_TYPE_LABELS[tt]}</td>'
434
  ]
435
  vals = []
436
- for bc in BIO_CONTEXTS:
437
- if bc in VALID_CELLS[tt]:
438
- val = ts.get(tt, {}).get(bc)
439
  bg = _heat_color(val)
440
  text = f"{val:.0f}" if val is not None else "\u2014"
441
  cells.append(f'<td style="{TD};background:{bg}">{text}</td>')
@@ -454,9 +442,9 @@ def build_heatmap(entry: dict) -> str:
454
  )
455
  rows.append(f'<tr>{"".join(cells)}</tr>')
456
 
457
- bc_headers = "".join(
458
- f'<th style="{TH}">{BIO_CONTEXT_LABELS[bc]}</th>'
459
- for bc in BIO_CONTEXTS
460
  )
461
 
462
  return f"""
@@ -464,8 +452,8 @@ def build_heatmap(entry: dict) -> str:
464
  border-radius:10px;overflow:hidden;
465
  box-shadow:0 1px 3px rgba(0,0,0,0.08)">
466
  <thead><tr>
467
- <th style="{TH};text-align:left">Task Type</th>
468
- {bc_headers}
469
  <th style="{TH}">Avg</th>
470
  </tr></thead>
471
  <tbody>{''.join(rows)}</tbody>
@@ -586,8 +574,8 @@ def build_about() -> str:
586
  </div>
587
  <div {stat_box}>
588
  <div style="font-size:1.8rem;font-weight:800;color:#0f172a">
589
- 17</div>
590
- <div style="font-size:0.78rem;color:#64748b">taxonomy cells</div>
591
  </div>
592
  <div {stat_box}>
593
  <div style="font-size:1.8rem;font-weight:800;color:#0f172a">
@@ -679,8 +667,8 @@ Response:
679
  <strong>Novelty (5 pts)</strong> &mdash; sequence identity to
680
  reference (lower identity = more novel = higher score)</p>
681
  <p {p}>
682
- <strong>Diversity (10 pts)</strong> &mdash; number and pairwise
683
- diversity of generated designs</p>
684
  </div>
685
 
686
  <div {card}>
@@ -704,32 +692,36 @@ Response:
704
 
705
 
706
  def chart_taxonomy_bar(entry: dict) -> go.Figure:
707
- """Bar chart of average score per task type for one agent."""
708
  ts = entry.get("taxonomy_scores", {})
709
- avgs = []
710
- for tt in TASK_TYPES:
711
- vals = [v for v in ts.get(tt, {}).values() if v is not None]
712
- avgs.append(sum(vals) / len(vals) if vals else 0)
713
 
714
- fig = go.Figure(
715
- go.Bar(
716
- x=[TASK_TYPE_LABELS[t] for t in TASK_TYPES],
717
- y=avgs,
718
- marker_color="rgba(49,130,206,0.7)",
719
- marker_line_width=0,
720
- text=[f"{v:.1f}" for v in avgs],
 
 
 
 
 
721
  textposition="auto",
722
- )
723
- )
724
  mode = entry.get("mode") or "\u2014"
725
  fig.update_layout(
726
  **_base_layout(
727
  title=dict(
728
- text=f"{entry['agent_name']} ({mode}) \u2014 Score by Task Type",
729
  font_size=14,
730
  ),
731
  yaxis=dict(range=[0, 100], title="Average Score"),
732
  xaxis=dict(title=""),
 
733
  height=300,
734
  )
735
  )
 
28
  # ═══════════════════════════════════════════════════════════════════
29
 
30
  PAPER_URL = "#"
31
+ GITHUB_URL = "https://github.com/RomeroLab/BioDesignBench"
32
+ HF_URL = "https://huggingface.co/spaces/RomeroLab-Duke/BioDesignBench-Leaderboard"
33
 
34
 
35
  # ═══════════════════════════════════════════════════════════════════
36
  # Taxonomy & scoring constants
37
  # ═══════════════════════════════════════════════════════════════════
38
 
39
+ DESIGN_APPROACHES = ["de_novo", "redesign"]
40
+ APPROACH_LABELS = {
41
+ "de_novo": "De Novo",
42
+ "redesign": "Redesign",
 
 
 
 
 
 
 
 
 
43
  }
44
+ MOLECULAR_SUBJECTS = ["antibody", "enzyme", "binder", "scaffold", "fluorescent_protein"]
45
+ SUBJECT_LABELS = {
46
+ "antibody": "Antibody",
47
+ "enzyme": "Enzyme",
48
+ "binder": "Binder",
49
+ "scaffold": "Scaffold",
50
+ "fluorescent_protein": "Fluorescent Protein",
51
  }
52
  VALID_CELLS = {
53
+ "de_novo": {"antibody", "enzyme", "binder", "scaffold", "fluorescent_protein"},
54
+ "redesign": {"antibody", "enzyme", "scaffold", "fluorescent_protein"},
 
 
 
55
  }
56
  COMPONENTS = [
57
  "approach",
 
403
 
404
 
405
  def build_heatmap(entry: dict) -> str:
406
+ """HTML heatmap table for one agent across 2×5 taxonomy cells."""
407
  ts = entry.get("taxonomy_scores", {})
408
  TH = (
409
  "background:#0f172a;color:white;padding:0.6rem 0.8rem;"
 
415
  )
416
 
417
  rows = []
418
+ for ap in DESIGN_APPROACHES:
419
  cells = [
420
  f'<td style="{TD};text-align:left;font-weight:600;'
421
+ f'background:#f8fafc">{APPROACH_LABELS[ap]}</td>'
422
  ]
423
  vals = []
424
+ for subj in MOLECULAR_SUBJECTS:
425
+ if subj in VALID_CELLS[ap]:
426
+ val = ts.get(ap, {}).get(subj)
427
  bg = _heat_color(val)
428
  text = f"{val:.0f}" if val is not None else "\u2014"
429
  cells.append(f'<td style="{TD};background:{bg}">{text}</td>')
 
442
  )
443
  rows.append(f'<tr>{"".join(cells)}</tr>')
444
 
445
+ subj_headers = "".join(
446
+ f'<th style="{TH}">{SUBJECT_LABELS[s]}</th>'
447
+ for s in MOLECULAR_SUBJECTS
448
  )
449
 
450
  return f"""
 
452
  border-radius:10px;overflow:hidden;
453
  box-shadow:0 1px 3px rgba(0,0,0,0.08)">
454
  <thead><tr>
455
+ <th style="{TH};text-align:left">Approach</th>
456
+ {subj_headers}
457
  <th style="{TH}">Avg</th>
458
  </tr></thead>
459
  <tbody>{''.join(rows)}</tbody>
 
574
  </div>
575
  <div {stat_box}>
576
  <div style="font-size:1.8rem;font-weight:800;color:#0f172a">
577
+ 2×5</div>
578
+ <div style="font-size:0.78rem;color:#64748b">taxonomy matrix</div>
579
  </div>
580
  <div {stat_box}>
581
  <div style="font-size:1.8rem;font-weight:800;color:#0f172a">
 
667
  <strong>Novelty (5 pts)</strong> &mdash; sequence identity to
668
  reference (lower identity = more novel = higher score)</p>
669
  <p {p}>
670
+ <strong>Diversity (10 pts)</strong> &mdash; 65% pairwise sequence
671
+ diversity + 35% positional entropy across designs</p>
672
  </div>
673
 
674
  <div {card}>
 
692
 
693
 
694
  def chart_taxonomy_bar(entry: dict) -> go.Figure:
695
+ """Grouped bar chart of scores by approach × subject for one agent."""
696
  ts = entry.get("taxonomy_scores", {})
697
+ subjects = MOLECULAR_SUBJECTS
698
+ colors = {"de_novo": "rgba(49,130,206,0.7)", "redesign": "rgba(237,137,54,0.7)"}
 
 
699
 
700
+ fig = go.Figure()
701
+ for ap in DESIGN_APPROACHES:
702
+ vals = []
703
+ for s in subjects:
704
+ v = ts.get(ap, {}).get(s)
705
+ vals.append(v if v is not None else 0)
706
+ fig.add_trace(go.Bar(
707
+ name=APPROACH_LABELS[ap],
708
+ x=[SUBJECT_LABELS[s] for s in subjects],
709
+ y=vals,
710
+ marker_color=colors[ap],
711
+ text=[f"{v:.0f}" if v else "" for v in vals],
712
  textposition="auto",
713
+ ))
714
+
715
  mode = entry.get("mode") or "\u2014"
716
  fig.update_layout(
717
  **_base_layout(
718
  title=dict(
719
+ text=f"{entry['agent_name']} ({mode}) \u2014 Score by Approach \u00d7 Subject",
720
  font_size=14,
721
  ),
722
  yaxis=dict(range=[0, 100], title="Average Score"),
723
  xaxis=dict(title=""),
724
+ barmode="group",
725
  height=300,
726
  )
727
  )
leaderboard_data.json CHANGED
@@ -18,29 +18,18 @@
18
  "diversity": 10.0
19
  },
20
  "taxonomy_scores": {
21
- "de_novo_binder": {
22
- "ab": 74.0,
23
- "bnd": 82.0,
24
- "scf": 92.0
25
- },
26
- "conformational_design": {
27
- "enz": 92.0,
28
- "fp": 96.0,
29
- "scf": 81.0
30
- },
31
- "complex_engineering": {
32
- "enz": 75.0,
33
- "bnd": 84.0,
34
- "scf": 78.0
35
- },
36
- "de_novo_backbone": {
37
- "scf": 98.0
38
- },
39
- "sequence_optimization": {
40
- "enz": 99.0,
41
- "fp": 97.0,
42
- "ab": 98.0,
43
- "scf": 98.0
44
  }
45
  },
46
  "tasks_completed": 76,
@@ -66,29 +55,18 @@
66
  "diversity": 2.6
67
  },
68
  "taxonomy_scores": {
69
- "de_novo_binder": {
70
- "ab": 57.0,
71
- "bnd": 71.0,
72
- "scf": 70.0
73
- },
74
- "conformational_design": {
75
- "enz": 68.0,
76
- "fp": 59.0,
77
- "scf": 50.0
78
- },
79
- "complex_engineering": {
80
- "enz": 40.0,
81
- "bnd": 76.0,
82
- "scf": 67.0
83
- },
84
- "de_novo_backbone": {
85
- "scf": 84.0
86
- },
87
- "sequence_optimization": {
88
- "enz": 48.0,
89
- "fp": 51.0,
90
- "ab": 65.0,
91
- "scf": 54.0
92
  }
93
  },
94
  "tasks_completed": 76,
@@ -114,29 +92,18 @@
114
  "diversity": 3.4
115
  },
116
  "taxonomy_scores": {
117
- "de_novo_binder": {
118
- "ab": 55.0,
119
- "bnd": 63.0,
120
- "scf": 56.0
121
- },
122
- "conformational_design": {
123
- "enz": 48.0,
124
- "fp": 56.0,
125
- "scf": 54.0
126
- },
127
- "complex_engineering": {
128
- "enz": 56.0,
129
- "bnd": 66.0,
130
- "scf": 60.0
131
- },
132
- "de_novo_backbone": {
133
- "scf": 37.0
134
- },
135
- "sequence_optimization": {
136
- "enz": 61.0,
137
- "fp": 66.0,
138
- "ab": 83.0,
139
- "scf": 62.0
140
  }
141
  },
142
  "tasks_completed": 76,
@@ -162,29 +129,18 @@
162
  "diversity": 2.0
163
  },
164
  "taxonomy_scores": {
165
- "de_novo_binder": {
166
- "ab": 45.0,
167
- "bnd": 56.0,
168
- "scf": 67.0
169
- },
170
- "conformational_design": {
171
- "enz": 38.0,
172
- "fp": 27.0,
173
- "scf": 35.0
174
- },
175
- "complex_engineering": {
176
- "enz": 57.0,
177
- "bnd": 64.0,
178
- "scf": 64.0
179
- },
180
- "de_novo_backbone": {
181
- "scf": 11.0
182
- },
183
- "sequence_optimization": {
184
- "enz": 70.0,
185
- "fp": 67.0,
186
- "ab": 57.0,
187
- "scf": 75.0
188
  }
189
  },
190
  "tasks_completed": 76,
@@ -210,29 +166,18 @@
210
  "diversity": 3.0
211
  },
212
  "taxonomy_scores": {
213
- "de_novo_binder": {
214
- "ab": 46.0,
215
- "bnd": 53.0,
216
- "scf": 47.0
217
- },
218
- "conformational_design": {
219
- "enz": 44.0,
220
- "fp": 62.0,
221
- "scf": 38.0
222
- },
223
- "complex_engineering": {
224
- "enz": 33.0,
225
- "bnd": 56.0,
226
- "scf": 52.0
227
- },
228
- "de_novo_backbone": {
229
- "scf": 54.0
230
- },
231
- "sequence_optimization": {
232
- "enz": 55.0,
233
- "fp": 41.0,
234
- "ab": 69.0,
235
- "scf": 72.0
236
  }
237
  },
238
  "tasks_completed": 76,
@@ -258,29 +203,18 @@
258
  "diversity": 3.1
259
  },
260
  "taxonomy_scores": {
261
- "de_novo_binder": {
262
- "ab": 43.0,
263
- "bnd": 55.0,
264
- "scf": 54.0
265
- },
266
- "conformational_design": {
267
- "enz": 32.0,
268
- "fp": 40.0,
269
- "scf": 39.0
270
- },
271
- "complex_engineering": {
272
- "enz": 43.0,
273
- "bnd": 57.0,
274
- "scf": 53.0
275
- },
276
- "de_novo_backbone": {
277
- "scf": 45.0
278
- },
279
- "sequence_optimization": {
280
- "enz": 48.0,
281
- "fp": 52.0,
282
- "ab": 71.0,
283
- "scf": 62.0
284
  }
285
  },
286
  "tasks_completed": 76,
@@ -306,29 +240,18 @@
306
  "diversity": 2.2
307
  },
308
  "taxonomy_scores": {
309
- "de_novo_binder": {
310
- "ab": 42.0,
311
- "bnd": 53.0,
312
- "scf": 38.0
313
- },
314
- "conformational_design": {
315
- "enz": 42.0,
316
- "fp": 47.0,
317
- "scf": 35.0
318
- },
319
- "complex_engineering": {
320
- "enz": 48.0,
321
- "bnd": 66.0,
322
- "scf": 53.0
323
- },
324
- "de_novo_backbone": {
325
- "scf": 33.0
326
- },
327
- "sequence_optimization": {
328
- "enz": 48.0,
329
- "fp": 60.0,
330
- "ab": 67.0,
331
- "scf": 18.0
332
  }
333
  },
334
  "tasks_completed": 76,
@@ -354,29 +277,18 @@
354
  "diversity": 1.7
355
  },
356
  "taxonomy_scores": {
357
- "de_novo_binder": {
358
- "ab": 32.0,
359
- "bnd": 44.0,
360
- "scf": 36.0
361
- },
362
- "conformational_design": {
363
- "enz": 17.0,
364
- "fp": 56.0,
365
- "scf": 41.0
366
- },
367
- "complex_engineering": {
368
- "enz": 44.0,
369
- "bnd": 55.0,
370
- "scf": 37.0
371
- },
372
- "de_novo_backbone": {
373
- "scf": 44.0
374
- },
375
- "sequence_optimization": {
376
- "enz": 40.0,
377
- "fp": 51.0,
378
- "ab": 58.0,
379
- "scf": 20.0
380
  }
381
  },
382
  "tasks_completed": 76,
@@ -402,29 +314,18 @@
402
  "diversity": 0.9
403
  },
404
  "taxonomy_scores": {
405
- "de_novo_binder": {
406
- "ab": 32.0,
407
- "bnd": 41.0,
408
- "scf": 45.0
409
- },
410
- "conformational_design": {
411
- "enz": 22.0,
412
- "fp": 55.0,
413
- "scf": 40.0
414
- },
415
- "complex_engineering": {
416
- "enz": 3.0,
417
- "bnd": 49.0,
418
- "scf": 26.0
419
- },
420
- "de_novo_backbone": {
421
- "scf": 45.0
422
- },
423
- "sequence_optimization": {
424
- "enz": 44.0,
425
- "fp": 52.0,
426
- "ab": 52.0,
427
- "scf": 49.0
428
  }
429
  },
430
  "tasks_completed": 76,
@@ -450,29 +351,18 @@
450
  "diversity": 1.5
451
  },
452
  "taxonomy_scores": {
453
- "de_novo_binder": {
454
- "ab": 22.0,
455
- "bnd": 36.0,
456
- "scf": 28.0
457
- },
458
- "conformational_design": {
459
- "enz": 8.0,
460
- "fp": 9.0,
461
- "scf": 10.0
462
- },
463
- "complex_engineering": {
464
- "enz": 12.0,
465
- "bnd": 35.0,
466
- "scf": 22.0
467
- },
468
- "de_novo_backbone": {
469
- "scf": 21.0
470
- },
471
- "sequence_optimization": {
472
- "enz": 33.0,
473
- "fp": 36.0,
474
- "ab": 53.0,
475
- "scf": 22.0
476
  }
477
  },
478
  "tasks_completed": 76,
@@ -498,29 +388,18 @@
498
  "diversity": 1.6
499
  },
500
  "taxonomy_scores": {
501
- "de_novo_binder": {
502
- "ab": 28.0,
503
- "bnd": 35.0,
504
- "scf": 20.0
505
- },
506
- "conformational_design": {
507
- "enz": 16.0,
508
- "fp": 22.0,
509
- "scf": 6.0
510
- },
511
- "complex_engineering": {
512
- "enz": 0.0,
513
- "bnd": 32.0,
514
- "scf": 27.0
515
- },
516
- "de_novo_backbone": {
517
- "scf": 21.0
518
- },
519
- "sequence_optimization": {
520
- "enz": 30.0,
521
- "fp": 33.0,
522
- "ab": 52.0,
523
- "scf": 15.0
524
  }
525
  },
526
  "tasks_completed": 76,
 
18
  "diversity": 10.0
19
  },
20
  "taxonomy_scores": {
21
+ "redesign": {
22
+ "antibody": 78,
23
+ "enzyme": 96,
24
+ "fluorescent_protein": 98,
25
+ "scaffold": 86
26
+ },
27
+ "de_novo": {
28
+ "binder": 83,
29
+ "enzyme": 80,
30
+ "fluorescent_protein": 85,
31
+ "scaffold": 87,
32
+ "antibody": 74
 
 
 
 
 
 
 
 
 
 
 
33
  }
34
  },
35
  "tasks_completed": 76,
 
55
  "diversity": 2.6
56
  },
57
  "taxonomy_scores": {
58
+ "redesign": {
59
+ "antibody": 52,
60
+ "enzyme": 50,
61
+ "fluorescent_protein": 53,
62
+ "scaffold": 52
63
+ },
64
+ "de_novo": {
65
+ "binder": 74,
66
+ "enzyme": 46,
67
+ "fluorescent_protein": 61,
68
+ "scaffold": 68,
69
+ "antibody": 65
 
 
 
 
 
 
 
 
 
 
 
70
  }
71
  },
72
  "tasks_completed": 76,
 
92
  "diversity": 3.4
93
  },
94
  "taxonomy_scores": {
95
+ "redesign": {
96
+ "antibody": 57,
97
+ "enzyme": 58,
98
+ "fluorescent_protein": 62,
99
+ "scaffold": 57
100
+ },
101
+ "de_novo": {
102
+ "binder": 64,
103
+ "enzyme": 56,
104
+ "fluorescent_protein": 61,
105
+ "scaffold": 51,
106
+ "antibody": 60
 
 
 
 
 
 
 
 
 
 
 
107
  }
108
  },
109
  "tasks_completed": 76,
 
129
  "diversity": 2.0
130
  },
131
  "taxonomy_scores": {
132
+ "redesign": {
133
+ "antibody": 41,
134
+ "enzyme": 69,
135
+ "fluorescent_protein": 52,
136
+ "scaffold": 66
137
+ },
138
+ "de_novo": {
139
+ "binder": 59,
140
+ "enzyme": 28,
141
+ "fluorescent_protein": 61,
142
+ "scaffold": 40,
143
+ "antibody": 52
 
 
 
 
 
 
 
 
 
 
 
144
  }
145
  },
146
  "tasks_completed": 76,
 
166
  "diversity": 3.0
167
  },
168
  "taxonomy_scores": {
169
+ "redesign": {
170
+ "antibody": 51,
171
+ "enzyme": 52,
172
+ "fluorescent_protein": 50,
173
+ "scaffold": 60
174
+ },
175
+ "de_novo": {
176
+ "binder": 54,
177
+ "enzyme": 40,
178
+ "fluorescent_protein": 40,
179
+ "scaffold": 48,
180
+ "antibody": 46
 
 
 
 
 
 
 
 
 
 
 
181
  }
182
  },
183
  "tasks_completed": 76,
 
203
  "diversity": 3.1
204
  },
205
  "taxonomy_scores": {
206
+ "redesign": {
207
+ "antibody": 42,
208
+ "enzyme": 46,
209
+ "fluorescent_protein": 46,
210
+ "scaffold": 56
211
+ },
212
+ "de_novo": {
213
+ "binder": 56,
214
+ "enzyme": 40,
215
+ "fluorescent_protein": 55,
216
+ "scaffold": 47,
217
+ "antibody": 52
 
 
 
 
 
 
 
 
 
 
 
218
  }
219
  },
220
  "tasks_completed": 76,
 
240
  "diversity": 2.2
241
  },
242
  "taxonomy_scores": {
243
+ "redesign": {
244
+ "antibody": 42,
245
+ "enzyme": 47,
246
+ "fluorescent_protein": 56,
247
+ "scaffold": 32
248
+ },
249
+ "de_novo": {
250
+ "binder": 59,
251
+ "enzyme": 48,
252
+ "fluorescent_protein": 45,
253
+ "scaffold": 39,
254
+ "antibody": 48
 
 
 
 
 
 
 
 
 
 
 
255
  }
256
  },
257
  "tasks_completed": 76,
 
277
  "diversity": 1.7
278
  },
279
  "taxonomy_scores": {
280
+ "redesign": {
281
+ "antibody": 36,
282
+ "enzyme": 37,
283
+ "fluorescent_protein": 54,
284
+ "scaffold": 23
285
+ },
286
+ "de_novo": {
287
+ "binder": 49,
288
+ "enzyme": 38,
289
+ "fluorescent_protein": 41,
290
+ "scaffold": 41,
291
+ "antibody": 33
 
 
 
 
 
 
 
 
 
 
 
292
  }
293
  },
294
  "tasks_completed": 76,
 
314
  "diversity": 0.9
315
  },
316
  "taxonomy_scores": {
317
+ "redesign": {
318
+ "antibody": 30,
319
+ "enzyme": 36,
320
+ "fluorescent_protein": 54,
321
+ "scaffold": 41
322
+ },
323
+ "de_novo": {
324
+ "binder": 44,
325
+ "enzyme": 22,
326
+ "fluorescent_protein": 44,
327
+ "scaffold": 39,
328
+ "antibody": 40
 
 
 
 
 
 
 
 
 
 
 
329
  }
330
  },
331
  "tasks_completed": 76,
 
351
  "diversity": 1.5
352
  },
353
  "taxonomy_scores": {
354
+ "redesign": {
355
+ "antibody": 22,
356
+ "enzyme": 29,
357
+ "fluorescent_protein": 29,
358
+ "scaffold": 21
359
+ },
360
+ "de_novo": {
361
+ "binder": 36,
362
+ "enzyme": 8,
363
+ "fluorescent_protein": 0,
364
+ "scaffold": 19,
365
+ "antibody": 31
 
 
 
 
 
 
 
 
 
 
 
366
  }
367
  },
368
  "tasks_completed": 76,
 
388
  "diversity": 1.6
389
  },
390
  "taxonomy_scores": {
391
+ "redesign": {
392
+ "antibody": 31,
393
+ "enzyme": 26,
394
+ "fluorescent_protein": 32,
395
+ "scaffold": 14
396
+ },
397
+ "de_novo": {
398
+ "binder": 34,
399
+ "enzyme": 8,
400
+ "fluorescent_protein": 0,
401
+ "scaffold": 18,
402
+ "antibody": 30
 
 
 
 
 
 
 
 
 
 
 
403
  }
404
  },
405
  "tasks_completed": 76,