import gradio as gr from Bio import Entrez import os # For environment variables and file paths from components import federated_learning # ---------------------------- Configuration ---------------------------- ENTREZ_EMAIL = os.environ.get("ENTREZ_EMAIL", "ENTREZ_EMAIL") # Use environment variable, default fallback HUGGINGFACE_API_TOKEN = os.environ.get("HUGGINGFACE_API_TOKEN", "HUGGINGFACE_API_TOKEN") # Use environment variable, default fallback # ---------------------------- Helper Functions ---------------------------- def log_error(message: str): """Logs an error message to the console and a file (if possible).""" print(f"ERROR: {message}") try: with open("error_log.txt", "a") as f: f.write(f"{message}\n") except: print("Couldn't write to error log file.") #If logging fails, still print to console # ---------------------------- Tool Functions ---------------------------- def search_pubmed(query: str) -> list: """Searches PubMed and returns a list of article IDs.""" try: Entrez.email = ENTREZ_EMAIL handle = Entrez.esearch(db="pubmed", term=query, retmax="5") record = Entrez.read(handle) handle.close() return record["IdList"] except Exception as e: log_error(f"PubMed search error: {e}") return [f"Error during PubMed search: {e}"] def fetch_abstract(article_id: str) -> str: """Fetches the abstract for a given PubMed article ID.""" try: Entrez.email = ENTREZ_EMAIL handle = Entrez.efetch(db="pubmed", id=article_id, rettype="abstract", retmode="text") abstract = handle.read() handle.close() return abstract except Exception as e: log_error(f"Error fetching abstract for {article_id}: {e}") return f"Error fetching abstract for {article_id}: {e}" # ---------------------------- Agent Function ---------------------------- def medai_agent(query: str) -> str: """Orchestrates the medical literature review and presents abstract.""" article_ids = search_pubmed(query) if isinstance(article_ids, list) and article_ids: results = [] for article_id in article_ids: abstract = fetch_abstract(article_id) if "Error" not in abstract: results.append(f"
Abstract: {abstract}
\n" f"