From 569e1af9cae8fb8a02a92e6c3dd82add034eb7f8 Mon Sep 17 00:00:00 2001 From: Vuong Hoang Date: Tue, 14 Jul 2026 20:05:50 -0700 Subject: [PATCH] feat(homepage): split AI fleet into role-based groups on a dedicated AI tab Move the ~22-service flat "AI Systems" group off the Main tab into a new four-tab layout (Main / AI / Infrastructure / Toolchain). The AI tab sorts the inference fleet by function into seven groups: AI - Inference gen, char-rp, char-rp-reasoning, Granite summarizer AI - Eval & Retrieval Selene, Skywork Reward, Qwen3 rerank/embed, image-bench AI - Gateways & Chat LiteLLM, Asset Engine, Gateway Chat, Open WebUI, ... AI - Speech (TTS) Chatterbox Fast, Kokoro, mOrpheus AI - Audio Tools Parakeet ASR, YT Voice Clipper AI - Image & Media ComfyUI, Arbo AI - Dormant stopped rollback seats + retired auditions Relabel each stack's homepage.group so canonical stacks/ matches the live containers on ana-ml2, ana-docker, and irv-ml1. Dormant stacks were refreshed with `docker compose up --no-start` so they carry the new label while staying stopped (compose-start rollback preserved). settings.yaml drives tab/order/ columns; services.yaml and README updated to the new scheme. --- configs/homepage/README.md | 42 ++++++++++++------- configs/homepage/services.yaml | 11 +++-- configs/homepage/settings.yaml | 60 ++++++++++++++++++++++++---- stacks/arbo/compose.yaml | 2 +- stacks/asset-engine/compose.yaml | 2 +- stacks/char-rp-gguf/compose.yaml | 4 +- stacks/chatterbox/compose.yaml | 2 +- stacks/comfyui/compose.yaml | 2 +- stacks/cosyvoice/compose.yaml | 2 +- stacks/fish-s2/compose.yaml | 2 +- stacks/gateway-chat/compose.yaml | 2 +- stacks/index-tts/compose.yaml | 2 +- stacks/kokoro/compose.yaml | 2 +- stacks/litellm/compose.yaml | 2 +- stacks/mOrpheus/compose.yaml | 2 +- stacks/omnivoice/compose.yaml | 2 +- stacks/parakeet/compose.yaml | 2 +- stacks/qwen-image-bench/compose.yaml | 2 +- stacks/qwen36-27b-aeon/compose.yaml | 4 +- stacks/qwopus3.5-122b/compose.yaml | 2 +- stacks/selene/compose.yaml | 2 +- stacks/skaldsong/compose.yaml | 2 +- stacks/vllm/compose.yaml | 8 ++-- 23 files changed, 113 insertions(+), 50 deletions(-) diff --git a/configs/homepage/README.md b/configs/homepage/README.md index 1d22f86..2296faa 100644 --- a/configs/homepage/README.md +++ b/configs/homepage/README.md @@ -21,21 +21,32 @@ to the compose file and is gitignored. ## Layout convention -`settings.yaml` drives the group layout: +`settings.yaml` drives the group layout across four tabs: ``` -Monitoring row x 3 fleet hubs (Beszel, Dozzle, Backrest, Uptime Kuma) -AI Systems row x 3 GPU inference services (llama-swap, vLLM embed/rerank) -Apps list user-facing apps (Gitea, Vaultwarden, Seafile, ...) -Media list Plex, Jellyfin -Games list Pterodactyl -UltraSeedbox row x 3 external bookmarks -Infra - ANA list Anaheim hardware + hypervisors + BMCs -Infra - NH3 list NH3 hardware + hypervisors -Infra - ESH list ESH home-lab hardware + hypervisors -Service Networking collapsed toolchain (Traefik, CrowdSec, Dockge, AdGuard, MQTT) +tab: Main + Notes / News / Monitoring / Apps / Media / Games / UltraSeedbox +tab: AI (the inference fleet, sorted by role) + AI - Inference LLM seats you call (gen, char-rp, char-rp-reasoning, summarizer) + AI - Eval & Retrieval judges, reward, rerank, embed, image-quality + AI - Gateways & Chat routing gateway, control plane, chat frontends + AI - Speech (TTS) text-to-speech engines + AI - Audio Tools speech-to-text + audio dataset tooling + AI - Image & Media image/video generation + pipelines + AI - Dormant stopped stacks (rollback seats, retired auditions) +tab: Infrastructure + Infra - ANA / NH3 / IRV / ESH hardware + hypervisors + BMCs, per site +tab: Toolchain + Service Networking / Toolchain plumbing, rarely clicked ``` +The AI tab replaced the old single flat `AI Systems` group (2026-07-14): a +20+ service list read as one endless column, so it was split by function. +Group membership is the `homepage.group=AI - ` label on each compose +file; a label change only takes effect when the container is recreated +(`docker compose up -d `, or `up --no-start ` to relabel a stopped +stack without starting it). + - **Manual entries** (this file) cover things without a Docker label: firewalls, switches, NAS web UIs, BMCs, hypervisors, and the cross-site hubs where direct IP:port URLs are stable. @@ -49,15 +60,18 @@ Service Networking collapsed toolchain (Traefik, CrowdSec, Dockge, AdGuard, MQT When deciding where a service lands, ask **function first**: 1. Does it watch or back up the fleet? -> `Monitoring` -2. Is it an inference / model service? -> `AI Systems` +2. Is it an inference / model service? -> the matching `AI - ` group + (Inference / Eval & Retrieval / Gateways & Chat / Speech (TTS) / + Audio Tools / Image & Media); a stopped-but-kept stack -> `AI - Dormant` 3. Is it a user-facing app? -> `Apps` 4. Is it media / games? -> `Media` or `Games` 5. Is it a piece of hardware or a hypervisor? -> `Infra - ` 6. Is it toolchain / plumbing (no human interaction on the golden path)? -> `Service Networking` -Site-specific sub-grouping is only used for `Infra -` because the device -inventory maps cleanly to physical sites. App groups are function-only. +Site-specific sub-grouping is used for `Infra -` (device inventory maps to +physical sites) and role-based sub-grouping for `AI -` (the fleet is large +enough to warrant it). Other app groups are function-only. ## Deploying changes diff --git a/configs/homepage/services.yaml b/configs/homepage/services.yaml index 033b2bd..3cccf8f 100644 --- a/configs/homepage/services.yaml +++ b/configs/homepage/services.yaml @@ -17,10 +17,13 @@ siteMonitor: http://10.0.50.45:3001 description: Uptime monitor (esh-docker-vm) -# AI Systems group is fully Docker-auto-discovered (llama-swap, vLLM Embed, -# vLLM Rerank — homepage.group=AI Systems on their compose files). Position -# and row×3 style for the group live in settings.yaml. Do not add entries -# here or they'll double up. +# The AI tab is fully Docker-auto-discovered. Each inference service carries +# a homepage.group=AI - label on its compose file (AI - Inference, +# AI - Eval & Retrieval, AI - Gateways & Chat, AI - Speech (TTS), +# AI - Audio Tools, AI - Image & Media). Tab assignment, group order, and +# column counts live in settings.yaml. Do not add entries here or they'll +# double up. To move a service between AI groups, change the label on its +# compose file and recreate the container (labels only apply on recreate). - Media: - Plex: diff --git a/configs/homepage/settings.yaml b/configs/homepage/settings.yaml index 4e14250..d83c8dd 100644 --- a/configs/homepage/settings.yaml +++ b/configs/homepage/settings.yaml @@ -27,11 +27,23 @@ statusStyle: "" # than plain link cards and the grid looks ragged. useEqualHeights: true -# Function-first layout, three-tab split: -# Main - daily-use apps, inference, media, bookmarks +# Function-first layout, four-tab split: +# Main - daily-use apps, media, bookmarks, monitoring +# AI - the inference fleet, grouped by role (see below) # Infrastructure - hardware, hypervisors, BMCs (per site) # Toolchain - backend services running but rarely clicked # +# The AI tab splits the fleet by function so a 20+ service list reads as +# sorted groups instead of one endless column. Group membership is set by +# the homepage.group=AI - label on each service's compose file: +# AI - Inference LLM seats you call (gen, char-rp, char-rp-reasoning, summarizer) +# AI - Eval & Retrieval judges, reward, rerank, embed, image-quality +# AI - Gateways & Chat routing gateway, control plane, chat frontends +# AI - Speech (TTS) text-to-speech engines +# AI - Audio Tools speech-to-text + audio dataset tooling +# AI - Image & Media image/video generation + pipelines +# AI - Dormant stopped stacks (rollback seats, retired auditions) +# # Row counts target ~4-per-row so dense groups (Apps, Service Networking) # read as a grid instead of an endless column. layout: @@ -50,11 +62,6 @@ layout: tab: Main style: row columns: 4 - AI Systems: - icon: mdi-brain - tab: Main - style: row - columns: 4 Apps: icon: mdi-apps tab: Main @@ -73,6 +80,45 @@ layout: tab: Main style: row columns: 3 + # --- AI tab: the inference fleet, ordered core-models -> support -> apps --- + AI - Inference: + icon: mdi-brain + tab: AI + style: row + columns: 4 + AI - Eval & Retrieval: + icon: mdi-scale-balance + tab: AI + style: row + columns: 5 + AI - Gateways & Chat: + icon: mdi-router-network + tab: AI + style: row + columns: 3 + AI - Speech (TTS): + icon: mdi-account-voice + tab: AI + style: row + columns: 3 + AI - Audio Tools: + icon: mdi-waveform + tab: AI + style: row + columns: 2 + AI - Image & Media: + icon: mdi-image-multiple + tab: AI + style: row + columns: 2 + # Stopped stacks kept for rollback / superseded seats / retired auditions. + # They stay 'created' (not running) via `docker compose up --no-start`, so + # they show here as offline cards and revive with `docker compose start`. + AI - Dormant: + icon: mdi-sleep + tab: AI + style: row + columns: 4 Infra - ANA: icon: si-proxmox tab: Infrastructure diff --git a/stacks/arbo/compose.yaml b/stacks/arbo/compose.yaml index a990c1a..7fc6527 100644 --- a/stacks/arbo/compose.yaml +++ b/stacks/arbo/compose.yaml @@ -85,7 +85,7 @@ services: networks: - tnet labels: - - homepage.group=AI Systems + - homepage.group=AI - Image & Media - homepage.name=Arbo - homepage.icon=mdi-image-multiple-outline - homepage.description=Catalog-driven ComfyUI engine (irv-ml1) diff --git a/stacks/asset-engine/compose.yaml b/stacks/asset-engine/compose.yaml index d1dd9ed..0a2aabe 100644 --- a/stacks/asset-engine/compose.yaml +++ b/stacks/asset-engine/compose.yaml @@ -53,7 +53,7 @@ services: retries: 3 start_period: 30s labels: - - homepage.group=AI Systems + - homepage.group=AI - Gateways & Chat - homepage.name=Asset Engine - homepage.icon=mdi-tools - homepage.description=Control plane over the PFI inference fleet diff --git a/stacks/char-rp-gguf/compose.yaml b/stacks/char-rp-gguf/compose.yaml index 48008eb..7b4d6a4 100644 --- a/stacks/char-rp-gguf/compose.yaml +++ b/stacks/char-rp-gguf/compose.yaml @@ -88,7 +88,7 @@ services: networks: - tnet labels: - - homepage.group=AI Systems + - homepage.group=AI - Inference - homepage.name=char-rp (Magidonia-24B GGUF) - homepage.icon=mdi-drama-masks - homepage.description=Dark-romantasy RP prose seat, non-thinking (llama.cpp, ana-ml2 GPU 0) @@ -169,7 +169,7 @@ services: networks: - tnet labels: - - homepage.group=AI Systems + - homepage.group=AI - Dormant - homepage.name=char-rp-reasoning (QwQ-32B RpR-v4 GGUF) - homepage.icon=mdi-brain - homepage.description=Dark-romantasy RP reasoning seat, managed CoT (llama.cpp, ana-ml2 GPU 0) diff --git a/stacks/chatterbox/compose.yaml b/stacks/chatterbox/compose.yaml index b2ad8f4..97efad0 100644 --- a/stacks/chatterbox/compose.yaml +++ b/stacks/chatterbox/compose.yaml @@ -67,7 +67,7 @@ services: # warms torch.compile — give it a generous deadline. start_period: 600s labels: - - homepage.group=AI Systems + - homepage.group=AI - Speech (TTS) - homepage.name=Chatterbox Turbo - homepage.icon=mdi-account-music-outline - homepage.description=Low-latency English TTS w/ voice cloning + paralinguistics (irv-ml1) diff --git a/stacks/comfyui/compose.yaml b/stacks/comfyui/compose.yaml index 487c30f..c35568d 100644 --- a/stacks/comfyui/compose.yaml +++ b/stacks/comfyui/compose.yaml @@ -86,7 +86,7 @@ services: networks: - tnet labels: - - homepage.group=AI Systems + - homepage.group=AI - Image & Media - homepage.name=ComfyUI - homepage.icon=mdi-image-auto-adjust - homepage.description=Node-based SD/Flux inference (irv-ml1) diff --git a/stacks/cosyvoice/compose.yaml b/stacks/cosyvoice/compose.yaml index 28d89dd..b833022 100644 --- a/stacks/cosyvoice/compose.yaml +++ b/stacks/cosyvoice/compose.yaml @@ -53,7 +53,7 @@ services: # First boot pulls ~2–3 GB of model weights. start_period: 300s labels: - - homepage.group=AI Systems + - homepage.group=AI - Dormant - homepage.name=CosyVoice - homepage.icon=mdi-account-voice - homepage.description=Expressive multilingual TTS + cloning (irv-ml1) diff --git a/stacks/fish-s2/compose.yaml b/stacks/fish-s2/compose.yaml index 9282674..506ee36 100644 --- a/stacks/fish-s2/compose.yaml +++ b/stacks/fish-s2/compose.yaml @@ -98,7 +98,7 @@ services: # checkpoint load. Generous deadline. start_period: 900s labels: - - homepage.group=AI Systems + - homepage.group=AI - Dormant - homepage.name=Fish Audio S2-Pro - homepage.icon=mdi-fish - homepage.description=Most expressive open-source TTS — 15k+ paralinguistic tags, voice cloning, 80+ languages (irv-ml1) diff --git a/stacks/gateway-chat/compose.yaml b/stacks/gateway-chat/compose.yaml index 8cec47c..dadf916 100644 --- a/stacks/gateway-chat/compose.yaml +++ b/stacks/gateway-chat/compose.yaml @@ -25,7 +25,7 @@ services: networks: - tnet labels: - - homepage.group=AI Systems + - homepage.group=AI - Gateways & Chat - homepage.name=Gateway Chat - homepage.icon=mdi-chat-processing - homepage.description=Light web chat for smoking LiteLLM gateway models (auto-discovery, system prompts, vision) diff --git a/stacks/index-tts/compose.yaml b/stacks/index-tts/compose.yaml index 39e2812..b9e6d0f 100644 --- a/stacks/index-tts/compose.yaml +++ b/stacks/index-tts/compose.yaml @@ -56,7 +56,7 @@ services: # CUDA warmup. Generous deadline to ride that out. start_period: 600s labels: - - homepage.group=AI Systems + - homepage.group=AI - Dormant - homepage.name=IndexTTS-2 - homepage.icon=mdi-account-music - homepage.description=Emotion-controllable TTS w/ voice cloning (irv-ml1) diff --git a/stacks/kokoro/compose.yaml b/stacks/kokoro/compose.yaml index 433b12e..7ad72fb 100644 --- a/stacks/kokoro/compose.yaml +++ b/stacks/kokoro/compose.yaml @@ -61,7 +61,7 @@ services: retries: 3 start_period: 90s labels: - - homepage.group=AI Systems + - homepage.group=AI - Speech (TTS) - homepage.name=Kokoro - homepage.icon=mdi-microphone-message - homepage.description=Low-latency English TTS w/ streaming (irv-ml1) diff --git a/stacks/litellm/compose.yaml b/stacks/litellm/compose.yaml index 00442b0..a9b3374 100644 --- a/stacks/litellm/compose.yaml +++ b/stacks/litellm/compose.yaml @@ -69,7 +69,7 @@ services: networks: - tnet labels: - - homepage.group=AI Systems + - homepage.group=AI - Gateways & Chat - homepage.name=LiteLLM Gateway - homepage.icon=mdi-router-network - homepage.description=vLLM request/response logging gateway (ana-docker) diff --git a/stacks/mOrpheus/compose.yaml b/stacks/mOrpheus/compose.yaml index ebf2ed3..707d17e 100644 --- a/stacks/mOrpheus/compose.yaml +++ b/stacks/mOrpheus/compose.yaml @@ -82,7 +82,7 @@ services: retries: 3 start_period: 60s labels: - - homepage.group=AI Systems + - homepage.group=AI - Speech (TTS) - homepage.name=mOrpheus TTS - homepage.icon=mdi-account-voice - homepage.description=Uncensored Orpheus TTS (baddy + zero-shot clone), real-time, irv-ml1 diff --git a/stacks/omnivoice/compose.yaml b/stacks/omnivoice/compose.yaml index 487dfce..5b34f0b 100644 --- a/stacks/omnivoice/compose.yaml +++ b/stacks/omnivoice/compose.yaml @@ -49,7 +49,7 @@ services: # First boot: OmniVoice + Whisper ASR pre-warm + cloning every staged voice. start_period: 1200s labels: - - homepage.group=AI Systems + - homepage.group=AI - Dormant - homepage.name=OmniVoice - homepage.icon=mdi-account-voice - homepage.description=Zero-shot multilingual voice-cloning TTS, OpenAI /v1/audio/speech (irv-ml1, 3090) diff --git a/stacks/parakeet/compose.yaml b/stacks/parakeet/compose.yaml index 133ddea..2500202 100644 --- a/stacks/parakeet/compose.yaml +++ b/stacks/parakeet/compose.yaml @@ -46,7 +46,7 @@ services: # First boot may include a ~400 MB model download. start_period: 300s labels: - - homepage.group=AI Systems + - homepage.group=AI - Audio Tools - homepage.name=Parakeet ASR - homepage.icon=mdi-microphone - homepage.description=Parakeet-TDT speech-to-text via sherpa-onnx (irv-ml1) diff --git a/stacks/qwen-image-bench/compose.yaml b/stacks/qwen-image-bench/compose.yaml index 4305761..5b2cef8 100644 --- a/stacks/qwen-image-bench/compose.yaml +++ b/stacks/qwen-image-bench/compose.yaml @@ -72,7 +72,7 @@ services: networks: - tnet labels: - - homepage.group=AI Systems + - homepage.group=AI - Eval & Retrieval - homepage.name=Qwen-Image-Bench (T2I judge, NVFP4) - homepage.icon=mdi-image-check - homepage.description=Qwen text-to-image quality judge (NVFP4, vision-intact) on ana-ml2 GPU 1 diff --git a/stacks/qwen36-27b-aeon/compose.yaml b/stacks/qwen36-27b-aeon/compose.yaml index 3b77301..821028a 100644 --- a/stacks/qwen36-27b-aeon/compose.yaml +++ b/stacks/qwen36-27b-aeon/compose.yaml @@ -121,7 +121,7 @@ services: networks: - tnet labels: - - homepage.group=AI Systems + - homepage.group=AI - Inference - homepage.name=Qwen3.6-27B AEON (NVFP4, vision) — gen - homepage.icon=mdi-creation - homepage.description=Uncensored Qwen3.6-27B multimodal NVFP4, the `gen` model (ana-ml2 GPU 0) @@ -202,7 +202,7 @@ services: networks: - tnet labels: - - homepage.group=AI Systems + - homepage.group=AI - Dormant - homepage.name=Qwen3.6-27B AEON RP (NVFP4 + MTP) — char-rp - homepage.icon=mdi-drama-masks - homepage.description=Uncensored Qwen3.6-27B, native MTP single-seat RP (char-rp), ana-ml2 GPU 0 diff --git a/stacks/qwopus3.5-122b/compose.yaml b/stacks/qwopus3.5-122b/compose.yaml index e8a03ab..973e6c2 100644 --- a/stacks/qwopus3.5-122b/compose.yaml +++ b/stacks/qwopus3.5-122b/compose.yaml @@ -96,7 +96,7 @@ services: networks: - tnet labels: - - homepage.group=AI Systems + - homepage.group=AI - Dormant - homepage.name=Qwopus3.5-122B-A10B (abliterated NVFP4, vision) - homepage.icon=mdi-creation - homepage.description=Kimi-distilled abliterated Qwen3.5-122B-A10B NVFP4, vision-intact, the `gen` model (ana-ml2 GPU 0) diff --git a/stacks/selene/compose.yaml b/stacks/selene/compose.yaml index bd60765..ad99566 100644 --- a/stacks/selene/compose.yaml +++ b/stacks/selene/compose.yaml @@ -74,7 +74,7 @@ services: networks: - tnet labels: - - homepage.group=AI Systems + - homepage.group=AI - Eval & Retrieval - homepage.name=Selene 1 Mini 8B (judge, FP8) - homepage.icon=mdi-gavel - homepage.description=AtlaAI Selene 1 Mini Llama-3.1-8B judge (FP8) via vLLM (ana-ml2 GPU1) diff --git a/stacks/skaldsong/compose.yaml b/stacks/skaldsong/compose.yaml index 523a0c0..ca659ae 100644 --- a/stacks/skaldsong/compose.yaml +++ b/stacks/skaldsong/compose.yaml @@ -109,7 +109,7 @@ services: retries: 3 start_period: 30s labels: - - homepage.group=AI Systems + - homepage.group=AI - Gateways & Chat - homepage.name=Skaldsong - homepage.icon=mdi-book-edit-outline - homepage.description=Wizard + reader surface for multi-agent storytelling (Bifrost consumer of Worldtree) diff --git a/stacks/vllm/compose.yaml b/stacks/vllm/compose.yaml index f6dd7f9..9db106c 100644 --- a/stacks/vllm/compose.yaml +++ b/stacks/vllm/compose.yaml @@ -77,7 +77,7 @@ services: networks: - tnet labels: - - homepage.group=AI Systems + - homepage.group=AI - Eval & Retrieval - homepage.name=vLLM Embed (Qwen3) - homepage.icon=mdi-vector-arrange-below - homepage.description=Qwen3 Embedding via vLLM (ana-ml2) @@ -133,7 +133,7 @@ services: networks: - tnet labels: - - homepage.group=AI Systems + - homepage.group=AI - Eval & Retrieval - homepage.name=vLLM Rerank (Qwen3) - homepage.icon=mdi-sort-variant - homepage.description=Qwen3 Reranker via vLLM (ana-ml2) @@ -191,7 +191,7 @@ services: networks: - tnet labels: - - homepage.group=AI Systems + - homepage.group=AI - Eval & Retrieval - homepage.name=vLLM Reward (Skywork) - homepage.icon=mdi-scale-balance - homepage.description=Skywork-Reward-V2 8B classifier via vLLM (ana-ml2) @@ -266,7 +266,7 @@ services: networks: - tnet labels: - - homepage.group=AI Systems + - homepage.group=AI - Inference - homepage.name=vLLM Granite 4.1 8B (summarizer) - homepage.icon=mdi-text-box-outline - homepage.description=Granite 4.1 8B FP8 via vLLM (ana-ml2)