shin / src /free_claude_code /runtime /codex_catalog.py
LastNoob's picture
Add Codex App model catalog support (#1297)
49fa921 unverified
Raw
History Blame Contribute Delete
1.79 kB
"""Publish the application model inventory for Codex clients."""
from pathlib import Path
from free_claude_code.api.model_catalog import build_models_list_response
from free_claude_code.application.ports import RequestRuntimePort
from free_claude_code.cli.launchers.codex_model_catalog import (
build_codex_model_catalog,
write_codex_model_catalog,
)
from free_claude_code.config.paths import codex_model_catalog_path
class CodexModelCatalogPublisher:
"""Own synchronization of the stable Codex model catalog file."""
def __init__(self, catalog_path: Path | None = None) -> None:
self._catalog_path = catalog_path
def ensure_exists(self, runtime: RequestRuntimePort) -> None:
"""Publish a startup catalog only when no prior catalog exists."""
catalog_path = self._resolved_catalog_path()
if catalog_path.exists():
return
self._publish(runtime, catalog_path)
def publish(self, runtime: RequestRuntimePort) -> None:
"""Publish the complete current application model inventory."""
self._publish(runtime, self._resolved_catalog_path())
def _publish(
self,
runtime: RequestRuntimePort,
catalog_path: Path,
) -> None:
models_response = build_models_list_response(
runtime.current_settings(),
runtime,
)
catalog = build_codex_model_catalog(models_response.model_dump())
models = catalog.get("models")
if not isinstance(models, list) or not models:
raise ValueError("Codex model catalog contains no routable models.")
write_codex_model_catalog(catalog_path, catalog)
def _resolved_catalog_path(self) -> Path:
return self._catalog_path or codex_model_catalog_path()