Files
odoo-ai/agent_service/app_state.py
ActiveBlue Build 430ab966b2 feat(service): add FastAPI agent service with 5 routers and Docker setup
- config.py: pydantic-settings with all env vars, privacy mode, per-agent overrides
- app_state.py: global singletons (pool, master agent, registry, llm_router, sweep)
- main.py: FastAPI lifespan startup — DB pool, LLM router, Odoo client, agents, master
- routers/dispatch.py: POST /dispatch with rate limiting and webhook secret auth
- routers/approval.py: GET /approval/pending, POST /approval/respond
- routers/registry.py: GET/POST /registry/agents, POST /registry/backend overrides
- routers/sweep.py: POST /sweep trigger, GET /sweep/status
- routers/health.py: GET /health, GET /health/detailed (DB/Odoo/Ollama checks)
- requirements.txt: pinned deps (fastapi, uvicorn, asyncpg, anthropic, alembic)
- Dockerfile: python:3.11-slim, single uvicorn worker
- docker-compose.yml: agent-service + postgres:15, bound to 192.168.2.47:8001

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-12 17:54:28 -04:00

58 lines
1.0 KiB
Python

"""Global application state — singletons accessed by routers."""
from __future__ import annotations
from typing import Optional, TYPE_CHECKING
if TYPE_CHECKING:
import asyncpg
_db_pool: Optional['asyncpg.Pool'] = None
_master_agent = None
_agent_registry = None
_llm_router = None
_sweep_coordinator = None
def set_db_pool(pool) -> None:
global _db_pool
_db_pool = pool
def get_db_pool():
return _db_pool
def set_master_agent(agent) -> None:
global _master_agent
_master_agent = agent
def get_master_agent():
return _master_agent
def set_agent_registry(registry) -> None:
global _agent_registry
_agent_registry = registry
def get_agent_registry():
return _agent_registry
def set_llm_router(router) -> None:
global _llm_router
_llm_router = router
def get_llm_router():
return _llm_router
def set_sweep_coordinator(coordinator) -> None:
global _sweep_coordinator
_sweep_coordinator = coordinator
def get_sweep_coordinator():
return _sweep_coordinator