Spaces:
Sleeping
Sleeping
| set -euo pipefail | |
| export PYTHONWARNINGS="ignore::UserWarning:multiprocessing.resource_tracker" | |
| CONDA_ENV="aac-chatbot" | |
| # Activate conda env | |
| if ! command -v conda >/dev/null 2>&1; then | |
| echo "ERROR: conda not found. Run setup.sh first." >&2 | |
| exit 1 | |
| fi | |
| eval "$(conda shell.bash hook)" | |
| conda activate "$CONDA_ENV" | |
| # If any args were passed (e.g. --debug, --user mia_chen), run the CLI | |
| # instead of the full stack and forward them verbatim. | |
| if [ "$#" -gt 0 ]; then | |
| exec python -m backend.main "$@" | |
| fi | |
| PIDS=() | |
| cleanup() { | |
| echo "" | |
| echo "Shutting down..." | |
| for pid in "${PIDS[@]}"; do | |
| kill "$pid" 2>/dev/null | |
| done | |
| # Wait for them to exit, suppress all output | |
| for pid in "${PIDS[@]}"; do | |
| wait "$pid" 2>/dev/null | |
| done | |
| exit 0 | |
| } | |
| trap cleanup INT TERM | |
| # Use Node 22 if available (Vite 8 requires Node 20.19+ or 22.12+) | |
| if [ -x /opt/homebrew/opt/node@22/bin/node ]; then | |
| export PATH="/opt/homebrew/opt/node@22/bin:/opt/homebrew/bin:$PATH" | |
| fi | |
| # Start Ollama if not already running | |
| if command -v ollama >/dev/null 2>&1 && ! curl -s http://localhost:11434/api/tags >/dev/null 2>&1; then | |
| echo "Starting Ollama..." | |
| ollama serve >/dev/null 2>&1 & | |
| PIDS+=($!) | |
| sleep 2 | |
| fi | |
| echo "Starting FastAPI backend on :8000..." | |
| uvicorn backend.api.main:app --reload --port 8000 2>&1 & | |
| PIDS+=($!) | |
| # Wait for backend to be reachable before starting frontend | |
| echo "Waiting for backend..." | |
| until curl -s http://localhost:8000/health >/dev/null 2>&1; do | |
| sleep 1 | |
| done | |
| echo "Backend ready." | |
| echo "Starting React frontend on :7550..." | |
| pnpm --dir frontend dev 2>&1 & | |
| PIDS+=($!) | |
| echo "All services running. Ctrl+C to stop." | |
| wait | |