Spaces:
Runtime error
Runtime error
File size: 4,474 Bytes
9e93b10 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | #!/usr/bin/env bash
set -euo pipefail
# ---------------------------------------------------------------------------
# Container entry point for rexpro-ai.
# Handles secret key generation, optional Ollama/CUDA/Playwright setup,
# HuggingFace Space deployment, and launches the uvicorn server.
# ---------------------------------------------------------------------------
# Default optional env vars that we test below with bash's `,,` lowercase
# expansion. The two can't be combined inline (`${VAR:-default,,}` makes
# the default literal `,,`), so we normalise once up front and the simple
# `${VAR,,}` form stays safe under `set -u` everywhere else.
: "${WEB_LOADER_ENGINE:=}" "${USE_OLLAMA_DOCKER:=}" "${USE_CUDA_DOCKER:=}"
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
cd "$SCRIPT_DIR" || exit 1
# ββ Playwright browser installation (if configured) ββββββββββββββββββββββββββ
if [[ "${WEB_LOADER_ENGINE,,}" == "playwright" ]]; then
if [[ -z "${PLAYWRIGHT_WS_URL:-}" ]]; then
echo "Installing Playwright Chromium browser..."
playwright install chromium
playwright install-deps chromium
fi
python -c "import nltk; nltk.download('punkt_tab')"
fi
# ββ Secret key setup βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
KEY_FILE="${REXPRO_SECRET_KEY_FILE:-.rexpro_secret_key}"
PORT="${PORT:-8080}"
HOST="${HOST:-0.0.0.0}"
if [[ -z "${REXPRO_SECRET_KEY:-}" && -z "${REXPRO_JWT_SECRET_KEY:-}" ]]; then
echo "No REXPRO_SECRET_KEY environment variable set, loading from file."
if [[ ! -f "$KEY_FILE" ]]; then
echo "Generating new REXPRO_SECRET_KEY..."
head -c 12 /dev/random | base64 > "$KEY_FILE"
fi
echo "Loading REXPRO_SECRET_KEY from ${KEY_FILE}"
REXPRO_SECRET_KEY=$(cat "$KEY_FILE")
fi
# ββ Ollama (bundled Docker image) ββββββββββββββββββββββββββββββββββββββββββββ
if [[ "${USE_OLLAMA_DOCKER,,}" == "true" ]]; then
echo "Starting bundled ollama serve..."
ollama serve &
fi
# ββ CUDA library paths ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
if [[ "${USE_CUDA_DOCKER,,}" == "true" ]]; then
echo "CUDA enabled β extending LD_LIBRARY_PATH for torch/cudnn libraries."
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}:/usr/local/lib/python3.11/site-packages/torch/lib:/usr/local/lib/python3.11/site-packages/nvidia/cudnn/lib"
fi
# ββ HuggingFace Space deployment βββββββββββββββββββββββββββββββββββββββββββββ
if [[ -n "${SPACE_ID:-}" ]]; then
echo "Configuring for HuggingFace Space deployment..."
if [[ -n "${ADMIN_USER_EMAIL:-}" && -n "${ADMIN_USER_PASSWORD:-}" ]]; then
echo "Creating admin user for Space..."
REXPRO_SECRET_KEY="${REXPRO_SECRET_KEY:-}" \
uvicorn rexpro_ai.main:app --host "$HOST" --port "$PORT" --forwarded-allow-ips "${FORWARDED_ALLOW_IPS:-*}" &
rexpro_pid=$!
echo "Waiting for server to become healthy..."
until curl -sf "http://localhost:${PORT}/health" > /dev/null 2>&1; do
sleep 1
done
echo "Registering admin user..."
curl -sS -X POST "http://localhost:${PORT}/api/v1/auths/signup" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d "{\"email\": \"${ADMIN_USER_EMAIL}\", \"password\": \"${ADMIN_USER_PASSWORD}\", \"name\": \"Admin\"}"
echo "Restarting server..."
kill "$rexpro_pid"
wait "$rexpro_pid" 2>/dev/null || true
fi
export REXPRO_URL="${SPACE_HOST}"
fi
# ββ Launch uvicorn βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
PYTHON_CMD=$(command -v python3 || command -v python)
UVICORN_WORKERS="${UVICORN_WORKERS:-1}"
if [[ "$#" -gt 0 ]]; then
ARGS=("$@")
else
ARGS=(--workers "$UVICORN_WORKERS")
fi
exec env REXPRO_SECRET_KEY="${REXPRO_SECRET_KEY:-}" \
"$PYTHON_CMD" -m uvicorn rexpro_ai.main:app \
--host "$HOST" \
--port "$PORT" \
--forwarded-allow-ips "${FORWARDED_ALLOW_IPS:-*}" \
"${ARGS[@]}" |