Ruurd commited on
Commit
a491fde
·
1 Parent(s): 0c58ef6

Fix initial prompt injection

Browse files
Files changed (1) hide show
  1. app.py +32 -42
app.py CHANGED
@@ -97,17 +97,20 @@ def chat_with_model(messages):
97
  yield messages + [{"role": "assistant", "content": "⚠️ No model loaded."}]
98
  return
99
 
 
 
 
 
 
100
  pad_id = current_tokenizer.pad_token_id
101
  eos_id = current_tokenizer.eos_token_id
102
  if pad_id is None:
103
  pad_id = current_tokenizer.unk_token_id or 0
104
 
105
- output_text = ""
106
- in_think = False
107
- max_new_tokens = 1024
108
- generated_tokens = 0
109
 
110
- # PREPARE SYSTEM + INITIAL MESSAGES
111
  system_messages = [
112
  {
113
  "role": "system",
@@ -132,26 +135,8 @@ def chat_with_model(messages):
132
  }
133
  ]
134
 
135
- # Optional: if you later add available_images, you could append another system message.
136
-
137
- welcome_message = (
138
- "**Welcome to the Radiologist's Companion!**\n\n"
139
- "You can ask me about the patient's medical history or available imaging data.\n"
140
- "- I can summarize key details from the EHR.\n"
141
- "- I can tell you which medical images are available.\n"
142
- "- If you'd like an organ segmentation (e.g. spleen, liver, kidney_left, colon, femur_right) on an abdominal CT scan, just ask!\n\n"
143
- "**Example Requests:**\n"
144
- "- \"What do we know about this patient?\"\n"
145
- "- \"Which images are available for this patient?\"\n"
146
- "- \"Can you segment the spleen from the CT scan?\"\n"
147
- )
148
-
149
- # If it's the first user message (i.e., no assistant yet), prepend welcome
150
- if len(messages) == 1 and messages[0]['role'] == 'user':
151
- messages = [{"role": "assistant", "content": welcome_message}] + messages
152
 
153
- # Merge full conversation
154
- full_messages = system_messages + messages
155
 
156
  prompt = format_prompt(full_messages)
157
 
@@ -277,31 +262,19 @@ def add_user_message(user_input, history):
277
  return "", patient_conversations[current_id]
278
 
279
 
280
-
281
  def autofill_patient(patient_key):
282
  if patient_key in patient_db:
283
  info = patient_db[patient_key]
284
 
285
- # Init conversation if not existing
286
  if info["id"] not in patient_conversations:
287
- welcome_message = (
288
- "**Welcome to the Radiologist's Companion!**\n\n"
289
- "You can ask me about the patient's medical history or available imaging data.\n"
290
- "- I can summarize key details from the EHR.\n"
291
- "- I can tell you which medical images are available.\n"
292
- "- If you'd like an organ segmentation (e.g. spleen, liver, kidney_left, colon, femur_right) on an abdominal CT scan, just ask!\n\n"
293
- "**Example Requests:**\n"
294
- "- \"What do we know about this patient?\"\n"
295
- "- \"Which images are available for this patient?\"\n"
296
- "- \"Can you segment the spleen from the CT scan?\"\n"
297
- )
298
-
299
- patient_conversations[info["id"]] = [{"role": "assistant", "content": welcome_message}]
300
 
301
  return info["name"], info["age"], info["id"], info["notes"]
302
  return "", "", "", ""
303
 
304
 
 
305
  with gr.Blocks(css=".gradio-container {height: 100vh; overflow: hidden;}") as demo:
306
  gr.Markdown("<h2 style='text-align: center;'>Radiologist's Companion</h2>")
307
 
@@ -347,11 +320,28 @@ with gr.Blocks(css=".gradio-container {height: 100vh; overflow: hidden;}") as de
347
  # After patient selected, load their conversation into chatbot
348
  def load_patient_conversation(patient_key):
349
  if patient_key in patient_db:
350
- patient_id = patient_db[patient_key]["id"]
351
- history = patient_conversations.get(patient_id, [])
352
- return history
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
353
  return []
354
 
 
355
  patient_selector.change(
356
  autofill_patient,
357
  inputs=[patient_selector],
 
97
  yield messages + [{"role": "assistant", "content": "⚠️ No model loaded."}]
98
  return
99
 
100
+ current_id = patient_id.value
101
+ if current_id is None:
102
+ yield messages
103
+ return
104
+
105
  pad_id = current_tokenizer.pad_token_id
106
  eos_id = current_tokenizer.eos_token_id
107
  if pad_id is None:
108
  pad_id = current_tokenizer.unk_token_id or 0
109
 
110
+ # Remove the initial welcome if present
111
+ filtered_messages = [msg for msg in messages if not (msg["role"] == "assistant" and "Welcome to the Radiologist's Companion" in msg["content"])]
 
 
112
 
113
+ # Build system context
114
  system_messages = [
115
  {
116
  "role": "system",
 
135
  }
136
  ]
137
 
138
+ full_messages = system_messages + filtered_messages
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
 
 
 
140
 
141
  prompt = format_prompt(full_messages)
142
 
 
262
  return "", patient_conversations[current_id]
263
 
264
 
 
265
  def autofill_patient(patient_key):
266
  if patient_key in patient_db:
267
  info = patient_db[patient_key]
268
 
269
+ # Init empty conversation if not existing
270
  if info["id"] not in patient_conversations:
271
+ patient_conversations[info["id"]] = []
 
 
 
 
 
 
 
 
 
 
 
 
272
 
273
  return info["name"], info["age"], info["id"], info["notes"]
274
  return "", "", "", ""
275
 
276
 
277
+
278
  with gr.Blocks(css=".gradio-container {height: 100vh; overflow: hidden;}") as demo:
279
  gr.Markdown("<h2 style='text-align: center;'>Radiologist's Companion</h2>")
280
 
 
320
  # After patient selected, load their conversation into chatbot
321
  def load_patient_conversation(patient_key):
322
  if patient_key in patient_db:
323
+ patient_id_val = patient_db[patient_key]["id"]
324
+ history = patient_conversations.get(patient_id_val, [])
325
+
326
+ # Show welcome + history
327
+ welcome_message = {
328
+ "role": "assistant",
329
+ "content": (
330
+ "**Welcome to the Radiologist's Companion!**\n\n"
331
+ "You can ask me about the patient's medical history or available imaging data.\n"
332
+ "- I can summarize key details from the EHR.\n"
333
+ "- I can tell you which medical images are available.\n"
334
+ "- If you'd like an organ segmentation (e.g. spleen, liver, kidney_left, colon, femur_right) on an abdominal CT scan, just ask!\n\n"
335
+ "**Example Requests:**\n"
336
+ "- \"What do we know about this patient?\"\n"
337
+ "- \"Which images are available for this patient?\"\n"
338
+ "- \"Can you segment the spleen from the CT scan?\"\n"
339
+ )
340
+ }
341
+ return [welcome_message] + history
342
  return []
343
 
344
+
345
  patient_selector.change(
346
  autofill_patient,
347
  inputs=[patient_selector],