|
|
#!/bin/bash |
|
|
set -euo pipefail |
|
|
|
|
|
echo "🚀 Iniciando Llama Dev Suite PRO v5 en HF Spaces" |
|
|
|
|
|
OLLAMA_BIN="$(command -v ollama || true)" |
|
|
if [ -z "$OLLAMA_BIN" ]; then |
|
|
echo "❌ No se encontró el binario de Ollama dentro del contenedor." |
|
|
echo " Verifica que la imagen incluya Ollama (usa el runtime Docker o rebuild)." |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
LOG_FILE="/tmp/ollama.log" |
|
|
echo "📡 Iniciando servidor Ollama..." |
|
|
"$OLLAMA_BIN" serve > "$LOG_FILE" 2>&1 & |
|
|
OLLAMA_PID=$! |
|
|
|
|
|
cleanup() { |
|
|
echo "🧹 Deteniendo procesos..." |
|
|
if kill -0 "$OLLAMA_PID" >/dev/null 2>&1; then |
|
|
kill "$OLLAMA_PID" >/dev/null 2>&1 || true |
|
|
fi |
|
|
if [ -n "${APP_PID:-}" ] && kill -0 "$APP_PID" >/dev/null 2>&1; then |
|
|
kill "$APP_PID" >/dev/null 2>&1 || true |
|
|
fi |
|
|
} |
|
|
|
|
|
trap cleanup EXIT |
|
|
|
|
|
TARGET_URL="${LLAMA_DEV_OLLAMA_URL:-http://127.0.0.1:11434}" |
|
|
WAIT_SECONDS="${OLLAMA_WAIT_TIMEOUT:-60}" |
|
|
echo "⌛ Esperando a que Ollama escuche en ${TARGET_URL} (timeout: ${WAIT_SECONDS}s)..." |
|
|
|
|
|
READY=0 |
|
|
for ((second = 1; second <= WAIT_SECONDS; second++)); do |
|
|
if curl -sf "${TARGET_URL}/api/version" >/dev/null 2>&1; then |
|
|
VERSION=$(curl -sf "${TARGET_URL}/api/version" | grep -o '"version":"[^"]*"' | cut -d'"' -f4) |
|
|
echo "✅ Ollama está corriendo (PID: $OLLAMA_PID, versión: ${VERSION:-desconocida})" |
|
|
READY=1 |
|
|
break |
|
|
fi |
|
|
if ! kill -0 "$OLLAMA_PID" >/dev/null 2>&1; then |
|
|
echo "❌ El proceso de Ollama terminó inesperadamente. Logs:" |
|
|
cat "$LOG_FILE" |
|
|
exit 1 |
|
|
fi |
|
|
sleep 1 |
|
|
done |
|
|
|
|
|
if [ "$READY" -ne 1 ]; then |
|
|
echo "❌ ERROR: Ollama no pudo iniciarse en ${WAIT_SECONDS}s." |
|
|
echo "📋 Últimos logs:" |
|
|
tail -n 200 "$LOG_FILE" || true |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
if [ -n "${OLLAMA_AUTO_PULL:-}" ]; then |
|
|
echo "📥 Descargando modelo '${OLLAMA_AUTO_PULL}' en el arranque..." |
|
|
if "$OLLAMA_BIN" pull "$OLLAMA_AUTO_PULL"; then |
|
|
echo "✅ Modelo '${OLLAMA_AUTO_PULL}' disponible." |
|
|
else |
|
|
echo "⚠️ No se pudo descargar el modelo '${OLLAMA_AUTO_PULL}'. Continúo sin él." |
|
|
fi |
|
|
fi |
|
|
|
|
|
if [ -n "$HF_TOKEN" ]; then |
|
|
echo "🔑 Configurando acceso a modelos privados de HF..." |
|
|
mkdir -p ~/.ollama |
|
|
fi |
|
|
|
|
|
echo "🎨 Iniciando aplicación Gradio..." |
|
|
python -u app.py & |
|
|
APP_PID=$! |
|
|
wait "$APP_PID" |
|
|
|