Fix: Embedding-Modell (Qwen3-Embedding-0.6B) auch automatisch vorwaermen
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 <noreply@anthropic.com>
This commit is contained in:
@@ -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}"
|
MC_URL="${MC_URL:-http://127.0.0.1:9001}"
|
||||||
MEM0_URL="${MEM0_SERVICE_URL:-http://127.0.0.1:8765}"
|
MEM0_URL="${MEM0_SERVICE_URL:-http://127.0.0.1:8765}"
|
||||||
BRAIN="${MC_WARMUP_MODELS:-fast}"; BRAIN="${BRAIN%% *}" # erstes Modell, falls Liste
|
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
|
fail=0
|
||||||
|
|
||||||
echo "=== Stack Post-Update: Funktionsprüfung ==="
|
echo "=== Stack Post-Update: Funktionsprüfung ==="
|
||||||
@@ -47,6 +48,16 @@ else
|
|||||||
echo "FAIL · Inferenz auf '$BRAIN' fehlgeschlagen (Modell lädt/generiert nicht)"; fail=1
|
echo "FAIL · Inferenz auf '$BRAIN' fehlgeschlagen (Modell lädt/generiert nicht)"; fail=1
|
||||||
fi
|
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)?
|
# 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
|
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"
|
echo "PASS · MC2 /api/health: engine_reachable=true"
|
||||||
|
|||||||
+14
-3
@@ -3,11 +3,15 @@
|
|||||||
# Anfrage nicht kalt ist (llama-swap lädt sonst lazy bei Bedarf).
|
# 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.
|
# 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
|
# `fast` = das Agent-Hirn (Qwen3.6-35B-A3B), `embed` = das Embedding-Modell (Qwen3-Embedding-0.6B,
|
||||||
# ganze (ko-residente) Gruppe. Selbst-detachend: blockiert den Service-Start nicht.
|
# 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
|
set -u
|
||||||
URL="${MC_LLAMA_SWAP_URL:-http://127.0.0.1:8080}"
|
URL="${MC_LLAMA_SWAP_URL:-http://127.0.0.1:8080}"
|
||||||
BRAINS="${MC_WARMUP_MODELS:-fast}"
|
BRAINS="${MC_WARMUP_MODELS:-fast}"
|
||||||
|
EMBEDS="${MC_WARMUP_EMBED:-embed}"
|
||||||
|
|
||||||
if [ "${1:-}" != "--inner" ]; then
|
if [ "${1:-}" != "--inner" ]; then
|
||||||
setsid "$0" --inner >/dev/null 2>&1 &
|
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
|
sleep 2
|
||||||
done
|
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" \
|
curl -s -m 180 -X POST "$URL/v1/chat/completions" \
|
||||||
-H 'Content-Type: application/json' \
|
-H 'Content-Type: application/json' \
|
||||||
-d "{\"model\":\"$m\",\"max_tokens\":1,\"messages\":[{\"role\":\"user\",\"content\":\"ping\"}]}" \
|
-d "{\"model\":\"$m\",\"max_tokens\":1,\"messages\":[{\"role\":\"user\",\"content\":\"ping\"}]}" \
|
||||||
>/dev/null 2>&1 || true
|
>/dev/null 2>&1 || true
|
||||||
done
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user