Drug-Interaction-Analysis-System / analyzers /drug_interaction_analyzer.py
TYehan's picture
Uploaded from GitHub
d6f252d verified
raw
history blame
3.96 kB
from typing import Dict, List
import json
from agents import AlternativeAgent, SimilarityAgent, ConflictAgent, InteractionAgent
from rdflib import Graph, Namespace
import logging
class DrugInteractionAnalyzer:
"""
Analyzer class to handle drug interactions, alternatives, similarities, and conflicts using separate agents.
"""
def __init__(self, owl_file_path: str):
"""
Initialize the DrugInteractionAnalyzer with the ontology file and instantiate agents.
Args:
owl_file_path (str): Path to the RDF/XML ontology file.
"""
self.graph = Graph()
try:
self.graph.parse(owl_file_path, format="xml")
self.namespace = Namespace("http://www.example.org/DrugInteraction.owl#")
logging.info(f"Successfully loaded ontology from {owl_file_path}")
except Exception as e:
logging.error(f"Failed to load ontology file: {e}")
raise ValueError(f"Failed to load ontology file: {e}")
# Initialize agents
self.alternative_agent = AlternativeAgent(self.graph, self.namespace)
self.similarity_agent = SimilarityAgent(self.graph, self.namespace)
self.conflict_agent = ConflictAgent(self.graph, self.namespace)
self.interaction_agent = InteractionAgent(self.graph, self.namespace)
logging.info("Initialized all agents successfully.")
def analyze_drugs(self, drug_names: List[str]) -> Dict[str, Dict[str, List[Dict[str, str]]]]:
"""
Analyze multiple drugs using separate agents and return structured results.
Args:
drug_names (List[str]): List of drug names to analyze.
Returns:
Dict[str, Dict[str, List[Dict[str, str]]]]: Structured analysis results.
"""
results = {}
for drug in drug_names:
drug_results = {}
logging.info(f"Analyzing drug: {drug}")
# Alternatives
try:
alternatives = self.alternative_agent.get_alternatives(drug)
drug_results["alternatives"] = alternatives
logging.debug(f"Alternatives for {drug}: {alternatives}")
except Exception as e:
logging.warning(f"Failed to get alternatives for {drug}: {e}")
drug_results["alternatives"] = []
# Similarities
try:
similarities = self.similarity_agent.get_similarities(drug)
drug_results["similarities"] = similarities
logging.debug(f"Similarities for {drug}: {similarities}")
except Exception as e:
logging.warning(f"Failed to get similarities for {drug}: {e}")
drug_results["similarities"] = []
# Conflicts
try:
conflicts = self.conflict_agent.get_conflicts(drug)
drug_results["conflicts"] = conflicts
logging.debug(f"Conflicts for {drug}: {conflicts}")
except Exception as e:
logging.warning(f"Failed to get conflicts for {drug}: {e}")
drug_results["conflicts"] = []
# Interactions
try:
interactions = self.interaction_agent.get_interactions(drug)
drug_results["interactions"] = interactions
logging.debug(f"Interactions for {drug}: {interactions}")
except Exception as e:
logging.warning(f"Failed to get interactions for {drug}: {e}")
drug_results["interactions"] = []
results[drug] = drug_results
logging.info(f"Completed analysis for {drug}")
logging.info("Completed analysis for all drugs.")
return results