Synchronize Athena operating modes with live deployment
This commit is contained in:
+43
-141
@@ -50,11 +50,6 @@ services:
|
||||
- /tmp:size=16m,mode=1777
|
||||
volumes:
|
||||
- "${WIREGUARD_CONFIG_FILE:-/etc/mike-ai/wireguard/fritz-athena.conf}:/run/secrets/fritz-athena.conf:ro"
|
||||
# Namespace-sharing services cannot publish ports themselves. The owner
|
||||
# must keep these bindings so a gateway recreation cannot hide their UIs.
|
||||
ports:
|
||||
- "8099:8099"
|
||||
- "9443:9443"
|
||||
networks:
|
||||
frontend:
|
||||
ipv4_address: 172.30.10.254
|
||||
@@ -237,89 +232,6 @@ services:
|
||||
- --spec-draft-p-min
|
||||
- "0.05"
|
||||
|
||||
# Beta 1 keeps the complete GSQ-RCO text model and KV cache on the RTX 5080.
|
||||
# Only the multimodal projector runs on the RTX 3060. The measured hard
|
||||
# boundary is 196608 tokens; 192K deliberately retains runtime headroom.
|
||||
llama-beta1:
|
||||
<<: *llama-common
|
||||
container_name: mike-ai-llama-beta1
|
||||
labels:
|
||||
com.mike-ai.llama-profile: beta1
|
||||
environment:
|
||||
NVIDIA_VISIBLE_DEVICES: ${BETA1_GPU_DEVICES:-0,1}
|
||||
NVIDIA_DRIVER_CAPABILITIES: compute,utility
|
||||
MTMD_BACKEND_DEVICE: CUDA1
|
||||
command:
|
||||
- --model
|
||||
- "/models/${BETA1_MODEL_FILE:?BETA1_MODEL_FILE is required}"
|
||||
- --mmproj
|
||||
- "/models/${VISION_PROJECTOR_FILE:?VISION_PROJECTOR_FILE is required}"
|
||||
- --mmproj-offload
|
||||
- --mmproj-device
|
||||
- CUDA1
|
||||
- --alias
|
||||
- qwen-beta-1
|
||||
- --ctx-size
|
||||
- "${BETA1_CONTEXT:-192000}"
|
||||
- --flash-attn
|
||||
- "on"
|
||||
- --cache-type-k
|
||||
- q4_0
|
||||
- --cache-type-v
|
||||
- q4_0
|
||||
- --cache-prompt
|
||||
- --cache-ram
|
||||
- "${LLAMA_CACHE_RAM_MIB:-32768}"
|
||||
- --threads
|
||||
- "${LLAMA_THREADS:-6}"
|
||||
- --threads-batch
|
||||
- "${LLAMA_THREADS_BATCH:-6}"
|
||||
- --batch-size
|
||||
- "${BETA1_BATCH_SIZE:-2048}"
|
||||
- --ubatch-size
|
||||
- "${BETA1_UBATCH_SIZE:-128}"
|
||||
- --parallel
|
||||
- "${BETA1_PARALLEL_SLOTS:-1}"
|
||||
- --kv-unified
|
||||
- --jinja
|
||||
- --reasoning
|
||||
- auto
|
||||
- --reasoning-preserve
|
||||
- --host
|
||||
- 0.0.0.0
|
||||
- --port
|
||||
- "8080"
|
||||
- --metrics
|
||||
- --fit
|
||||
- "off"
|
||||
- --n-gpu-layers
|
||||
- all
|
||||
- --load-mode
|
||||
- none
|
||||
- --no-ui
|
||||
- --temperature
|
||||
- "1.0"
|
||||
- --top-p
|
||||
- "0.95"
|
||||
- --top-k
|
||||
- "20"
|
||||
- --device
|
||||
- CUDA0
|
||||
- --main-gpu
|
||||
- "0"
|
||||
- --split-mode
|
||||
- none
|
||||
- --spec-type
|
||||
- draft-mtp
|
||||
- --spec-draft-n-max
|
||||
- "3"
|
||||
- --spec-draft-type-k
|
||||
- f16
|
||||
- --spec-draft-type-v
|
||||
- f16
|
||||
- --spec-draft-p-min
|
||||
- "0.05"
|
||||
|
||||
llama-large:
|
||||
<<: *llama-common
|
||||
container_name: mike-ai-llama-large
|
||||
@@ -575,8 +487,17 @@ services:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
environment:
|
||||
CONTROLLER_TOKEN: "${CONTROLLER_TOKEN:?CONTROLLER_TOKEN is required}"
|
||||
ALLOWED_PROFILES: fast,medium,beta1,large,ultra,uncensored
|
||||
ALLOWED_PROFILES: fast,medium,large,ultra,uncensored
|
||||
IMAGE_WORKER: image
|
||||
RESTORE_WORKER: restore
|
||||
TTS_WORKER: qwen3
|
||||
MUSIC_WORKER: acestep
|
||||
YUE2_WORKER: yue2
|
||||
SEPARATOR_WORKER: bs-roformer
|
||||
VOICE_WORKER: vevo2
|
||||
VOICE_CHANGE_WORKER: xvc
|
||||
APPLIO_WORKER: applio
|
||||
TRELLIS_WORKER: trellis2-q8
|
||||
networks: [control]
|
||||
security_opt: ["no-new-privileges:true"]
|
||||
healthcheck:
|
||||
@@ -612,6 +533,8 @@ services:
|
||||
PROFILE_CONTROL_TOKEN: "${CONTROLLER_TOKEN:?CONTROLLER_TOKEN is required}"
|
||||
SWITCH_TIMEOUT: "600"
|
||||
REQUEST_TIMEOUT: "600"
|
||||
YUE2_START_TIMEOUT: "600"
|
||||
TRELLIS_START_TIMEOUT: "900"
|
||||
# Last-resort guard for every OpenAI-compatible client. Without a
|
||||
# request limit llama.cpp uses n_predict=-1 and a reasoning loop can
|
||||
# consume the complete context before yielding visible output.
|
||||
@@ -621,19 +544,21 @@ services:
|
||||
IMAGE_DIR: /data/images
|
||||
IMAGE_WORKER_URL: http://image-worker:8086
|
||||
IMAGE_WORKER_TOKEN: "${CONTROLLER_TOKEN:?CONTROLLER_TOKEN is required}"
|
||||
IMAGE_MODEL_NAME: FLUX.2-klein-4B
|
||||
IMAGE_MODEL_NAME: FLUX.2-klein-9B-fp8-beta
|
||||
CHAT_IMAGE_ALLOW_REMOTE_URLS: "false"
|
||||
ENABLE_IMAGE_GENERATION: "true"
|
||||
ENABLE_TTS: "true"
|
||||
# Stable OpenAI compatibility names remain piper/alloy because an
|
||||
# existing Open WebUI database persists those values. The gateway maps
|
||||
# alloy to XTTS speaker Annmarie Nele and automatically falls back to
|
||||
# Piper if XTTS is unavailable, busy or returns an error.
|
||||
# The gateway keeps text normalization, output conversion and native
|
||||
# PCM streaming in one stable API in front of Qwen3-TTS.
|
||||
TTS_WORKER_URL: http://tts-gateway:8085
|
||||
TTS_MODEL: piper
|
||||
TTS_MODEL: qwen3-tts
|
||||
TTS_VOICES: alloy
|
||||
TTS_DEFAULT_VOICE: alloy
|
||||
ENABLE_STT: "true"
|
||||
ENABLE_MUSIC_MODE: "true"
|
||||
MUSIC_START_TIMEOUT: "600"
|
||||
VOICE_CHANGE_START_TIMEOUT: "600"
|
||||
APPLIO_START_TIMEOUT: "900"
|
||||
STT_WORKER_URL: http://whisper:8084
|
||||
STT_TIMEOUT: "300"
|
||||
networks: [frontend, control, inference]
|
||||
@@ -655,8 +580,6 @@ services:
|
||||
condition: service_healthy
|
||||
profile-controller:
|
||||
condition: service_healthy
|
||||
piper:
|
||||
condition: service_healthy
|
||||
tts-gateway:
|
||||
condition: service_healthy
|
||||
whisper:
|
||||
@@ -680,13 +603,15 @@ services:
|
||||
read_only: true
|
||||
tmpfs: ["/tmp:size=1g,mode=1777"]
|
||||
volumes:
|
||||
- "${FLUX_MODEL_DIR:-/data/models/FLUX.2-klein-4B}:/models/FLUX.2-klein-4B:ro"
|
||||
- "${FLUX_COMPONENT_DIR:-/data/models/FLUX.2-klein-9B-components}:/models/components:ro"
|
||||
- "${FLUX_TRANSFORMER_DIR:-/data/models/FLUX.2-klein-9B-fp8}:/models/fp8:ro"
|
||||
- router-images:/data/images
|
||||
environment:
|
||||
NVIDIA_VISIBLE_DEVICES: ${IMAGE_GPU_DEVICES:-1}
|
||||
NVIDIA_VISIBLE_DEVICES: all
|
||||
NVIDIA_DRIVER_CAPABILITIES: compute,utility
|
||||
WORKER_TOKEN: "${CONTROLLER_TOKEN:?CONTROLLER_TOKEN is required}"
|
||||
FLUX_MODEL_DIR: /models/FLUX.2-klein-4B
|
||||
FLUX_COMPONENT_DIR: /models/components
|
||||
FLUX_TRANSFORMER_FILE: /models/fp8/flux-2-klein-9b-fp8.safetensors
|
||||
IMAGE_DIR: /data/images
|
||||
networks: [inference]
|
||||
security_opt: ["no-new-privileges:true"]
|
||||
@@ -697,41 +622,12 @@ services:
|
||||
timeout: 3s
|
||||
retries: 12
|
||||
|
||||
piper:
|
||||
build:
|
||||
context: platform/docker/piper
|
||||
args:
|
||||
PIPER_TTS_VERSION: ${PIPER_TTS_VERSION:-1.6.0}
|
||||
image: mike-ai/piper:local
|
||||
container_name: mike-ai-piper
|
||||
restart: unless-stopped
|
||||
read_only: true
|
||||
tmpfs:
|
||||
- /tmp:size=256m,mode=1777
|
||||
volumes:
|
||||
- piper-data:/data
|
||||
environment:
|
||||
PIPER_DATA_DIR: /data
|
||||
PIPER_VOICE: ${PIPER_VOICE:-de_DE-thorsten-high}
|
||||
PIPER_VOICE_ALIAS: alloy
|
||||
PIPER_HOST: 0.0.0.0
|
||||
PIPER_PORT: "8085"
|
||||
PIPER_MAX_TEXT_CHARS: "8000"
|
||||
networks: [frontend]
|
||||
security_opt: ["no-new-privileges:true"]
|
||||
cap_drop: [ALL]
|
||||
cap_add: [CHOWN, SETUID, SETGID]
|
||||
healthcheck:
|
||||
test: [CMD, curl, -fsS, "http://127.0.0.1:8085/status"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 30
|
||||
start_period: 120s
|
||||
|
||||
qwen3-tts:
|
||||
image: ${QWEN3_TTS_IMAGE:-ghcr.io/malaiwah/qwen3-tts-server:latest@sha256:b363a01d08b1bbecbfc3ca6f585368fae2cfdc591f9ecca6643738369f9a9d98}
|
||||
container_name: mike-ai-qwen3-tts
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
com.mike-ai.tts-worker: qwen3
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
@@ -783,17 +679,12 @@ services:
|
||||
QWEN_TTS_VOICE: serena
|
||||
QWEN_TTS_LANGUAGE: German
|
||||
QWEN_TTS_TIMEOUT: "120"
|
||||
PIPER_URL: http://piper:8085
|
||||
TTS_VOICE_ALIAS: alloy
|
||||
TTS_DEFAULT_LANGUAGE: de
|
||||
# Mixed-language clip stitching caused long pauses and unintelligible
|
||||
# transitions. Keep full sentences in one stable German voice.
|
||||
TTS_CODE_SWITCH_ENABLED: "false"
|
||||
PIPER_TIMEOUT: "120"
|
||||
networks: [frontend]
|
||||
depends_on:
|
||||
piper:
|
||||
condition: service_healthy
|
||||
security_opt: ["no-new-privileges:true"]
|
||||
cap_drop: [ALL]
|
||||
healthcheck:
|
||||
@@ -843,7 +734,7 @@ services:
|
||||
image: mike-ai/llama-dashboard:local
|
||||
container_name: mike-ai-llama-dashboard
|
||||
restart: unless-stopped
|
||||
network_mode: "service:wireguard-gateway"
|
||||
networks: [frontend]
|
||||
gpus: all
|
||||
read_only: true
|
||||
tmpfs:
|
||||
@@ -852,15 +743,26 @@ services:
|
||||
- /proc:/host/proc:ro
|
||||
- /data:/host/data:ro
|
||||
- /data/models:/host/models:ro
|
||||
- /data/emergency-backups:/backups:ro
|
||||
- /data/llama-dashboard:/var/lib/llama-dashboard
|
||||
environment:
|
||||
DASHBOARD_HOST: 0.0.0.0
|
||||
DASHBOARD_PORT: "8099"
|
||||
ROUTER_URL: http://router:8081
|
||||
ROUTER_API_KEY: "${ROUTER_API_KEY:?ROUTER_API_KEY is required}"
|
||||
MUSIC_COMMUNITY_UI_URL: "${MUSIC_COMMUNITY_UI_URL:-http://192.168.1.212:7861/}"
|
||||
MUSIC_ORIGINAL_UI_URL: "${MUSIC_ORIGINAL_UI_URL:-http://192.168.1.212:7862/}"
|
||||
SEPARATOR_UI_URL: "${SEPARATOR_UI_URL:-http://192.168.1.212:8007/}"
|
||||
VOICE_UI_URL: "${VOICE_UI_URL:-http://192.168.1.212:8008/}"
|
||||
VOICE_CHANGE_UI_URL: "${VOICE_CHANGE_UI_URL:-http://192.168.1.212:8009/}"
|
||||
APPLIO_UI_URL: "${APPLIO_UI_URL:-http://192.168.1.212:8011/}"
|
||||
MIKES_APPLIO_UI_URL: "${MIKES_APPLIO_UI_URL:-http://192.168.1.212:8012/}"
|
||||
TRELLIS_UI_URL: "${TRELLIS_UI_URL:-http://192.168.1.212:8013/}"
|
||||
YUE2_UI_URL: "${YUE2_UI_URL:-http://192.168.1.212:8014/}"
|
||||
HOST_PROC: /host/proc
|
||||
HOST_DATA: /host/data
|
||||
HOST_MODELS: /host/models
|
||||
DASHBOARD_BACKUP_DIR: /backups
|
||||
DASHBOARD_HISTORY_DB: /var/lib/llama-dashboard/history.sqlite3
|
||||
DASHBOARD_HISTORY_INTERVAL: "15"
|
||||
DASHBOARD_DETAIL_RETENTION_DAYS: "21"
|
||||
@@ -884,7 +786,7 @@ services:
|
||||
image: ${PORTAINER_IMAGE:-portainer/portainer-ce@sha256:511f3f06c96fe3b993ebeaafde311c1959cae73a7ef825dba6397d51b450dffa}
|
||||
container_name: mike-ai-portainer
|
||||
restart: unless-stopped
|
||||
network_mode: "service:wireguard-gateway"
|
||||
networks: [frontend]
|
||||
command: [--no-setup-token]
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
@@ -908,8 +810,9 @@ services:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- /data/docker-backups:/archive
|
||||
- /etc/mike-ai:/backup/etc-mike-ai:ro
|
||||
- /opt/mike-ai/stack:/backup/stack:ro
|
||||
- piper-data:/backup/volumes/piper-data:ro
|
||||
# Include every deployed specialist UI/worker source tree, not just the
|
||||
# core checkout. Images themselves remain reproducible and are rebuilt.
|
||||
- /opt/mike-ai:/backup/opt-mike-ai:ro
|
||||
- router-state:/backup/volumes/router-state:ro
|
||||
- router-images:/backup/volumes/router-images:ro
|
||||
- portainer-data:/backup/volumes/portainer-data:ro
|
||||
@@ -936,7 +839,6 @@ networks:
|
||||
name: mike-ai-tools-egress
|
||||
|
||||
volumes:
|
||||
piper-data:
|
||||
whisper-data:
|
||||
router-state:
|
||||
router-images:
|
||||
|
||||
Reference in New Issue
Block a user