#!/usr/bin/env bash # Envoltorio: el whisper-server de Newelle, pero el nuestro compilado con CUDA. # Newelle lo invoca por flatpak-spawn --host esperando 'whisper-server' en el # PATH; aqui se fija el entorno de CUDA (que el binario necesita para ver las # libs) y se pasa a nuestra version con GPU. Los argumentos (-m, --port, -l...) # los pone Newelle y se reenvian tal cual. # # Copia versionada: ~/COFRE/CODERS/JARVIS/config/whisper-server-envoltorio.sh export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH:-} BINARIO="$HOME/COFRE/CODERS/JARVIS/voz/whisper-cuda/whisper.cpp/build/bin/whisper-server" REGISTRO="$HOME/COFRE/CODERS/JARVIS/voz/whisper-arranques.log" # Cuanta VRAM libre exigimos para arrancar en GPU. El modelo small ocupa 757 MiB # en reposo pero llega a 839 en el pico de una transcripcion: pedir solo lo que # ocupa al cargar es justo el error que hacia que cargase bien y muriese al # hablarle, con un "Error recognizing file with server" que no explicaba nada. # 950 deja holgura para el pico y para el contexto de CUDA. MINIMO_MIB=${JARVIS_WHISPER_MIN_VRAM:-950} # Barrer el servidor anterior antes de levantar el nuestro. # # Newelle lo lanza por flatpak-spawn --host, asi que el proceso vive FUERA del # sandbox y no se entera de que la app se cerro: cada vez que se reinicia # JARVIS queda un whisper-server huerfano agarrado a 757 MiB de la tarjeta. # Dos o tres reinicios y ya no cabe el modelo del asistente, con el sintoma # repartido —a veces va, a veces no— segun cuantos hubiera quedado sueltos. # # Se comparan PIDs y no patrones: un `pkill -f whisper-server` desde aqui se # mataria a si mismo, que este script tiene ese nombre. for otro in $(pgrep -x whisper-server 2>/dev/null); do [ "$otro" = "$$" ] && continue kill "$otro" 2>/dev/null done libre=$(nvidia-smi --query-gpu=memory.free --format=csv,noheader,nounits 2>/dev/null | head -1) if [ -n "$libre" ] && [ "$libre" -lt "$MINIMO_MIB" ] 2>/dev/null; then # Sin sitio: mejor transcribir en procesador que abortar. Es mas lento, pero # responde; abortar deja la app muda y sin decir por que. echo "$(date '+%F %T') GPU con solo ${libre} MiB libres (<${MINIMO_MIB}): al procesador" >> "$REGISTRO" exec "$BINARIO" --no-gpu "$@" fi echo "$(date '+%F %T') GPU con ${libre:-?} MiB libres: en tarjeta" >> "$REGISTRO" exec "$BINARIO" "$@"