#!/usr/bin/env bash # llama-embed-heartbeat — garde chaud le slot d'embedding nomic (:1238). # # Le piège (cf. admin/ia/stt.md) : l'instance d'embedding part à froid après une pause # (slot GPU inactif) → la 1ʳᵉ requête est lente (5-8 s) et dépasse le timeout du STT-server # (4 s) → recall mémoire vide ET RAG documentaire raté (`docs=0`) → réponses non ancrées. # # Un petit embed périodique (modèle minuscule, ~10-50 ms GPU) garde le slot résident → la # 1ʳᵉ vraie requête tombe sur un slot chaud. Pendant logique au `llm-heartbeat` (rôle litellm) # qui garde chaud le slot de CHAT. Logge les échecs → sert aussi de sonde de l'instance embed. set -u URL="http://127.0.0.1:{{ llama_embed_port }}/v1/embeddings" MODEL="{{ llama_embed_model_alias }}" INTERVAL="{{ llama_embed_heartbeat_interval }}" TIMEOUT="{{ llama_embed_heartbeat_timeout }}" payload="{\"model\":\"${MODEL}\",\"input\":\"ping\"}" fails=0 while true; do code=$(curl -s -m "$TIMEOUT" -o /dev/null -w '%{http_code}' \ "$URL" -H 'Content-Type: application/json' -d "$payload" 2>/dev/null || echo "000") if [ "$code" = "200" ]; then fails=0 else fails=$((fails + 1)) echo "embed-heartbeat: KO (HTTP ${code}) — ${fails} échec(s) consécutif(s)" fi sleep "$INTERVAL" done