File size: 10,836 Bytes
24214fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
#!/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)