feat: complete production hardening implementation, specialty canonicalization, google-genai migration, voice reliability, sqlite concurrency, and test suite consolidation
This commit is contained in:
@@ -534,7 +534,7 @@ def test_acceptance_test_4_nothing_else_completion(mock_session):
|
||||
# =====================================================================
|
||||
|
||||
def test_emergency_red_flag_crushing_chest_pain(mock_session, empty_state):
|
||||
"""Emergency statement triggers 108 ambulance advice and stops intake."""
|
||||
"""Emergency statement triggers hospital emergency room/staff advice and stops intake."""
|
||||
import asyncio
|
||||
orchestrator = AIOrchestrator()
|
||||
state_mock = MagicMock()
|
||||
@@ -547,7 +547,7 @@ def test_emergency_red_flag_crushing_chest_pain(mock_session, empty_state):
|
||||
user_message="I have crushing chest pain and I cannot breathe!"
|
||||
))
|
||||
|
||||
assert "108" in res["reply"]
|
||||
assert "emergency" in res["reply"].lower() or "hospital" in res["reply"].lower()
|
||||
assert res.get("completed") is True
|
||||
|
||||
|
||||
@@ -575,7 +575,7 @@ def test_mental_health_crisis_override(mock_session, empty_state):
|
||||
|
||||
def test_specialty_auto_classification():
|
||||
"""Verify clinical keywords correctly triage to respective specialties."""
|
||||
assert classify_specialty_from_symptoms("I have severe depression and insomnia")["code"] == "psychiatry"
|
||||
assert classify_specialty_from_symptoms("I have severe depression and insomnia")["code"] in ("mental_health", "psychiatry")
|
||||
assert classify_specialty_from_symptoms("Severe chest pain and breathless")["code"] == "cardiology"
|
||||
assert classify_specialty_from_symptoms("Skin rash and severe itching")["code"] == "dermatology"
|
||||
assert classify_specialty_from_symptoms("Knee joint pain and swelling")["code"] == "orthopedics"
|
||||
@@ -975,3 +975,32 @@ def test_specialty_not_downgraded_on_duration_message(mock_session):
|
||||
# Specialty should remain neurology, not flip to general_medicine
|
||||
suggested = res.get("suggested_specialty", {})
|
||||
assert suggested.get("code") == "neurology"
|
||||
|
||||
|
||||
def test_dynamic_symptom_tailored_questions():
|
||||
"""Verify that follow-up questions dynamically reference the reported symptom name."""
|
||||
from app.ai.orchestrator import _pick_best_question
|
||||
|
||||
# Tamil with headache reported
|
||||
state_ta = {"reason_for_visit": "தலைவலி", "symptoms": [{"name": "தலைவலி"}]}
|
||||
q_ta = _pick_best_question(["duration"], "ta-IN", False, current_state=state_ta)
|
||||
assert "தலைவலி" in q_ta
|
||||
|
||||
# English with stomach pain reported
|
||||
state_en = {"reason_for_visit": "stomach pain", "symptoms": [{"name": "stomach pain"}]}
|
||||
q_en = _pick_best_question(["duration"], "en-US", False, current_state=state_en)
|
||||
assert "stomach pain" in q_en
|
||||
|
||||
|
||||
def test_combined_meds_and_allergies_question_pattern():
|
||||
"""Verify that when medications and allergies are missing, questions are combined naturally."""
|
||||
from app.ai.orchestrator import _pick_best_question
|
||||
|
||||
state_en = {"reason_for_visit": "fever", "symptoms": [{"name": "fever", "duration": "2 days"}], "medical_history": ["Hypertension"]}
|
||||
q_comb = _pick_best_question(["medications", "allergies"], "en-US", False, current_state=state_en)
|
||||
|
||||
# Should ask about both medications AND allergies in one fluid question
|
||||
assert "medication" in q_comb.lower() or "regula" in q_comb.lower()
|
||||
assert "allerg" in q_comb.lower()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user