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