|
import gradio as gr |
|
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM |
|
|
|
from rdkit.Chem import Draw |
|
from rdkit import Chem |
|
import selfies as sf |
|
|
|
sf_output="zju" |
|
def greet1(name): |
|
tokenizer = AutoTokenizer.from_pretrained("zjunlp/MolGen") |
|
model = AutoModelForSeq2SeqLM.from_pretrained("zjunlp/MolGen") |
|
|
|
sf_input = tokenizer(name, return_tensors="pt") |
|
|
|
|
|
molecules = model.generate(input_ids=sf_input["input_ids"], |
|
attention_mask=sf_input["attention_mask"], |
|
max_length=15, |
|
min_length=5, |
|
num_return_sequences=4, |
|
num_beams=5) |
|
|
|
sf_output = [tokenizer.decode(g, skip_special_tokens=True, clean_up_tokenization_spaces=True).replace(" ","") for g in molecules] |
|
return sf_output |
|
|
|
def greet2(name): |
|
tokenizer = AutoTokenizer.from_pretrained("zjunlp/MolGen") |
|
model = AutoModelForSeq2SeqLM.from_pretrained("zjunlp/MolGen") |
|
|
|
sf_input = tokenizer(name, return_tensors="pt") |
|
|
|
|
|
molecules = model.generate(input_ids=sf_input["input_ids"], |
|
attention_mask=sf_input["attention_mask"], |
|
max_length=15, |
|
min_length=5, |
|
num_return_sequences=4, |
|
num_beams=5) |
|
|
|
sf_output = [tokenizer.decode(g, skip_special_tokens=True, clean_up_tokenization_spaces=True).replace(" ","") for g in molecules] |
|
smis = [sf.decoder(i) for i in sf_output] |
|
|
|
mols = [] |
|
for smi in smis: |
|
mol = Chem.MolFromSmiles(smi) |
|
mols.append(mol) |
|
|
|
img = Draw.MolsToGridImage( |
|
mols, |
|
molsPerRow=4, |
|
subImgSize=(200,200), |
|
legends=['' for x in mols] |
|
) |
|
|
|
return img |
|
|
|
|
|
def greet3(name): |
|
|
|
return name |
|
|
|
examples = [ |
|
|
|
['[C][=C][C][=C][C][=C][Ring1][=Branch1]'],['[C]'] |
|
|
|
] |
|
|
|
greeter_1 = gr.Interface(greet1, inputs="textbox", outputs="text") |
|
greeter_2 = gr.Interface(greet2 , inputs="textbox", outputs="image") |
|
|
|
demo = gr.Parallel(greeter_1, greeter_2,title="Molecular Language Model as Multi-task Generator", |
|
examples=examples) |
|
|
|
|
|
demo.launch() |
|
|
|
|
|
|