Skip to content

Commit 0d2a227

Browse files
committed
Use AsyncLlamaStackClientHolder for /readiness endpoint.
1 parent 7325060 commit 0d2a227

File tree

2 files changed

+18
-17
lines changed

2 files changed

+18
-17
lines changed

src/app/endpoints/health.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from llama_stack.providers.datatypes import HealthStatus
1212

1313
from fastapi import APIRouter, status, Response
14-
from client import LlamaStackClientHolder
14+
from client import AsyncLlamaStackClientHolder
1515
from models.responses import (
1616
LivenessResponse,
1717
ReadinessResponse,
@@ -22,16 +22,17 @@
2222
router = APIRouter(tags=["health"])
2323

2424

25-
def get_providers_health_statuses() -> list[ProviderHealthStatus]:
25+
async def get_providers_health_statuses() -> list[ProviderHealthStatus]:
2626
"""Check health of all providers.
2727
2828
Returns:
2929
List of provider health statuses.
3030
"""
3131
try:
32-
client = LlamaStackClientHolder().get_client()
32+
client = AsyncLlamaStackClientHolder().get_client()
3333

34-
providers = client.providers.list()
34+
# providers = []
35+
providers = await client.providers.list()
3536
logger.debug("Found %d providers", len(providers))
3637

3738
health_results = [
@@ -69,9 +70,9 @@ def get_providers_health_statuses() -> list[ProviderHealthStatus]:
6970

7071

7172
@router.get("/readiness", responses=get_readiness_responses)
72-
def readiness_probe_get_method(response: Response) -> ReadinessResponse:
73+
async def readiness_probe_get_method(response: Response) -> ReadinessResponse:
7374
"""Ready status of service with provider health details."""
74-
provider_statuses = get_providers_health_statuses()
75+
provider_statuses = await get_providers_health_statuses()
7576

7677
# Check if any provider is unhealthy (not counting not_implemented as unhealthy)
7778
unhealthy_providers = [

tests/unit/app/endpoints/test_health.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from models.responses import ProviderHealthStatus, ReadinessResponse
1313

1414

15-
def test_readiness_probe_fails_due_to_unhealthy_providers(mocker):
15+
async def test_readiness_probe_fails_due_to_unhealthy_providers(mocker):
1616
"""Test the readiness endpoint handler fails when providers are unhealthy."""
1717
# Mock get_providers_health_statuses to return an unhealthy provider
1818
mock_get_providers_health_statuses = mocker.patch(
@@ -29,15 +29,15 @@ def test_readiness_probe_fails_due_to_unhealthy_providers(mocker):
2929
# Mock the Response object
3030
mock_response = Mock()
3131

32-
response = readiness_probe_get_method(mock_response)
32+
response = await readiness_probe_get_method(mock_response)
3333

3434
assert response.ready is False
3535
assert "test_provider" in response.reason
3636
assert "Providers not healthy" in response.reason
3737
assert mock_response.status_code == 503
3838

3939

40-
def test_readiness_probe_success_when_all_providers_healthy(mocker):
40+
async def test_readiness_probe_success_when_all_providers_healthy(mocker):
4141
"""Test the readiness endpoint handler succeeds when all providers are healthy."""
4242
# Mock get_providers_health_statuses to return healthy providers
4343
mock_get_providers_health_statuses = mocker.patch(
@@ -59,7 +59,7 @@ def test_readiness_probe_success_when_all_providers_healthy(mocker):
5959
# Mock the Response object
6060
mock_response = Mock()
6161

62-
response = readiness_probe_get_method(mock_response)
62+
response = await readiness_probe_get_method(mock_response)
6363
assert response is not None
6464
assert isinstance(response, ReadinessResponse)
6565
assert response.ready is True
@@ -98,13 +98,13 @@ def test_provider_health_status_optional_fields(self):
9898
class TestGetProvidersHealthStatuses:
9999
"""Test cases for the get_providers_health_statuses function."""
100100

101-
def test_get_providers_health_statuses(self, mocker):
101+
async def test_get_providers_health_statuses(self, mocker):
102102
"""Test get_providers_health_statuses with healthy providers."""
103103
# Mock the imports
104-
mock_lsc = mocker.patch("client.LlamaStackClientHolder.get_client")
104+
mock_lsc = mocker.patch("client.AsyncLlamaStackClientHolder.get_client")
105105

106106
# Mock the client and its methods
107-
mock_client = mocker.Mock()
107+
mock_client = mocker.AsyncMock()
108108
mock_lsc.return_value = mock_client
109109

110110
# Mock providers.list() to return providers with health
@@ -136,7 +136,7 @@ def test_get_providers_health_statuses(self, mocker):
136136
]
137137

138138
# Mock configuration
139-
result = get_providers_health_statuses()
139+
result = await get_providers_health_statuses()
140140

141141
assert len(result) == 3
142142
assert result[0].provider_id == "provider1"
@@ -149,15 +149,15 @@ def test_get_providers_health_statuses(self, mocker):
149149
assert result[2].status == HealthStatus.ERROR.value
150150
assert result[2].message == "Connection failed"
151151

152-
def test_get_providers_health_statuses_connection_error(self, mocker):
152+
async def test_get_providers_health_statuses_connection_error(self, mocker):
153153
"""Test get_providers_health_statuses when connection fails."""
154154
# Mock the imports
155-
mock_lsc = mocker.patch("client.LlamaStackClientHolder.get_client")
155+
mock_lsc = mocker.patch("client.AsyncLlamaStackClientHolder.get_client")
156156

157157
# Mock get_llama_stack_client to raise an exception
158158
mock_lsc.side_effect = Exception("Connection error")
159159

160-
result = get_providers_health_statuses()
160+
result = await get_providers_health_statuses()
161161

162162
assert len(result) == 1
163163
assert result[0].provider_id == "unknown"

0 commit comments

Comments
 (0)