File size: 2,813 Bytes
96bba34 | 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 | .DEFAULT_GOAL := help
.PHONY: help install notebook preprocess baseline train-lstm train-transformer train-vae tune-vae evaluate compare serve web dev artifacts mlflow-ui lint clean docker-build docker-up docker-down docker-logs
PROCESSED_DIR ?= data/processed
MODELS_DIR ?= models
VAE_CHECKPOINT ?= $(MODELS_DIR)/vae_lstm.pt
SCALER ?= $(PROCESSED_DIR)/scaler.npz
help: ## Show this help
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-14s\033[0m %s\n", $$1, $$2}'
install: ## Create the Python environment with uv
uv sync
notebook: ## Open Jupyter for the notebooks (EDA, etc.)
uv run jupyter lab
preprocess: ## Run the preprocessing pipeline (raw -> tensors)
uv run sadar-preprocess
baseline: ## Fit and evaluate the Isolation Forest baseline
uv run sadar-baseline
train-lstm: ## Train the LSTM autoencoder on the normal flights
uv run sadar-train-lstm
train-transformer: ## Train the Transformer autoencoder on the normal flights
uv run sadar-train-transformer
train-vae: ## Train the VAE-LSTM on the normal flights
uv run sadar-train-vae
tune-vae: ## Search VAE-LSTM hyperparameters with Optuna
uv run sadar-tune-vae
evaluate: ## Evaluate a trained autoencoder against synthetic anomalies
uv run sadar-evaluate
compare: ## Compare every detector and select the final model
uv run sadar-compare
artifacts: ## Ensure the preprocessed tensors and the VAE checkpoint exist
@if [ ! -f "$(SCALER)" ]; then \
echo "[artifacts] $(SCALER) missing, running preprocess..."; \
$(MAKE) preprocess; \
fi
@if [ ! -f "$(VAE_CHECKPOINT)" ]; then \
echo "[artifacts] $(VAE_CHECKPOINT) missing, trying to restore from MLflow..."; \
uv run python -m sadar.models.restore || true; \
fi
@if [ ! -f "$(VAE_CHECKPOINT)" ]; then \
echo "[artifacts] still missing, training VAE-LSTM..."; \
$(MAKE) train-vae; \
fi
serve: artifacts ## Run the inference API for the dashboard
uv run uvicorn sadar.serve.app:app --port 8000
web: ## Run the frontend dev server (Vite)
pnpm -C frontend dev
dev: artifacts ## Run the backend API and the frontend dev server together
@trap 'kill 0' EXIT; uv run uvicorn sadar.serve.app:app --port 8000 & pnpm -C frontend dev
mlflow-ui: ## Open the MLflow experiment tracking UI
uv run mlflow ui --backend-store-uri file:mlruns
lint: ## Python linter
uv run ruff check src
clean: ## Clean caches and artifacts
rm -rf .ruff_cache **/__pycache__
docker-build: ## Build the backend and frontend container images
docker compose build
docker-up: ## Start the stack in the background (backend on :8000, frontend on :5180)
docker compose up -d
docker-down: ## Stop the stack and remove the containers
docker compose down
docker-logs: ## Tail the logs of the running stack
docker compose logs -f
|