import gradio as gr
from transformers import pipeline
from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem.Draw import rdMolDraw2D
import base64
import re
import py3Dmol
import time
# Load model once
bio_gpt = pipeline("text-generation", model="microsoft/BioGPT-Large")
def drug_discovery(disease, symptoms):
# Simplified and efficient medical prompt
prompt = (
f"You're a biomedical AI. A new disease shows symptoms: '{symptoms}'. "
f"Suggest 5 generic drug names and 5 SMILES strings that could help treat this. "
f"List drug names first, then SMILES strings in separate lines like:\n"
f"Drugs: Aspirin, Ibuprofen, Paracetamol, ...\n"
f"SMILES: C1=CC=CC=C1 C(C(=O)O)N ..."
)
try:
start = time.time()
result = bio_gpt(prompt, max_length=150, do_sample=True, temperature=0.6)[0]['generated_text']
except Exception as e:
return f"BioGPT error: {e}", "", "", ""
# Extract drug names and SMILES
drugs_match = re.search(r"Drugs:\s*(.+)", result)
smiles_match = re.search(r"SMILES:\s*(.+)", result)
drug_names = drugs_match.group(1).strip() if drugs_match else "Unknown"
raw_smiles = smiles_match.group(1).strip() if smiles_match else "C1=CC=CC=C1"
smiles_list = re.findall(r"(?
{smiles}
''' # 3D View mol3d = Chem.AddHs(mol) AllChem.EmbedMolecule(mol3d, randomSeed=42) AllChem.UFFOptimizeMolecule(mol3d) mb = Chem.MolToMolBlock(mol3d) viewer = py3Dmol.view(width=240, height=240) viewer.addModel(mb, "mol") viewer.setStyle({"stick": {"colorscheme": "cyanCarbon"}}) viewer.setBackgroundColor("black") viewer.zoomTo() viewer_html_raw = viewer._make_html() viewer_htmls += f'''