Source code for base_attentive.resolver.component_resolver

"""Component resolution helpers for resolver-driven models."""

from __future__ import annotations

from typing import Any

from ..registry import (
    ComponentRegistration,
    ComponentRegistry,
    ModelRegistry,
)
from .backend_context import BackendContext
from .registrars import ensure_backend_registrations


def resolve_component(
    key: str,
    *,
    backend_context: BackendContext,
    registry: ComponentRegistry | None = None,
    model_registry: ModelRegistry | None = None,
    allow_generic: bool = True,
) -> ComponentRegistration:
    """Resolve a component registration for the requested backend."""
    active_registry, _ = ensure_backend_registrations(
        backend_context=backend_context,
        component_registry=registry,
        model_registry=model_registry,
    )
    return active_registry.resolve(
        key,
        backend=backend_context.name,
        allow_generic=allow_generic,
    )


[docs] def build_component( key: str, *, backend_context: BackendContext, registry: ComponentRegistry | None = None, model_registry: ModelRegistry | None = None, allow_generic: bool = True, spec: Any | None = None, **kwargs: Any, ) -> Any: """Resolve and build a component for the requested backend.""" registration = resolve_component( key, backend_context=backend_context, registry=registry, model_registry=model_registry, allow_generic=allow_generic, ) return registration.builder( context=backend_context, spec=spec, component_key=key, **kwargs, )
__all__ = [ "resolve_component", "build_component", ]