File size: 2,707 Bytes
5feba25 | 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 | def prioritize_features(missing_features: list) -> list:
"""
Prioritize missing features for asking in natural order.
Priority: Critical Basics → Key Metrics → Lifestyle → Wellness → Medical
"""
priority_order = [
"Age", "Blood Pressure", "Glucose", # Critical basics
"BMI", "Cholesterol", "HbA1c", # Key metrics
"Smoking", "Alcohol", "Physical Activity", # Lifestyle
"Sleep Hours", "Stress Level", "Diet Score", # Wellness
"Triglycerides", "Family History", "Oxygen Saturation", "LengthOfStay" # Medical
]
# Sort missing features by priority
sorted_features = sorted(missing_features,
key=lambda x: priority_order.index(x) if x in priority_order else 999)
return sorted_features
def generate_question(missing_features: list) -> str:
"""
Generate warm, empathetic questions for ONE missing feature at a time.
This keeps the user focused on one health metric at a time, improving UX.
Args:
missing_features: List of missing feature names (typically just 1)
Returns:
Formatted question string asking for the first missing item
"""
questions = {
"Age": "Could you tell me your age?",
"Glucose": "What's your typical glucose level (in mg/dL)?",
"Smoking": "Do you smoke, or have you smoked in the past? (yes/no)",
"Family History": "Is there a family history of disease or health conditions? (yes/no)",
"HbA1c": "What's your HbA1c level (%)? (This measures average blood sugar over 3 months)",
"Diet Score": "How would you rate your overall diet quality on a scale of 1-10?",
"Alcohol": "Do you consume alcohol regularly? (yes/no)",
"Physical Activity": "How many hours per week do you typically exercise or stay physically active?",
"Blood Pressure": "What's your blood pressure reading? (e.g., 120/80)",
"BMI": "What's your BMI (Body Mass Index)?",
"Cholesterol": "What's your cholesterol level (in mg/dL)?",
"Sleep Hours": "How many hours of sleep do you typically get per night?",
"Stress Level": "How would you rate your current stress level on a scale of 1-10?",
"Triglycerides": "What's your triglycerides level (in mg/dL)?",
"Oxygen Saturation": "What's your oxygen saturation level (%)? (Normal is 95-100%)",
"LengthOfStay": "How many days were you hospitalized, if applicable?"
}
if not missing_features:
return ""
# Ask for only 1 item at a time to keep user focused
feature = missing_features[0]
return f"**{feature}:** {questions.get(feature, f'Please provide {feature}')}" |