"""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)