Source code for tooluniverse.compose_scripts.comprehensive_drug_discovery
"""Comprehensive Drug Discovery PipelineComplete end-to-end drug discovery workflow from disease to optimized candidates"""
[docs]defcompose(arguments,tooluniverse,call_tool):"""End-to-end drug discovery: Target → Lead → Optimization → Validation"""disease_efo_id=arguments["disease_efo_id"]results={}# Phase 1: Target Identification & Validationprint("Phase 1: Target Identification...")try:target_result=call_tool("OpenTargets_get_associated_targets_by_disease_efoId",{"efoId":disease_efo_id},)selected_targets=target_result["data"]["disease"]["associatedTargets"]["rows"][:5]results["target_selection"]=target_resultprint(f"✅ Found {len(selected_targets)} targets")exceptExceptionase:print(f"❌ Target identification failed: {e}")results["target_selection"]={"error":str(e)}returnresults# Phase 2: Lead Compound Discovery (using OpenTargets drugs)print("Phase 2: Lead Discovery...")try:# Get known drugs for this diseaseknown_drugs=call_tool("OpenTargets_get_associated_drugs_by_disease_efoId",{"efoId":disease_efo_id,"size":20},)if"data"inknown_drugsand"disease"inknown_drugs["data"]:drugs_data=known_drugs["data"]["disease"].get("knownDrugs",{})drug_rows=drugs_data.get("rows",[])results["lead_discovery"]={"total_drugs":len(drug_rows),"approved_drugs":len([dfordindrug_rowsifd.get("drug",{}).get("isApproved",False)]),"drug_data":drug_rows,# Store full drug data for safety assessment}print(f"✅ Found {len(drug_rows)} known drugs")else:results["lead_discovery"]={"error":"No drug data available"}print("⚠️ No drug data available")exceptExceptionase:print(f"⚠️ Drug discovery failed: {e}")results["lead_discovery"]={"error":str(e)}# Phase 3: Safety Assessment (using ADMETAI tools)print("Phase 3: Safety Assessment...")safety_assessments=[]# Extract SMILES from known drugs for ADMET assessmenttry:if"lead_discovery"inresultsand"total_drugs"inresults["lead_discovery"]:# Get drug SMILES from OpenTargets drug datadrug_data=results["lead_discovery"].get("drug_data",[])ifdrug_data:# Extract SMILES from first few drugs for assessmenttest_smiles=[]processed_drugs=set()# Track processed drugs to avoid duplicatesfordrugindrug_data[:5]:# Test first 5 drugsif"drug"indrug:drug_info=drug["drug"]drug_name=drug_info.get("name","")# Skip if already processedifdrug_nameinprocessed_drugs:continueprocessed_drugs.add(drug_name)# Try to get SMILES from drug name using PubChemifdrug_name:try:# Get CID from drug namecid_result=call_tool("PubChem_get_CID_by_compound_name",{"name":drug_name},)if(cid_resultand"IdentifierList"incid_resultand"CID"incid_result["IdentifierList"]):cids=cid_result["IdentifierList"]["CID"]ifcids:# Get SMILES from first CIDsmiles_result=call_tool("PubChem_get_compound_properties_by_CID",{"cid":cids[0]},)if(smiles_resultand"PropertyTable"insmiles_result):properties=smiles_result["PropertyTable"].get("Properties",[])ifproperties:# Try CanonicalSMILES first, then ConnectivitySMILESsmiles=properties[0].get("CanonicalSMILES")orproperties[0].get("ConnectivitySMILES")if(smilesandsmilesnotintest_smiles):# Avoid duplicate SMILEStest_smiles.append(smiles)print(f"✅ Found SMILES for {drug_name}: {smiles[:50]}...")# Stop after finding 3 unique SMILESiflen(test_smiles)>=3:breakexceptExceptionase:print(f"⚠️ Failed to get SMILES for {drug_name}: {e}")iftest_smiles:# Test BBB penetrancebbb_result=call_tool("ADMETAI_predict_BBB_penetrance",{"smiles":test_smiles})# Test bioavailabilitybio_result=call_tool("ADMETAI_predict_bioavailability",{"smiles":test_smiles})# Test toxicitytox_result=call_tool("ADMETAI_predict_toxicity",{"smiles":test_smiles})safety_assessments.append({"compounds_assessed":len(test_smiles),"bbb_penetrance":bbb_result,"bioavailability":bio_result,"toxicity":tox_result,})results["safety_assessment"]=safety_assessmentsprint(f"✅ Completed safety assessment for {len(test_smiles)} compounds")else:print("⚠️ No SMILES data available for safety assessment")results["safety_assessment"]={"error":"No SMILES data available"}else:print("⚠️ No drug data available for safety assessment")results["safety_assessment"]={"error":"No drug data available"}else:print("⚠️ Lead discovery phase failed, skipping safety assessment")results["safety_assessment"]={"error":"Lead discovery phase failed"}exceptExceptionase:print(f"⚠️ Safety assessment failed: {e}")results["safety_assessment"]={"error":str(e)}# Phase 4: Literature Validationprint("Phase 4: Literature Validation...")try:literature_validation=call_tool("LiteratureSearchTool",{"research_topic":f"drug discovery {disease_efo_id} therapeutic targets"},)results["literature_validation"]=literature_validationprint("✅ Literature validation completed")exceptExceptionase:print(f"⚠️ Literature validation failed: {e}")results["literature_validation"]={"error":str(e)}returnresults