Newer
Older
navi-1 / navi / api / deps.py
"""FastAPI dependency injection — provides shared singletons to route handlers."""

from functools import lru_cache
from typing import Annotated

from fastapi import Depends

from navi.core import (
    Agent,
    BackendRegistry,
    InMemorySessionStore,
    ProfileRegistry,
    SessionStore,
    ToolRegistry,
    build_default_registries,
)


@lru_cache
def _registries() -> tuple[ToolRegistry, ProfileRegistry, BackendRegistry]:
    return build_default_registries()


def get_tool_registry() -> ToolRegistry:
    return _registries()[0]


def get_profile_registry() -> ProfileRegistry:
    return _registries()[1]


def get_backend_registry() -> BackendRegistry:
    return _registries()[2]


_session_store = InMemorySessionStore()


def get_session_store() -> SessionStore:
    return _session_store


def get_agent(
    session_store: Annotated[SessionStore, Depends(get_session_store)],
    profile_registry: Annotated[ProfileRegistry, Depends(get_profile_registry)],
    tool_registry: Annotated[ToolRegistry, Depends(get_tool_registry)],
    backend_registry: Annotated[BackendRegistry, Depends(get_backend_registry)],
) -> Agent:
    return Agent(session_store, profile_registry, tool_registry, backend_registry)