Add new METL models in dropdown

#2
Files changed (1) hide show
  1. app.py +103 -17
app.py CHANGED
@@ -14,6 +14,78 @@ metl_config = AutoConfig.from_pretrained('gitter-lab/METL', trust_remote_code=Tr
14
  metl = AutoModel.from_pretrained('gitter-lab/METL', trust_remote_code=True, cache_dir='./cache')
15
  pdb_path = None
16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  RADIO_CSS = """
18
  #indexing>div {
19
  flex-direction: column;
@@ -275,20 +347,26 @@ def empty_pdb_path(button):
275
  pdb_path = None
276
  return ""
277
 
278
- def load_model(model_id, _):
279
  global metl
280
 
281
- if not isinstance(model_id, str):
282
- return get_color(RED, "Select Model"), gr.Button(interactive=False)
 
 
 
283
 
284
- if model_id.lower() in metl.config.IDENT_UUID_MAP:
285
- metl.load_from_ident(model_id)
286
- elif model_id in metl.config.UUID_URL_MAP:
287
- metl.load_from_uuid(model_id)
288
- else:
289
- return get_color(RED, "Model Load Failed"), gr.Button(interactive=False)
 
 
 
290
 
291
- return get_color(GREEN, f"{model_id} loaded"), gr.Button(interactive=True)
292
 
293
  def update_pdb(variant_modal, indexing):
294
  if len(variant_modal['text']) == 0 and len(variant_modal['files']) == 0:
@@ -322,7 +400,7 @@ def hide_variants(checkbox_values):
322
  def populate_example():
323
  global pdb_path
324
 
325
- model = "metl-l-2m-3d-gb1"
326
  wt = "MQYKLILNGKTLKGETTTEAVDAATAEKVFKQYANDNGVDGEWTYDDATKTFTVTE"
327
  variants = '["T17P,T54F", "V28L,F51A"]'
328
  # "T17P,V28L,F51A,T54F"
@@ -419,12 +497,20 @@ def predict(input_multi_modal, variant_multi_modal, variant_index_type):
419
  return out_str, iframe, checkbox
420
 
421
  with gr.Blocks(css=RADIO_CSS) as demo:
422
- with gr.Row(equal_height=True, elem_id="modelPDBRow"):
423
- with gr.Column(elem_id="modelInputCol"):
424
- metl_model_id = gr.Dropdown(label="METL model IDENT or UUID", choices=list(metl.config.IDENT_UUID_MAP.keys()), allow_custom_value=False)
425
- metl_model_status = gr.HTML(get_color(RED, "Select Model"), elem_id="modelStatus")
426
- with gr.Column():
427
- upload_pdb = gr.File(label="PDB File upload", elem_id="pdbUpload", file_types=[".pdb", ".txt"])
 
 
 
 
 
 
 
 
428
 
429
  with gr.Column():
430
  metl_seq_input = gr.MultimodalTextbox(label="Input Protein Sequence", interactive=True, elem_classes="multiModalText", elem_id="wildTypeSequence")
 
14
  metl = AutoModel.from_pretrained('gitter-lab/METL', trust_remote_code=True, cache_dir='./cache')
15
  pdb_path = None
16
 
17
+ # UUID lookup for models -- used for the dropdown list
18
+ uuid_lookup = {
19
+ "Source / Global / 1D β€” [METL-G-20M-1D] (D72M9aEp)": "D72M9aEp",
20
+ "Source / Global / 3D β€” [METL-G-20M-3D] (Nr9zCKpR)": "Nr9zCKpR",
21
+ "Source / Global / 1D β€” [METL-G-50M-1D] (auKdzzwX)": "auKdzzwX",
22
+ "Source / Global / 3D β€” [METL-G-50M-3D] (6PSAzdfv)": "6PSAzdfv",
23
+ "Source / Local / GFP / 1D β€” [METL-L-2M-1D-GFP] (8gMPQJy4)": "8gMPQJy4",
24
+ "Source / Local / GFP / 3D β€” [METL-L-2M-3D-GFP] (Hr4GNHws)": "Hr4GNHws",
25
+ "Source / Local / DLG4 / 1D β€” [METL-L-2M-1D-DLG4_2022] (8iFoiYw2)": "8iFoiYw2",
26
+ "Source / Local / DLG4 / 3D β€” [METL-L-2M-3D-DLG4_2022] (kt5DdWTa)": "kt5DdWTa",
27
+ "Source / Local / GB1 / 1D β€” [METL-L-2M-1D-GB1] (DMfkjVzT)": "DMfkjVzT",
28
+ "Source / Local / GB1 / 3D β€” [METL-L-2M-3D-GB1] (epegcFiH)": "epegcFiH",
29
+ "Source / Local / GRB2 / 1D β€” [METL-L-2M-1D-GRB2] (kS3rUS7h)": "kS3rUS7h",
30
+ "Source / Local / GRB2 / 3D β€” [METL-L-2M-3D-GRB2] (X7w83g6S)": "X7w83g6S",
31
+ "Source / Local / Pab1 / 1D β€” [METL-L-2M-1D-Pab1] (UKebCQGz)": "UKebCQGz",
32
+ "Source / Local / Pab1 / 3D β€” [METL-L-2M-3D-Pab1] (2rr8V4th)": "2rr8V4th",
33
+ "Source / Local / PTEN / 1D β€” [METL-L-2M-1D-PTEN] (CEMSx7ZC)": "CEMSx7ZC",
34
+ "Source / Local / PTEN / 3D β€” [METL-L-2M-3D-PTEN] (PjxR5LW7)": "PjxR5LW7",
35
+ "Source / Local / TEM-1 / 1D β€” [METL-L-2M-1D-TEM-1] (PREhfC22)": "PREhfC22",
36
+ "Source / Local / TEM-1 / 3D β€” [METL-L-2M-3D-TEM-1] (9ASvszux)": "9ASvszux",
37
+ "Source / Local / Ube4b / 1D β€” [METL-L-2M-1D-Ube4b] (HscFFkAb)": "HscFFkAb",
38
+ "Source / Local / Ube4b / 3D β€” [METL-L-2M-3D-Ube4b] (H48oiNZN)": "H48oiNZN",
39
+ "METL-BIND / Source / Local / GB1 / 3D β€” [METL-BIND-2M-3D-GB1-STANDARD] (K6mw24Rg)": "K6mw24Rg",
40
+ "METL-BIND / Source / Local / GB1 / 3D β€” [METL-BIND-2M-3D-GB1-BINDING] (Bo5wn2SG)": "Bo5wn2SG",
41
+ "Finetuned / Global / GFP / 1D β€” (PeT2D92j)": "PeT2D92j",
42
+ "Finetuned / Global / GFP / 3D β€” (6JBzHpkQ)": "6JBzHpkQ",
43
+ "Finetuned / Global / DLG4-Abundance / 1D β€” (4Rh3WCbG)": "4Rh3WCbG",
44
+ "Finetuned / Global / DLG4-Abundance / 3D β€” (RBtqxzvu)": "RBtqxzvu",
45
+ "Finetuned / Global / DLG4-Binding / 1D β€” (4xbuC5y7)": "4xbuC5y7",
46
+ "Finetuned / Global / DLG4-Binding / 3D β€” (BuvxgE2x)": "BuvxgE2x",
47
+ "Finetuned / Global / GB1 / 1D β€” (dAndZfJ4)": "dAndZfJ4",
48
+ "Finetuned / Global / GB1 / 3D β€” (9vSB3DRM)": "9vSB3DRM",
49
+ "Finetuned / Global / GRB2-Abundance / 1D β€” (HenDpDWe)": "HenDpDWe",
50
+ "Finetuned / Global / GRB2-Abundance / 3D β€” (dDoCCvfr)": "dDoCCvfr",
51
+ "Finetuned / Global / GRB2-Binding / 1D β€” (cvnycE5Q)": "cvnycE5Q",
52
+ "Finetuned / Global / GRB2-Binding / 3D β€” (jYesS9Ki)": "jYesS9Ki",
53
+ "Finetuned / Global / Pab1 / 1D β€” (ho54gxzv)": "ho54gxzv",
54
+ "Finetuned / Global / Pab1 / 3D β€” (jhbL2FeB)": "jhbL2FeB",
55
+ "Finetuned / Global / PTEN-Abundance / 1D β€” (UEuMtmfx)": "UEuMtmfx",
56
+ "Finetuned / Global / PTEN-Abundance / 3D β€” (eJPPQYEW)": "eJPPQYEW",
57
+ "Finetuned / Global / PTEN-Activity / 1D β€” (U3X8mSeT)": "U3X8mSeT",
58
+ "Finetuned / Global / PTEN-Activity / 3D β€” (4gqYnW6V)": "4gqYnW6V",
59
+ "Finetuned / Global / TEM-1 / 1D β€” (ELL4GGQq)": "ELL4GGQq",
60
+ "Finetuned / Global / TEM-1 / 3D β€” (K6BjsWXm)": "K6BjsWXm",
61
+ "Finetuned / Global / Ube4b / 1D β€” (BAWw23vW)": "BAWw23vW",
62
+ "Finetuned / Global / Ube4b / 3D β€” (G9piq6WH)": "G9piq6WH",
63
+ "Finetuned / Local / GFP / 1D β€” (HaUuRwfE)": "HaUuRwfE",
64
+ "Finetuned / Local / GFP / 3D β€” (LWEY95Yb)": "LWEY95Yb",
65
+ "Finetuned / Local / DLG4-Abundance / 1D β€” (RMFA6dnX)": "RMFA6dnX",
66
+ "Finetuned / Local / DLG4-Abundance / 3D β€” (V3uTtXVe)": "V3uTtXVe",
67
+ "Finetuned / Local / DLG4-Binding / 1D β€” (YdzBYWHs)": "YdzBYWHs",
68
+ "Finetuned / Local / DLG4-Binding / 3D β€” (iu6ZahPw)": "iu6ZahPw",
69
+ "Finetuned / Local / GB1 / 1D β€” (Pgcseywk)": "Pgcseywk",
70
+ "Finetuned / Local / GB1 / 3D β€” (UvMMdsq4)": "UvMMdsq4",
71
+ "Finetuned / Local / GRB2-Abundance / 1D β€” (VNpi9Zjt)": "VNpi9Zjt",
72
+ "Finetuned / Local / GRB2-Abundance / 3D β€” (PqBMjXkA)": "PqBMjXkA",
73
+ "Finetuned / Local / GRB2-Binding / 1D β€” (Z59BhUaE)": "Z59BhUaE",
74
+ "Finetuned / Local / GRB2-Binding / 3D β€” (VwcRN6UB)": "VwcRN6UB",
75
+ "Finetuned / Local / Pab1 / 1D β€” (TdjCzoQQ)": "TdjCzoQQ",
76
+ "Finetuned / Local / Pab1 / 3D β€” (5SjoLx3y)": "5SjoLx3y",
77
+ "Finetuned / Local / PTEN-Abundance / 1D β€” (oUScGeHo)": "oUScGeHo",
78
+ "Finetuned / Local / PTEN-Abundance / 3D β€” (DhuasDEr)": "DhuasDEr",
79
+ "Finetuned / Local / PTEN-Activity / 1D β€” (m9UsG7dq)": "m9UsG7dq",
80
+ "Finetuned / Local / PTEN-Activity / 3D β€” (8Vi7ENcC)": "8Vi7ENcC",
81
+ "Finetuned / Local / TEM-1 / 1D β€” (64ncFxBR)": "64ncFxBR",
82
+ "Finetuned / Local / TEM-1 / 3D β€” (PncvgiJU)": "PncvgiJU",
83
+ "Finetuned / Local / Ube4b / 1D β€” (e9uhhnAv)": "e9uhhnAv",
84
+ "Finetuned / Local / Ube4b / 3D β€” (NfbZL7jK)": "NfbZL7jK",
85
+ "GFP DESIGN / Finetuned / Local / GFP / 1D β€” (YoQkzoLD)": "YoQkzoLD",
86
+ "GFP DESIGN / Finetuned / Local / GFP / 3D β€” (PEkeRuxb)": "PEkeRuxb"
87
+ }
88
+
89
  RADIO_CSS = """
90
  #indexing>div {
91
  flex-direction: column;
 
347
  pdb_path = None
348
  return ""
349
 
350
+ def load_model(model_input, _):
351
  global metl
352
 
353
+ # Case 1: input is one of the dropdown labels β†’ lookup UUID
354
+ if model_input in uuid_lookup:
355
+ uuid = uuid_lookup[model_input]
356
+ metl.load_from_uuid(uuid)
357
+ return get_color(GREEN, f"{model_input} loaded (from dropdown)"), gr.Button(interactive=True)
358
 
359
+ # Case 2: input is a raw UUID
360
+ elif model_input in metl.config.UUID_URL_MAP:
361
+ metl.load_from_uuid(model_input)
362
+ return get_color(GREEN, f"{model_input} loaded (direct UUID)"), gr.Button(interactive=True)
363
+
364
+ # Case 3: input is a raw IDENT
365
+ elif model_input in metl.config.IDENT_UUID_MAP:
366
+ metl.load_from_ident(model_input)
367
+ return get_color(GREEN, f"{model_input} loaded (direct IDENT)"), gr.Button(interactive=True)
368
 
369
+ return get_color(RED, "Model not recognized"), gr.Button(interactive=False)
370
 
371
  def update_pdb(variant_modal, indexing):
372
  if len(variant_modal['text']) == 0 and len(variant_modal['files']) == 0:
 
400
  def populate_example():
401
  global pdb_path
402
 
403
+ model = "Source / Local / GB1 / 3D β€” [METL-L-2M-3D-GB1] (epegcFiH)"
404
  wt = "MQYKLILNGKTLKGETTTEAVDAATAEKVFKQYANDNGVDGEWTYDDATKTFTVTE"
405
  variants = '["T17P,T54F", "V28L,F51A"]'
406
  # "T17P,V28L,F51A,T54F"
 
497
  return out_str, iframe, checkbox
498
 
499
  with gr.Blocks(css=RADIO_CSS) as demo:
500
+ # with gr.Row(equal_height=True, elem_id="modelPDBRow"):
501
+ # with gr.Column(elem_id="modelInputCol"):
502
+ # # metl_model_id = gr.Dropdown(label="METL model IDENT or UUID", choices=list(metl.config.IDENT_UUID_MAP.keys()), allow_custom_value=False)
503
+ # metl_model_id = gr.Dropdown(label="METL model", choices=['Source / Global / 1D β€” [METL-G-20M-1D] (D72M9aEp)', 'Source / Global / 3D β€” [METL-G-20M-3D] (Nr9zCKpR)', 'Source / Global / 1D β€” [METL-G-50M-1D] (auKdzzwX)', 'Source / Global / 3D β€” [METL-G-50M-3D] (6PSAzdfv)', 'Source / Local / GFP / 1D β€” [METL-L-2M-1D-GFP] (8gMPQJy4)', 'Source / Local / GFP / 3D β€” [METL-L-2M-3D-GFP] (Hr4GNHws)', 'Source / Local / DLG4 / 1D β€” [METL-L-2M-1D-DLG4_2022] (8iFoiYw2)', 'Source / Local / DLG4 / 3D β€” [METL-L-2M-3D-DLG4_2022] (kt5DdWTa)', 'Source / Local / GB1 / 1D β€” [METL-L-2M-1D-GB1] (DMfkjVzT)', 'Source / Local / GB1 / 3D β€” [METL-L-2M-3D-GB1] (epegcFiH)', 'Source / Local / GRB2 / 1D β€” [METL-L-2M-1D-GRB2] (kS3rUS7h)', 'Source / Local / GRB2 / 3D β€” [METL-L-2M-3D-GRB2] (X7w83g6S)', 'Source / Local / Pab1 / 1D β€” [METL-L-2M-1D-Pab1] (UKebCQGz)', 'Source / Local / Pab1 / 3D β€” [METL-L-2M-3D-Pab1] (2rr8V4th)', 'Source / Local / PTEN / 1D β€” [METL-L-2M-1D-PTEN] (CEMSx7ZC)', 'Source / Local / PTEN / 3D β€” [METL-L-2M-3D-PTEN] (PjxR5LW7)', 'Source / Local / TEM-1 / 1D β€” [METL-L-2M-1D-TEM-1] (PREhfC22)', 'Source / Local / TEM-1 / 3D β€” [METL-L-2M-3D-TEM-1] (9ASvszux)', 'Source / Local / Ube4b / 1D β€” [METL-L-2M-1D-Ube4b] (HscFFkAb)', 'Source / Local / Ube4b / 3D β€” [METL-L-2M-3D-Ube4b] (H48oiNZN)', 'METL-BIND / Source / Local / GB1 / 3D β€” [METL-BIND-2M-3D-GB1-STANDARD] (K6mw24Rg)', 'METL-BIND / Source / Local / GB1 / 3D β€” [METL-BIND-2M-3D-GB1-BINDING] (Bo5wn2SG)', 'Finetuned / Global / GFP / 1D β€” (PeT2D92j)', 'Finetuned / Global / GFP / 3D β€” (6JBzHpkQ)', 'Finetuned / Global / DLG4-Abundance / 1D β€” (4Rh3WCbG)', 'Finetuned / Global / DLG4-Abundance / 3D β€” (RBtqxzvu)', 'Finetuned / Global / DLG4-Binding / 1D β€” (4xbuC5y7)', 'Finetuned / Global / DLG4-Binding / 3D β€” (BuvxgE2x)', 'Finetuned / Global / GB1 / 1D β€” (dAndZfJ4)', 'Finetuned / Global / GB1 / 3D β€” (9vSB3DRM)', 'Finetuned / Global / GRB2-Abundance / 1D β€” (HenDpDWe)', 'Finetuned / Global / GRB2-Abundance / 3D β€” (dDoCCvfr)', 'Finetuned / Global / GRB2-Binding / 1D β€” (cvnycE5Q)', 'Finetuned / Global / GRB2-Binding / 3D β€” (jYesS9Ki)', 'Finetuned / Global / Pab1 / 1D β€” (ho54gxzv)', 'Finetuned / Global / Pab1 / 3D β€” (jhbL2FeB)', 'Finetuned / Global / PTEN-Abundance / 1D β€” (UEuMtmfx)', 'Finetuned / Global / PTEN-Abundance / 3D β€” (eJPPQYEW)', 'Finetuned / Global / PTEN-Activity / 1D β€” (U3X8mSeT)', 'Finetuned / Global / PTEN-Activity / 3D β€” (4gqYnW6V)', 'Finetuned / Global / TEM-1 / 1D β€” (ELL4GGQq)', 'Finetuned / Global / TEM-1 / 3D β€” (K6BjsWXm)', 'Finetuned / Global / Ube4b / 1D β€” (BAWw23vW)', 'Finetuned / Global / Ube4b / 3D β€” (G9piq6WH)', 'Finetuned / Local / GFP / 1D β€” (HaUuRwfE)', 'Finetuned / Local / GFP / 3D β€” (LWEY95Yb)', 'Finetuned / Local / DLG4-Abundance / 1D β€” (RMFA6dnX)', 'Finetuned / Local / DLG4-Abundance / 3D β€” (V3uTtXVe)', 'Finetuned / Local / DLG4-Binding / 1D β€” (YdzBYWHs)', 'Finetuned / Local / DLG4-Binding / 3D β€” (iu6ZahPw)', 'Finetuned / Local / GB1 / 1D β€” (Pgcseywk)', 'Finetuned / Local / GB1 / 3D β€” (UvMMdsq4)', 'Finetuned / Local / GRB2-Abundance / 1D β€” (VNpi9Zjt)', 'Finetuned / Local / GRB2-Abundance / 3D β€” (PqBMjXkA)', 'Finetuned / Local / GRB2-Binding / 1D β€” (Z59BhUaE)', 'Finetuned / Local / GRB2-Binding / 3D β€” (VwcRN6UB)', 'Finetuned / Local / Pab1 / 1D β€” (TdjCzoQQ)', 'Finetuned / Local / Pab1 / 3D β€” (5SjoLx3y)', 'Finetuned / Local / PTEN-Abundance / 1D β€” (oUScGeHo)', 'Finetuned / Local / PTEN-Abundance / 3D β€” (DhuasDEr)', 'Finetuned / Local / PTEN-Activity / 1D β€” (m9UsG7dq)', 'Finetuned / Local / PTEN-Activity / 3D β€” (8Vi7ENcC)', 'Finetuned / Local / TEM-1 / 1D β€” (64ncFxBR)', 'Finetuned / Local / TEM-1 / 3D β€” (PncvgiJU)', 'Finetuned / Local / Ube4b / 1D β€” (e9uhhnAv)', 'Finetuned / Local / Ube4b / 3D β€” (NfbZL7jK)', 'GFP DESIGN / Finetuned / Local / GFP / 1D β€” (YoQkzoLD)', 'GFP DESIGN / Finetuned / Local / GFP / 3D β€” (PEkeRuxb)'], allow_custom_value=False)
504
+ # metl_model_status = gr.HTML(get_color(RED, "Select Model"), elem_id="modelStatus")
505
+ # with gr.Column():
506
+ # upload_pdb = gr.File(label="PDB File upload", elem_id="pdbUpload", file_types=[".pdb", ".txt"])
507
+
508
+ with gr.Column():
509
+ metl_model_id = gr.Dropdown(label="METL model", choices=list(uuid_lookup.keys()), allow_custom_value=False)
510
+ metl_model_status = gr.HTML(get_color(RED, "Select Model"), elem_id="modelStatus")
511
+
512
+ with gr.Column():
513
+ upload_pdb = gr.File(label="PDB File upload", elem_id="pdbUpload", file_types=[".pdb", ".txt"])
514
 
515
  with gr.Column():
516
  metl_seq_input = gr.MultimodalTextbox(label="Input Protein Sequence", interactive=True, elem_classes="multiModalText", elem_id="wildTypeSequence")