# genesis/ontology.py import requests from typing import List def expand_terms_with_ontology(query: str, umls_api_key: str, bioportal_api_key: str) -> List[str]: """Expand query terms using UMLS and BioPortal ontology APIs.""" expanded_terms = set() # Always include original query expanded_terms.add(query) # UMLS expansion if umls_api_key: try: umls_url = "https://uts-ws.nlm.nih.gov/rest/search/current" params = {"string": query, "apiKey": umls_api_key, "pageSize": 5} r = requests.get(umls_url, params=params, timeout=10) r.raise_for_status() data = r.json() for result in data.get("result", {}).get("results", []): name = result.get("name") if name and name.lower() != query.lower(): expanded_terms.add(name) except Exception as e: print(f"[Ontology] UMLS expansion failed: {e}") # BioPortal expansion if bioportal_api_key: try: bp_url = "https://data.bioontology.org/search" params = {"q": query, "apikey": bioportal_api_key} r = requests.get(bp_url, params=params, timeout=10) r.raise_for_status() data = r.json() for coll in data.get("collection", []): label = coll.get("prefLabel") if label and label.lower() != query.lower(): expanded_terms.add(label) except Exception as e: print(f"[Ontology] BioPortal expansion failed: {e}") return list(expanded_terms)