import pytest from src.core.ai_client import AIClientManager from src.config.ai_providers_config import get_agent_config def test_default_spiritual_distress_analyzer_is_gemini(): config = get_agent_config("SpiritualDistressAnalyzer") assert config["provider"].value == "gemini" assert config["model"].value.startswith("gemini") def test_model_override_creates_non_cached_client_and_does_not_leak(): mgr = AIClientManager() # Baseline (cached) client should be created once base = mgr.get_client("SpiritualDistressAnalyzer") # Override should return a fresh client each time (non-cached) override_1 = mgr.get_client("SpiritualDistressAnalyzer", model_override="claude-sonnet-4-5-20250929") override_2 = mgr.get_client("SpiritualDistressAnalyzer", model_override="claude-sonnet-4-5-20250929") assert override_1 is not override_2 # And it should not replace the cached base client base_again = mgr.get_client("SpiritualDistressAnalyzer") assert base_again is base def test_manager_attached_model_overrides_apply_to_spiritual_and_medical_calls_without_args(monkeypatch): mgr = AIClientManager() # Attach session-level overrides as done by SimplifiedMedicalApp mgr.model_overrides = { "SpiritualDistressAnalyzer": "claude-sonnet-4-5-20250929", "SoftMedicalTriage": "gemini-2.5-flash", } captured = [] def fake_generate_response(*, system_prompt, user_prompt, temperature=None, call_type="", agent_name="DefaultAgent", medical_context=None, model_override=None): captured.append({ "agent_name": agent_name, "call_type": call_type, "model_override": model_override, }) return "ok" monkeypatch.setattr(mgr, "generate_response", fake_generate_response) mgr.call_spiritual_api("sys", "user") mgr.call_medical_api("sys", "user") assert captured[0]["agent_name"] == "SpiritualDistressAnalyzer" assert captured[0]["model_override"] == "claude-sonnet-4-5-20250929" assert captured[1]["agent_name"] == "SoftMedicalTriage" assert captured[1]["model_override"] == "gemini-2.5-flash" def test_two_managers_do_not_share_model_overrides(): mgr_a = AIClientManager() mgr_b = AIClientManager() mgr_a.model_overrides = {"SpiritualDistressAnalyzer": "claude-sonnet-4-5-20250929"} mgr_b.model_overrides = {"SpiritualDistressAnalyzer": "gemini-2.5-flash"} assert mgr_a.model_overrides["SpiritualDistressAnalyzer"] != mgr_b.model_overrides["SpiritualDistressAnalyzer"]