"""OpenCode Zen model registry for managing model configurations and aliases.""" from __future__ import annotations from ..shared import ModelCapabilities, ProviderType from .base import CAPABILITY_FIELD_NAMES, CapabilityModelRegistry class ZenModelRegistry(CapabilityModelRegistry): """Capability registry backed by ``conf/zen_models.json``.""" def __init__(self, config_path: str | None = None) -> None: super().__init__( env_var_name="ZEN_MODELS_CONFIG_PATH", default_filename="zen_models.json", provider=ProviderType.ZEN, friendly_prefix="OpenCode Zen ({model})", config_path=config_path, ) def _finalise_entry(self, entry: dict) -> tuple[ModelCapabilities, dict]: provider_override = entry.get("provider") if isinstance(provider_override, str): entry_provider = ProviderType(provider_override.lower()) elif isinstance(provider_override, ProviderType): entry_provider = provider_override else: entry_provider = ProviderType.ZEN entry.setdefault("friendly_name", f"OpenCode Zen ({entry['model_name']})") filtered = {k: v for k, v in entry.items() if k in CAPABILITY_FIELD_NAMES} filtered.setdefault("provider", entry_provider) capability = ModelCapabilities(**filtered) return capability, {}