# drug_interaction_detection/interaction_checker.py import sqlite3 from config import DB_PATH class InteractionChecker: def __init__(self, db_path: str = DB_PATH): self.conn = sqlite3.connect(db_path) self.conn.row_factory = sqlite3.Row def find(self, cuis: list[str]) -> list[dict]: if len(cuis) < 2: return [] # Create a list of all unique pairs pairs = [] for i in range(len(cuis)): for j in range(i + 1, len(cuis)): # Ensure consistent order for querying (e.g., smaller CUI first) pair = tuple(sorted((cuis[i], cuis[j]))) pairs.append(pair) if not pairs: return [] # Query for all pairs at once placeholders = ", ".join(["(?, ?)"] * len(pairs)) flat_params = [item for pair in pairs for item in pair] query = f""" SELECT cui1, cui2, severity, advice FROM interactions WHERE (cui1, cui2) IN ({placeholders}) """ rows = self.conn.execute(query, flat_params).fetchall() return [{"pair": (r["cui1"], r["cui2"]), "severity": r["severity"], "advice": r["advice"]} for r in rows]