File size: 3,096 Bytes
49fa921 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | import json
from pathlib import Path
from unittest.mock import patch
import pytest
from free_claude_code.application.model_metadata import ProviderModelInfo
from free_claude_code.application.ports import (
RequestRuntimeLease,
RequestRuntimePort,
)
from free_claude_code.config.settings import Settings
from free_claude_code.runtime.codex_catalog import CodexModelCatalogPublisher
class FakeRequestRuntime(RequestRuntimePort):
def __init__(
self,
*,
settings: Settings,
cached_infos: tuple[ProviderModelInfo, ...] = (),
) -> None:
self._settings = settings
self._cached_infos = cached_infos
async def acquire(self) -> RequestRuntimeLease:
raise AssertionError("Catalog publication must not acquire a provider lease.")
def current_settings(self) -> Settings:
return self._settings
def cached_model_supports_thinking(
self, provider_id: str, model_id: str
) -> bool | None:
return None
def cached_prefixed_model_infos(self) -> tuple[ProviderModelInfo, ...]:
return self._cached_infos
def _runtime() -> FakeRequestRuntime:
settings = Settings().model_copy(update={"model": "nvidia_nim/configured"})
return FakeRequestRuntime(
settings=settings,
cached_infos=(ProviderModelInfo("open_router/discovered"),),
)
def _catalog_slugs(path: Path) -> list[str]:
payload = json.loads(path.read_text(encoding="utf-8"))
return [model["slug"] for model in payload["models"]]
def test_publisher_projects_the_application_catalog_without_compatibility_ids(
tmp_path: Path,
) -> None:
catalog_path = tmp_path / "codex-model-catalog.json"
publisher = CodexModelCatalogPublisher(catalog_path)
publisher.publish(_runtime())
assert _catalog_slugs(catalog_path) == [
"nvidia_nim/configured",
"open_router/discovered",
]
def test_startup_publication_creates_missing_catalog_and_preserves_existing(
tmp_path: Path,
) -> None:
catalog_path = tmp_path / "codex-model-catalog.json"
publisher = CodexModelCatalogPublisher(catalog_path)
publisher.ensure_exists(_runtime())
assert _catalog_slugs(catalog_path) == [
"nvidia_nim/configured",
"open_router/discovered",
]
catalog_path.write_text("complete prior catalog\n", encoding="utf-8")
publisher.ensure_exists(_runtime())
assert catalog_path.read_text(encoding="utf-8") == "complete prior catalog\n"
def test_empty_projection_preserves_existing_catalog(tmp_path: Path) -> None:
catalog_path = tmp_path / "codex-model-catalog.json"
catalog_path.write_text("last known good\n", encoding="utf-8")
publisher = CodexModelCatalogPublisher(catalog_path)
with (
patch(
"free_claude_code.runtime.codex_catalog.build_codex_model_catalog",
return_value={"models": []},
),
pytest.raises(ValueError, match="no routable models"),
):
publisher.publish(_runtime())
assert catalog_path.read_text(encoding="utf-8") == "last known good\n"
|