- AGENTS.md: Sofiia Chief AI Architect role definition - SOFIIA_IN_OPENCODE.md, SOFIIA_NODA2_SETUP.md: NODA2 setup documentation - agromatrix_stepan_noda1_APPLY.md, agromatrix_stepan_noda1_prod.patch: AgroMatrix production patch - docker-compose.memory-node2.yml: memory service for NODA2 - docker-compose.node2-sofiia-supervisor.yml: sofiia supervisor for NODA2 - gateway-bot/gateway_boot.py, monitor_prompt.txt, vision_guard.py: gateway extras - models/Modelfile.qwen3.5-35b-a3b: Qwen model definition for NODA3 - opencode.json: OpenCode providers and agents config - scripts/init-sofiia-memory.py, scripts/node2/*, start-memory-node2.sh: NODA2 init scripts - setup_sofiia_node2.sh: NODA2 full setup script Made-with: Cursor
82 lines
2.3 KiB
YAML
82 lines
2.3 KiB
YAML
version: "3.8"
|
|
|
|
# Sofiia Supervisor — NODA2 deployment
|
|
#
|
|
# Usage:
|
|
# docker compose -f docker-compose.node2.yml \
|
|
# -f docker-compose.node2-sofiia-supervisor.yml up -d
|
|
#
|
|
# Or standalone (requires router already running on dagi-network-node2):
|
|
# docker compose -f docker-compose.node2-sofiia-supervisor.yml up -d
|
|
|
|
services:
|
|
|
|
sofiia-supervisor:
|
|
build:
|
|
context: ./services/sofiia-supervisor
|
|
dockerfile: Dockerfile
|
|
container_name: sofiia-supervisor
|
|
image: daarion/sofiia-supervisor:latest
|
|
ports:
|
|
- "8084:8080"
|
|
environment:
|
|
# Router is the gateway — all tool calls go here
|
|
- GATEWAY_BASE_URL=http://router:8000
|
|
# Set this to restrict access to /v1/tools/execute on the router side
|
|
- SUPERVISOR_API_KEY=${SUPERVISOR_API_KEY:-}
|
|
# Protect the supervisor HTTP API from outside
|
|
- SUPERVISOR_INTERNAL_KEY=${SUPERVISOR_INTERNAL_KEY:-}
|
|
# State backend
|
|
- SUPERVISOR_STATE_BACKEND=redis
|
|
- REDIS_URL=redis://sofiia-redis:6379/0
|
|
- RUN_TTL_SEC=86400
|
|
# Agent identity
|
|
- DEFAULT_AGENT_ID=sofiia
|
|
- DEFAULT_WORKSPACE_ID=${DEFAULT_WORKSPACE_ID:-daarion}
|
|
- DEFAULT_TIMEZONE=Europe/Kiev
|
|
# Timeouts
|
|
- TOOL_CALL_TIMEOUT_SEC=60
|
|
- TOOL_CALL_MAX_RETRIES=2
|
|
- JOB_POLL_INTERVAL_SEC=3
|
|
- JOB_MAX_WAIT_SEC=300
|
|
depends_on:
|
|
- sofiia-redis
|
|
networks:
|
|
- dagi-network
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-sf", "http://localhost:8080/healthz"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 20s
|
|
volumes:
|
|
- ./logs:/app/logs
|
|
|
|
sofiia-redis:
|
|
image: redis:7.4-alpine
|
|
container_name: sofiia-redis
|
|
command: redis-server --save 60 1 --loglevel warning --maxmemory 256mb --maxmemory-policy allkeys-lru
|
|
ports:
|
|
- "6380:6379" # Expose on 6380 to avoid conflict with existing Redis
|
|
volumes:
|
|
- sofiia-redis-data:/data
|
|
networks:
|
|
- dagi-network
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 15s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
networks:
|
|
# Reuse the existing NODA2 network so supervisor can reach router
|
|
dagi-network:
|
|
external: true
|
|
name: dagi-network-node2
|
|
|
|
volumes:
|
|
sofiia-redis-data:
|
|
driver: local
|