| import requests | |
| import os | |
| def get_umls_api_key(): | |
| return os.getenv("UMLS_API_KEY") | |
| def get_bioportal_api_key(): | |
| return os.getenv("BIOPORTAL_API_KEY") | |
| def umls_concept_lookup(term): | |
| key = get_umls_api_key() | |
| if not key: | |
| return [{"error": "UMLS API key not set."}] | |
| url = f"https://uts-ws.nlm.nih.gov/rest/search/current?string={term}&apiKey={key}" | |
| try: | |
| response = requests.get(url, timeout=10) | |
| results = response.json().get("result", {}).get("results", []) | |
| return [ | |
| { | |
| "name": r.get("name"), | |
| "ui": r.get("ui"), | |
| "rootSource": r.get("rootSource") | |
| } | |
| for r in results[:8] | |
| ] | |
| except Exception as e: | |
| return [{"error": f"UMLS error: {e}"}] | |
| def bioportal_concept_lookup(term): | |
| key = get_bioportal_api_key() | |
| if not key: | |
| return [{"error": "BioPortal API key not set."}] | |
| url = f"https://data.bioontology.org/search?q={term}&apikey={key}" | |
| try: | |
| response = requests.get(url, timeout=10) | |
| matches = response.json().get("collection", []) | |
| return [ | |
| { | |
| "prefLabel": m.get("prefLabel"), | |
| "ontology": m.get("links", {}).get("ontology"), | |
| "id": m.get("@id") | |
| } | |
| for m in matches[:8] | |
| ] | |
| except Exception as e: | |
| return [{"error": f"BioPortal error: {e}"}] | |