import pandas as pd import joblib import gradio as gr import json import requests MODEL_PATH = "risk_model.joblib" ZAPIER_WEBHOOK_URL = "https://hooks.zapier.com/hooks/catch/27083565/uvtxiub/" DISCLAIMER = ( "Educational demo only. This tool does not provide diagnosis, " "prescriptions, or treatment plans. If symptoms are severe or urgent, seek emergency care." ) RED_FLAGS = [ "chest pain", "chest tightness", "severe shortness of breath", "fainting", "loss of consciousness", "stroke" ] risk_model = joblib.load(MODEL_PATH) def send_urgent_alert(symptom_text, risk_score): try: requests.post(ZAPIER_WEBHOOK_URL, json={ "triage_level": "urgent", "symptom": symptom_text, "risk_score": risk_score, "message": "URGENT triage case detected by HealthBridge AI" }, timeout=5) except Exception: pass def assess(sexvar, educa, genhlth, menthlth, stress, sleep_hours, sleep_quality, duration_days, adherence_prob, symptom_text): text_lower = str(symptom_text).lower() red_flag_hit = any(flag in text_lower for flag in RED_FLAGS) input_df = pd.DataFrame([{ "user_id": 0, "SEXVAR": sexvar, "EDUCA": educa, "GENHLTH": genhlth, "MENTHLTH": menthlth, "stress_score_0_10": stress, "sleep_hours": sleep_hours, "sleep_quality_0_10": sleep_quality, "symptom_duration_days": duration_days, "adherence_prob": adherence_prob, "symptom_text": symptom_text, "triage_label": "medium" }]) risk_score = float(risk_model.predict_proba(input_df)[0][1]) if red_flag_hit: triage_level = "urgent" elif risk_score >= 0.7: triage_level = "high" elif risk_score >= 0.4: triage_level = "medium" else: triage_level = "low" if triage_level == "urgent": send_urgent_alert(symptom_text, round(risk_score, 3)) if triage_level == "urgent": next_steps = [ "🚨 Seek emergency care immediately or call emergency services.", "Do not drive yourself — ask someone nearby to help.", "Do not wait to see if symptoms improve." ] elif triage_level == "high": next_steps = [ "Contact a healthcare provider as soon as possible.", "Monitor symptoms closely and note any changes.", "Seek emergency care if symptoms worsen rapidly." ] elif triage_level == "medium": next_steps = [ "Schedule an appointment with your doctor within the next few days.", "Rest and monitor your symptoms.", "Seek urgent care if symptoms escalate." ] else: next_steps = [ "Monitor symptoms and maintain healthy routines.", "Seek professional care if symptoms persist beyond a week.", "Stay hydrated and rest as needed." ] LEVEL_COLORS = { "urgent": "#FF2D2D", "high": "#FF8C00", "medium": "#F5C518", "low": "#2ECC71" } LEVEL_BG = { "urgent": "#FFF0F0", "high": "#FFF5E6", "medium": "#FFFBEA", "low": "#F0FFF6" } LEVEL_ICONS = { "urgent": "🚨", "high": "⚠️", "medium": "🔶", "low": "✅" } color = LEVEL_COLORS[triage_level] bg = LEVEL_BG[triage_level] icon = LEVEL_ICONS[triage_level] risk_pct = int(risk_score * 100) bar_color = color steps_html = "".join(f"