Files
cAIc/docker-compose.yml
T
gramps aecd3330fd feat: image generation service — ComfyUI cluster integration
- POST /api/image/generate proxy endpoint (admin required)
- GET /api/image/status lists available image gen nodes
- Cluster AMQP protocol: cmd.image_generate, image_generated, image_failed
- Node agent auto-detects ComfyUI, registers image_gen capability
- ComfyUI workflow builder: CheckpointLoader → KSampler → VAEDecode → SaveImage
- Hardware probe checks ComfyUI reachability + checkpoint model list
- 27 tests covering cluster handlers, router, node agent, hardware, capabilities
- Config: CAIC_COMFYUI_BASE, CAIC_COMFYUI_TIMEOUT, comfyui_port in agent.ini
- Version bump to v1.1.0
- Documentation: ai.md, wiki/Developer-Architecture.md, current-wip.md, README.md, .env.example
2026-07-27 08:06:03 -07:00

119 lines
3.6 KiB
YAML

# cAIc — Docker Compose stack
# Coordinator: cAIc + SearXNG + Qdrant + RabbitMQ + llama-server + Ollama
#
# Usage:
# cp .env.example .env # edit with your values
# mkdir -p models secrets searxng
# # place .gguf model in ./models/
# docker compose up -d
services:
# ── cAIc (FastAPI) ──────────────────────────────────────
caic:
build: .
ports:
- "${CAIC_EXPOSE_PORT:-8080}:8080"
volumes:
- caic_data:/app/data
secrets:
- rabbitmq_password
environment:
- CAIC_AMQP_SECRET_PATH=/run/secrets/rabbitmq_password
- CAIC_COMFYUI_BASE=${CAIC_COMFYUI_BASE:-http://192.168.50.115:8188}
- CAIC_COMFYUI_TIMEOUT=${CAIC_COMFYUI_TIMEOUT:-120}
env_file: .env
depends_on:
qdrant: { condition: service_started }
rabbitmq: { condition: service_healthy }
llama-server: { condition: service_healthy }
restart: unless-stopped
# ── SearXNG (web search) ────────────────────────────────
searxng:
image: searxng/searxng:latest
ports:
- "${SEARXNG_EXPOSE_PORT:-8888}:8080"
volumes:
- ./searxng/settings.yml:/etc/searxng/settings.yml:ro
- searxng_config:/etc/searxng
environment:
- SEARXNG_BASE_URL=http://localhost:8888
restart: unless-stopped
# ── Qdrant (vector DB) ──────────────────────────────────
qdrant:
image: qdrant/qdrant:latest
ports:
- "${QDRANT_EXPOSE_PORT:-6333}:6333"
volumes:
- qdrant_storage:/qdrant/storage
restart: unless-stopped
# ── RabbitMQ (AMQP broker) ──────────────────────────────
rabbitmq:
image: rabbitmq:4-management
ports:
- "${RABBITMQ_EXPOSE_PORT:-5672}:5672"
volumes:
- rabbitmq_data:/var/lib/rabbitmq
environment:
RABBITMQ_DEFAULT_USER: caic
RABBITMQ_DEFAULT_PASS_FILE: /run/secrets/rabbitmq_password
RABBITMQ_DEFAULT_VHOST: /
secrets:
- rabbitmq_password
healthcheck:
test: ["CMD", "rabbitmq-diagnostics", "check_port_connectivity"]
interval: 15s
timeout: 5s
retries: 3
restart: unless-stopped
# ── llama-server (LLM inference) ────────────────────────
llama-server:
image: ghcr.io/ggml-org/llama.cpp:server
ports:
- "${LLAMA_EXPOSE_PORT:-8081}:8081"
volumes:
- ./models:/models:ro
command: >
--model /models/${LLAMA_MODEL:?Set LLAMA_MODEL in .env}
--host 0.0.0.0 --port 8081
--ctx-size ${LLAMA_CTX_SIZE:-4096}
--n-gpu-layers ${LLAMA_N_GPU_LAYERS:-0}
--embeddings
--logprobs
${LLAMA_RPC_ENDPOINTS:+--rpc ${LLAMA_RPC_ENDPOINTS}}
healthcheck:
test: ["CMD", "curl", "-fs", "http://localhost:8081/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
restart: unless-stopped
# ── Ollama (embeddings) ─────────────────────────────────
ollama:
image: ollama/ollama:latest
ports:
- "${OLLAMA_EXPOSE_PORT:-11434}:11434"
volumes:
- ollama_models:/root/.ollama
healthcheck:
test: ["CMD", "ollama", "list"]
interval: 30s
timeout: 10s
retries: 3
restart: unless-stopped
volumes:
caic_data:
searxng_config:
qdrant_storage:
rabbitmq_data:
ollama_models:
secrets:
rabbitmq_password:
file: ./secrets/rabbitmq_password.txt