From b1fa8bea43d06f5bb6907b03482a4a8a049d6b79 Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Sun, 28 Jun 2026 12:02:35 +0200 Subject: [PATCH] Fix: Embedding-Modell (Qwen3-Embedding-0.6B) auch automatisch vorwaermen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das Embedding-Modell (Alias `embed`, fuer Mem0/Gedaechtnis) ist zwar brains-Member (persist), aber Pingen von `fast` laedt die anderen Gruppenmitglieder NICHT mit — es blieb kalt bis zur ersten /v1/embeddings-Anfrage. - warmup.sh: waermt jetzt zusaetzlich die Embedding-Modelle ueber /v1/embeddings (anderer Endpunkt als chat), gesteuert via MC_WARMUP_EMBED (default "embed"). - stack-postcheck.sh: prueft nach jedem Update zusaetzlich, dass das Embedding-Modell laedt und einen Vektor liefert (sonst ist Mem0/Gedaechtnis betroffen) -> Job rot. Co-Authored-By: Claude Opus 4.8 --- deploy/stack-postcheck.sh | 11 +++++++++++ deploy/warmup.sh | 17 ++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/deploy/stack-postcheck.sh b/deploy/stack-postcheck.sh index 1e025ba..1d10d4d 100644 --- a/deploy/stack-postcheck.sh +++ b/deploy/stack-postcheck.sh @@ -11,6 +11,7 @@ SWAP_URL="${MC_LLAMA_SWAP_URL:-http://127.0.0.1:8080}" MC_URL="${MC_URL:-http://127.0.0.1:9001}" MEM0_URL="${MEM0_SERVICE_URL:-http://127.0.0.1:8765}" BRAIN="${MC_WARMUP_MODELS:-fast}"; BRAIN="${BRAIN%% *}" # erstes Modell, falls Liste +EMBED="${MC_WARMUP_EMBED:-embed}"; EMBED="${EMBED%% *}" # Embedding-Modell (Mem0/Gedächtnis) fail=0 echo "=== Stack Post-Update: Funktionsprüfung ===" @@ -47,6 +48,16 @@ else echo "FAIL · Inferenz auf '$BRAIN' fehlgeschlagen (Modell lädt/generiert nicht)"; fail=1 fi +# 3b. Embedding-Modell (für Mem0/Gedächtnis) lädt und liefert einen Vektor? +eresp="$(curl -s -m 120 -X POST "$SWAP_URL/v1/embeddings" \ + -H 'Content-Type: application/json' \ + -d "{\"model\":\"$EMBED\",\"input\":\"ping\"}" 2>/dev/null)" +if printf '%s' "$eresp" | grep -q '"embedding"'; then + echo "PASS · Embedding-Modell '$EMBED' liefert Vektoren" +else + echo "FAIL · Embedding-Modell '$EMBED' lädt/antwortet nicht (Mem0/Gedächtnis betroffen)"; fail=1 +fi + # 4. MC2 selbst gesund (Engine + Gateway erreichbar)? if curl -sf -m 8 "$MC_URL/api/health" 2>/dev/null | grep -qE '"engine_reachable":[[:space:]]*true'; then echo "PASS · MC2 /api/health: engine_reachable=true" diff --git a/deploy/warmup.sh b/deploy/warmup.sh index 2dd7465..78725cc 100644 --- a/deploy/warmup.sh +++ b/deploy/warmup.sh @@ -3,11 +3,15 @@ # Anfrage nicht kalt ist (llama-swap lädt sonst lazy bei Bedarf). # Eingehängt als ExecStartPost=-/usr/local/bin/llama-swap-warmup.sh in llama-swap. # -# `fast` = das Agent-Hirn (Qwen3.6-35B-A3B); Pingen eines brains-Gruppen-Mitglieds lädt die -# ganze (ko-residente) Gruppe. Selbst-detachend: blockiert den Service-Start nicht. +# `fast` = das Agent-Hirn (Qwen3.6-35B-A3B), `embed` = das Embedding-Modell (Qwen3-Embedding-0.6B, +# für Mem0/Gedächtnis). Beide sind in der brains-Gruppe (persist), werden aber NICHT automatisch +# zusammen geladen — jedes Modell muss einzeln angestoßen werden, sonst bleibt es kalt. +# Embedding läuft im --embedding-Modus → anderer Endpunkt (/v1/embeddings, nicht chat). +# Selbst-detachend: blockiert den Service-Start nicht. set -u URL="${MC_LLAMA_SWAP_URL:-http://127.0.0.1:8080}" BRAINS="${MC_WARMUP_MODELS:-fast}" +EMBEDS="${MC_WARMUP_EMBED:-embed}" if [ "${1:-}" != "--inner" ]; then setsid "$0" --inner >/dev/null 2>&1 & @@ -20,9 +24,16 @@ for _ in $(seq 1 60); do # auf llama-swap warten (max ~120 sleep 2 done -for m in $BRAINS; do +for m in $BRAINS; do # Chat-Hirne über /v1/chat/completions curl -s -m 180 -X POST "$URL/v1/chat/completions" \ -H 'Content-Type: application/json' \ -d "{\"model\":\"$m\",\"max_tokens\":1,\"messages\":[{\"role\":\"user\",\"content\":\"ping\"}]}" \ >/dev/null 2>&1 || true done + +for m in $EMBEDS; do # Embedding-Modelle über /v1/embeddings + curl -s -m 120 -X POST "$URL/v1/embeddings" \ + -H 'Content-Type: application/json' \ + -d "{\"model\":\"$m\",\"input\":\"ping\"}" \ + >/dev/null 2>&1 || true +done