diff options
Diffstat (limited to 'scripts/servidores.sh')
| -rwxr-xr-x | scripts/servidores.sh | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/scripts/servidores.sh b/scripts/servidores.sh new file mode 100755 index 0000000..2e3b769 --- /dev/null +++ b/scripts/servidores.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +# Arranca o para los dos servidores por separado, sin el asistente. +# +# Útil para desarrollar: cargar los modelos cuesta más de un minuto y así se +# reinicia el binario de Rust las veces que haga falta sin volver a pagarlo. +# El asistente detecta que ya están escuchando y los reutiliza. +# +# scripts/servidores.sh arrancar | parar | estado +set -euo pipefail +cd "$(dirname "$0")/.." + +LOGS="${ASIST_LOGS:-logs}" +LLM_PUERTO="${ASIST_LLM_PUERTO:-8012}" +TTS_PUERTO="${ASIST_TTS_PUERTO:-8013}" +mkdir -p "$LOGS" + +vivo() { curl -sf -m 2 "http://127.0.0.1:$1/health" >/dev/null 2>&1; } + +esperar() { # puerto nombre segundos + local fin=$(( SECONDS + $3 )) + while [ $SECONDS -lt $fin ]; do + vivo "$1" && { echo " $2 listo"; return 0; } + sleep 1 + done + echo " $2 NO respondió en $3 s; mira $LOGS/$2.log" >&2 + return 1 +} + +arrancar() { + if vivo "$LLM_PUERTO"; then + echo " llama-server ya estaba arriba" + else + echo " arrancando llama-server…" + nohup vendor/llama.cpp/build/bin/llama-server \ + --model models/Qwen3.5-2B.Q5_K_M.gguf \ + --mmproj models/mmproj-BF16.gguf \ + --host 127.0.0.1 --port "$LLM_PUERTO" \ + --threads 10 --threads-batch 10 \ + --batch-size 512 --ubatch-size 256 \ + --gpu-layers 10 --split-mode layer --tensor-split 1 --main-gpu 0 \ + --no-mmap --ctx-size 8192 --parallel 2 --cache-ram 6144 \ + --rope-freq-base 1000000 --rope-freq-scale 0.25 \ + --jinja --chat-template-file config/qwen35-no-think.jinja \ + > "$LOGS/llama-server.log" 2>&1 & + fi + + if vivo "$TTS_PUERTO"; then + echo " tts-server ya estaba arriba" + else + echo " arrancando tts-server…" + # --codec-chunk-dur 1.0 es lo que hace que el audio salga por bloques + # según se genera en vez de todo al final. Ver docs/RENDIMIENTO.md. + nohup vendor/qwentts.cpp/build/tts-server \ + --model models/qwen-talker-1.7b-base-Q8_0.gguf \ + --codec models/qwen-tokenizer-12hz-Q8_0.gguf \ + --host 127.0.0.1 --port "$TTS_PUERTO" \ + --lang spanish --codec-chunk-dur 1.0 \ + > "$LOGS/tts-server.log" 2>&1 & + fi + + esperar "$LLM_PUERTO" llama-server 240 + esperar "$TTS_PUERTO" tts-server 240 +} + +parar() { + # SIGTERM, no SIGKILL: hay que darles ocasión de soltar la GPU. + pkill -TERM -f 'llama-server .*--port '"$LLM_PUERTO" 2>/dev/null && echo " llama-server parado" || true + pkill -TERM -f 'tts-server .*--port '"$TTS_PUERTO" 2>/dev/null && echo " tts-server parado" || true +} + +estado() { + vivo "$LLM_PUERTO" && echo " llama-server arriba :$LLM_PUERTO" || echo " llama-server parado" + vivo "$TTS_PUERTO" && echo " tts-server arriba :$TTS_PUERTO" || echo " tts-server parado" + command -v nvidia-smi >/dev/null && \ + nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader | sed 's/^/ GPU: /' +} + +case "${1:-estado}" in + arrancar|start) arrancar ;; + parar|stop) parar ;; + estado|status) estado ;; + *) echo "uso: $0 {arrancar|parar|estado}" >&2; exit 1 ;; +esac |