from __future__ import annotations
import logging
from .. import envs
from ..client import MxClient, MxClientBase
from .k8s_service_client import MxK8sServiceClient
logger = logging.getLogger("modelexpress.metadata.client_factory")
_CENTRAL_BACKEND_ALIASES = frozenset({
"", "server", "redis", "kubernetes", "k8s", "crd",
})
_K8S_SERVICE_ALIASES = frozenset({"k8s-service", "service"})
def create_metadata_client(
worker_rank: int | None = None,
server_url: str | None = None,
) -> MxClientBase:
backend = envs.MX_METADATA_BACKEND
if backend in _CENTRAL_BACKEND_ALIASES:
logger.debug("create_metadata_client: central MxClient (backend=%r)", backend)
return MxClient(server_url=server_url)
if backend in _K8S_SERVICE_ALIASES:
logger.info(
"create_metadata_client: MxK8sServiceClient "
"(backend=%r, worker_rank=%s)",
backend, worker_rank,
)
return MxK8sServiceClient(worker_rank=worker_rank)
raise ValueError(
f"Unknown MX_METADATA_BACKEND value {backend!r}. "
f"Supported: {sorted(_CENTRAL_BACKEND_ALIASES | _K8S_SERVICE_ALIASES)}"
)