Source code for tooluniverse.compose_scripts.drug_safety_analyzer

"""
Drug Safety Analysis Pipeline
Comprehensive drug safety analysis combining adverse event data, literature review, and molecular information
"""


[docs] def compose(arguments, tooluniverse, call_tool): """ Main composition function for DrugSafetyAnalyzer Args: arguments (dict): Input arguments containing drug_name, patient_sex, serious_events_only tooluniverse: ToolUniverse instance call_tool: Function to call other tools Returns: dict: Comprehensive drug safety analysis result """ drug_name = arguments["drug_name"] patient_sex = arguments.get("patient_sex") serious_only = arguments.get("serious_events_only", False) print(f"Starting comprehensive safety analysis for: {drug_name}") # Step 1: Get adverse event data from FDA FAERS faers_result = None try: # Prepare FAERS query parameters - only include non-None values faers_params = {"medicinalproduct": drug_name} if patient_sex: faers_params["patientsex"] = patient_sex if serious_only: faers_params["serious"] = "Yes" faers_result = call_tool("FAERS_count_reactions_by_drug_event", faers_params) except Exception as e: print(f"FAERS query failed: {e}") # Step 2: Get molecular information from PubChem molecular_info = None try: pubchem_cid_result = call_tool( "PubChem_get_CID_by_compound_name", {"name": drug_name} ) if ( isinstance(pubchem_cid_result, dict) and "IdentifierList" in pubchem_cid_result ): cid_list = pubchem_cid_result["IdentifierList"].get("CID", []) if cid_list: first_cid = cid_list[0] molecular_info = call_tool( "PubChem_get_compound_properties_by_CID", {"cid": first_cid} ) except Exception as e: print(f"PubChem query failed: {e}") # Step 3: Search for safety-related literature literature_result = None try: literature_query = f"{drug_name} safety adverse effects" literature_result = call_tool( "EuropePMC_search_articles", {"query": literature_query, "limit": 10} ) except Exception as e: print(f"Literature search failed: {e}") # Step 4: Compile comprehensive analysis result result = { "drug_name": drug_name, "analysis_parameters": { "patient_sex_filter": patient_sex, "serious_events_only": serious_only, }, "adverse_events": faers_result, "molecular_properties": molecular_info, "safety_literature": literature_result, "analysis_summary": { "has_adverse_events": bool(faers_result), "has_molecular_data": bool(molecular_info), "literature_papers_found": ( len(literature_result.get("resultList", {}).get("result", [])) if literature_result and isinstance(literature_result, dict) else 0 ), }, } print(f"Safety analysis complete for {drug_name}") return result