.PHONY: install test format lint all setup start stop restart restart-backend restart-force help docker-build docker-up docker-down docker-build-backend docker-build-frontend docker-restart-backend docker-restart-backend-fast docker-restart-backend-smart docker-restart-frontend docker-restart-all docker-check-cuda docker-use-gpu docker-use-cpu # Check for GPU flag file and set Docker Compose file accordingly ifeq ($(wildcard .gpu_selected),) # No GPU flag file found, use CPU configuration DOCKER_COMPOSE_FILE := docker-compose.yml else # GPU flag file found, use GPU configuration DOCKER_COMPOSE_FILE := docker-compose-gpu.yml endif # Detect operating system and set environment ifeq ($(OS),Windows_NT) # Set Windows variables WINDOWS := 1 # Set UTF-8 code page for Windows to display Unicode characters SET_UTF8 := $(shell chcp 65001 >nul 2>&1 || echo) # No need to check for Apple Silicon on Windows APPLE_SILICON := 0 # Define empty color codes for Windows to avoid display issues COLOR_CYAN := COLOR_RESET := COLOR_BOLD := COLOR_GRAY := COLOR_GREEN := COLOR_RED := else WINDOWS := 0 # Detect Apple Silicon on non-Windows systems ifeq ($(shell uname -s),Darwin) ifeq ($(shell uname -m),arm64) APPLE_SILICON := 1 # Set environment variables for Apple Silicon export DOCKER_BACKEND_DOCKERFILE=Dockerfile.backend.apple export PLATFORM=apple else APPLE_SILICON := 0 endif else APPLE_SILICON := 0 endif # Define ANSI color codes for Unix systems COLOR_CYAN := \033[0;36m COLOR_RESET := \033[0m COLOR_BOLD := \033[1m COLOR_GRAY := \033[0;90m COLOR_GREEN := \033[1;32m COLOR_RED := \033[1;31m endif # Default Docker Compose configuration (non-GPU) DOCKER_COMPOSE_FILE := docker-compose.yml # Show help message help: ifeq ($(WINDOWS),1) @echo. @echo ███████╗███████╗ ██████╗ ██████╗ ███╗ ██╗██████╗ ███╗ ███╗███████╗ @echo ██╔════╝██╔════╝██╔════╝██╔═══██╗████╗ ██║██╔══██╗ ████╗ ████║██╔════╝ @echo ███████╗█████╗ ██║ ██║ ██║██╔██╗ ██║██║ ██║█████╗██╔████╔██║█████╗ @echo ╚════██║██╔══╝ ██║ ██║ ██║██║╚██╗██║██║ ██║╚════╝██║╚██╔╝██║██╔══╝ @echo ███████║███████╗╚██████╗╚██████╔╝██║ ╚████║██████╔╝ ██║ ╚═╝ ██║███████╗ @echo ╚══════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚═════╝ ╚═╝ ╚═╝╚══════╝ @echo. @echo SECOND-ME MAKEFILE COMMANDS @echo ------------------------------ @echo. @echo LOCAL COMMANDS: @echo make setup - Complete installation @echo make start - Start all services @echo make stop - Stop all services @echo make restart - Restart all services @echo make restart-backend - Restart only backend service @echo make restart-force - Force restart and reset data @echo make status - Show status of all services @echo. @echo DOCKER COMMANDS: @echo make docker-build - Build all Docker images @echo make docker-up - Start all Docker containers @echo make docker-down - Stop all Docker containers @echo make docker-build-backend - Build only backend Docker image @echo make docker-build-frontend - Build only frontend Docker image @echo make docker-restart-backend - Restart only backend container @echo make docker-restart-backend-fast - Restart backend+cuda without rebuilding llama.cpp @echo make docker-restart-frontend - Restart only frontend container @echo make docker-restart-all - Restart all Docker containers @echo make docker-check-cuda - Check CUDA support in containers @echo make docker-use-gpu - Switch to GPU configuration @echo make docker-use-cpu - Switch to CPU-only configuration @echo. @echo All Available Commands: @echo make help - Show this help message @echo make install - Install project dependencies @echo make test - Run tests @echo make format - Format code @echo make lint - Check code style @echo make all - Run format, lint and test else @echo "$(COLOR_CYAN)" @echo ' ███████╗███████╗ ██████╗ ██████╗ ███╗ ██╗██████╗ ███╗ ███╗███████╗' @echo ' ██╔════╝██╔════╝██╔════╝██╔═══██╗████╗ ██║██╔══██╗ ████╗ ████║██╔════╝' @echo ' ███████╗█████╗ ██║ ██║ ██║██╔██╗ ██║██║ ██║█████╗██╔████╔██║█████╗ ' @echo ' ╚════██║██╔══╝ ██║ ██║ ██║██║╚██╗██║██║ ██║╚════╝██║╚██╔╝██║██╔══╝ ' @echo ' ███████║███████╗╚██████╗╚██████╔╝██║ ╚████║██████╔╝ ██║ ╚═╝ ██║███████╗' @echo ' ╚══════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚═════╝ ╚═╝ ╚═╝╚══════╝' @echo "$(COLOR_RESET)" @echo "$(COLOR_BOLD)Second-Me Makefile Commands$(COLOR_RESET)" @echo "$(COLOR_GRAY)$$(date)$(COLOR_RESET)\n" @echo "" @echo "$(COLOR_GREEN)▶ LOCAL COMMANDS:$(COLOR_RESET)" @echo " make setup - Complete installation" @echo " make start - Start all services" @echo " make stop - Stop all services" @echo " make restart - Restart all services" @echo " make restart-backend - Restart only backend service" @echo " make restart-force - Force restart and reset data" @echo " make status - Show status of all services" @echo "" @echo "$(COLOR_GREEN)▶ DOCKER COMMANDS:$(COLOR_RESET)" @echo " make docker-build - Build all Docker images" @echo " make docker-up - Start all Docker containers" @echo " make docker-down - Stop all Docker containers" @echo " make docker-build-backend - Build only backend Docker image" @echo " make docker-build-frontend - Build only frontend Docker image" @echo " make docker-restart-backend - Restart only backend container (with rebuild)" @echo " make docker-restart-backend-fast - Restart backend+cuda without rebuilding llama.cpp" @echo " make docker-restart-frontend - Restart only frontend container" @echo " make docker-restart-all - Restart all Docker containers" @echo " make docker-check-cuda - Check CUDA support in containers" @echo " make docker-use-gpu - Switch to GPU configuration" @echo " make docker-use-cpu - Switch to CPU-only configuration" @echo "" @echo "$(COLOR_BOLD)All Available Commands:$(COLOR_RESET)" @echo " make help - Show this help message" @echo " make install - Install project dependencies" @echo " make test - Run tests" @echo " make format - Format code" @echo " make lint - Check code style" @echo " make all - Run format, lint and test" @if [ "$(APPLE_SILICON)" = "1" ]; then \ echo ""; \ echo "$(COLOR_GREEN)▶ PLATFORM INFORMATION:$(COLOR_RESET)"; \ echo " Apple Silicon detected - Docker commands will use PLATFORM=apple"; \ fi endif # Configuration switchers for Docker docker-use-gpu: @echo "Switching to GPU configuration..." ifeq ($(WINDOWS),1) @echo GPU mode enabled. Docker commands will use docker-compose-gpu.yml @echo gpu > .gpu_selected else @echo "$(COLOR_GREEN)GPU mode enabled. Docker commands will use docker-compose-gpu.yml$(COLOR_RESET)" @echo "gpu" > .gpu_selected endif docker-use-cpu: @echo "Switching to CPU-only configuration..." ifeq ($(WINDOWS),1) @echo CPU-only mode enabled. Docker commands will use docker-compose.yml @rm -f .gpu_selected else @echo "$(COLOR_GREEN)CPU-only mode enabled. Docker commands will use docker-compose.yml$(COLOR_RESET)" @rm -f .gpu_selected endif setup: ./scripts/setup.sh start: ./scripts/start.sh stop: ./scripts/stop.sh restart: ./scripts/restart.sh restart-backend: ./scripts/restart-backend.sh restart-force: ./scripts/restart-force.sh status: ./scripts/status.sh # Docker commands # Set Docker environment variable for all Docker commands docker-%: export IN_DOCKER_ENV=1 ifeq ($(OS),Windows_NT) DOCKER_COMPOSE_CMD := docker compose else DOCKER_COMPOSE_CMD := $(shell if command -v docker-compose >/dev/null 2>&1; then echo "docker-compose"; else echo "docker compose"; fi) endif docker-build: ifeq ($(WINDOWS),1) @echo "Prompting for CUDA preference..." @scripts\prompt_cuda.bat else @echo "Prompting for CUDA preference..." @chmod +x ./scripts/prompt_cuda.sh @./scripts/prompt_cuda.sh endif $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) build docker-up: @echo "Building and starting Docker containers..." ifeq ($(WINDOWS),1) @echo "Prompting for CUDA preference..." @scripts\prompt_cuda.bat @echo "Checking CUDA preference..." @cmd /c "if exist .gpu_selected ( echo CUDA support detected, using GPU configuration... & docker compose -f docker-compose-gpu.yml build & docker compose -f docker-compose-gpu.yml up -d ) else ( echo No CUDA support selected, using CPU-only configuration... & docker compose -f docker-compose.yml build & docker compose -f docker-compose.yml up -d )" else @echo "Prompting for CUDA preference..." @chmod +x ./scripts/prompt_cuda.sh @./scripts/prompt_cuda.sh @echo "Checking CUDA preference..." @if [ -f .gpu_selected ]; then \ echo "CUDA support detected, using GPU configuration..."; \ $(DOCKER_COMPOSE_CMD) -f docker-compose-gpu.yml build; \ $(DOCKER_COMPOSE_CMD) -f docker-compose-gpu.yml up -d; \ else \ echo "No CUDA support selected, using CPU-only configuration..."; \ $(DOCKER_COMPOSE_CMD) -f docker-compose.yml build; \ $(DOCKER_COMPOSE_CMD) -f docker-compose.yml up -d; \ fi endif @echo "Container startup complete" @echo "Check CUDA support with: make docker-check-cuda" docker-down: $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) down docker-build-backend: $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) build backend docker-build-frontend: $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) build frontend # Standard backend restart with complete rebuild docker-restart-backend: $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) stop backend $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) rm -f backend $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) build backend || { echo "$(COLOR_RED)❌ Backend build failed! Aborting operation...$(COLOR_RESET)"; exit 1; } $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) up -d backend # Fast backend restart: preserves llama.cpp build docker-restart-backend-fast: @echo "Smart restarting backend container (preserving llama.cpp build)..." @echo "Stopping backend container..." $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) stop backend @echo "Removing backend container..." $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) rm -f backend @echo "Building backend image with build-arg to skip llama.cpp build..." ifeq ($(wildcard .gpu_selected),) @echo "Using CPU configuration (docker-compose.yml)..." else @echo "Using GPU configuration (docker-compose-gpu.yml)..." endif $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) build --build-arg SKIP_LLAMA_BUILD=true backend || { echo "$(COLOR_RED)❌ Backend build failed! Aborting operation...$(COLOR_RESET)"; exit 1; } @echo "Starting backend container..." $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) up -d backend @echo "Backend container smart-restarted successfully" @echo "Check CUDA support with: make docker-check-cuda" docker-restart-frontend: $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) stop frontend $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) rm -f frontend $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) build frontend || { echo "$(COLOR_RED)❌ Frontend build failed! Aborting operation...$(COLOR_RESET)"; exit 1; } $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) up -d frontend docker-restart-all: $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) stop $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) rm -f $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) build || { echo "$(COLOR_RED)❌ Build failed! Aborting operation...$(COLOR_RESET)"; exit 1; } $(DOCKER_COMPOSE_CMD) -f $(DOCKER_COMPOSE_FILE) up -d # New command to check CUDA support in containers docker-check-cuda: @echo "Checking CUDA support in Docker containers..." ifeq ($(WINDOWS),1) @echo Running CUDA support check in backend container @docker exec second-me-backend /app/check_gpu_support.sh || echo No GPU support detected in backend container else @echo "$(COLOR_CYAN)Running CUDA support check in backend container:$(COLOR_RESET)" @docker exec second-me-backend /app/check_gpu_support.sh || echo "$(COLOR_RED)No GPU support detected in backend container$(COLOR_RESET)" endif install: poetry install test: poetry run pytest tests format: poetry run ruff format lpm_kernel/ lint: poetry run ruff check lpm_kernel/ all: format lint test