chore: remove image generation, Open WebUI, Lazytainer and neo4j
Drops the comfyui, downloader-comfyui, open-webui, lazytainer and neo4j services with their volumes, env keys and update.sh steps, plus scripts/switch-model.sh and the two image-generation research docs. Refs #55 (removal inventory #58, intent vs. source #63) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
8ae32102f9
commit
fd55ce6669
6 files changed
+4
-739
No files matched your search
+1
-184
@@ -47,13 +47,6 @@ services:
|
||||
- "8080"
|
||||
restart: unless-stopped
|
||||
networks: [ai-stack]
|
||||
labels:
|
||||
# ponytail: idle-timeout tuning lives here, not in a separate lazytainer config file —
|
||||
# one place to look. Raise LAZYTAINER_INACTIVE_TIMEOUT if 15 min proves too eager.
|
||||
- "lazytainer.group.llamaserver.sleepMethod=stop"
|
||||
- "lazytainer.group.llamaserver.ports=8080"
|
||||
- "lazytainer.group.llamaserver.inactiveTimeout=${LAZYTAINER_INACTIVE_TIMEOUT:-900}"
|
||||
- "lazytainer.group.llamaserver.minPacketThreshold=2"
|
||||
|
||||
# Dedicated backend for qwen-code's tool-call harmfulness classifier
|
||||
# (fastModel in ~/.qwen/settings.json). Was aliased onto llama-server's own
|
||||
@@ -168,105 +161,6 @@ services:
|
||||
curl -L --fail --create-dirs -o /models/${LLAMA_CLASSIFIER_MODEL_FILE:-Qwen3-4B-Instruct-2507-UD-Q4_K_XL.gguf}
|
||||
https://huggingface.co/unsloth/Qwen3-4B-Instruct-2507-GGUF/resolve/main/${LLAMA_CLASSIFIER_MODEL_FILE:-Qwen3-4B-Instruct-2507-UD-Q4_K_XL.gguf}
|
||||
|
||||
# Fetches the three Qwen-Image 2.1 (uncensored GGUF) files ComfyUI needs
|
||||
# (diffusion model, text encoder, VAE) — same test -f guard pattern as
|
||||
# downloader above. See docs/research/image-generation-model-choice.md and
|
||||
# issue #42.
|
||||
#
|
||||
# GGUF weights go in models/unet (ComfyUI-GGUF's own convention), not
|
||||
# models/diffusion_models (that was the old FP8-safetensors layout) — see
|
||||
# github.com/city96/ComfyUI-GGUF. Text encoder/VAE stay safetensors, loaded
|
||||
# by ComfyUI's normal CLIPLoader/VAELoader, so their folders are unchanged.
|
||||
#
|
||||
# ponytail: target paths otherwise assume ComfyUI's standard models/ layout
|
||||
# under BASE_STORAGE_PATH (/storage) — same "not independently confirmed
|
||||
# against the image's Dockerfile" caveat flagged on the comfyui service
|
||||
# below. If ComfyUI doesn't pick these up, check its actual models root
|
||||
# first.
|
||||
downloader-comfyui:
|
||||
image: curlimages/curl:latest
|
||||
profiles: ["tools"]
|
||||
user: root
|
||||
volumes:
|
||||
- comfyui-data:/storage
|
||||
entrypoint: ["sh", "-c"]
|
||||
command:
|
||||
- >
|
||||
mkdir -p /storage/models/unet /storage/models/text_encoders /storage/models/vae &&
|
||||
(test -f /storage/models/unet/${COMFYUI_DIFFUSION_MODEL_FILE:-qwen-image-2.1-UC-Q4_K_M.gguf} &&
|
||||
echo "diffusion model already downloaded, skipping" ||
|
||||
curl -L --fail --create-dirs -o /storage/models/unet/${COMFYUI_DIFFUSION_MODEL_FILE:-qwen-image-2.1-UC-Q4_K_M.gguf}
|
||||
https://huggingface.co/abenzerps/Qwen-Image-2.1-Uncensored-GGUF/resolve/main/${COMFYUI_DIFFUSION_MODEL_FILE:-qwen-image-2.1-UC-Q4_K_M.gguf}) &&
|
||||
(test -f /storage/models/text_encoders/${COMFYUI_TEXT_ENCODER_FILE:-qwen3vl_8b_int8_convrot.safetensors} &&
|
||||
echo "text encoder already downloaded, skipping" ||
|
||||
curl -L --fail --create-dirs -o /storage/models/text_encoders/${COMFYUI_TEXT_ENCODER_FILE:-qwen3vl_8b_int8_convrot.safetensors}
|
||||
https://huggingface.co/abenzerps/Qwen-Image-2.1-Uncensored-GGUF/resolve/main/text_encoders/${COMFYUI_TEXT_ENCODER_FILE:-qwen3vl_8b_int8_convrot.safetensors}) &&
|
||||
(test -f /storage/models/vae/${COMFYUI_VAE_FILE:-qwen_image_2.1_vae_bf16.safetensors} &&
|
||||
echo "vae already downloaded, skipping" ||
|
||||
curl -L --fail --create-dirs -o /storage/models/vae/${COMFYUI_VAE_FILE:-qwen_image_2.1_vae_bf16.safetensors}
|
||||
https://huggingface.co/abenzerps/Qwen-Image-2.1-Uncensored-GGUF/resolve/main/vae/${COMFYUI_VAE_FILE:-qwen_image_2.1_vae_bf16.safetensors})
|
||||
|
||||
# Local image generation — see issue #38 (wayfinder map). yurisasc's image
|
||||
# is gfx1201-tuned specifically (R9700's arch), unlike the official/AMD
|
||||
# ComfyUI image which doesn't pin RDNA4 support — see
|
||||
# docs/research/image-generation-options.md.
|
||||
#
|
||||
# Model is Qwen-Image 2.1 GGUF (uncensored variant, see .env.example) —
|
||||
# needs the ComfyUI-GGUF custom node (github.com/city96/ComfyUI-GGUF) for
|
||||
# its "Unet Loader (GGUF)" node. Not confirmed pre-installed in this image;
|
||||
# if missing, exec in and `git clone` it into custom_nodes, then pip
|
||||
# install its requirements.txt and restart the container.
|
||||
comfyui:
|
||||
image: yurisasc/comfyui-rocm7.1:latest
|
||||
container_name: comfyui
|
||||
devices:
|
||||
- /dev/kfd
|
||||
- /dev/dri
|
||||
# Numeric GIDs, not names — see HOST_VIDEO_GID/HOST_RENDER_GID in
|
||||
# .env.example and docs/research/rocm-gpu-pin-and-render-group.md.
|
||||
group_add:
|
||||
- "${HOST_VIDEO_GID:?run scripts/update.sh first to resolve this}"
|
||||
- "${HOST_RENDER_GID:?run scripts/update.sh first to resolve this}"
|
||||
security_opt:
|
||||
- seccomp=unconfined
|
||||
ipc: host
|
||||
environment:
|
||||
- HSA_OVERRIDE_GFX_VERSION=12.0.1
|
||||
- PYTORCH_ROCM_ARCH=gfx1201
|
||||
volumes:
|
||||
- comfyui-data:/storage
|
||||
# yurisasc/comfyui-rocm7.1 has no entrypoint/CMD of its own (just drops
|
||||
# into bash) and doesn't read PUID/PGID/VIDEO_GID/RENDER_GID or
|
||||
# BASE_STORAGE_PATH — confirmed by inspecting the image directly, so
|
||||
# this command is required, not optional, or the container exits 0
|
||||
# immediately and restart-loops. Runs as root (image's only user);
|
||||
# group_add above is what actually grants /dev/kfd + /dev/dri access.
|
||||
#
|
||||
# --base-directory fully replaces ComfyUI's custom_nodes/input/output/
|
||||
# user/temp dirs with ones under /storage (confirmed in folder_paths.py)
|
||||
# rather than adding to the image's baked-in ones — so first boot must
|
||||
# seed /storage/custom_nodes from the image's copy (ComfyUI-Manager
|
||||
# lives there) or it's gone, and main.py hard-crashes if custom_nodes
|
||||
# doesn't exist yet at all.
|
||||
entrypoint: ["sh", "-c"]
|
||||
command:
|
||||
- >
|
||||
mkdir -p /storage/custom_nodes /storage/input /storage/output /storage/user &&
|
||||
[ -z "$(ls -A /storage/custom_nodes)" ] && cp -r /workspace/ComfyUI/custom_nodes/. /storage/custom_nodes/ || true;
|
||||
exec python main.py --listen 0.0.0.0 --port 8188 --base-directory /storage
|
||||
#
|
||||
# Published host port (unlike llama-server's ai-stack-only pattern):
|
||||
# ComfyUI's own UI is meant to be reachable directly too, for a planned
|
||||
# external nginx reverse-proxy route to comfy.home — not just through
|
||||
# OmniRoute. Still also reachable at http://comfyui:8188 internally on
|
||||
# ai-stack, which is the URL to register as OmniRoute's comfyui
|
||||
# provider (dashboard or POST /api/providers, per docs/proxy-key-onboarding.md
|
||||
# — same undocumented-in-repo manual flow already used for llama-server).
|
||||
ports:
|
||||
- "8138:8188"
|
||||
restart: unless-stopped
|
||||
networks: [ai-stack]
|
||||
|
||||
# Replaces litellm — see issue #31 (wayfinder map) for the full migration
|
||||
# rationale/findings. No static config.yaml equivalent: provider routing
|
||||
# (llama-server, searxng-search) is registered once through the dashboard
|
||||
@@ -349,28 +243,8 @@ services:
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
lazytainer:
|
||||
image: ghcr.io/vmorganp/lazytainer:master
|
||||
container_name: lazytainer
|
||||
# NOT network_mode: host — lazytainer identifies its own container by
|
||||
# matching os.Hostname() against the Docker container-ID list
|
||||
# (vmorganp/Lazytainer, configureFromLabels()); under host networking the
|
||||
# container inherits the host's hostname instead of its own ID, so that
|
||||
# match always fails and it panics with "Could not determine container ID
|
||||
# of lazytainer" on every start. Host networking also can't see traffic
|
||||
# to llama-server:8080 anyway — that port only exists on the ai-stack
|
||||
# bridge network (no host port published, see issue #15 above). Joining
|
||||
# ai-stack instead fixes both: hostname becomes the real container ID,
|
||||
# and it's on the same network as the traffic it's watching.
|
||||
networks: [ai-stack]
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- llama-server
|
||||
|
||||
# RAG vector store — see docs/agents/... (wayfinder). Dashboard UI published
|
||||
# directly like comfyui above, not gatewayed through omniroute (it isn't an
|
||||
# directly, not gatewayed through omniroute (it isn't an
|
||||
# LLM provider).
|
||||
qdrant:
|
||||
image: qdrant/qdrant:latest
|
||||
@@ -382,67 +256,10 @@ services:
|
||||
restart: unless-stopped
|
||||
networks: [ai-stack]
|
||||
|
||||
# RAG graph store, native vector index too (can absorb qdrant's job later
|
||||
# if the two-DB split proves unnecessary — see wayfinder notes).
|
||||
neo4j:
|
||||
image: neo4j:5-community
|
||||
container_name: neo4j
|
||||
environment:
|
||||
- NEO4J_AUTH=neo4j/${NEO4J_PASSWORD:?run scripts/update.sh first to resolve this}
|
||||
volumes:
|
||||
- neo4j-data:/data
|
||||
ports:
|
||||
- "7474:7474" # browser UI
|
||||
- "7687:7687" # bolt
|
||||
restart: unless-stopped
|
||||
networks: [ai-stack]
|
||||
|
||||
# Chat + image-generation frontend. Talks to ComfyUI directly for images —
|
||||
# NOT through omniroute: OmniRoute's built-in `comfyui` provider hardcodes
|
||||
# a CheckpointLoaderSimple (single-file-checkpoint) workflow in
|
||||
# open-sse/handlers/imageGeneration/providers/comfyUI.ts with no override,
|
||||
# so it can't drive Qwen-Image 2.1's split unet/text-encoder/vae GGUF
|
||||
# loader chain. Open WebUI's ComfyUI backend is fully generic instead —
|
||||
# you upload the exact workflow_api.json exported from ComfyUI's own
|
||||
# graph editor and map arbitrary node IDs to parameters.
|
||||
#
|
||||
# Chat backend still goes through omniroute (OpenAI-compatible), same
|
||||
# gateway every other client uses — mint OPENWEBUI_OMNIROUTE_KEY by hand
|
||||
# per docs/proxy-key-onboarding.md, same as any other workload.
|
||||
#
|
||||
# ponytail: only wires the base ComfyUI URL + chat backend via env vars.
|
||||
# COMFYUI_WORKFLOW/COMFYUI_WORKFLOW_NODES env vars exist but are reported
|
||||
# flaky upstream — set the actual workflow JSON by hand in Settings >
|
||||
# Images in the web UI instead, once you've exported it from ComfyUI.
|
||||
open-webui:
|
||||
image: ghcr.io/open-webui/open-webui:main
|
||||
container_name: open-webui
|
||||
depends_on:
|
||||
comfyui:
|
||||
condition: service_started
|
||||
omniroute:
|
||||
condition: service_started
|
||||
environment:
|
||||
- OPENAI_API_BASE_URL=http://omniroute:${OMNIROUTE_API_PORT:-20129}/v1
|
||||
- OPENAI_API_KEY=${OPENWEBUI_OMNIROUTE_KEY:-}
|
||||
- ENABLE_IMAGE_GENERATION=True
|
||||
- IMAGE_GENERATION_ENGINE=comfyui
|
||||
- COMFYUI_BASE_URL=http://comfyui:8188
|
||||
- WEBUI_AUTH=True
|
||||
volumes:
|
||||
- open-webui-data:/app/backend/data
|
||||
ports:
|
||||
- "8008:8080"
|
||||
restart: unless-stopped
|
||||
networks: [ai-stack]
|
||||
|
||||
networks:
|
||||
ai-stack:
|
||||
|
||||
volumes:
|
||||
models:
|
||||
omniroute-data:
|
||||
comfyui-data:
|
||||
qdrant-data:
|
||||
neo4j-data:
|
||||
open-webui-data:
|
||||
Reference in new issue
Block a user