Spaces:
Running
Running
File size: 4,955 Bytes
1e732dd 696f787 1e732dd 696f787 1e732dd 696f787 1e732dd | 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 134 135 136 137 138 139 140 | # ===========================================================================
# MediGuard AI β Makefile
# ===========================================================================
# Usage:
# make help β show all targets
# make setup β install deps + pre-commit hooks
# make dev β run API in dev mode with reload
# make test β run full test suite
# make lint β ruff check + mypy
# make docker-up β spin up all Docker services
# make docker-down β tear down Docker services
# ===========================================================================
.DEFAULT_GOAL := help
SHELL := /bin/bash
# Python / UV
PYTHON ?= python
UV ?= uv
PIP ?= pip
# Docker
COMPOSE := docker compose
# ---------------------------------------------------------------------------
# Help
# ---------------------------------------------------------------------------
.PHONY: help
help: ## Show this help
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
# ---------------------------------------------------------------------------
# Setup
# ---------------------------------------------------------------------------
.PHONY: setup
setup: ## Install all deps (pip) + pre-commit hooks
$(PIP) install -e ".[all]"
pre-commit install
.PHONY: setup-uv
setup-uv: ## Install all deps with UV
$(UV) pip install -e ".[all]"
pre-commit install
# ---------------------------------------------------------------------------
# Development
# ---------------------------------------------------------------------------
.PHONY: dev
dev: ## Run API in dev mode (auto-reload)
uvicorn src.main:app --host 0.0.0.0 --port 8000 --reload
.PHONY: gradio
gradio: ## Launch Gradio web UI
$(PYTHON) -m src.gradio_app
.PHONY: telegram
telegram: ## Start Telegram bot
$(PYTHON) -c "from src.services.telegram.bot import MediGuardTelegramBot; MediGuardTelegramBot().run()"
# ---------------------------------------------------------------------------
# Quality
# ---------------------------------------------------------------------------
.PHONY: lint
lint: ## Ruff check + MyPy
ruff check src/ tests/
mypy src/ --ignore-missing-imports
.PHONY: format
format: ## Ruff format
ruff format src/ tests/
ruff check --fix src/ tests/
.PHONY: test
test: ## Run pytest with coverage
pytest tests/ -v --tb=short --cov=src --cov-report=term-missing
.PHONY: test-quick
test-quick: ## Run only fast unit tests
pytest tests/ -v --tb=short -m "not slow"
# ---------------------------------------------------------------------------
# Docker
# ---------------------------------------------------------------------------
.PHONY: docker-up
docker-up: ## Start all Docker services (detached)
$(COMPOSE) up -d
.PHONY: docker-down
docker-down: ## Stop and remove Docker services
$(COMPOSE) down -v
.PHONY: docker-build
docker-build: ## Build Docker images
$(COMPOSE) build
.PHONY: docker-logs
docker-logs: ## Tail Docker logs
$(COMPOSE) logs -f
# ---------------------------------------------------------------------------
# Database
# ---------------------------------------------------------------------------
.PHONY: db-upgrade
db-upgrade: ## Run Alembic migrations
alembic upgrade head
.PHONY: db-revision
db-revision: ## Create a new Alembic migration
alembic revision --autogenerate -m "$(msg)"
# ---------------------------------------------------------------------------
# Indexing
# ---------------------------------------------------------------------------
.PHONY: index-pdfs
index-pdfs: ## Parse and index all medical PDFs
$(PYTHON) -c "\
from pathlib import Path; \
from src.services.pdf_parser.service import make_pdf_parser_service; \
from src.services.indexing.service import IndexingService; \
from src.services.indexing.text_chunker import MedicalTextChunker; \
from src.services.embeddings.service import make_embedding_service; \
from src.services.opensearch.client import make_opensearch_client; \
parser = make_pdf_parser_service(); \
chunker = MedicalTextChunker(); \
idx = IndexingService(chunker, make_embedding_service(), make_opensearch_client()); \
docs = parser.parse_directory(Path('data/medical_pdfs')); \
[idx.index_text(d.full_text, title=d.filename, source_file=d.filename) for d in docs if d.full_text]; \
print(f'Indexed {len(docs)} documents')"
# ---------------------------------------------------------------------------
# Clean
# ---------------------------------------------------------------------------
.PHONY: clean
clean: ## Remove build artifacts and caches
find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
find . -type d -name .pytest_cache -exec rm -rf {} + 2>/dev/null || true
find . -type d -name .mypy_cache -exec rm -rf {} + 2>/dev/null || true
find . -type d -name .ruff_cache -exec rm -rf {} + 2>/dev/null || true
rm -rf dist/ build/ *.egg-info
|