# 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.** """