ocr-2 / ocr /api /prompts.py
brestok's picture
fixed consult notes
e8a8ed7
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()