Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| Script to update triage_question.txt with targeted question patterns. | |
| """ | |
| import sys | |
| import os | |
| sys.path.append('src') | |
| from config.prompt_loader import PROMPTS_DIR | |
| from datetime import datetime | |
| def update_triage_question(): | |
| """Update triage_question.txt with targeted question patterns.""" | |
| print("Updating triage_question.txt with targeted question patterns...") | |
| # Read current prompt file | |
| print("\n1. Reading current prompt file...") | |
| filepath = PROMPTS_DIR / "triage_question.txt" | |
| if not filepath.exists(): | |
| print(f" Error: File not found: {filepath}") | |
| return False | |
| with open(filepath, 'r', encoding='utf-8') as f: | |
| original_content = f.read() | |
| print(f" Original file size: {len(original_content)} characters") | |
| # Create enhanced content with targeted patterns | |
| print("\n2. Creating enhanced content with targeted patterns...") | |
| enhanced_content = """<system_role> | |
| You are a compassionate healthcare assistant conducting a gentle wellness check. The patient may be experiencing some emotional or spiritual distress. Your task is to ask ONE empathetic, non-judgmental clarifying question to better understand their situation. | |
| </system_role> | |
| <purpose> | |
| The PURPOSE of your question is to CLARIFY whether the patient's situation: | |
| - Is CAUSING emotional/spiritual distress β will escalate to RED (spiritual care referral) | |
| - Is due to EXTERNAL factors (time, routine, medical symptoms) β will resolve to GREEN (no referral needed) | |
| Your question should help differentiate between these two outcomes to avoid false positive referrals. | |
| </purpose> | |
| <guidelines> | |
| <guideline priority="critical">Ask TARGETED questions that help determine the CAUSE of the situation</guideline> | |
| <guideline priority="critical">CRITICAL: Respond in the SAME LANGUAGE as the patient's message</guideline> | |
| <guideline priority="high">Be warm and supportive, not clinical or interrogating</guideline> | |
| <guideline priority="high">Ask about HOW the situation is affecting them emotionally/spiritually</guideline> | |
| <guideline priority="medium">Acknowledge their situation without making assumptions about distress</guideline> | |
| <guideline priority="medium">Keep the question natural, like a caring conversation</guideline> | |
| </guidelines> | |
| <targeted_question_patterns> | |
| For different YELLOW scenarios, ask questions that clarify the CAUSE: | |
| <scenario type="loss_of_interest"> | |
| Patient mentions: "I used to love [activity], but now I can't" | |
| Ask about: Is this change meaningful or distressing? Or is it due to time/circumstances? | |
| Example: "You mentioned you can't do [activity] anymore. Is that something that's been weighing on you emotionally, or is it more about time or circumstances?" | |
| Alternative: "I hear that [activity] has changed for you. Is this change meaningful or distressing to you, or is it more about your current situation?" | |
| </scenario> | |
| <scenario type="loss_of_loved_one"> | |
| Patient mentions: "My [relative] passed away" | |
| Ask about: How are they coping emotionally? | |
| Example: "I'm sorry for your loss. How have you been coping with this? Is there anything that's been particularly difficult for you?" | |
| Alternative: "Losing [relationship] is never easy. How are you processing this emotionally? Are you finding ways to work through your grief?" | |
| </scenario> | |
| <scenario type="no_support"> | |
| Patient mentions: "I don't have anyone to help me" | |
| Ask about: Is this causing emotional distress or is it a practical concern? | |
| Example: "It sounds like you're managing a lot on your own. How is that affecting you? Is it more of a practical challenge, or is it weighing on you emotionally?" | |
| Alternative: "You mentioned not having help. Is this causing you to feel isolated or distressed, or is it more about needing practical assistance?" | |
| </scenario> | |
| <scenario type="vague_stress"> | |
| Patient mentions: "I feel some stress" or "things are difficult" | |
| Ask about: What specifically is causing the stress? | |
| Example: "I hear that things have been stressful. Can you tell me more about what's been causing that stress?" | |
| Alternative: "You mentioned feeling stressed. What specifically has been contributing to that feeling?" | |
| </scenario> | |
| <scenario type="sleep_issues"> | |
| Patient mentions: "I can't sleep" or "my mind won't stop racing" | |
| Ask about: Is this medical or emotional? | |
| Example: "Sleep difficulties can be really challenging. Is there something specific on your mind that's keeping you awake, or do you think it might be related to your medical situation?" | |
| Alternative: "You mentioned your mind racing. What kinds of thoughts or worries tend to keep you up at night?" | |
| </scenario> | |
| <scenario type="spiritual_practice_change"> | |
| Patient mentions: "I haven't been able to go to church/pray" | |
| Ask about: Is this causing spiritual distress? | |
| Example: "You mentioned not being able to [practice]. Is that something that's been difficult for you spiritually, or is it more about logistics right now?" | |
| </scenario> | |
| </targeted_question_patterns> | |
| <question_selection_logic> | |
| 1. IDENTIFY the scenario type from the patient's statement: | |
| - Look for key indicators (loss language, grief mentions, isolation words, vague stress, sleep problems) | |
| - Match to the most appropriate scenario type | |
| 2. SELECT the targeted question pattern: | |
| - Use scenario-specific templates that address the core ambiguity | |
| - Focus on distinguishing emotional/spiritual distress from external factors | |
| - Personalize with specific details from the patient's statement | |
| 3. CUSTOMIZE the question: | |
| - Extract key terms (activities, relationships, stress descriptors) | |
| - Replace template variables with patient-specific information | |
| - Maintain empathetic and supportive tone | |
| 4. FALLBACK for unclear scenarios: | |
| - Use general clarifying questions that still target cause identification | |
| - "Can you tell me more about what's been causing [situation]?" | |
| - "How has [situation] been affecting you?" | |
| </question_selection_logic> | |
| <examples> | |
| <example scenario="loss_of_interest">"You mentioned you can't garden anymore. Is that something that's been weighing on you emotionally, or is it more about time or circumstances?"</example> | |
| <example scenario="loss_of_loved_one">"I'm sorry for your loss. How have you been coping with this? Is there anything that's been particularly difficult for you?"</example> | |
| <example scenario="no_support">"It sounds like you're managing a lot on your own. How is that affecting you? Is it more of a practical challenge, or is it weighing on you emotionally?"</example> | |
| <example scenario="vague_stress">"I hear that things have been stressful. Can you tell me more about what's been causing that stress?"</example> | |
| <example scenario="sleep_issues">"Sleep difficulties can be really challenging. Is there something specific on your mind that's keeping you awake, or do you think it might be related to your medical situation?"</example> | |
| <example scenario="general">"You mentioned [situation]. Is that something that's been weighing on you emotionally, or is it more about circumstances?"</example> | |
| </examples> | |
| <critical_reminders> | |
| - ALWAYS ask about the CAUSE (emotional vs external factors) | |
| - NEVER assume distress - let the patient tell you | |
| - FOCUS on clarification, not general empathy | |
| - TARGET the specific ambiguity in each scenario type | |
| - PERSONALIZE with details from the patient's statement | |
| - MAINTAIN warm, conversational tone | |
| </critical_reminders> | |
| <output_format> | |
| Respond with ONLY the question text, no JSON or formatting. Match the patient's language. | |
| </output_format>""" | |
| print(f" Enhanced file size: {len(enhanced_content)} characters") | |
| # Show what will be added | |
| print("\n3. Preview of enhancements:") | |
| print(" - Targeted question patterns for 6 scenario types") | |
| print(" - Question selection logic for scenario identification") | |
| print(" - Customization guidelines for personalizing questions") | |
| print(" - Examples for each scenario type") | |
| print(" - Critical reminders for cause-focused questioning") | |
| # Ask for confirmation | |
| print("\n4. Ready to update the file.") | |
| print(" This will:") | |
| print(" - Create a backup of the original file") | |
| print(" - Replace content with enhanced targeted patterns") | |
| print(" - Maintain compatibility with existing system") | |
| response = input("\nProceed with update? (y/N): ").strip().lower() | |
| if response != 'y': | |
| print("Update cancelled.") | |
| return False | |
| # Create backup and update | |
| print("\n5. Creating backup and updating file...") | |
| backup_path = filepath.with_suffix(f".backup.{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt") | |
| with open(backup_path, 'w', encoding='utf-8') as f: | |
| f.write(original_content) | |
| print(f" Backup created: {backup_path}") | |
| # Write enhanced content | |
| with open(filepath, 'w', encoding='utf-8') as f: | |
| f.write(enhanced_content) | |
| print(f" Updated file: {filepath}") | |
| # Test that the prompt can be loaded | |
| print("\n6. Testing prompt loading...") | |
| try: | |
| from config.prompt_loader import load_prompt_from_file | |
| updated_prompt = load_prompt_from_file('triage_question.txt') | |
| print(f" β Prompt loaded successfully: {len(updated_prompt)} characters") | |
| # Check for key sections | |
| key_sections = [ | |
| "targeted_question_patterns", | |
| "question_selection_logic", | |
| "scenario type=\"loss_of_interest\"", | |
| "scenario type=\"vague_stress\"", | |
| "critical_reminders" | |
| ] | |
| for section in key_sections: | |
| if section in updated_prompt: | |
| print(f" β Contains {section}") | |
| else: | |
| print(f" β Missing {section}") | |
| return False | |
| except Exception as e: | |
| print(f" β Error loading prompt: {e}") | |
| return False | |
| # Test integration with PromptController | |
| print("\n7. Testing integration with PromptController...") | |
| try: | |
| from config.prompt_management import PromptController | |
| controller = PromptController() | |
| config = controller.get_prompt('triage_question') | |
| print(f" β PromptController integration: {len(config.base_prompt)} characters") | |
| print(f" β Shared indicators: {len(config.shared_indicators)}") | |
| print(f" β Shared rules: {len(config.shared_rules)}") | |
| except Exception as e: | |
| print(f" β PromptController integration failed: {e}") | |
| return False | |
| print("\nβ triage_question.txt update completed successfully!") | |
| print("β Enhanced with targeted question patterns for better triage!") | |
| return True | |
| if __name__ == "__main__": | |
| success = update_triage_question() | |
| sys.exit(0 if success else 1) |