Add substance_use + privacy_confidentiality routes, affirm-with-question detection
Browse filesThree real product gaps surfaced by an honest test run:
Issue A — substance_use_concern route
New route fires on strong substance signals (drunk/wasted/hungover/
blackout/stoned/got high/etc.). 'high' alone deliberately stays
ambiguous so 'high anxiety' / 'high stress' do not false-positive.
Template names UMD University Health Center Psychiatry and
Substance Use Services + UMD SUIT explicitly, non-punitive framing,
confidentiality reassurance. Registry entries for the SU services
now tag substance_use_concern in route_types for retrieval scoring.
Issue B — privacy_confidentiality route
ALWAYS_DIRECT route for 'is it confidential' / 'will they tell my
parents' / 'go on my transcript' / 'is counseling private' /
FERPA / records questions. Template answers factually (CC sessions
generally confidential, FERPA basics, mandatory-disclosure
exceptions, redirect to office for legally binding specifics)
instead of deflecting to a generic OFFER. Real student concern —
asked constantly — that the prior system silently ignored.
Issue C — affirm-with-question (tag-confirm)
_minimal_response_kind no longer rejects every '?' -ending message.
Strips a single trailing '?' before the leading-affirm regex, then
rejects only if the remainder contains a wh-question word (what /
where / when / why / how / who / which). 'yeah?' / 'ok?' / 'yes
that helps?' / 'sure that works?' now correctly advance the
consent flow. 'ok so what do i do?' / 'yeah but how does that
work?' still defer to the planner (substantive question).
All regression scenarios (Conv 1 listening loop, Conv 2 F-1 +
authority misconduct, Conv 3 crisis + sycophancy, advisor_conflict,
basic_needs, ADS, 'high stress' not firing substance) verified.
- data/curated/service_graph.jsonl +2 -2
- data/profiles/umd/service_graph.jsonl +2 -2
- src/pipeline/core.py +25 -7
- src/pipeline/response_planner.py +39 -0
- src/pipeline/v2_schema.py +64 -0
|
@@ -14,8 +14,8 @@
|
|
| 14 |
{"service_id": "umd_ads_testing", "resource_name": "UMD ADS Accommodated Testing Office", "description": "ADS testing office for registered students with testing accommodations such as extended time, reduced distraction, and alternative formats.", "urgency_level": "support", "safety_tiers": ["support_navigation"], "route_types": ["accessibility_ads", "exam_stress"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["testing_accommodations", "exams", "accessibility"], "confidentiality_status": "private", "hours": "Monday-Friday 8:30 a.m.-4:30 p.m.", "contact_mode": ["phone", "email", "website"], "contact": "301-314-7217; adstest@umd.edu", "location": "0106 Shoemaker Building", "source_url": "https://ads.umd.edu/accommodations-services/accommodated-testing", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use only for testing accommodation navigation; do not infer eligibility or approval."}
|
| 15 |
{"service_id": "umd_help_center_peer_support", "resource_name": "Help Center at UMD", "description": "Student-run peer counseling and crisis intervention hotline offering free, anonymous, confidential support to the UMD community during operating hours.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["peer_helper", "loneliness_isolation", "anxiety_panic", "low_mood", "general_student_support"], "audience": ["student", "friend_peer", "undergraduate_student", "graduate_student"], "issue_types": ["peer_support", "crisis_intervention", "loneliness", "distress"], "confidentiality_status": "confidential_with_safety_exceptions", "hours": "Hours vary by semester; verify on source page.", "contact_mode": ["phone", "drop_in", "website"], "contact": "301-314-4357", "location": "South Campus Dining Hall Room 3105", "source_url": "https://helpcenterumd.org/", "source_authority": "peer_support", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": [], "notes": "Use for peer support and helper-mode navigation; verify semester hours on source page before asserting availability."}
|
| 16 |
{"service_id": "umd_care_stop_violence", "resource_name": "UMD CARE to Stop Violence", "description": "Confidential advocacy, therapy, education, and outreach for people impacted by sexual assault, relationship violence, stalking, and sexual harassment.", "urgency_level": "urgent", "safety_tiers": ["support_navigation", "high_distress", "imminent_safety"], "route_types": ["care_violence_confidential", "peer_helper", "crisis_immediate"], "audience": ["student", "graduate_student", "undergraduate_student", "friend_peer"], "issue_types": ["sexual_assault", "relationship_violence", "stalking", "harassment", "survivor_support"], "confidentiality_status": "confidential_with_safety_exceptions", "hours": "Monday-Friday 8:30 a.m.-5:00 p.m.; crisis line availability varies by semester", "contact_mode": ["phone", "hotline", "email", "website"], "contact": "301-314-2222; crisis line 301-741-3442; uhc-care@umd.edu", "location": "University Health Center", "source_url": "https://health.umd.edu/care", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval", "crisis_only"], "do_not_use_for": ["academic_setback", "exam_stress"], "notes": "CARE page says it is not an official reporting entity; use for confidential options/support, not legal advice."}
|
| 17 |
-
{"service_id": "umd_health_center_psychiatry_substance", "resource_name": "UMD University Health Center Psychiatry and Substance Use Services", "description": "University Health Center psychiatry, medication management, substance use intervention and treatment, and primary care behavioral health integration services.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["counseling_navigation", "anxiety_panic", "low_mood", "general_student_support"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["psychiatry", "medication_management", "substance_use", "behavioral_health"], "confidentiality_status": "private", "hours": "unknown", "contact_mode": ["phone", "email", "website"], "contact": "301-314-8184; health@umd.edu", "location": "University Health Center, Building #140", "source_url": "https://health.umd.edu/medical-psychiatry-and-substance-use-services", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Do not provide medical advice or medication guidance; route to official scheduling/source information."}
|
| 18 |
-
{"service_id": "umd_suit", "resource_name": "UMD Substance Use Intervention and Treatment (SUIT)", "description": "UHC program for students with alcohol, cannabis, drug use, recovery, addiction medicine, harm reduction, or co-occurring mental health concerns.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["general_student_support", "anxiety_panic", "low_mood", "peer_helper"], "audience": ["student", "graduate_student", "undergraduate_student", "friend_peer"], "issue_types": ["substance_use", "recovery", "harm_reduction", "addiction_medicine"], "confidentiality_status": "private", "hours": "unknown", "contact_mode": ["phone", "website"], "contact": "301-314-8106", "location": "University Health Center", "source_url": "https://health.umd.edu/SUIT", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use for substance-use support navigation; urgent withdrawal/overdose language should route to emergency care."}
|
| 19 |
{"service_id": "umd_campus_pantry", "resource_name": "UMD Campus Pantry", "description": "Emergency food support for University of Maryland College Park students, faculty, and staff experiencing food insecurity.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["basic_needs"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["food_insecurity", "basic_needs"], "confidentiality_status": "unknown", "hours": "Hours change; verify on source page.", "contact_mode": ["website"], "contact": "unknown", "location": "Lower level of South Campus Dining Hall Building", "source_url": "https://studentaffairs.umd.edu/support-resources/dean-students/campus-pantry", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use for food insecurity routing; avoid asserting current hours without source check because hours are term-dependent."}
|
| 20 |
{"service_id": "umd_thrive_center", "resource_name": "UMD Thrive Center for Essential Needs", "description": "Essential-needs support network for food, housing, finances, wellbeing, and first-generation student support.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["basic_needs", "general_student_support"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["food_insecurity", "housing_insecurity", "financial_wellness", "basic_needs"], "confidentiality_status": "unknown", "hours": "unknown", "contact_mode": ["website"], "contact": "unknown", "location": "Dean of Students Office", "source_url": "https://studentaffairs.umd.edu/node/5406", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use as basic-needs navigation hub; direct users to source page for application forms and current process."}
|
| 21 |
{"service_id": "umd_student_crisis_fund", "resource_name": "UMD Student Crisis Fund", "description": "Economic Crisis Response Grants support students facing unanticipated emergencies affecting health, safety, wellbeing, or ability to continue education.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["basic_needs", "general_student_support"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["financial_emergency", "temporary_housing", "food_assistance", "emergency_expenses"], "confidentiality_status": "unknown", "hours": "unknown", "contact_mode": ["website"], "contact": "unknown", "location": "unknown", "source_url": "https://studentaffairs.umd.edu/division-of-student-affairs-crisis-fund", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use for financial emergency routing; do not promise eligibility, awards, or timelines."}
|
|
|
|
| 14 |
{"service_id": "umd_ads_testing", "resource_name": "UMD ADS Accommodated Testing Office", "description": "ADS testing office for registered students with testing accommodations such as extended time, reduced distraction, and alternative formats.", "urgency_level": "support", "safety_tiers": ["support_navigation"], "route_types": ["accessibility_ads", "exam_stress"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["testing_accommodations", "exams", "accessibility"], "confidentiality_status": "private", "hours": "Monday-Friday 8:30 a.m.-4:30 p.m.", "contact_mode": ["phone", "email", "website"], "contact": "301-314-7217; adstest@umd.edu", "location": "0106 Shoemaker Building", "source_url": "https://ads.umd.edu/accommodations-services/accommodated-testing", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use only for testing accommodation navigation; do not infer eligibility or approval."}
|
| 15 |
{"service_id": "umd_help_center_peer_support", "resource_name": "Help Center at UMD", "description": "Student-run peer counseling and crisis intervention hotline offering free, anonymous, confidential support to the UMD community during operating hours.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["peer_helper", "loneliness_isolation", "anxiety_panic", "low_mood", "general_student_support"], "audience": ["student", "friend_peer", "undergraduate_student", "graduate_student"], "issue_types": ["peer_support", "crisis_intervention", "loneliness", "distress"], "confidentiality_status": "confidential_with_safety_exceptions", "hours": "Hours vary by semester; verify on source page.", "contact_mode": ["phone", "drop_in", "website"], "contact": "301-314-4357", "location": "South Campus Dining Hall Room 3105", "source_url": "https://helpcenterumd.org/", "source_authority": "peer_support", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": [], "notes": "Use for peer support and helper-mode navigation; verify semester hours on source page before asserting availability."}
|
| 16 |
{"service_id": "umd_care_stop_violence", "resource_name": "UMD CARE to Stop Violence", "description": "Confidential advocacy, therapy, education, and outreach for people impacted by sexual assault, relationship violence, stalking, and sexual harassment.", "urgency_level": "urgent", "safety_tiers": ["support_navigation", "high_distress", "imminent_safety"], "route_types": ["care_violence_confidential", "peer_helper", "crisis_immediate"], "audience": ["student", "graduate_student", "undergraduate_student", "friend_peer"], "issue_types": ["sexual_assault", "relationship_violence", "stalking", "harassment", "survivor_support"], "confidentiality_status": "confidential_with_safety_exceptions", "hours": "Monday-Friday 8:30 a.m.-5:00 p.m.; crisis line availability varies by semester", "contact_mode": ["phone", "hotline", "email", "website"], "contact": "301-314-2222; crisis line 301-741-3442; uhc-care@umd.edu", "location": "University Health Center", "source_url": "https://health.umd.edu/care", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval", "crisis_only"], "do_not_use_for": ["academic_setback", "exam_stress"], "notes": "CARE page says it is not an official reporting entity; use for confidential options/support, not legal advice."}
|
| 17 |
+
{"service_id": "umd_health_center_psychiatry_substance", "resource_name": "UMD University Health Center Psychiatry and Substance Use Services", "description": "University Health Center psychiatry, medication management, substance use intervention and treatment, and primary care behavioral health integration services.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["counseling_navigation", "anxiety_panic", "low_mood", "general_student_support", "substance_use_concern"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["psychiatry", "medication_management", "substance_use", "behavioral_health"], "confidentiality_status": "private", "hours": "unknown", "contact_mode": ["phone", "email", "website"], "contact": "301-314-8184; health@umd.edu", "location": "University Health Center, Building #140", "source_url": "https://health.umd.edu/medical-psychiatry-and-substance-use-services", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Do not provide medical advice or medication guidance; route to official scheduling/source information."}
|
| 18 |
+
{"service_id": "umd_suit", "resource_name": "UMD Substance Use Intervention and Treatment (SUIT)", "description": "UHC program for students with alcohol, cannabis, drug use, recovery, addiction medicine, harm reduction, or co-occurring mental health concerns.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["general_student_support", "anxiety_panic", "low_mood", "peer_helper", "substance_use_concern"], "audience": ["student", "graduate_student", "undergraduate_student", "friend_peer"], "issue_types": ["substance_use", "recovery", "harm_reduction", "addiction_medicine"], "confidentiality_status": "private", "hours": "unknown", "contact_mode": ["phone", "website"], "contact": "301-314-8106", "location": "University Health Center", "source_url": "https://health.umd.edu/SUIT", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use for substance-use support navigation; urgent withdrawal/overdose language should route to emergency care."}
|
| 19 |
{"service_id": "umd_campus_pantry", "resource_name": "UMD Campus Pantry", "description": "Emergency food support for University of Maryland College Park students, faculty, and staff experiencing food insecurity.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["basic_needs"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["food_insecurity", "basic_needs"], "confidentiality_status": "unknown", "hours": "Hours change; verify on source page.", "contact_mode": ["website"], "contact": "unknown", "location": "Lower level of South Campus Dining Hall Building", "source_url": "https://studentaffairs.umd.edu/support-resources/dean-students/campus-pantry", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use for food insecurity routing; avoid asserting current hours without source check because hours are term-dependent."}
|
| 20 |
{"service_id": "umd_thrive_center", "resource_name": "UMD Thrive Center for Essential Needs", "description": "Essential-needs support network for food, housing, finances, wellbeing, and first-generation student support.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["basic_needs", "general_student_support"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["food_insecurity", "housing_insecurity", "financial_wellness", "basic_needs"], "confidentiality_status": "unknown", "hours": "unknown", "contact_mode": ["website"], "contact": "unknown", "location": "Dean of Students Office", "source_url": "https://studentaffairs.umd.edu/node/5406", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use as basic-needs navigation hub; direct users to source page for application forms and current process."}
|
| 21 |
{"service_id": "umd_student_crisis_fund", "resource_name": "UMD Student Crisis Fund", "description": "Economic Crisis Response Grants support students facing unanticipated emergencies affecting health, safety, wellbeing, or ability to continue education.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["basic_needs", "general_student_support"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["financial_emergency", "temporary_housing", "food_assistance", "emergency_expenses"], "confidentiality_status": "unknown", "hours": "unknown", "contact_mode": ["website"], "contact": "unknown", "location": "unknown", "source_url": "https://studentaffairs.umd.edu/division-of-student-affairs-crisis-fund", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use for financial emergency routing; do not promise eligibility, awards, or timelines."}
|
|
@@ -14,8 +14,8 @@
|
|
| 14 |
{"service_id":"umd_ads_testing","resource_name":"UMD ADS Accommodated Testing Office","description":"ADS testing office for registered students with testing accommodations such as extended time, reduced distraction, and alternative formats.","urgency_level":"support","safety_tiers":["support_navigation"],"route_types":["accessibility_ads","exam_stress"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["testing_accommodations","exams","accessibility"],"confidentiality_status":"private","hours":"Monday-Friday 8:30 a.m.-4:30 p.m.","contact_mode":["phone","email","website"],"contact":"301-314-7217; adstest@umd.edu","location":"0106 Shoemaker Building","source_url":"https://ads.umd.edu/accommodations-services/accommodated-testing","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use only for testing accommodation navigation; do not infer eligibility or approval."}
|
| 15 |
{"service_id":"umd_help_center_peer_support","resource_name":"Help Center at UMD","description":"Student-run peer counseling and crisis intervention hotline offering free, anonymous, confidential support to the UMD community during operating hours.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["peer_helper","loneliness_isolation","anxiety_panic","low_mood","general_student_support"],"audience":["student","friend_peer","undergraduate_student","graduate_student"],"issue_types":["peer_support","crisis_intervention","loneliness","distress"],"confidentiality_status":"confidential_with_safety_exceptions","hours":"Hours vary by semester; verify on source page.","contact_mode":["phone","drop_in","website"],"contact":"301-314-4357","location":"South Campus Dining Hall Room 3105","source_url":"https://helpcenterumd.org/","source_authority":"peer_support","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":[],"notes":"Use for peer support and helper-mode navigation; verify semester hours on source page before asserting availability."}
|
| 16 |
{"service_id":"umd_care_stop_violence","resource_name":"UMD CARE to Stop Violence","description":"Confidential advocacy, therapy, education, and outreach for people impacted by sexual assault, relationship violence, stalking, and sexual harassment.","urgency_level":"urgent","safety_tiers":["support_navigation","high_distress","imminent_safety"],"route_types":["care_violence_confidential","peer_helper","crisis_immediate"],"audience":["student","graduate_student","undergraduate_student","friend_peer"],"issue_types":["sexual_assault","relationship_violence","stalking","harassment","survivor_support"],"confidentiality_status":"confidential_with_safety_exceptions","hours":"Monday-Friday 8:30 a.m.-5:00 p.m.; crisis line availability varies by semester","contact_mode":["phone","hotline","email","website"],"contact":"301-314-2222; crisis line 301-741-3442; uhc-care@umd.edu","location":"University Health Center","source_url":"https://health.umd.edu/care","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval","crisis_only"],"do_not_use_for":["academic_setback","exam_stress"],"notes":"CARE page says it is not an official reporting entity; use for confidential options/support, not legal advice."}
|
| 17 |
-
{"service_id":"umd_health_center_psychiatry_substance","resource_name":"UMD University Health Center Psychiatry and Substance Use Services","description":"University Health Center psychiatry, medication management, substance use intervention and treatment, and primary care behavioral health integration services.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["counseling_navigation","anxiety_panic","low_mood","general_student_support"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["psychiatry","medication_management","substance_use","behavioral_health"],"confidentiality_status":"private","hours":"unknown","contact_mode":["phone","email","website"],"contact":"301-314-8184; health@umd.edu","location":"University Health Center, Building #140","source_url":"https://health.umd.edu/medical-psychiatry-and-substance-use-services","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Do not provide medical advice or medication guidance; route to official scheduling/source information."}
|
| 18 |
-
{"service_id":"umd_suit","resource_name":"UMD Substance Use Intervention and Treatment (SUIT)","description":"UHC program for students with alcohol, cannabis, drug use, recovery, addiction medicine, harm reduction, or co-occurring mental health concerns.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["general_student_support","anxiety_panic","low_mood","peer_helper"],"audience":["student","graduate_student","undergraduate_student","friend_peer"],"issue_types":["substance_use","recovery","harm_reduction","addiction_medicine"],"confidentiality_status":"private","hours":"unknown","contact_mode":["phone","website"],"contact":"301-314-8106","location":"University Health Center","source_url":"https://health.umd.edu/SUIT","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use for substance-use support navigation; urgent withdrawal/overdose language should route to emergency care."}
|
| 19 |
{"service_id":"umd_campus_pantry","resource_name":"UMD Campus Pantry","description":"Emergency food support for University of Maryland College Park students, faculty, and staff experiencing food insecurity.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["basic_needs"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["food_insecurity","basic_needs"],"confidentiality_status":"unknown","hours":"Hours change; verify on source page.","contact_mode":["website"],"contact":"unknown","location":"Lower level of South Campus Dining Hall Building","source_url":"https://studentaffairs.umd.edu/support-resources/dean-students/campus-pantry","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use for food insecurity routing; avoid asserting current hours without source check because hours are term-dependent."}
|
| 20 |
{"service_id":"umd_thrive_center","resource_name":"UMD Thrive Center for Essential Needs","description":"Essential-needs support network for food, housing, finances, wellbeing, and first-generation student support.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["basic_needs","general_student_support"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["food_insecurity","housing_insecurity","financial_wellness","basic_needs"],"confidentiality_status":"unknown","hours":"unknown","contact_mode":["website"],"contact":"unknown","location":"Dean of Students Office","source_url":"https://studentaffairs.umd.edu/node/5406","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use as basic-needs navigation hub; direct users to source page for application forms and current process."}
|
| 21 |
{"service_id":"umd_student_crisis_fund","resource_name":"UMD Student Crisis Fund","description":"Economic Crisis Response Grants support students facing unanticipated emergencies affecting health, safety, wellbeing, or ability to continue education.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["basic_needs","general_student_support"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["financial_emergency","temporary_housing","food_assistance","emergency_expenses"],"confidentiality_status":"unknown","hours":"unknown","contact_mode":["website"],"contact":"unknown","location":"unknown","source_url":"https://studentaffairs.umd.edu/division-of-student-affairs-crisis-fund","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use for financial emergency routing; do not promise eligibility, awards, or timelines."}
|
|
|
|
| 14 |
{"service_id":"umd_ads_testing","resource_name":"UMD ADS Accommodated Testing Office","description":"ADS testing office for registered students with testing accommodations such as extended time, reduced distraction, and alternative formats.","urgency_level":"support","safety_tiers":["support_navigation"],"route_types":["accessibility_ads","exam_stress"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["testing_accommodations","exams","accessibility"],"confidentiality_status":"private","hours":"Monday-Friday 8:30 a.m.-4:30 p.m.","contact_mode":["phone","email","website"],"contact":"301-314-7217; adstest@umd.edu","location":"0106 Shoemaker Building","source_url":"https://ads.umd.edu/accommodations-services/accommodated-testing","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use only for testing accommodation navigation; do not infer eligibility or approval."}
|
| 15 |
{"service_id":"umd_help_center_peer_support","resource_name":"Help Center at UMD","description":"Student-run peer counseling and crisis intervention hotline offering free, anonymous, confidential support to the UMD community during operating hours.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["peer_helper","loneliness_isolation","anxiety_panic","low_mood","general_student_support"],"audience":["student","friend_peer","undergraduate_student","graduate_student"],"issue_types":["peer_support","crisis_intervention","loneliness","distress"],"confidentiality_status":"confidential_with_safety_exceptions","hours":"Hours vary by semester; verify on source page.","contact_mode":["phone","drop_in","website"],"contact":"301-314-4357","location":"South Campus Dining Hall Room 3105","source_url":"https://helpcenterumd.org/","source_authority":"peer_support","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":[],"notes":"Use for peer support and helper-mode navigation; verify semester hours on source page before asserting availability."}
|
| 16 |
{"service_id":"umd_care_stop_violence","resource_name":"UMD CARE to Stop Violence","description":"Confidential advocacy, therapy, education, and outreach for people impacted by sexual assault, relationship violence, stalking, and sexual harassment.","urgency_level":"urgent","safety_tiers":["support_navigation","high_distress","imminent_safety"],"route_types":["care_violence_confidential","peer_helper","crisis_immediate"],"audience":["student","graduate_student","undergraduate_student","friend_peer"],"issue_types":["sexual_assault","relationship_violence","stalking","harassment","survivor_support"],"confidentiality_status":"confidential_with_safety_exceptions","hours":"Monday-Friday 8:30 a.m.-5:00 p.m.; crisis line availability varies by semester","contact_mode":["phone","hotline","email","website"],"contact":"301-314-2222; crisis line 301-741-3442; uhc-care@umd.edu","location":"University Health Center","source_url":"https://health.umd.edu/care","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval","crisis_only"],"do_not_use_for":["academic_setback","exam_stress"],"notes":"CARE page says it is not an official reporting entity; use for confidential options/support, not legal advice."}
|
| 17 |
+
{"service_id":"umd_health_center_psychiatry_substance","resource_name":"UMD University Health Center Psychiatry and Substance Use Services","description":"University Health Center psychiatry, medication management, substance use intervention and treatment, and primary care behavioral health integration services.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["counseling_navigation","anxiety_panic","low_mood","general_student_support","substance_use_concern"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["psychiatry","medication_management","substance_use","behavioral_health"],"confidentiality_status":"private","hours":"unknown","contact_mode":["phone","email","website"],"contact":"301-314-8184; health@umd.edu","location":"University Health Center, Building #140","source_url":"https://health.umd.edu/medical-psychiatry-and-substance-use-services","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Do not provide medical advice or medication guidance; route to official scheduling/source information."}
|
| 18 |
+
{"service_id":"umd_suit","resource_name":"UMD Substance Use Intervention and Treatment (SUIT)","description":"UHC program for students with alcohol, cannabis, drug use, recovery, addiction medicine, harm reduction, or co-occurring mental health concerns.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["general_student_support","anxiety_panic","low_mood","peer_helper","substance_use_concern"],"audience":["student","graduate_student","undergraduate_student","friend_peer"],"issue_types":["substance_use","recovery","harm_reduction","addiction_medicine"],"confidentiality_status":"private","hours":"unknown","contact_mode":["phone","website"],"contact":"301-314-8106","location":"University Health Center","source_url":"https://health.umd.edu/SUIT","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use for substance-use support navigation; urgent withdrawal/overdose language should route to emergency care."}
|
| 19 |
{"service_id":"umd_campus_pantry","resource_name":"UMD Campus Pantry","description":"Emergency food support for University of Maryland College Park students, faculty, and staff experiencing food insecurity.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["basic_needs"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["food_insecurity","basic_needs"],"confidentiality_status":"unknown","hours":"Hours change; verify on source page.","contact_mode":["website"],"contact":"unknown","location":"Lower level of South Campus Dining Hall Building","source_url":"https://studentaffairs.umd.edu/support-resources/dean-students/campus-pantry","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use for food insecurity routing; avoid asserting current hours without source check because hours are term-dependent."}
|
| 20 |
{"service_id":"umd_thrive_center","resource_name":"UMD Thrive Center for Essential Needs","description":"Essential-needs support network for food, housing, finances, wellbeing, and first-generation student support.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["basic_needs","general_student_support"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["food_insecurity","housing_insecurity","financial_wellness","basic_needs"],"confidentiality_status":"unknown","hours":"unknown","contact_mode":["website"],"contact":"unknown","location":"Dean of Students Office","source_url":"https://studentaffairs.umd.edu/node/5406","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use as basic-needs navigation hub; direct users to source page for application forms and current process."}
|
| 21 |
{"service_id":"umd_student_crisis_fund","resource_name":"UMD Student Crisis Fund","description":"Economic Crisis Response Grants support students facing unanticipated emergencies affecting health, safety, wellbeing, or ability to continue education.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["basic_needs","general_student_support"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["financial_emergency","temporary_housing","food_assistance","emergency_expenses"],"confidentiality_status":"unknown","hours":"unknown","contact_mode":["website"],"contact":"unknown","location":"unknown","source_url":"https://studentaffairs.umd.edu/division-of-student-affairs-crisis-fund","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use for financial emergency routing; do not promise eligibility, awards, or timelines."}
|
|
@@ -1143,6 +1143,11 @@ _UNSURE_LEADING_RE = re.compile(
|
|
| 1143 |
# "yeah but i'm scared about my visa too"
|
| 1144 |
# "ok actually, my advisor also said something weird"
|
| 1145 |
# "sure, also i'm an F-1 student"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1146 |
_AFFIRM_THEN_SUBSTANTIVE_RE = re.compile(
|
| 1147 |
r"\b("
|
| 1148 |
r"but|actually|though|however|wait|except|although|"
|
|
@@ -1179,13 +1184,20 @@ def _minimal_response_kind(message: str) -> str:
|
|
| 1179 |
# they happen to start with "yeah" — keep the planner in charge.
|
| 1180 |
if len(text) > 80:
|
| 1181 |
return ""
|
| 1182 |
-
# Question-ended messages are not minimal — they want an answer.
|
| 1183 |
-
if text.rstrip().endswith("?"):
|
| 1184 |
-
return ""
|
| 1185 |
|
| 1186 |
-
|
| 1187 |
-
|
| 1188 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1189 |
|
| 1190 |
# Prefer the longest leading match to disambiguate cases like
|
| 1191 |
# "i don't know" (unsure) vs a bare "i" / "i'm" prefix.
|
|
@@ -1198,11 +1210,17 @@ def _minimal_response_kind(message: str) -> str:
|
|
| 1198 |
if end == 0:
|
| 1199 |
return ""
|
| 1200 |
|
| 1201 |
-
remainder =
|
| 1202 |
if remainder and _AFFIRM_THEN_SUBSTANTIVE_RE.search(remainder):
|
| 1203 |
# User pivoted away from the affirm — let the planner handle the
|
| 1204 |
# substantive content instead of binding to the prior offer.
|
| 1205 |
return ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1206 |
return kind
|
| 1207 |
|
| 1208 |
|
|
|
|
| 1143 |
# "yeah but i'm scared about my visa too"
|
| 1144 |
# "ok actually, my advisor also said something weird"
|
| 1145 |
# "sure, also i'm an F-1 student"
|
| 1146 |
+
_WH_QUESTION_WORD_RE = re.compile(
|
| 1147 |
+
r"\b(what|where|when|why|how|who|which)\b",
|
| 1148 |
+
re.IGNORECASE,
|
| 1149 |
+
)
|
| 1150 |
+
|
| 1151 |
_AFFIRM_THEN_SUBSTANTIVE_RE = re.compile(
|
| 1152 |
r"\b("
|
| 1153 |
r"but|actually|though|however|wait|except|although|"
|
|
|
|
| 1184 |
# they happen to start with "yeah" — keep the planner in charge.
|
| 1185 |
if len(text) > 80:
|
| 1186 |
return ""
|
|
|
|
|
|
|
|
|
|
| 1187 |
|
| 1188 |
+
# Tag-question handling. "Yeah?" / "ok?" / "yes that helps?" /
|
| 1189 |
+
# "sure that works?" should still count as affirm — the trailing
|
| 1190 |
+
# question mark is a tag-confirm gesture, not a request for new
|
| 1191 |
+
# information. We strip ONE trailing '?' for matching, then later
|
| 1192 |
+
# reject if the remainder contains a wh-question word (what / where
|
| 1193 |
+
# / when / why / how / who / which) which signals the student
|
| 1194 |
+
# actually wants new information rather than just confirming.
|
| 1195 |
+
ends_with_question = text.rstrip().endswith("?")
|
| 1196 |
+
text_for_match = text.rstrip("?!.,;: \t").strip() if ends_with_question else text
|
| 1197 |
+
|
| 1198 |
+
affirm_match = _AFFIRM_LEADING_RE.match(text_for_match)
|
| 1199 |
+
negate_match = _NEGATE_LEADING_RE.match(text_for_match)
|
| 1200 |
+
unsure_match = _UNSURE_LEADING_RE.match(text_for_match)
|
| 1201 |
|
| 1202 |
# Prefer the longest leading match to disambiguate cases like
|
| 1203 |
# "i don't know" (unsure) vs a bare "i" / "i'm" prefix.
|
|
|
|
| 1210 |
if end == 0:
|
| 1211 |
return ""
|
| 1212 |
|
| 1213 |
+
remainder = text_for_match[end:].strip(" \t,.!?-")
|
| 1214 |
if remainder and _AFFIRM_THEN_SUBSTANTIVE_RE.search(remainder):
|
| 1215 |
# User pivoted away from the affirm — let the planner handle the
|
| 1216 |
# substantive content instead of binding to the prior offer.
|
| 1217 |
return ""
|
| 1218 |
+
# Tag-question gate: if the message ended with '?' AND the remainder
|
| 1219 |
+
# contains a wh-question word, the user is asking for new information
|
| 1220 |
+
# ("ok so what do i do?" / "yeah but how does that work?") — defer
|
| 1221 |
+
# to the planner rather than binding to consent.
|
| 1222 |
+
if ends_with_question and remainder and _WH_QUESTION_WORD_RE.search(remainder):
|
| 1223 |
+
return ""
|
| 1224 |
return kind
|
| 1225 |
|
| 1226 |
|
|
@@ -57,6 +57,10 @@ ALWAYS_DIRECT_ROUTES = frozenset({
|
|
| 57 |
SupportRoute.OUT_OF_SCOPE.value,
|
| 58 |
SupportRoute.CARE_VIOLENCE_CONFIDENTIAL.value,
|
| 59 |
SupportRoute.AUTHORITY_MISCONDUCT.value,
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
})
|
| 61 |
|
| 62 |
EXPLICIT_ASK_PATTERNS = (
|
|
@@ -599,6 +603,41 @@ def build_response_plan(
|
|
| 599 |
**common,
|
| 600 |
)
|
| 601 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 602 |
# Generic / general_student_support fallback - listen-eligible.
|
| 603 |
# OFFER `validation` deliberately differs from `listen_reflection` so a
|
| 604 |
# session that walks LISTEN -> PERMISSION -> OFFER doesn't open all
|
|
|
|
| 57 |
SupportRoute.OUT_OF_SCOPE.value,
|
| 58 |
SupportRoute.CARE_VIOLENCE_CONFIDENTIAL.value,
|
| 59 |
SupportRoute.AUTHORITY_MISCONDUCT.value,
|
| 60 |
+
# Privacy / confidentiality is always-direct: when a student asks "is
|
| 61 |
+
# this confidential" or "will they tell my parents", they want the
|
| 62 |
+
# factual orientation now, not a LISTEN reflection.
|
| 63 |
+
SupportRoute.PRIVACY_CONFIDENTIALITY.value,
|
| 64 |
})
|
| 65 |
|
| 66 |
EXPLICIT_ASK_PATTERNS = (
|
|
|
|
| 603 |
**common,
|
| 604 |
)
|
| 605 |
|
| 606 |
+
if route == SupportRoute.SUBSTANCE_USE_CONCERN.value:
|
| 607 |
+
return ResponsePlan(
|
| 608 |
+
route,
|
| 609 |
+
safety_tier,
|
| 610 |
+
"Thanks for naming that — it takes something to say it out loud.",
|
| 611 |
+
"Substance use, when school and sleep are already strained, tends to compound everything else. The point isn't a verdict on what happened; it's looking at what would actually help next.",
|
| 612 |
+
"A grounded next move: UMD's University Health Center has a Psychiatry and Substance Use Services office that handles this specifically. It is non-punitive and separate from academic records — they answer questions without escalating to professors or parents.",
|
| 613 |
+
f"Use {source_label} for the substance-use-specific path; UMD Counseling Center is also there if you want to talk about what's underneath.",
|
| 614 |
+
"If you ever feel physically unsafe — alcohol poisoning, blackout, mixing — use 911 or campus emergency, not the navigator.",
|
| 615 |
+
"Has this been a one-off rough night, or something that's been building? Either is fine to talk about.",
|
| 616 |
+
listen_reflection=(
|
| 617 |
+
"Thanks for naming that. A rough night layered on top of school "
|
| 618 |
+
"and missed sleep is a real thing, not a character flaw."
|
| 619 |
+
),
|
| 620 |
+
listen_invite="Want to tell me more about what's been going on lately around this?",
|
| 621 |
+
permission_opener=(
|
| 622 |
+
"I hear you. The pile-up — school stress plus a rough night plus "
|
| 623 |
+
"no sleep — usually has more than one thing pulling on it."
|
| 624 |
+
),
|
| 625 |
+
**common,
|
| 626 |
+
)
|
| 627 |
+
|
| 628 |
+
if route == SupportRoute.PRIVACY_CONFIDENTIALITY.value:
|
| 629 |
+
return ResponsePlan(
|
| 630 |
+
route,
|
| 631 |
+
safety_tier,
|
| 632 |
+
"Good question to ask before you do anything else.",
|
| 633 |
+
"The short answer: UMD Counseling Center sessions are generally confidential — they don't tell parents, professors, or the school by default. FERPA generally protects your student records once you're 18 and enrolled. There are a small number of mandatory-disclosure situations (immediate danger to yourself or someone else, or some abuse-reporting categories), and those exist on every campus, not just UMD.",
|
| 634 |
+
"A grounded next move: ask the office directly. UMD Counseling Center will walk you through what's protected and what isn't before you share anything. The Dean of Students Office can also answer FERPA questions for records-level concerns.",
|
| 635 |
+
f"Use {source_label} for the confidential conversation path; Dean of Students for records / FERPA / parental-notification specifics.",
|
| 636 |
+
"I'm a navigator, not a lawyer. For anything legally binding (subpoena, formal complaint, immigration), the office itself is the authoritative source.",
|
| 637 |
+
"What part of this is weighing on you most — the conversation itself, the records side, or whether someone specific would find out?",
|
| 638 |
+
**common,
|
| 639 |
+
)
|
| 640 |
+
|
| 641 |
# Generic / general_student_support fallback - listen-eligible.
|
| 642 |
# OFFER `validation` deliberately differs from `listen_reflection` so a
|
| 643 |
# session that walks LISTEN -> PERMISSION -> OFFER doesn't open all
|
|
@@ -34,6 +34,8 @@ class SupportRoute(str, Enum):
|
|
| 34 |
LONELINESS_ISOLATION = "loneliness_isolation"
|
| 35 |
ANXIETY_PANIC = "anxiety_panic"
|
| 36 |
LOW_MOOD = "low_mood"
|
|
|
|
|
|
|
| 37 |
CRISIS_IMMEDIATE = "crisis_immediate"
|
| 38 |
GENERAL_STUDENT_SUPPORT = "general_student_support"
|
| 39 |
OUT_OF_SCOPE = "out_of_scope"
|
|
@@ -85,6 +87,19 @@ def classify_route(
|
|
| 85 |
if _is_authority_misconduct(text):
|
| 86 |
return RouteDecision(SupportRoute.AUTHORITY_MISCONDUCT, safety_tier, "authority_misconduct_language", audience_mode)
|
| 87 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 88 |
if _has_any(text, ("counseling center", "referral", "off-campus care", "after hours", "after-hours", "brief assessment", "group therapy", "individual counseling", "mental health crises", "number to call")):
|
| 89 |
return RouteDecision(SupportRoute.COUNSELING_NAVIGATION, safety_tier, "counseling_navigation_language", audience_mode)
|
| 90 |
|
|
@@ -244,6 +259,55 @@ def _is_authority_misconduct(text: str) -> bool:
|
|
| 244 |
return has_authority and has_content
|
| 245 |
|
| 246 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 247 |
def _is_peer_helper(text: str, audience_mode: str) -> bool:
|
| 248 |
if audience_mode == "helping_friend":
|
| 249 |
return True
|
|
|
|
| 34 |
LONELINESS_ISOLATION = "loneliness_isolation"
|
| 35 |
ANXIETY_PANIC = "anxiety_panic"
|
| 36 |
LOW_MOOD = "low_mood"
|
| 37 |
+
SUBSTANCE_USE_CONCERN = "substance_use_concern"
|
| 38 |
+
PRIVACY_CONFIDENTIALITY = "privacy_confidentiality"
|
| 39 |
CRISIS_IMMEDIATE = "crisis_immediate"
|
| 40 |
GENERAL_STUDENT_SUPPORT = "general_student_support"
|
| 41 |
OUT_OF_SCOPE = "out_of_scope"
|
|
|
|
| 87 |
if _is_authority_misconduct(text):
|
| 88 |
return RouteDecision(SupportRoute.AUTHORITY_MISCONDUCT, safety_tier, "authority_misconduct_language", audience_mode)
|
| 89 |
|
| 90 |
+
# Privacy / confidentiality / parental-notification questions need a
|
| 91 |
+
# factual orientation, not the generic counseling-navigation template.
|
| 92 |
+
# Common student concern — must answer specifically rather than deflect.
|
| 93 |
+
if _is_privacy_question(text):
|
| 94 |
+
return RouteDecision(SupportRoute.PRIVACY_CONFIDENTIALITY, safety_tier, "privacy_confidentiality_question", audience_mode)
|
| 95 |
+
|
| 96 |
+
# Substance-use signals (drinking, weed, etc.) before counseling /
|
| 97 |
+
# exam-stress routes so the dedicated SU template can fire. The UMD
|
| 98 |
+
# University Health Center Psychiatry and Substance Use Services
|
| 99 |
+
# office handles this specifically and is non-punitive / confidential.
|
| 100 |
+
if _is_substance_use_concern(text):
|
| 101 |
+
return RouteDecision(SupportRoute.SUBSTANCE_USE_CONCERN, safety_tier, "substance_use_language", audience_mode)
|
| 102 |
+
|
| 103 |
if _has_any(text, ("counseling center", "referral", "off-campus care", "after hours", "after-hours", "brief assessment", "group therapy", "individual counseling", "mental health crises", "number to call")):
|
| 104 |
return RouteDecision(SupportRoute.COUNSELING_NAVIGATION, safety_tier, "counseling_navigation_language", audience_mode)
|
| 105 |
|
|
|
|
| 259 |
return has_authority and has_content
|
| 260 |
|
| 261 |
|
| 262 |
+
# Substance-use concern: the student is reporting recent use of alcohol /
|
| 263 |
+
# weed / other substances in a way that's affecting their day. Detection is
|
| 264 |
+
# conservative — "high" alone is ambiguous (could mean "highly stressed"),
|
| 265 |
+
# so we require it to co-occur with a context cue OR rely on the stronger
|
| 266 |
+
# unambiguous signals (drunk, hungover, blackout, stoned, etc.).
|
| 267 |
+
_SUBSTANCE_STRONG_RE = re.compile(
|
| 268 |
+
r"\b("
|
| 269 |
+
r"drunk|wasted|hungover|hangover|black\s*out(?:\s*drunk)?|blacked\s*out|"
|
| 270 |
+
r"binge\s*drink(?:ing)?|alcohol\s*poisoning|"
|
| 271 |
+
r"stoned|smoked\s+weed|smoke(?:d)?\s+a\s+bowl|edibles|shrooms|"
|
| 272 |
+
r"got\s+high|was\s+high|been\s+high|getting\s+high|so\s+high|"
|
| 273 |
+
r"too\s+drunk|got\s+drunk|so\s+drunk|"
|
| 274 |
+
r"on\s+adderall(?:\s+(?:not\s+)?prescribed)?|"
|
| 275 |
+
r"ket(?:amine)?|cocaine|coke last night|coke yesterday|"
|
| 276 |
+
r"i\s+(?:was|am|got)\s+lit"
|
| 277 |
+
r")\b",
|
| 278 |
+
re.IGNORECASE,
|
| 279 |
+
)
|
| 280 |
+
|
| 281 |
+
|
| 282 |
+
def _is_substance_use_concern(text: str) -> bool:
|
| 283 |
+
return bool(_SUBSTANCE_STRONG_RE.search(text))
|
| 284 |
+
|
| 285 |
+
|
| 286 |
+
# Privacy / confidentiality / parental-notification / FERPA questions.
|
| 287 |
+
# Students ask these often and the system should answer with the factual
|
| 288 |
+
# orientation (UMD CC confidentiality + FERPA basics + Dean of Students
|
| 289 |
+
# referral) rather than deflecting to a generic offer template.
|
| 290 |
+
_PRIVACY_QUESTION_RE = re.compile(
|
| 291 |
+
r"\b("
|
| 292 |
+
r"is it (?:safe|confidential|private|anonymous)|"
|
| 293 |
+
r"will (?:they|it|this)\s+(?:tell|report|notify|inform|share)|"
|
| 294 |
+
r"do they\s+(?:tell|report|notify|inform|share)|"
|
| 295 |
+
r"will (?:my|the)\s+(?:parents?|family|school|professor|advisor|i-?20)\s+(?:know|find out|be told)|"
|
| 296 |
+
r"go on my (?:record|transcript|file)|"
|
| 297 |
+
r"affect my (?:transcript|record|gpa|standing)\s+(?:if|because|when|after)|"
|
| 298 |
+
r"can\s+(?:they|the school|the college|umd)\s+(?:tell|report|disclose|share)|"
|
| 299 |
+
r"ferpa|confidential(?:ity)?|"
|
| 300 |
+
r"is (?:counseling|therapy|this)\s+confidential|"
|
| 301 |
+
r"will (?:this|that)\s+(?:show up|appear|stay)\s+on"
|
| 302 |
+
r")\b",
|
| 303 |
+
re.IGNORECASE,
|
| 304 |
+
)
|
| 305 |
+
|
| 306 |
+
|
| 307 |
+
def _is_privacy_question(text: str) -> bool:
|
| 308 |
+
return bool(_PRIVACY_QUESTION_RE.search(text))
|
| 309 |
+
|
| 310 |
+
|
| 311 |
def _is_peer_helper(text: str, audience_mode: str) -> bool:
|
| 312 |
if audience_mode == "helping_friend":
|
| 313 |
return True
|