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'''
''' duration = round(time.time() - start, 2) literature_summary = f"๐Ÿ“‹ Drug candidates (auto-generated in {duration}s):\n{drug_names}" return literature_summary, ", ".join(smiles_list), img_html, viewer_htmls # Gradio UI setup iface = gr.Interface( fn=drug_discovery, inputs=[ gr.Textbox(label="๐Ÿงฌ Enter Unknown Disease or Name", value="X-disease"), gr.Textbox(label="๐Ÿ“ Symptoms", value="fever, joint pain") ], outputs=[ gr.Textbox(label="๐Ÿ”– AI Literature Summary"), gr.Textbox(label="๐Ÿงช SMILES List"), gr.HTML(label="๐Ÿ–ผ๏ธ 2D Molecules"), gr.HTML(label="๐Ÿ”ฌ 3D Molecules") ], title="๐Ÿงช Drug Discovery for Unknown Diseases", description="BioGPT + RDKit-powered system to suggest potential drug molecules for unknown or rare diseases.", css=""" body { background-color: #111; color: #eee; } .gradio-container { animation: fadeIn 1.5s ease-in-out; } """ ) iface.launch(share=True)