Carlos Garcia 590f1b7ee2 fix: make Odoo login configurable via ODOO_USER (default __system__)
Some Odoo instances require the user's actual login/email for API key
auth rather than the __system__ special login. ODOO_USER defaults to
__system__ for standard Odoo 16+ installs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 19:15:06 -04:00
2026-04-12 14:12:51 -04:00
2026-04-12 14:12:51 -04:00
2026-04-12 14:12:51 -04:00

ActiveBlue AI

Multi-agent AI system integrated with Odoo 18 Community Edition.

Architecture

Odoo 18 (ai.activeblue.net)
  └── activeblue_ai module
        ├── OWL2 systray brain icon + slide-in chat panel
        ├── Models: ab.ai.bot, ab.ai.directive, ab.ai.log, ab.ai.agent.registry
        └── Controllers: /ai/chat, /ai/webhook/callback, /ai/health, /ai/approval/*

FastAPI Agent Service (192.168.2.47:8001)
  ├── POST /dispatch       — route user message to MasterAgent
  ├── GET/POST /approval/* — human approval workflow
  ├── GET/POST /registry/* — agent registry + LLM backend overrides
  ├── POST /sweep          — trigger proactive agent sweeps
  └── GET /health          — service health + Odoo/Ollama status

MasterAgent (singleton)
  ├── Classifies intent via LLM
  ├── Routes to specialist agents in parallel (asyncio.gather)
  ├── Manages 3-tier memory (conversation / operational / knowledge)
  └── Synthesises responses

Specialist Agents (8, stateless):
  finance_agent, accounting_agent, crm_agent, sales_agent,
  project_agent, elearning_agent, expenses_agent, employees_agent

Privacy Modes

Mode Behaviour
local Ollama only for all agents
hybrid Per-agent override (DB → env → fallback)
cloud Claude for non-HIPAA agents

HIPAA-locked agents (always Ollama, no exceptions): finance_agent, accounting_agent, employees_agent, expenses_agent

Quick Start

1. Clone and configure

git clone http://192.168.1.64:3000/tocmo0nlord/odoo-ai.git
cd odoo-ai
cp .env.example .env
# Edit .env — set POSTGRES_PASSWORD, ODOO_API_KEY, etc.

2. Run Odoo 18

docker compose -f docker-compose.odoo.yml up -d

3. Run the Agent Service

docker compose up -d

Or for development:

pip install -r requirements.txt
uvicorn agent_service.main:app --reload --port 8001

4. Run database migrations

cd agent_service/migrations
alembic upgrade head

5. Install Odoo module

In Odoo → Settings → Apps → search "ActiveBlue AI" → Install.

Environment Variables

See .env.example for the full list. Key variables:

Variable Description
ODOO_URL Odoo base URL (e.g. http://ai.activeblue.net)
ODOO_API_KEY Odoo user API key
OLLAMA_URL Ollama API URL (e.g. http://192.168.2.47:11434)
ANTHROPIC_API_KEY Required only if LLM_PRIVACY_MODE=cloud or hybrid
LLM_PRIVACY_MODE local / hybrid / cloud (default: local)
POSTGRES_PASSWORD Required — no default
WEBHOOK_SECRET Shared secret between Odoo and agent service

Development

Running tests

pip install pytest pytest-asyncio
pytest tests/ -v

Project structure

odoo-ai/
├── agent_service/
│   ├── agents/          # MasterAgent + 8 specialist agents + PeerBus + SweepCoordinator
│   ├── llm/             # OllamaBackend, ClaudeBackend, LLMRouter, ToolCallValidator
│   ├── memory/          # ConversationStore, OperationalStore, KnowledgeStore, MemoryManager
│   ├── tools/           # OdooClient + per-domain tools (finance, crm, sales, ...)
│   ├── routers/         # FastAPI routers (dispatch, approval, registry, sweep, health)
│   ├── prompts/         # System prompts for each agent
│   ├── migrations/      # Alembic migrations (7 tables)
│   ├── logging_utils/   # Structured JSON logging + Loki push
│   ├── config.py        # pydantic-settings
│   ├── app_state.py     # Global singletons
│   └── main.py          # FastAPI app + lifespan startup
├── addons/
│   └── activeblue_ai/   # Odoo 18 module
│       ├── models/      # ab.ai.bot, ab.ai.directive, ab.ai.log, ab.ai.agent.registry
│       ├── controllers/ # webhook, health_proxy, approval + chat
│       ├── views/       # XML views + menus
│       ├── security/    # groups + ACL
│       ├── data/        # cron jobs
│       └── static/      # OWL2 JS + CSS + XML templates
├── research/            # Per-domain research notes
├── tests/               # pytest test suite
├── docker-compose.odoo.yml  # Odoo 18 + PostgreSQL 15
├── docker-compose.yml       # Agent service + PostgreSQL 15
├── Dockerfile
├── requirements.txt
└── .env.example

Agent Tool Limits

Each specialist agent is capped at 8 tools (MAX_TOOLS_PER_AGENT). The ToolCallValidator raises AgentConfigError at startup if exceeded.

Memory Architecture

Tier Store TTL Scope
Tier 1 ab_conversation_memory Hard cap: 200 rows/user Per user
Tier 2 ab_operational_memory 90 days Per agent+scope
Tier 3 ab_knowledge_store Permanent Entity-keyed

License

LGPL-3.0

Description
No description provided
Readme 308 KiB
Languages
Python 88.9%
Shell 7.5%
JavaScript 1.9%
CSS 1.5%
Dockerfile 0.2%