#!/bin/bash # ============================================================ # Project Jarvis — Start Script # Cloud-First mode: Ollama is optional when OPENAI_API_KEY is set. # ============================================================ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" BACKEND_DIR="$PROJECT_DIR/backend" VENV_DIR="$BACKEND_DIR/venv" PID_DIR="$PROJECT_DIR/.pids" ENV_FILE="$PROJECT_DIR/.env" export PATH="$PROJECT_DIR/bin:$PATH" # Load env file if it exists if [ -f "$ENV_FILE" ]; then export $(grep -v '^#' "$ENV_FILE" | xargs) fi # Colors GREEN='\033[0;32m' YELLOW='\033[1;33m' CYAN='\033[0;36m' RED='\033[0;31m' PURPLE='\033[0;35m' NC='\033[0m' mkdir -p "$PID_DIR" echo "" echo -e "${PURPLE}╔══════════════════════════════════════════════════╗${NC}" echo -e "${PURPLE}║ PROJECT FRIDAY — Starting... ║${NC}" echo -e "${PURPLE}╚══════════════════════════════════════════════════╝${NC}" echo "" # ── Step 1: Check API Key / Mode ───────────────────────────── echo -e "${CYAN}[1/3] Checking AI backend mode...${NC}" if [ -n "$OPENAI_API_KEY" ]; then echo -e " ${GREEN}✓${NC} OpenAI API Key found — running in CLOUD mode 🚀" echo -e " ${GREEN}✓${NC} Ollama (local LLM) will NOT be started — saving your RAM!" else echo -e " ${YELLOW}⚠${NC} No OPENAI_API_KEY found — falling back to LOCAL mode (Ollama)" if ! command -v ollama &>/dev/null; then echo -e " ${RED}✗ Ollama not installed. Run setup.sh first or add OPENAI_API_KEY to .env${NC}" exit 1 fi if ! pgrep -x "ollama" &>/dev/null; then echo -e " ${YELLOW}Starting Ollama service...${NC}" ollama serve &>/dev/null & echo $! > "$PID_DIR/ollama.pid" sleep 3 echo -e " ${GREEN}✓${NC} Ollama started" else echo -e " ${GREEN}✓${NC} Ollama already running" fi fi # ── Step 2: Activate Virtual Environment ───────────────────── echo "" echo -e "${CYAN}[2/3] Activating Python environment...${NC}" if [ ! -d "$VENV_DIR" ]; then echo -e " ${RED}✗ Virtual environment not found. Run setup.sh first.${NC}" exit 1 fi source "$VENV_DIR/bin/activate" echo -e " ${GREEN}✓${NC} Virtual environment activated" # ── Step 3: Start FastAPI Backend ──────────────────────────── echo "" echo -e "${CYAN}[3/3] Starting Friday backend...${NC}" # Kill any existing instance if [ -f "$PID_DIR/backend.pid" ]; then OLD_PID=$(cat "$PID_DIR/backend.pid") if kill -0 "$OLD_PID" 2>/dev/null; then echo -e " ${YELLOW}Stopping existing backend (PID: $OLD_PID)...${NC}" kill "$OLD_PID" 2>/dev/null sleep 1 fi fi # Start the backend cd "$BACKEND_DIR" "$VENV_DIR/bin/python" -m uvicorn main:app --host 0.0.0.0 --port 7777 --log-level info & BACKEND_PID=$! echo "$BACKEND_PID" > "$PID_DIR/backend.pid" # Wait for it to be ready echo -e " ${YELLOW}Waiting for backend to initialize...${NC}" for i in {1..30}; do if curl -s http://localhost:7777/health/ping &>/dev/null; then break fi sleep 1 done if curl -s http://localhost:7777/health/ping &>/dev/null; then echo -e " ${GREEN}✓${NC} Backend started (PID: $BACKEND_PID)" else echo -e " ${YELLOW}⚠${NC} Backend is starting (may need a moment)" fi # ── Done ───────────────────────────────────────────────────── echo "" echo -e "${GREEN}╔══════════════════════════════════════════════════╗${NC}" echo -e "${GREEN}║ F.R.I.D.A.Y. IS RUNNING! 🚀 ║${NC}" echo -e "${GREEN}╚══════════════════════════════════════════════════╝${NC}" echo "" echo -e " ${CYAN}Neural HUD:${NC} Launching locally..." echo -e " ${CYAN}Dashboard:${NC} http://localhost:7777" echo "" # Launch the Sovereign HUD (The Local App) echo -e "${YELLOW}Starting visual interface...${NC}" "$VENV_DIR/bin/python" "$PROJECT_DIR/app/friday_gui.py" & GUI_PID=$! echo "$GUI_PID" > "$PID_DIR/gui.pid" echo -e " ${GREEN}✓${NC} FRIDAY Sovereign HUD initialized." echo -e " ${YELLOW}To stop:${NC} bash $SCRIPT_DIR/stop.sh" echo "" # Follow the backend logs in the background, but keep terminal open for GUI exit wait $BACKEND_PID