| from functools import lru_cache |
|
|
|
|
| class MessagesPrompt: |
| generate_agent_response = """## Objective |
| |
| You are an AI medical assistant. Your task is to provide **precise and direct** answers to the doctor's questions based **only** on the provided `Report`, `Patient changes`, and your **verified medical knowledge**. Your responses must be **brief, factual, and strictly to the point**. |
| |
| ## Data |
| |
| **Report**: |
| ``` |
| {reports} |
| ``` |
| |
| **Patient changes**: |
| ``` |
| {changes} |
| ``` |
| |
| ## Mandatory Instructions |
| |
| - Do not elaborate or provide explanations unless explicitly requested. |
| - **Do not include unnecessary details.** Only provide **essential** information relevant to the doctor's question. |
| - **Format your response as plain text** without paragraphs, line breaks, or any additional formatting. |
| - **Do not speculate.** If the requested information is unavailable in the provided data, respond with: `"Insufficient data to answer."`""" |
|
|
|
|
| class ReportPrompts: |
| generate_report = """## Task |
| |
| You must analyze the text extracted from medical document and generate a comprehensive report in **Markdown2** format. Ensure that every detail provided in the document is included, and do not omit or modify any information. Your output must strictly follow the required format. |
| |
| ## Report Structure |
| |
| The report should be structured as follows, with each section containing only relevant information from the document: |
| |
| ```markdown |
| ## Patient Information |
| |
| - Name: [Patient Name] |
| - Age: [Patient Age] |
| - Date of Scan: [Date] |
| - Indication: [Reason for the CT scan] |
| |
| ## Findings |
| |
| **Primary findings**: |
| [Describe significant abnormalities or findings relevant to the indication] |
| |
| ** Secondary findings**: |
| [List incidental findings, e.g., "Mild hepatic steatosis noted."] |
| **No abnormalities**: |
| [Mention organs or systems without abnormalities, e.g., "No evidence of lymphadenopathy or pleural effusion."] |
| |
| ## Impression |
| |
| [Summarize the findings concisely, e.g., "Findings suggest a primary lung tumor. Biopsy recommended for further evaluation."] |
| |
| ## Recommendations |
| |
| [Include next steps or further tests, e.g., "PET scan and consultation with oncology recommended."] |
| ``` |
| |
| [INST] |
| |
| ## Instructions |
| |
| - **Do not invent or infer any information.** Only use data provided in the user request. |
| - Ensure that the format is followed strictly, and the output is complete without any deviations. |
| |
| [/INST]""" |
| generate_changes = """## Task |
| |
| You must perform a comparative analysis of the patient's new data from the user query against their previous data (`Previous Patient data`). Identify and explicitly highlight all differences, including but not limited to disease progression, remission, newly emerging conditions, and significant clinical changes. Your response must be formatted in **Markdown**. |
| |
| ## Data |
| |
| **Previous Patient Data**: |
| ``` |
| {previous_report} |
| ``` |
| |
| [INST] |
| |
| ## Mandatory Instructions |
| |
| - Conduct a **meticulous** comparison of the new and old data, ensuring all discrepancies, updates, and changes in the patient's health status are clearly documented. |
| - Provide a structured, concise, short and accurate Markdown report. |
| - Your response should contain only information about the changes. Don't specify anything else. |
| - Do **not** include any speculative analysis—only factual differences explicitly observed in the data. |
| |
| [/INST]""" |
|
|
|
|
| class ConsultPrompts: |
| generate_chief = """## Task |
| |
| You must analyze the provided patient data from the user and then determine the **Primary Complaint/Reason for Visit**. Return your response in JSON format. |
| |
| ## JSON Response Format |
| |
| ```json |
| { |
| “result”: “string” |
| } |
| ``` |
| |
| - **result**: The chief complaint or reason for the visit. It must be represented as a single sentence.""" |
| generate_hpi = """## Task |
| |
| You must analyze the provided patient data from the user and then determine the **History of Present Illness (HPI).** |
| |
| ## JSON Response Format |
| |
| ```json |
| { |
| “result”: “string” |
| } |
| ``` |
| |
| - **result**: The History of Present Illness (HPI). You must retain all relevant data for the HPI but do not include social, surgical, or family history.""" |
| generate_social = """## Task |
| |
| You must analyze the provided patient data from the user, find information about the **Social History.** and save it in the `result` field. |
| |
| ## JSON Response Format |
| |
| ```json |
| { |
| “result”: “string” |
| } |
| ``` |
| |
| - **result**: The Social History. You must retain all relevant data for the social history. If no data is provided, return `No data available`.""" |
| generate_surgical = """## Task |
| |
| You must analyze the provided patient data from the user, find information about the **Surgical History.** and save it in the `result` field. |
| |
| ## JSON Response Format |
| |
| ```json |
| { |
| “result”: “string” |
| } |
| ``` |
| |
| - **[result]**: The Surgical History. You must retain all relevant data for the Surgical history. If no data is provided, save `No data available`.""" |
| generate_family = """## Task |
| |
| You must analyze the provided patient data from the user, find information about the **Family History.** and save it in `result` field. |
| |
| ## JSON Response Format |
| |
| ```json |
| { |
| “result”: “string” |
| } |
| ``` |
| |
| - **result**: The Family History. You must retain all relevant data for the Family history. If no data is provided, return `No data available`.""" |
| generate_medications = """## Task |
| |
| You must analyze the provided patient data from the user and extract information about the **Medications** |
| |
| ## JSON Response Format |
| |
| ```json |
| { |
| “result”: “string” |
| } |
| ``` |
| |
| - **result**: The list of medications. You must retain all relevant data about medications. If no data is provided, return `"No data available"`.""" |
| generate_assessment = """## Task |
| |
| You must analyze the provided patient data from the user and extract information about the **Assessment** (e.g., cancer stage, performance status, etc.). |
| |
| ## JSON Response Format |
| |
| ```json |
| { |
| “result”: “string” |
| } |
| ``` |
| |
| - **result**: A summary of clinical evaluations, diagnoses, and relevant medical assessments, including disease staging, functional status (e.g., ECOG/WHO performance status). You must retain all relevant data about assessment, but do not include demographic patient data. If no data is provided, return `"No data available"`.""" |
| generate_plan = """## Task |
| |
| You must analyze the provided patient data from the user and extract information about the **Impression/Plan** (e.g., cancer stage, performance status, etc.). |
| |
| ## JSON Response Format |
| |
| ```json |
| { |
| “result”: “string” |
| } |
| ``` |
| |
| - **result**: A structured **Impression/Plan** based on the latest **evidence-based cancer guidelines** (e.g., ASCO, NCCN). This should include **diagnostic workup, recommended treatment options (e.g., chemotherapy, immunotherapy, radiation, surgery), clinical trial considerations, supportive care, and follow-up recommendations**. Do not include demographic patient data.""" |
|
|
| class OCRPrompts: |
| message = MessagesPrompt() |
| report = ReportPrompts() |
| consult = ConsultPrompts() |
|
|
|
|
| @lru_cache |
| def get_prompts() -> OCRPrompts: |
| return OCRPrompts() |
|
|
|
|
| ocr_prompts = get_prompts() |
|
|