File size: 4,888 Bytes
5196bf2 2fd9130 5196bf2 2fd9130 5196bf2 | 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 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | #!/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
|