services: litellm-db: image: postgres:16-alpine container_name: litellm-db environment: - POSTGRES_DB=litellm - POSTGRES_USER=litellm - POSTGRES_PASSWORD=litellm volumes: - /mnt/ssd/dbs/litellm/postgres:/var/lib/postgresql/data restart: always litellm: image: ghcr.io/berriai/litellm:main-latest container_name: litellm ports: - "4000:4000" volumes: - ./litellm-config.yaml:/app/config.yaml environment: - DATABASE_URL=postgresql://litellm:litellm@litellm-db:5432/litellm - LITELLM_MASTER_KEY=sk-fjQC1BxAiGFSMs - LANGFUSE_PUBLIC_KEY=${LANGFUSE_PUBLIC_KEY:-changeme} - LANGFUSE_SECRET_KEY=${LANGFUSE_SECRET_KEY:-changeme} - LANGFUSE_HOST=http://langfuse:3000 - OPENROUTER_API_KEY=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 command: ["--config", "/app/config.yaml", "--port", "4000"] extra_hosts: - "host.docker.internal:host-gateway" depends_on: - litellm-db - langfuse restart: always kimi-agent: build: ./kimi-agent container_name: kimi-agent volumes: - /home/alvis/kimi-workspace:/workspace - kimi-agent-home:/root/.kimi-code restart: unless-stopped langfuse-db: image: postgres:16-alpine container_name: langfuse-db environment: - POSTGRES_DB=langfuse - POSTGRES_USER=langfuse - POSTGRES_PASSWORD=langfuse volumes: - /mnt/ssd/dbs/langfuse/postgres:/var/lib/postgresql/data restart: always langfuse: image: ghcr.io/langfuse/langfuse:2 container_name: langfuse ports: - "3200:3000" environment: - DATABASE_URL=postgresql://langfuse:langfuse@langfuse-db:5432/langfuse - NEXTAUTH_URL=https://lf.alogins.net - NEXTAUTH_SECRET=532a746b24ac40afa39f9d317031cab94d4d6881107ea3b1209b28020f1a9761 - SALT=7927b3b0092afe4542274940b557becea6418a5fed79f7acd25c3a789349fdc9 - AUTH_DISABLE_SIGNUP=true depends_on: - langfuse-db restart: always qdrant: image: qdrant/qdrant container_name: qdrant ports: - "6333:6333" - "6334:6334" restart: always volumes: - /mnt/ssd/dbs/qdrant:/qdrant/storage:z faster-whisper: image: fedirz/faster-whisper-server:latest-cuda container_name: faster-whisper runtime: nvidia ports: - "8880:8000" environment: - WHISPER__MODEL=deepdml/faster-whisper-large-v3-turbo-ct2 - WHISPER__INFERENCE_DEVICE=cuda - WHISPER__COMPUTE_TYPE=int8 - WHISPER__LANGUAGE=ru - NVIDIA_VISIBLE_DEVICES=all - NVIDIA_DRIVER_CAPABILITIES=compute,utility volumes: - /mnt/ssd/ai/faster-whisper:/root/.cache/huggingface restart: always silero-tts: build: ./silero-tts container_name: silero-tts ports: - "8881:8881" volumes: - /mnt/ssd/ai/silero-tts:/cache/torch restart: always pipecat: build: ./pipecat container_name: pipecat ports: - "8882:8882" environment: - LIVEKIT_URL=ws://host.docker.internal:7880 - LIVEKIT_PUBLIC_URL=wss://lk.alogins.net - LIVEKIT_API_KEY=devkey - LIVEKIT_SECRET=ef3ef4b903ca8469b09b2dd7ab6af529c4d2f3c95668f53832fc351cf67777a9 - ADOLF_URL=http://host.docker.internal:8000/v1 - STT_URL=http://host.docker.internal:8880/v1 - TTS_URL=http://host.docker.internal:8881/v1 - STT_MODEL=deepdml/faster-whisper-large-v3-turbo-ct2 - TTS_VOICE=onyx extra_hosts: - "host.docker.internal:host-gateway" restart: unless-stopped # Adolf — OpenClaw fork (Matrix-first personal assistant). Skeleton only: # real config (Matrix channel, SOUL.md, model provider -> adolf-llm:8010) is # wired in P6. Not started until its config/keys exist. Source: /home/alvis/adolf. adolf: build: ../../adolf image: adolf:local container_name: adolf environment: - HOME=/home/node - OPENCLAW_HOME=/home/node - OPENCLAW_STATE_DIR=/home/node/.openclaw - OPENCLAW_CONFIG_PATH=/home/node/.openclaw/openclaw.json - OPENCLAW_CONFIG_DIR=/home/node/.openclaw - OPENCLAW_WORKSPACE_DIR=/home/node/.openclaw/workspace - OPENCLAW_GATEWAY_TOKEN=${ADOLF_GATEWAY_TOKEN:-} - TZ=Europe/Riga volumes: - adolf-state:/home/node/.openclaw extra_hosts: - "host.docker.internal:host-gateway" cap_drop: - NET_RAW - NET_ADMIN security_opt: - no-new-privileges:true init: true ports: - "18789:18789" - "18790:18790" command: ["node", "dist/index.js", "gateway", "--bind", "lan", "--port", "18789"] restart: unless-stopped # cognee-llm — stateless one-shot Kimi-CLI wrapper for Cognee's batch cognify # (P3). Opposite policy to kimi-agent: no resume, non-streaming, text-only. # Note (SPIKE-FINDINGS gate 5): Cognee should DEFAULT its LLM to LiteLLM; this # is the optional low-volume path. Needs `kimi login` in its own volume. cognee-llm: build: ./cognee-llm container_name: cognee-llm ports: - "8011:8011" volumes: - cognee-llm-home:/root/.kimi-code restart: unless-stopped # adolf-llm — conversational Kimi-CLI wrapper (:8010), the model backend for # the Adolf OpenClaw gateway (P2). Real streaming (SSE), chat_id session-keying # + 1:1 kimi resume, media, per-session .mcp.json (shared-MCP servers stubbed # until P4/P5). Needs `kimi login` in adolf-llm-home. adolf-llm: build: ./adolf-llm container_name: adolf-llm ports: - "8010:8010" volumes: - adolf-llm-workspace:/workspace - adolf-llm-home:/root/.kimi-code restart: unless-stopped volumes: kimi-agent-home: adolf-state: cognee-llm-home: adolf-llm-workspace: adolf-llm-home: