File size: 3,078 Bytes
36b8a4a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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