import httpx import pytest from app.config import Settings from app.services.llm_client import LLMClient @pytest.mark.anyio async def test_mock_llm_health_check_is_ok(): health = await LLMClient(Settings(llm_provider="mock")).health_check() assert health.ok is True assert health.provider == "mock" assert health.completion_preview == "Mock LLM is active." @pytest.mark.anyio async def test_vllm_health_check_lists_models_and_tests_completion(monkeypatch): async def fake_get(self, url, headers): return httpx.Response( 200, json={"data": [{"id": "Qwen/Qwen2.5-Coder-32B-Instruct"}]}, request=httpx.Request("GET", url), ) async def fake_post(self, url, json, headers): return httpx.Response( 200, json={"choices": [{"message": {"content": "SwarmAudit LLM OK"}}]}, request=httpx.Request("POST", url), ) monkeypatch.setattr(httpx.AsyncClient, "get", fake_get) monkeypatch.setattr(httpx.AsyncClient, "post", fake_post) health = await LLMClient( Settings( llm_provider="vllm", llm_base_url="http://amd.example:8000/v1", llm_api_key="token", ) ).health_check() assert health.ok is True assert health.models == ["Qwen/Qwen2.5-Coder-32B-Instruct"] assert health.completion_preview == "SwarmAudit LLM OK" @pytest.mark.anyio async def test_vllm_health_check_reports_errors(monkeypatch): async def fake_get(self, url, headers): raise httpx.ConnectError("connection failed", request=httpx.Request("GET", url)) monkeypatch.setattr(httpx.AsyncClient, "get", fake_get) health = await LLMClient(Settings(llm_provider="vllm")).health_check() assert health.ok is False assert "connection failed" in health.error