Spaces:
Running
Running
| from fastapi.testclient import TestClient | |
| from api.app import create_app | |
| from api.dependencies import get_settings | |
| from config.settings import Settings | |
| from providers.model_listing import ProviderModelInfo | |
| from providers.registry import ProviderRegistry | |
| def _settings( | |
| *, | |
| model: str = "deepseek/deepseek-chat", | |
| model_opus: str | None = "open_router/anthropic/claude-opus", | |
| model_haiku: str | None = "deepseek/deepseek-chat", | |
| ) -> Settings: | |
| return Settings.model_construct( | |
| model=model, | |
| model_opus=model_opus, | |
| model_sonnet=None, | |
| model_haiku=model_haiku, | |
| anthropic_auth_token="", | |
| ) | |
| def test_models_list_includes_configured_refs_cached_provider_models_and_aliases(): | |
| app = create_app(lifespan_enabled=False) | |
| settings = _settings() | |
| registry = ProviderRegistry() | |
| registry.cache_model_ids("deepseek", {"deepseek-chat"}) | |
| registry.cache_model_ids("open_router", {"meta/llama-3.3", "anthropic/claude-opus"}) | |
| app.state.provider_registry = registry | |
| app.dependency_overrides[get_settings] = lambda: settings | |
| try: | |
| response = TestClient(app).get("/v1/models") | |
| finally: | |
| app.dependency_overrides.clear() | |
| assert response.status_code == 200 | |
| data = response.json() | |
| ids = [item["id"] for item in data["data"]] | |
| assert ids[:6] == [ | |
| "anthropic/deepseek/deepseek-chat", | |
| "claude-3-freecc-no-thinking/deepseek/deepseek-chat", | |
| "anthropic/open_router/anthropic/claude-opus", | |
| "claude-3-freecc-no-thinking/open_router/anthropic/claude-opus", | |
| "anthropic/open_router/meta/llama-3.3", | |
| "claude-3-freecc-no-thinking/open_router/meta/llama-3.3", | |
| ] | |
| assert ids.count("anthropic/deepseek/deepseek-chat") == 1 | |
| assert ids.count("claude-3-freecc-no-thinking/deepseek/deepseek-chat") == 1 | |
| assert ids.count("anthropic/open_router/anthropic/claude-opus") == 1 | |
| assert ( | |
| ids.count("claude-3-freecc-no-thinking/open_router/anthropic/claude-opus") == 1 | |
| ) | |
| display_names = {item["id"]: item["display_name"] for item in data["data"]} | |
| assert ( | |
| display_names["anthropic/open_router/meta/llama-3.3"] | |
| == "open_router/meta/llama-3.3" | |
| ) | |
| assert ( | |
| display_names["claude-3-freecc-no-thinking/open_router/meta/llama-3.3"] | |
| == "open_router/meta/llama-3.3 (no thinking)" | |
| ) | |
| assert "claude-sonnet-4-20250514" in ids | |
| assert data["first_id"] == ids[0] | |
| assert data["last_id"] == ids[-1] | |
| assert data["has_more"] is False | |
| def test_models_list_uses_openrouter_thinking_metadata_for_cached_models(): | |
| app = create_app(lifespan_enabled=False) | |
| settings = _settings(model_opus=None) | |
| registry = ProviderRegistry() | |
| registry.cache_model_ids("deepseek", {"deepseek-chat"}) | |
| registry.cache_model_infos( | |
| "open_router", | |
| { | |
| ProviderModelInfo("reasoning-model", supports_thinking=True), | |
| ProviderModelInfo("plain-model", supports_thinking=False), | |
| }, | |
| ) | |
| app.state.provider_registry = registry | |
| app.dependency_overrides[get_settings] = lambda: settings | |
| try: | |
| response = TestClient(app).get("/v1/models") | |
| finally: | |
| app.dependency_overrides.clear() | |
| assert response.status_code == 200 | |
| ids = [item["id"] for item in response.json()["data"]] | |
| assert "anthropic/open_router/reasoning-model" in ids | |
| assert "claude-3-freecc-no-thinking/open_router/reasoning-model" in ids | |
| assert "anthropic/open_router/plain-model" not in ids | |
| assert "claude-3-freecc-no-thinking/open_router/plain-model" in ids | |
| def test_models_list_uses_cached_metadata_for_configured_openrouter_refs(): | |
| app = create_app(lifespan_enabled=False) | |
| settings = _settings( | |
| model="open_router/plain-model", | |
| model_opus=None, | |
| model_haiku=None, | |
| ) | |
| registry = ProviderRegistry() | |
| registry.cache_model_infos( | |
| "open_router", | |
| {ProviderModelInfo("plain-model", supports_thinking=False)}, | |
| ) | |
| app.state.provider_registry = registry | |
| app.dependency_overrides[get_settings] = lambda: settings | |
| try: | |
| response = TestClient(app).get("/v1/models") | |
| finally: | |
| app.dependency_overrides.clear() | |
| assert response.status_code == 200 | |
| ids = [item["id"] for item in response.json()["data"]] | |
| assert "anthropic/open_router/plain-model" not in ids | |
| assert ids[0] == "claude-3-freecc-no-thinking/open_router/plain-model" | |
| def test_models_list_includes_cached_wafer_models(): | |
| app = create_app(lifespan_enabled=False) | |
| settings = _settings( | |
| model="wafer/DeepSeek-V4-Pro", | |
| model_opus=None, | |
| model_haiku=None, | |
| ) | |
| registry = ProviderRegistry() | |
| registry.cache_model_ids("wafer", {"DeepSeek-V4-Pro", "MiniMax-M2.7"}) | |
| app.state.provider_registry = registry | |
| app.dependency_overrides[get_settings] = lambda: settings | |
| try: | |
| response = TestClient(app).get("/v1/models") | |
| finally: | |
| app.dependency_overrides.clear() | |
| assert response.status_code == 200 | |
| ids = [item["id"] for item in response.json()["data"]] | |
| assert "anthropic/wafer/DeepSeek-V4-Pro" in ids | |
| assert "claude-3-freecc-no-thinking/wafer/DeepSeek-V4-Pro" in ids | |
| assert "anthropic/wafer/MiniMax-M2.7" in ids | |
| assert "claude-3-freecc-no-thinking/wafer/MiniMax-M2.7" in ids | |
| def test_models_list_works_without_provider_registry(): | |
| app = create_app(lifespan_enabled=False) | |
| settings = _settings() | |
| app.dependency_overrides[get_settings] = lambda: settings | |
| try: | |
| response = TestClient(app).get("/v1/models") | |
| finally: | |
| app.dependency_overrides.clear() | |
| assert response.status_code == 200 | |
| ids = [item["id"] for item in response.json()["data"]] | |
| assert ids[:4] == [ | |
| "anthropic/deepseek/deepseek-chat", | |
| "claude-3-freecc-no-thinking/deepseek/deepseek-chat", | |
| "anthropic/open_router/anthropic/claude-opus", | |
| "claude-3-freecc-no-thinking/open_router/anthropic/claude-opus", | |
| ] | |
| assert "claude-sonnet-4-20250514" in ids | |