File size: 4,192 Bytes
4f4563b
fba8f5e
 
 
 
 
 
634752b
fba8f5e
 
634752b
 
fba8f5e
 
 
 
 
 
ddc1bd3
 
 
4f4563b
 
 
 
 
 
2dd6312
fba8f5e
ddc1bd3
fba8f5e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ddc1bd3
4f4563b
ddc1bd3
 
4f4563b
fba8f5e
 
 
4f4563b
fba8f5e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ddc1bd3
 
 
fba8f5e
634752b
fba8f5e
462a012
fba8f5e
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
from gradio import Blocks, Button, Checkbox, DataFrame, DownloadButton, Dropdown, Examples, File, Image, Markdown, Textbox

from model import get_models
from data import Data

# Define scoring strategies
SCORING = ["wt-marginals", "masked-marginals"]

# Get available models
MODELS = get_models()

def app(*argv):
    """
    Main application function
    """
    # Unpack the arguments
    seq, trg, model_name, *_ = argv
    scoring = SCORING[scoring_strategy.value]
    # Calculate the data based on the input parameters
    data = Data(seq, trg, model_name, scoring).calculate()

    if isinstance(data.image(), str):
        out = Image(value=data.image(), type='filepath', visible=True), DataFrame(visible=False)
    else:
        out = Image(visible=False), DataFrame(value=data.image(), visible=True)
        
    return *out, DownloadButton(value=data.csv(), visible=True)

# Create the Gradio interface
with open("instructions.md", "r", encoding="utf-8") as md, Blocks() as esm_scan:
        
    # Define the interface components
    Markdown(md.read())
    seq = Textbox(
        lines=2,
        label="Sequence",
        placeholder="FASTA sequence here...",
        value=''
    )
    trg = Textbox(
        lines=1,
        label="Substitutions",
        placeholder="Substitutions here...",
        value=""
    )
    model_name = Dropdown(MODELS, label="Model", value="facebook/esm2_t30_150M_UR50D")
    scoring_strategy = Checkbox(value=True, label="Use higher accuracy scoring", interactive=True)
    btn = Button(value="Run", variant="primary")
    dlb = DownloadButton(label="Download raw data", visible=False)
    out = Image(visible=False)
    ouu = DataFrame(visible=False)
    btn.click(
        fn=app,
        inputs=[seq, trg, model_name],
        outputs=[out, ouu, dlb]
    )
    ex = Examples(
        examples=[
            [
                "MVEQYLLEAIVRDARDGITISDCSRPDNPLVFVNDAFTRMTGYDAEEVIGKNCRFLQRGDINLSAVHTIKIAMLTHEPCLVTLKNYRKDGTIFWNELSLTPIINKNGLITHYLGIQKDVSAQVILNQTLHEENHLLKSNKEMLEYLVNIDALTGLHNRRFLEDQLVIQWKLASRHINTITIFMIDIDYFKAFNDTYGHTAGDEALRTIAKTLNNCFMRGSDFVARYGGEEFTILAIGMTELQAHEYSTKLVQKIENLNIHHKGSPLGHLTISLGYSQANPQYHNDQNLVIEQADRALYSAKVEGKNRAVAYREQ", 
                "deep mutational scanning",
                "facebook/esm2_t6_8M_UR50D"
             ],
            [
                "MVEQYLLEAIVRDARDGITISDCSRPDNPLVFVNDAFTRMTGYDAEEVIGKNCRFLQRGDINLSAVHTIKIAMLTHEPCLVTLKNYRKDGTIFWNELSLTPIINKNGLITHYLGIQKDVSAQVILNQTLHEENHLLKSNKEMLEYLVNIDALTGLHNRRFLEDQLVIQWKLASRHINTITIFMIDIDYFKAFNDTYGHTAGDEALRTIAKTLNNCFMRGSDFVARYGGEEFTILAIGMTELQAHEYSTKLVQKIENLNIHHKGSPLGHLTISLGYSQANPQYHNDQNLVIEQADRALYSAKVEGKNRAVAYREQ", 
                "217 218 219",
                "facebook/esm2_t12_35M_UR50D"
             ],
            [
                "MVEQYLLEAIVRDARDGITISDCSRPDNPLVFVNDAFTRMTGYDAEEVIGKNCRFLQRGDINLSAVHTIKIAMLTHEPCLVTLKNYRKDGTIFWNELSLTPIINKNGLITHYLGIQKDVSAQVILNQTLHEENHLLKSNKEMLEYLVNIDALTGLHNRRFLEDQLVIQWKLASRHINTITIFMIDIDYFKAFNDTYGHTAGDEALRTIAKTLNNCFMRGSDFVARYGGEEFTILAIGMTELQAHEYSTKLVQKIENLNIHHKGSPLGHLTISLGYSQANPQYHNDQNLVIEQADRALYSAKVEGKNRAVAYREQ", 
                "R218K R218S R218N R218A R218V R218D",
                "facebook/esm2_t30_150M_UR50D",
             ],
            [
                "MVEQYLLEAIVRDARDGITISDCSRPDNPLVFVNDAFTRMTGYDAEEVIGKNCRFLQRGDINLSAVHTIKIAMLTHEPCLVTLKNYRKDGTIFWNELSLTPIINKNGLITHYLGIQKDVSAQVILNQTLHEENHLLKSNKEMLEYLVNIDALTGLHNRRFLEDQLVIQWKLASRHINTITIFMIDIDYFKAFNDTYGHTAGDEALRTIAKTLNNCFMRGSDFVARYGGEEFTILAIGMTELQAHEYSTKLVQKIENLNIHHKGSPLGHLTISLGYSQANPQYHNDQNLVIEQADRALYSAKVEGKNRAVAYREQ", 
                "MVEQYLLEAIVRDARDGITISDCSRPDNPLVFVNDAFTRMTGYDAEEVIGKNCRFLQRGDINLSAVHTIKIAMLTHEPCLVTLKNYRKDGTIFWNELSLTPIINKNGLITHYLGIQKDVSAQVILNQTLHEENHLLKSNKEMLEYLVNIDALTGLHNRRFLEDQLVIQWKLASRHINTITIFMIDIDYFKAFNDTYGHTAGDEALRTIAKTLNNCFMWGSDFVARYGGEEFTILAIGMTELQAHEYSTKLVQKIENLNIHHKGSPLGHLTISLGYSQANPQYHNDQNLVIEQADRALYSAKVEGKNRAVAYREQ", 
                "facebook/esm2_t33_650M_UR50D",
             ],
        ],
        inputs=[seq,
                trg,
                model_name],
        outputs=[out],
        fn=app,
        cache_examples=False
    )

# Launch the Gradio interface
if __name__ == "__main__":
    esm_scan.launch()