Spiritual_Health_Project / tests /test_model_overrides.py
DocUA's picture
Implement model overrides for AI clients and enhance interfaces for manual input and file upload
37184d4
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"]