| version: "3.9"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| x-app-base: &app-base
|
| build:
|
| context: .
|
| dockerfile: Dockerfile
|
| env_file:
|
| - .env
|
| environment:
|
| OLLAMA_BASE_URL: "http://ollama:11434"
|
| REDIS_URL: "redis://redis:6379/0"
|
| COMPUTE_STRATEGY: "cloud_priority"
|
| REQUEST_TIMEOUT_SECS: "300"
|
| OLLAMA_CLOUD_ENABLED: "true"
|
| REASONER_MODEL: "nicholasjmcleod/kimi-linear:q6_k"
|
| TANDEM_MODEL: "nicholasjmcleod/harmonic-hermes:q6_k"
|
| CODER_MODEL: "nicholasjmcleod/ultracoder:q4_k_m"
|
| FALLBACK_MODEL: "nicholasjmcleod/qwopus:q8_0"
|
| CODER_DEDICATED_MODEL: "nicholasjmcleod/qwen3-coder-53b:q6_k"
|
| GENSTRUCT_MODEL: "nicholasjmcleod/genstruct:q6_k"
|
| INFINITY_PARSER_MODEL: "nicholasjmcleod/infinity-parser:latest"
|
| MONITOR_MODEL: "nicholasjmcleod/harmonic-hermes:q6_k"
|
| MONITOR_CODER_MODEL: "nicholasjmcleod/ultracoder:q4_k_m"
|
| depends_on:
|
| redis:
|
| condition: service_healthy
|
| ollama:
|
| condition: service_healthy
|
| volumes:
|
| - ./skills:/app/skills:ro
|
| - ./plugins:/app/plugins:ro
|
| - ./.mcp.json:/app/.mcp.json:ro
|
| restart: unless-stopped
|
|
|
| services:
|
|
|
|
|
| redis:
|
| image: redis:7-alpine
|
| container_name: agent-q3-redis
|
| ports:
|
| - "6379:6379"
|
| volumes:
|
| - redis_data:/data
|
| healthcheck:
|
| test: ["CMD", "redis-cli", "ping"]
|
| interval: 10s
|
| timeout: 3s
|
| retries: 10
|
| restart: unless-stopped
|
|
|
|
|
|
|
|
|
| ollama:
|
| build:
|
| context: .
|
| dockerfile: Dockerfile.ollama
|
| container_name: agent-q3-ollama
|
| ports:
|
| - "11434:11434"
|
| volumes:
|
| - ~/.ollama:/root/.ollama
|
| environment:
|
| OLLAMA_HOST: "0.0.0.0"
|
| OLLAMA_ORIGINS: "*"
|
| OLLAMA_KEEP_ALIVE: "24h"
|
| OLLAMA_MAX_LOADED_MODELS: "7"
|
| restart: unless-stopped
|
| healthcheck:
|
| test: ["CMD", "curl", "-f", "http://localhost:11434/"]
|
| interval: 15s
|
| timeout: 5s
|
| retries: 20
|
| start_period: 60s
|
|
|
|
|
| mcp-bridge:
|
| <<: *app-base
|
| container_name: agent-q3-mcp-bridge
|
| ports:
|
| - "8004:8004"
|
| command: ["python", "-m", "uvicorn", "orchestrator.services.mcp_bridge:app",
|
| "--host", "0.0.0.0", "--port", "8004", "--log-level", "info"]
|
| healthcheck:
|
| test: ["CMD", "curl", "-f", "http://localhost:8004/health"]
|
| interval: 30s
|
| timeout: 10s
|
| retries: 5
|
|
|
|
|
| multimodal:
|
| <<: *app-base
|
| container_name: agent-q3-multimodal
|
| ports:
|
| - "8000:8000"
|
| command: ["python", "-m", "uvicorn", "orchestrator.main:app",
|
| "--host", "0.0.0.0", "--port", "8000", "--log-level", "info"]
|
| healthcheck:
|
| test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
|
| interval: 30s
|
| timeout: 10s
|
| retries: 5
|
|
|
|
|
| coder:
|
| <<: *app-base
|
| container_name: agent-q3-coder
|
| ports:
|
| - "8001:8001"
|
| command: ["python", "-m", "uvicorn", "orchestrator.services.coder:app",
|
| "--host", "0.0.0.0", "--port", "8001", "--log-level", "info"]
|
| healthcheck:
|
| test: ["CMD", "curl", "-f", "http://localhost:8001/health"]
|
| interval: 30s
|
| timeout: 10s
|
| retries: 5
|
|
|
|
|
| research:
|
| <<: *app-base
|
| container_name: agent-q3-research
|
| ports:
|
| - "8002:8002"
|
| command: ["python", "-m", "uvicorn", "orchestrator.services.research:app",
|
| "--host", "0.0.0.0", "--port", "8002", "--log-level", "info"]
|
| healthcheck:
|
| test: ["CMD", "curl", "-f", "http://localhost:8002/health"]
|
| interval: 30s
|
| timeout: 10s
|
| retries: 5
|
|
|
|
|
| monitor:
|
| <<: *app-base
|
| container_name: agent-q3-monitor
|
| ports:
|
| - "8003:8003"
|
| environment:
|
| OLLAMA_BASE_URL: "http://ollama:11434"
|
| REDIS_URL: "redis://redis:6379/0"
|
| MONITOR_MODEL: "nicholasjmcleod/harmonic-hermes:q6_k"
|
| MONITOR_CODER_MODEL: "nicholasjmcleod/ultracoder:q4_k_m"
|
| MONITOR_POLL_INTERVAL_SECS: "30"
|
| MONITOR_TARGETS: "http://multimodal:8000,http://coder:8001,http://research:8002,http://mcp-bridge:8004,http://ollama:11434"
|
| command: ["python", "-m", "uvicorn", "orchestrator.services.monitor:app",
|
| "--host", "0.0.0.0", "--port", "8003", "--log-level", "info"]
|
| healthcheck:
|
| test: ["CMD", "curl", "-f", "http://localhost:8003/health"]
|
| interval: 30s
|
| timeout: 10s
|
| retries: 5
|
|
|
|
|
| open-webui:
|
| image: ghcr.io/open-webui/open-webui:main
|
| container_name: agent-q3-webui
|
| ports:
|
| - "3000:8080"
|
| volumes:
|
| - open_webui_data:/app/backend/data
|
| environment:
|
| OLLAMA_BASE_URL: "http://ollama:11434"
|
| WEBUI_SECRET_KEY: ${WEBUI_SECRET_KEY:-change-me-in-env}
|
| ENABLE_SIGNUP: "true"
|
| DEFAULT_MODELS: "nicholasjmcleod/kimi-linear:q6_k"
|
| depends_on:
|
| ollama:
|
| condition: service_healthy
|
| restart: unless-stopped
|
|
|
| volumes:
|
| redis_data:
|
| driver: local
|
| open_webui_data:
|
| driver: local
|
|
|