36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
"""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, {}
|