mirror of
https://github.com/Alishahryar1/free-claude-code.git
synced 2026-07-03 14:05:26 +02:00
170 lines
5.9 KiB
Python
170 lines
5.9 KiB
Python
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
|