| #!/bin/bash |
| |
| |
| |
| |
|
|
| set -e |
|
|
| SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" |
| PROJECT_DIR="$(dirname "$SCRIPT_DIR")" |
| BACKEND_DIR="$PROJECT_DIR/backend" |
| VENV_DIR="$BACKEND_DIR/venv" |
|
|
| |
| RED='\033[0;31m' |
| GREEN='\033[0;32m' |
| YELLOW='\033[1;33m' |
| BLUE='\033[0;34m' |
| PURPLE='\033[0;35m' |
| CYAN='\033[0;36m' |
| NC='\033[0m' |
|
|
| echo "" |
| echo -e "${PURPLE}ββββββββββββββββββββββββββββββββββββββββββββββββββββ${NC}" |
| echo -e "${PURPLE}β PROJECT FRIDAY β Setup Script β${NC}" |
| echo -e "${PURPLE}β Sovereign Intelligence Suite β${NC}" |
| echo -e "${PURPLE}ββββββββββββββββββββββββββββββββββββββββββββββββββββ${NC}" |
| echo "" |
|
|
| |
|
|
| echo -e "${CYAN}[1/8] Checking prerequisites...${NC}" |
|
|
| |
| if [[ "$(uname)" != "Darwin" ]]; then |
| echo -e "${RED}Error: This script is designed for macOS only.${NC}" |
| exit 1 |
| fi |
| echo -e " ${GREEN}β${NC} macOS detected" |
|
|
| |
| if ! xcode-select -p &>/dev/null; then |
| echo -e " ${YELLOW}Installing Xcode Command Line Tools...${NC}" |
| xcode-select --install |
| echo -e " ${YELLOW}Please wait for Xcode CLI tools to finish installing, then re-run this script.${NC}" |
| exit 1 |
| fi |
| echo -e " ${GREEN}β${NC} Xcode CLI tools installed" |
|
|
| |
| if ! command -v python3 &>/dev/null; then |
| echo -e "${RED}Error: Python 3 is not installed. Install it via: brew install python${NC}" |
| exit 1 |
| fi |
| PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}') |
| echo -e " ${GREEN}β${NC} Python $PYTHON_VERSION" |
|
|
| |
|
|
| echo "" |
| echo -e "${CYAN}[2/8] Installing system dependencies via Homebrew...${NC}" |
|
|
| if ! command -v brew &>/dev/null; then |
| echo -e " ${YELLOW}Installing Homebrew...${NC}" |
| /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
| fi |
|
|
| |
| for pkg in ffmpeg portaudio; do |
| if brew list "$pkg" &>/dev/null; then |
| echo -e " ${GREEN}β${NC} $pkg already installed" |
| else |
| echo -e " ${YELLOW}Installing $pkg...${NC}" |
| brew install "$pkg" |
| echo -e " ${GREEN}β${NC} $pkg installed" |
| fi |
| done |
|
|
| |
|
|
| echo "" |
| echo -e "${CYAN}[3/8] Setting up Ollama (local LLM)...${NC}" |
|
|
| if command -v ollama &>/dev/null; then |
| echo -e " ${GREEN}β${NC} Ollama already installed" |
| else |
| echo -e " ${YELLOW}Installing Ollama via Homebrew...${NC}" |
| brew install ollama |
| echo -e " ${GREEN}β${NC} Ollama installed" |
| fi |
|
|
| |
| if ! pgrep -x "ollama" &>/dev/null; then |
| echo -e " ${YELLOW}Starting Ollama service...${NC}" |
| ollama serve &>/dev/null & |
| sleep 3 |
| fi |
| echo -e " ${GREEN}β${NC} Ollama service running" |
|
|
| |
|
|
| echo "" |
| echo -e "${CYAN}[4/8] Downloading LLM model (llama3:8b)...${NC}" |
| echo -e " ${YELLOW}This may take a while on first run (~4.7GB download)...${NC}" |
|
|
| if ollama list 2>/dev/null | grep -q "llama3:8b"; then |
| echo -e " ${GREEN}β${NC} llama3:8b model already downloaded" |
| else |
| ollama pull llama3:8b |
| echo -e " ${GREEN}β${NC} llama3:8b model downloaded" |
| fi |
|
|
| |
|
|
| echo "" |
| echo -e "${CYAN}[5/8] Setting up Python virtual environment...${NC}" |
|
|
| if [ -d "$VENV_DIR" ]; then |
| echo -e " ${GREEN}β${NC} Virtual environment already exists" |
| else |
| python3 -m venv "$VENV_DIR" |
| echo -e " ${GREEN}β${NC} Virtual environment created" |
| fi |
|
|
| |
| source "$VENV_DIR/bin/activate" |
| echo -e " ${GREEN}β${NC} Virtual environment activated" |
|
|
| |
| pip install --upgrade pip --quiet |
| echo -e " ${GREEN}β${NC} pip upgraded" |
|
|
| |
|
|
| echo "" |
| echo -e "${CYAN}[6/8] Installing Python dependencies...${NC}" |
| echo -e " ${YELLOW}This includes PyTorch, Whisper, and other ML packages...${NC}" |
|
|
| pip install -r "$BACKEND_DIR/requirements.txt" --quiet 2>&1 | tail -5 |
| echo -e " ${GREEN}β${NC} Python dependencies installed" |
|
|
| |
|
|
| echo "" |
| echo -e "${CYAN}[7/8] Pre-downloading Whisper STT model (base)...${NC}" |
|
|
| python3 -c " |
| import whisper |
| print(' Downloading Whisper base model...') |
| model = whisper.load_model('base') |
| print(' β Whisper base model ready') |
| " 2>&1 | grep -v "FP16\|UserWarning" |
|
|
| |
|
|
| echo "" |
| echo -e "${CYAN}[8/8] Creating configuration...${NC}" |
|
|
| if [ ! -f "$BACKEND_DIR/.env" ]; then |
| cp "$PROJECT_DIR/.env.example" "$BACKEND_DIR/.env" |
| echo -e " ${GREEN}β${NC} .env file created from template" |
| else |
| echo -e " ${GREEN}β${NC} .env file already exists" |
| fi |
|
|
| |
| mkdir -p "$PROJECT_DIR/data" "$PROJECT_DIR/models" "$PROJECT_DIR/data/recordings" |
| echo -e " ${GREEN}β${NC} Data directories created" |
|
|
| |
|
|
| echo "" |
| echo -e "${GREEN}ββββββββββββββββββββββββββββββββββββββββββββββββββββ${NC}" |
| echo -e "${GREEN}β SETUP COMPLETE! π β${NC}" |
| echo -e "${GREEN}ββββββββββββββββββββββββββββββββββββββββββββββββββββ${NC}" |
| echo "" |
| echo -e " To start Friday:" |
| echo -e " ${CYAN}cd $PROJECT_DIR && bash scripts/start.sh${NC}" |
| echo "" |
| echo -e " Or use the CLI directly:" |
| echo -e " ${CYAN}cd $BACKEND_DIR && source venv/bin/activate && python cli.py${NC}" |
| echo "" |
| echo -e " Dashboard will be at: ${BLUE}http://localhost:7777${NC}" |
| echo "" |
|
|