Spaces:
Running
Running
File size: 4,984 Bytes
31be27c fba8f5e 08446bb fba8f5e 08446bb 634752b 31be27c 7e12824 c74a121 31be27c 39fc6e6 31be27c 39fc6e6 ddc1bd3 08446bb 31be27c 7e12824 c74a121 7e12824 08446bb 7e12824 08446bb c74a121 7e12824 fba8f5e 7e12824 8ecc9a8 fba8f5e 8ecc9a8 7e12824 08446bb c74a121 7e12824 31be27c 08446bb c74a121 7e12824 31be27c c74a121 31be27c c74a121 8ecc9a8 08446bb 7e12824 08446bb 7e12824 08446bb 7e12824 08446bb 7e12824 08446bb 31be27c 08446bb 7e12824 8ecc9a8 7e12824 634752b fba8f5e 462a012 7e12824 |
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 |
from gradio import Blocks, Button, Checkbox, DownloadButton, Dropdown, Error, Examples, Image, HTML, Markdown, Progress, Tab, Textbox
from model import ModelFactory
from data import Data
# Get available models
MODELS = ModelFactory.models()
def app(seq, sub, model_name, acc):
"Main application function"
global progress
scoring = "masked-marginals" if acc else "wt-marginals"
# Validate the input
if 1 > len(seq):
raise Error("Sequence cannot be empty")
if 1 > len(sub):
raise Error("Substitutions cannot be empty")
# Calculate the data based on the input parameters
try:
data = Data(seq, sub, model_name, scoring).calculate(progress)
if isinstance(data.image, str):
return ( Image(value=data.image, type='filepath', height=None, visible=True)
, HTML(value='')
, DownloadButton(value=data.csv, visible=True) )
else:
return ( Image(visible=False)
, HTML(value=data.image.to_html(), visible=True)
, DownloadButton(value=data.csv, visible=True) )
except Exception as e:
raise Error(str(e))
finally:
progress = Progress()
# Create the Gradio interface
with Blocks() as demo:
Markdown("# [ESM-Scan](https://doi.org/10.1002/pro.5221)")
# Define the interface components
with Tab("App"):
Markdown(open("header.md", 'r', encoding="utf-8").read())
seq = Textbox( lines=2
, label="Sequence"
, placeholder="FASTA sequence here…"
, value='' )
sub = Textbox( lines=1
, label="Substitutions"
, placeholder="Substitutions here…"
, value='' )
model_name = Dropdown(MODELS, label="Model", value="facebook/esm2_t30_150M_UR50D")
acc_box = Checkbox(value=True, label="Use higher accuracy scoring", interactive=True)
run_btn = Button(value="Run", variant="primary")
dl_btn = DownloadButton(label="Download raw data", visible=False)
out_html = HTML(visible=False)
progress = Progress()
out_img = Image(visible=False)
run_btn.click( fn=lambda : (HTML(value=None, visible=False), Image(value=None, visible=True, height=128))
, outputs=[out_html, out_img]
).then( fn=app
, inputs=[seq, sub, model_name, acc_box]
, outputs=[out_img, out_html, dl_btn] )
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, sub, model_name]
, outputs=[out_img]
, fn=app
, cache_examples=False )
with Tab("Instructions"):
Markdown(open("instructions.md", 'r', encoding="utf-8").read())
# Launch the Gradio interface
if __name__ == "__main__":
demo.launch()
|