| #!/bin/bash |
| |
| |
| |
| |
|
|
| 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" |
|
|
| |
| if [ -f "$ENV_FILE" ]; then |
| export $(grep -v '^#' "$ENV_FILE" | xargs) |
| fi |
|
|
| |
| 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 "" |
|
|
| |
|
|
| 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 |
|
|
| |
|
|
| 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" |
|
|
| |
|
|
| echo "" |
| echo -e "${CYAN}[3/3] Starting Friday backend...${NC}" |
|
|
| |
| 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 |
|
|
| |
| 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" |
|
|
| |
| 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 |
|
|
| |
|
|
| 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 "" |
|
|
| |
| 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 "" |
|
|
| |
| wait $BACKEND_PID |
|
|