Commit
·
5b8ce4d
1
Parent(s):
f48d0d7
made changes to the prompts for report section
Browse files- interface.py +25 -21
- medrax/docs/system_prompts.txt +37 -39
interface.py
CHANGED
@@ -275,10 +275,10 @@ def create_demo(agent, tools_dict):
|
|
275 |
|
276 |
with gr.Tab(label="Report section"):
|
277 |
generate_report_btn = gr.Button("Generate Report")
|
278 |
-
diseases_df = gr.Dataframe(
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
conclusion_tb = gr.Textbox(label="Conclusion", interactive=False, visible=False)
|
283 |
with gr.Row():
|
284 |
approve_btn = gr.Button("Approve", visible=False)
|
@@ -324,19 +324,19 @@ def create_demo(agent, tools_dict):
|
|
324 |
|
325 |
def generate_report():
|
326 |
result = interface.agent.summarize_message(interface.current_thread_id)
|
327 |
-
table = [[d["name"], d["info"]] for d in result["Disease"]]
|
328 |
return (
|
329 |
-
gr.update(value=table, interactive=True, visible=True),
|
330 |
gr.update(value=result["Conclusion"], lines=4, interactive=True, visible=True),
|
331 |
gr.update(visible=True),
|
332 |
gr.update(visible=True),
|
333 |
)
|
334 |
|
335 |
-
def records_to_pdf(table, conclusion) -> Path:
|
|
|
336 |
"""
|
337 |
Writes a PDF report under ./reports/ and returns the Path.
|
338 |
"""
|
339 |
-
print(type(table))
|
340 |
pdf = FPDF()
|
341 |
pdf.set_auto_page_break(auto=True, margin=15)
|
342 |
pdf.add_page()
|
@@ -345,17 +345,17 @@ def create_demo(agent, tools_dict):
|
|
345 |
pdf.cell(0, 10, "Chest-X-ray Report", ln=1, align="C")
|
346 |
pdf.ln(4)
|
347 |
|
348 |
-
pdf.set_font(family="Helvetica", style="B")
|
349 |
-
pdf.cell(60, 8, "Disease")
|
350 |
-
pdf.cell(0, 8, "Information", ln=1)
|
351 |
-
pdf.set_font(family="Helvetica", style="")
|
352 |
|
353 |
-
for idx, row in table.iterrows():
|
354 |
-
|
355 |
|
356 |
-
pdf.ln(4)
|
357 |
-
pdf.set_font(family="Helvetica", style="B")
|
358 |
-
pdf.cell(0, 8, "Conclusion", ln=1)
|
359 |
pdf.set_font(family="Helvetica", style="")
|
360 |
pdf.multi_cell(0, 8, conclusion)
|
361 |
|
@@ -363,8 +363,10 @@ def create_demo(agent, tools_dict):
|
|
363 |
pdf.output(str(pdf_path))
|
364 |
return pdf_path
|
365 |
|
366 |
-
def build_pdf_and_preview(table, conclusion):
|
367 |
-
|
|
|
|
|
368 |
|
369 |
iframe_html = (
|
370 |
f'<iframe src="file={pdf_path}" '
|
@@ -430,10 +432,12 @@ def create_demo(agent, tools_dict):
|
|
430 |
|
431 |
clear_btn.click(clear_chat, outputs=[chatbot, image_display])
|
432 |
new_thread_btn.click(new_thread, outputs=[chatbot, image_display])
|
433 |
-
generate_report_btn.click(generate_report, outputs=[diseases_df, conclusion_tb, approve_btn, reject_btn])
|
|
|
434 |
approve_btn.click(
|
435 |
build_pdf_and_preview,
|
436 |
-
inputs=[diseases_df, conclusion_tb],
|
|
|
437 |
outputs=[download_pdf_btn, pdf_preview],
|
438 |
)
|
439 |
reject_btn.click(show_reject_ui, outputs=[rejection_text, submit_reject_btn, cancel_reject_btn])
|
|
|
275 |
|
276 |
with gr.Tab(label="Report section"):
|
277 |
generate_report_btn = gr.Button("Generate Report")
|
278 |
+
# diseases_df = gr.Dataframe(
|
279 |
+
# headers=["Disease", "Info"],
|
280 |
+
# datatype=["str", "str"],
|
281 |
+
# interactive=False, visible=False, max_height=220)
|
282 |
conclusion_tb = gr.Textbox(label="Conclusion", interactive=False, visible=False)
|
283 |
with gr.Row():
|
284 |
approve_btn = gr.Button("Approve", visible=False)
|
|
|
324 |
|
325 |
def generate_report():
|
326 |
result = interface.agent.summarize_message(interface.current_thread_id)
|
327 |
+
# table = [[d["name"], d["info"]] for d in result["Disease"]]
|
328 |
return (
|
329 |
+
# gr.update(value=table, interactive=True, visible=True),
|
330 |
gr.update(value=result["Conclusion"], lines=4, interactive=True, visible=True),
|
331 |
gr.update(visible=True),
|
332 |
gr.update(visible=True),
|
333 |
)
|
334 |
|
335 |
+
# def records_to_pdf(table, conclusion) -> Path:
|
336 |
+
def records_to_pdf(conclusion) -> Path:
|
337 |
"""
|
338 |
Writes a PDF report under ./reports/ and returns the Path.
|
339 |
"""
|
|
|
340 |
pdf = FPDF()
|
341 |
pdf.set_auto_page_break(auto=True, margin=15)
|
342 |
pdf.add_page()
|
|
|
345 |
pdf.cell(0, 10, "Chest-X-ray Report", ln=1, align="C")
|
346 |
pdf.ln(4)
|
347 |
|
348 |
+
# pdf.set_font(family="Helvetica", style="B")
|
349 |
+
# pdf.cell(60, 8, "Disease")
|
350 |
+
# pdf.cell(0, 8, "Information", ln=1)
|
351 |
+
# pdf.set_font(family="Helvetica", style="")
|
352 |
|
353 |
+
# for idx, row in table.iterrows():
|
354 |
+
# pdf.multi_cell(0, 8, f"{row['Disease']}: {row['Info']}")
|
355 |
|
356 |
+
# pdf.ln(4)
|
357 |
+
# pdf.set_font(family="Helvetica", style="B")
|
358 |
+
# pdf.cell(0, 8, "Conclusion", ln=1)
|
359 |
pdf.set_font(family="Helvetica", style="")
|
360 |
pdf.multi_cell(0, 8, conclusion)
|
361 |
|
|
|
363 |
pdf.output(str(pdf_path))
|
364 |
return pdf_path
|
365 |
|
366 |
+
# def build_pdf_and_preview(table, conclusion):
|
367 |
+
def build_pdf_and_preview(conclusion):
|
368 |
+
# pdf_path = records_to_pdf(table, conclusion)
|
369 |
+
pdf_path = records_to_pdf(conclusion)
|
370 |
|
371 |
iframe_html = (
|
372 |
f'<iframe src="file={pdf_path}" '
|
|
|
432 |
|
433 |
clear_btn.click(clear_chat, outputs=[chatbot, image_display])
|
434 |
new_thread_btn.click(new_thread, outputs=[chatbot, image_display])
|
435 |
+
# generate_report_btn.click(generate_report, outputs=[diseases_df, conclusion_tb, approve_btn, reject_btn])
|
436 |
+
generate_report_btn.click(generate_report, outputs=[conclusion_tb, approve_btn, reject_btn])
|
437 |
approve_btn.click(
|
438 |
build_pdf_and_preview,
|
439 |
+
# inputs=[diseases_df, conclusion_tb],
|
440 |
+
inputs=[conclusion_tb],
|
441 |
outputs=[download_pdf_btn, pdf_preview],
|
442 |
)
|
443 |
reject_btn.click(show_reject_ui, outputs=[rejection_text, submit_reject_btn, cancel_reject_btn])
|
medrax/docs/system_prompts.txt
CHANGED
@@ -42,47 +42,45 @@ You are a helpful AI assistant. Your role is to assist users with a wide range o
|
|
42 |
|
43 |
|
44 |
[SUMMARIZE_SYSTEM_PROMPT]
|
45 |
-
You are an expert medical
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
|
51 |
-
[SUMMARIZE_USER_PROMPT]
|
52 |
-
Your task is to go through the following chat history and create a summary by identifying the diseases mentioned and providing relevant information.
|
53 |
|
54 |
-
|
|
|
55 |
{chat_messages}
|
56 |
|
57 |
-
###
|
58 |
-
|
59 |
-
- The description related to the disease must be derived from the information available in the chat history and there must be no additional information provided.
|
60 |
-
- In case no diseases are found, in the response, please indicate 'No Evident Diseases' under the 'name' key and state the reason for it under the 'info' key.
|
61 |
-
|
62 |
-
### Expected Response Schema:
|
63 |
-
Always respond with a single valid $JSON_BLOB as follows:
|
64 |
-
If diseases are found:
|
65 |
-
```json
|
66 |
-
{{
|
67 |
-
"Disease": [
|
68 |
-
{{
|
69 |
-
"name": "<string: The name of the disease.>",
|
70 |
-
"info": "<string: A short description regarding disease (can include key factors and figures related to it).>"
|
71 |
-
}}
|
72 |
-
],
|
73 |
-
"Conclusion": "<string: A final information providing a summary based on the values within the 'Disease' key.>"
|
74 |
-
}}
|
75 |
-
```
|
76 |
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
{{
|
82 |
-
"name": "<string: No Evident Diseases.>",
|
83 |
-
"info": "<string: A short description explaining the reason why there are no diseases found.>"
|
84 |
-
}}
|
85 |
-
],
|
86 |
-
"Conclusion": "<string: A final information providing a summary based on the values within the 'Disease' key.>"
|
87 |
-
}}
|
88 |
-
```
|
|
|
42 |
|
43 |
|
44 |
[SUMMARIZE_SYSTEM_PROMPT]
|
45 |
+
You are **MedReport-GPT** an expert medical documentation assistant.
|
46 |
+
|
47 |
+
Your job is to read a list of chat messages (supplied in JSON) and distil them into a single, well-structured clinical summary appropriate for healthcare professionals (physicians, nurses, pharmacists, clinical coders, etc.).
|
48 |
+
|
49 |
+
Each item in the JSON input has:
|
50 |
+
– type : The type of message. Can either be Human message, AI message, or Tool message.
|
51 |
+
– content: The textual message
|
52 |
+
|
53 |
+
Write formally, using standard medical terminology and abbreviations that a clinician would understand. Organise the summary under the following fixed section headings (include a heading even if the section must be left blank or state “Not mentioned”):
|
54 |
+
|
55 |
+
1. Presenting Concerns / Chief Complaints
|
56 |
+
2. Medications & Therapies
|
57 |
+
3. Examination / Vital Signs
|
58 |
+
4. Investigations & Results
|
59 |
+
5. Differential Diagnoses (if explicitly discussed)
|
60 |
+
6. Assessment & Impression
|
61 |
+
7. Management Plan / Recommendations
|
62 |
+
8. Follow-up & Next Steps
|
63 |
+
|
64 |
+
Within each heading, provide detailed information and use bullet points if necessary.
|
65 |
+
If **no medical information** is found at all, state under heading 1: “No clinically relevant data in chat history” and leave the remaining sections as “N/A”.
|
66 |
+
|
67 |
+
**Output format**
|
68 |
+
Return **exactly one valid JSON object** with this structure:
|
69 |
+
|
70 |
+
```json
|
71 |
+
{{
|
72 |
+
"Conclusion": "<single string containing the formatted report; use newline characters (\\n) to separate lines>"
|
73 |
+
}}
|
74 |
|
|
|
|
|
75 |
|
76 |
+
[SUMMARIZE_USER_PROMPT]
|
77 |
+
### Chat History
|
78 |
{chat_messages}
|
79 |
|
80 |
+
### Task
|
81 |
+
Create a single comprehensive **Clinical Summary Report** following the heading template defined in the system prompt.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
|
83 |
+
Remember:
|
84 |
+
* Include only details present in the chat history.
|
85 |
+
* Do not add any information that is not explicitly supported by the messages.
|
86 |
+
* Maintain professional tone suitable for medical records.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|