Spaces:
Sleeping
Sleeping
| # Start the smolvla-inspect backend (FastAPI) and frontend (Vite dev) servers. | |
| # Usage: ./start_servers.sh [--base-dir ./outputs] | |
| set -euo pipefail | |
| PROJECT_ROOT="$(cd "$(dirname "$0")" && pwd)" | |
| # --- Load nvm for Node.js 22+ --- | |
| export NVM_DIR="$HOME/.nvm" | |
| [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" | |
| nvm use 22 2>/dev/null || true | |
| BACKEND_PORT=8080 | |
| FRONTEND_PORT=5173 | |
| BASE_DIR="${1:---base-dir}" | |
| BASE_DIR_VAL="${2:-./outputs}" | |
| # --- Parse optional --base-dir flag --- | |
| if [[ "${BASE_DIR}" == "--base-dir" ]]; then | |
| BASE_DIR_VAL="${BASE_DIR_VAL}" | |
| else | |
| BASE_DIR_VAL="./outputs" | |
| fi | |
| # --- Find free port starting from a default --- | |
| find_free_port() { | |
| local port=$1 | |
| while ss -tlnp 2>/dev/null | grep -q ":${port} " || lsof -i ":${port}" &>/dev/null; do | |
| echo " Port ${port} in use, trying $((port + 1))..." >&2 | |
| port=$((port + 1)) | |
| done | |
| echo "${port}" | |
| } | |
| BACKEND_PORT=$(find_free_port $BACKEND_PORT) | |
| FRONTEND_PORT=$(find_free_port $FRONTEND_PORT) | |
| echo "========================================" | |
| echo " smolvla-inspect dev servers" | |
| echo "========================================" | |
| echo " Backend: http://localhost:${BACKEND_PORT}" | |
| echo " Frontend: http://localhost:${FRONTEND_PORT}" | |
| echo " Base dir: ${BASE_DIR_VAL}" | |
| echo "========================================" | |
| echo "" | |
| # --- Cleanup on exit --- | |
| cleanup() { | |
| echo "" | |
| echo "Shutting down servers..." | |
| kill $BACKEND_PID $FRONTEND_PID 2>/dev/null || true | |
| wait $BACKEND_PID $FRONTEND_PID 2>/dev/null || true | |
| echo "Done." | |
| } | |
| trap cleanup EXIT INT TERM | |
| # --- Install frontend deps if needed --- | |
| if [ ! -d "${PROJECT_ROOT}/web/frontend/node_modules" ]; then | |
| echo "Installing frontend dependencies..." | |
| (cd "${PROJECT_ROOT}/web/frontend" && npm install) | |
| echo "" | |
| fi | |
| # --- Start backend --- | |
| echo "Starting backend on port ${BACKEND_PORT}..." | |
| SMOLVLA_BASE_DIR="${BASE_DIR_VAL}" \ | |
| "${PROJECT_ROOT}/.venv/bin/python" -m uvicorn web.backend.main:app \ | |
| --host 0.0.0.0 \ | |
| --port "${BACKEND_PORT}" \ | |
| --reload \ | |
| --reload-dir "${PROJECT_ROOT}/web/backend" & | |
| BACKEND_PID=$! | |
| # --- Start frontend --- | |
| echo "Starting frontend on port ${FRONTEND_PORT}..." | |
| (cd "${PROJECT_ROOT}/web/frontend" && \ | |
| VITE_API_URL="http://localhost:${BACKEND_PORT}" \ | |
| npx vite --port "${FRONTEND_PORT}" --host) & | |
| FRONTEND_PID=$! | |
| echo "" | |
| echo "Press Ctrl+C to stop both servers." | |
| wait | |