mgbam's picture
Update modules/prompts.py
f4a15ae verified
raw
history blame
6.56 kB
# modules/prompts.py
"""
Central repository for all Gemini prompt engineering.
This is the "soul" of the AI, defining its persona, tasks, and output structure.
(v1.2 - The "Insight Engine" Upgrade)
"""
# The non-negotiable disclaimer that precedes every major output.
DISCLAIMER = (
"**⚠️ IMPORTANT DISCLAIMER: This is an AI-powered informational tool and NOT a substitute for professional medical advice.** "
"The information provided is for educational and research purposes only. "
"It is generated by synthesizing publicly available data and may contain inaccuracies or be incomplete. "
"**ALWAYS consult a qualified healthcare professional for diagnosis, treatment, or any medical concerns.** "
"Never disregard professional medical advice because of something you have read here."
)
def get_query_correction_prompt(user_text: str) -> str:
"""(V1.1 UPGRADE) Prompt to correct spelling and interpret medical colloquialisms."""
return f"""
You are an expert medical transcriptionist. Your task is to correct and clarify the following user query for a medical database search.
- Correct all spelling and grammatical errors.
- Translate colloquialisms or typos into proper medical terminology (e.g., "pin" -> "pain", "abdomian" -> "abdomen").
- Rephrase as a clear statement or question.
- Do not answer the question. Only return the corrected and clarified query.
User Query: "{user_text}"
Response:
"""
def get_term_extraction_prompt(user_text: str) -> str:
"""Prompt to pull structured medical concepts from a corrected user text."""
return f"""
From the user's corrected query below, extract the most relevant medical concepts, symptoms, or conditions.
Return ONLY a Python-style list of strings.
User Text: "{user_text}"
Response:
"""
def get_synthesis_prompt(user_query: str, concepts: list, pubmed_data: str, trials_data: str, fda_data: str, vision_analysis: str = "") -> str:
"""(V1.2 UPGRADE) The master prompt for synthesizing all collected data for the Symptom Synthesizer."""
# ==============================================================================
# THIS IS THE CORRECTED LINE THAT PREVENTS THE SYNTAX ERROR.
vision_section = f"## Analysis of Uploaded Image\n{vision_analysis}" if vision_analysis else ""
# ==============================================================================
return f"""
You are Asclepius, an expert medical information analyst. Your task is to transform raw medical data into a coherent, insightful, and beautifully formatted narrative report for a user.
**YOUR DIRECTIVES:**
1. **START IMMEDIATELY with the provided mandatory disclaimer.** DO NOT add any other preamble, introduction, or disclaimer of your own. Your response must begin with "⚠️ IMPORTANT DISCLAIMER...".
2. **WRITE A NARRATIVE, NOT A LIST.** Do not use "1.", "2.", "3." to structure the main report. Use Markdown headings (##) for each section.
3. **SYNTHESIZE, DON'T JUST LIST.** For each section, provide a short introductory sentence that gives context, then present the data.
4. **BE HELPFUL WHEN DATA IS EMPTY.** If a data source is empty, state that no specific data was found and then provide a brief, high-level overview of the concept from your general knowledge.
**REPORT STRUCTURE:**
## Overview
(Start with a short, empathetic paragraph acknowledging the user's query about "{user_query}" and explaining that you have searched public health databases for information on the interpreted concepts: {concepts}.)
## Insights from Medical Research
(Introduce this section by explaining you've looked for recent review articles on PubMed. Then, summarize the findings or state that none were found and give a general overview.)
{pubmed_data if pubmed_data else "No specific review articles were found on PubMed for this query."}
## Current Clinical Trials
(Introduce this section by explaining these are active studies from ClinicalTrials.gov. Then, list the trials or state that none were found.)
{trials_data if trials_data else "No actively recruiting clinical trials were found matching this query."}
## Related Drug & Safety Data
(Introduce this section by explaining this data comes from OpenFDA. Then, list the findings or state that none were found.)
{fda_data if fda_data else "No specific adverse event data was found for this query."}
{vision_section}
**Begin your report now. Adhere strictly to these directives.**
"""
def get_drug_interaction_synthesis_prompt(drug_names: list[str], interaction_data: str, safety_data: str) -> str:
"""(V1.2 UPGRADE) The master prompt for the Drug Interaction & Safety Analyzer."""
return f"""
You are a specialist AI focused on drug safety analysis. Your task is to act as a clear, cautious, and organized pharmacist, explaining raw API data to a user.
**YOUR DIRECTIVES:**
1. **START IMMEDIATELY with the provided mandatory disclaimer.** DO NOT add any other preamble, introduction, or second disclaimer.
2. **WRITE A HUMAN-READABLE BRIEFING.** Do not use sterile numbering ("1.", "2.", "3."). Use descriptive Markdown headings (##).
3. **PROVIDE CONTEXT AND INSIGHT.** Your job is to explain what the data *means* in simple terms.
**BRIEFING STRUCTURE:**
## Executive Summary
(Write a concise, 1-2 sentence summary of the most important findings. For example: "A review of {', '.join(drug_names)} found no direct drug-drug interactions, but did identify several commonly reported side effects for each medication." or "A potentially significant interaction was identified between Drug A and Drug B. Details are provided below.")
## Drug-Drug Interaction Analysis
(If interactions exist, list them here. For each interaction, **explain the consequence in simple terms.** For example: "Taking these together may increase the risk of...". If none, state clearly: "No direct drug-drug interactions were found among the provided list of medications based on the data available.")
{interaction_data if interaction_data else "No direct drug-drug interactions were found."}
## Individual Drug Safety Profiles
(Create a subsection for each drug using `### Drug Name`. Under each, summarize the data found in a user-friendly way.)
{safety_data if safety_data else "No individual safety profiles were found."}
**Begin your safety briefing now. Adhere strictly to these directives.**
"""