Files
wehub-resource-sync 5296d0e97c
CI / Ban suppressions and legacy annotations (push) Has been cancelled
CI / pytest (push) Has been cancelled
CI / ruff-check (push) Has been cancelled
CI / ruff-format (push) Has been cancelled
CI / ty (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:35:44 +08:00

145 lines
4.9 KiB
Python

from fastapi.testclient import TestClient
from free_claude_code.application.model_metadata import ProviderModelInfo
from free_claude_code.config.settings import Settings
from tests.api.support import create_test_app, provider_manager_for_app
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 _cache_models(app, provider_id: str, *model_ids: str) -> None:
provider_manager_for_app(app).cache_model_infos(
provider_id,
{ProviderModelInfo(model_id) for model_id in model_ids},
)
def test_models_list_includes_configured_refs_cached_provider_models_and_aliases():
app = create_test_app(_settings())
_cache_models(app, "deepseek", "deepseek-chat")
_cache_models(
app,
"open_router",
"meta/llama-3.3",
"anthropic/claude-opus",
)
response = TestClient(app).get("/v1/models")
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("anthropic/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_thinking_metadata_for_cached_models():
app = create_test_app(_settings(model_opus=None))
manager = provider_manager_for_app(app)
_cache_models(app, "deepseek", "deepseek-chat")
manager.cache_model_infos(
"open_router",
{
ProviderModelInfo("reasoning-model", supports_thinking=True),
ProviderModelInfo("plain-model", supports_thinking=False),
},
)
response = TestClient(app).get("/v1/models")
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_refs():
app = create_test_app(
_settings(
model="open_router/plain-model",
model_opus=None,
model_haiku=None,
)
)
provider_manager_for_app(app).cache_model_infos(
"open_router",
{ProviderModelInfo("plain-model", supports_thinking=False)},
)
response = TestClient(app).get("/v1/models")
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_test_app(
_settings(
model="wafer/DeepSeek-V4-Pro",
model_opus=None,
model_haiku=None,
)
)
_cache_models(app, "wafer", "DeepSeek-V4-Pro", "MiniMax-M2.7")
response = TestClient(app).get("/v1/models")
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_with_empty_discovery_catalog():
app = create_test_app(_settings())
response = TestClient(app).get("/v1/models")
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