fix: models need to be paginated (#9621)

This commit is contained in:
Ari Webb
2026-02-23 18:08:47 -08:00
committed by Caren Thomas
parent 8ab9d78a23
commit 47d55362a4
2 changed files with 53 additions and 24 deletions

View File

@@ -557,16 +557,31 @@ async def test_server_startup_syncs_base_providers(default_user, default_organiz
async def mock_openai_get_model_list_async(*args, **kwargs):
return mock_openai_models
# Mock Anthropic models.list() response
from unittest.mock import MagicMock
# Mock Anthropic models.list() response as an async iterable
# (the real SDK returns an AsyncPage that supports async iteration)
mock_anthropic_response = MagicMock()
mock_anthropic_response.model_dump.return_value = mock_anthropic_models
class MockAnthropicModelItem:
def __init__(self, data):
self._data = data
def model_dump(self):
return self._data
class MockAnthropicAsyncPage:
def __init__(self, items):
self._items = [MockAnthropicModelItem(item) for item in items]
def __aiter__(self):
return self._async_iter()
async def _async_iter(self):
for item in self._items:
yield item
# Mock the Anthropic AsyncAnthropic client
class MockAnthropicModels:
async def list(self):
return mock_anthropic_response
return MockAnthropicAsyncPage(mock_anthropic_models["data"])
class MockAsyncAnthropic:
def __init__(self, *args, **kwargs):
@@ -833,24 +848,38 @@ async def test_server_startup_handles_api_errors_gracefully(default_user, defaul
async def mock_openai_fail(*args, **kwargs):
raise Exception("OpenAI API is down")
# Mock Anthropic to succeed
from unittest.mock import MagicMock
# Mock Anthropic to succeed (as async iterable, matching real SDK pagination)
mock_anthropic_response = MagicMock()
mock_anthropic_response.model_dump.return_value = {
"data": [
{
"id": "claude-3-5-sonnet-20241022",
"type": "model",
"display_name": "Claude 3.5 Sonnet",
"created_at": "2024-10-22T00:00:00Z",
}
]
}
mock_anthropic_data = [
{
"id": "claude-3-5-sonnet-20241022",
"type": "model",
"display_name": "Claude 3.5 Sonnet",
"created_at": "2024-10-22T00:00:00Z",
}
]
class MockAnthropicModelItem:
def __init__(self, data):
self._data = data
def model_dump(self):
return self._data
class MockAnthropicAsyncPage:
def __init__(self, items):
self._items = [MockAnthropicModelItem(item) for item in items]
def __aiter__(self):
return self._async_iter()
async def _async_iter(self):
for item in self._items:
yield item
class MockAnthropicModels:
async def list(self):
return mock_anthropic_response
return MockAnthropicAsyncPage(mock_anthropic_data)
class MockAsyncAnthropic:
def __init__(self, *args, **kwargs):