Meddoc / interm.py
mgbam's picture
Update interm.py
36b8a4a verified
from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel
from Bio import Entrez
from fpdf import FPDF
import tempfile
# Initialize Clinical AI Agent
clinical_agent = CodeAgent(tools=[DuckDuckGoSearchTool()], model=HfApiModel())
# Your PubMed Email (IMPORTANT: Use your registered PubMed email)
Entrez.email = "Pub_Email" # <-- Your registered PubMed email
def generate_clinical_content(topic, audience):
"""Generates medical content based on topic and audience."""
prompt = f"Write a detailed medical article on: {topic}.\nTarget Audience: {audience}.\nInclude latest medical research insights."
return clinical_agent.run(prompt)
def generate_summary(content):
"""Summarizes a given clinical document or research paper."""
summary_prompt = f"Summarize the following medical research:\n{content}"
return clinical_agent.run(summary_prompt)
def generate_soap_note(symptoms, history):
"""Generates a SOAP Note for clinicians based on symptoms and patient history."""
soap_prompt = (
f"Create a structured SOAP Note for a patient with:\n"
f"Symptoms: {symptoms}\n"
f"History: {history}\n"
f"Include Assessment & Plan."
)
return clinical_agent.run(soap_prompt)
def fetch_pubmed_articles(query):
"""Fetches latest medical research from PubMed based on a query."""
try:
handle = Entrez.esearch(db="pubmed", term=query, retmax=5)
record = Entrez.read(handle)
handle.close()
article_ids = record["IdList"]
articles = []
for article_id in article_ids:
handle = Entrez.efetch(db="pubmed", id=article_id, retmode="xml")
article_record = Entrez.read(handle)
handle.close()
article_data = article_record["PubmedArticle"][0]["MedlineCitation"]["Article"]
title = article_data.get("ArticleTitle", "No Title Available")
abstract = article_data.get("Abstract", {}).get("AbstractText", ["No Abstract Available"])[0]
authors = ", ".join([author["LastName"] for author in article_data.get("AuthorList", []) if "LastName" in author])
url = f"https://pubmed.ncbi.nlm.nih.gov/{article_id}/"
articles.append({"title": title, "abstract": abstract, "authors": authors, "url": url})
return articles
except Exception as e:
return [{"title": "Error Fetching Articles", "abstract": str(e), "authors": "N/A", "url": "#"}]
def save_as_text(content, filename):
"""Saves AI-generated content as a TXT file."""
with tempfile.NamedTemporaryFile(delete=False, suffix=".txt") as tmp_file:
tmp_file.write(content.encode())
return tmp_file.name, filename
def save_as_pdf(content, filename):
"""Saves AI-generated content as a PDF file."""
with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp_file:
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
pdf.multi_cell(0, 10, content)
pdf.output(tmp_file.name)
return tmp_file.name, filename