File size: 4,304 Bytes
211e423
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34c6057
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
.PHONY: help install dev test lint format clean run

help: ## Show this help message
	@echo "KYB Tech Dots.OCR - Development Commands"
	@echo "=========================================="
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'

install: ## Install the package
	uv pip install -e .

dev: ## Install development dependencies
	uv pip install -e .[dev]

test: ## Run tests
	pytest

test-verbose: ## Run tests with verbose output
	pytest -v

lint: ## Run linting
	ruff check .
	mypy src/

format: ## Format code
	black .
	ruff check --fix .

clean: ## Clean up build artifacts
	rm -rf build/
	rm -rf dist/
	rm -rf *.egg-info/
	rm -rf .pytest_cache/
	rm -rf .mypy_cache/
	rm -rf .ruff_cache/
	find . -type d -name __pycache__ -exec rm -rf {} +
	find . -type f -name "*.pyc" -delete

run: ## Run the application
	python main.py

run-dev: ## Run the application in development mode
	uvicorn src.kybtech_dots_ocr.app:app --host 0.0.0.0 --port 7860 --reload

setup: ## Set up development environment
	python setup_dev.py

check: ## Run all checks (lint, format, test)
	$(MAKE) lint
	$(MAKE) test

build: ## Build the Docker image
	docker build -t kybtech-dots-ocr .

# Build for Hugging Face Spaces GPU (CUDA, optional flash-attn)
build-spaces-gpu: ## Build Docker image for HF Spaces GPU
	# Use CUDA runtime base; leave flash-attn on by default (can disable with ARGS)
	docker build \
		--build-arg BASE_IMAGE=pytorch/pytorch:2.7.0-cuda12.6-cudnn9-runtime \
		--build-arg INSTALL_FLASH_ATTN=true \
		-t kybtech-dots-ocr:spaces-gpu .

# Build for local Apple Silicon CPU (no CUDA, no flash-attn)
build-local-cpu: ## Build Docker image for local CPU (arm64)
	docker build \
		--platform=linux/arm64 \
		--build-arg BASE_IMAGE=python:3.12-slim \
		--build-arg INSTALL_FLASH_ATTN=false \
		-t kybtech-dots-ocr:cpu .

run-docker: ## Run the Docker container locally
	docker run -p 7860:7860 kybtech-dots-ocr

deploy-staging: ## Deploy to staging (requires HF CLI)
	@echo "Deploying to staging..."
	@echo "Make sure you have HF CLI installed and are logged in"
	@echo "Then push to your staging space repository"

deploy-production: ## Deploy to production (requires HF CLI)
	@echo "Deploying to production..."
	@echo "Make sure you have HF CLI installed and are logged in"
	@echo "Then push to your production space repository"

test-local: ## Test the local API endpoint
	cd scripts && ./run_tests.sh -e local

test-production: ## Test the production API endpoint
	cd scripts && ./run_tests.sh -e production

test-staging: ## Test the staging API endpoint
	cd scripts && ./run_tests.sh -e staging

test-quick: ## Quick test with curl (no Python dependencies)
	cd scripts && ./test_production_curl.sh

logs: ## Show application logs (if running in Docker)
	docker logs -f kybtech-dots-ocr

stop: ## Stop the Docker container
	docker stop kybtech-dots-ocr || true

clean-docker: ## Clean up Docker images and containers
	docker stop kybtech-dots-ocr || true
	docker rm kybtech-dots-ocr || true
	docker rmi kybtech-dots-ocr || true

# -----------------------------
# Debug testing helpers
# -----------------------------
.PHONY: debug-test-local debug-test-hf debug-test

debug-test-local: ## Run debug curl test against local server
	./scripts/test_debug_ocr.sh -u http://localhost:7860 -f scripts/tom_id_card_front.jpg -d

debug-test-hf: ## Run debug curl test against HF Space (set HF_URL var)
	@if [ -z "$(HF_URL)" ]; then echo "HF_URL not set. Example: make debug-test-hf HF_URL=https://your-space.hf.space"; exit 1; fi
	./scripts/test_debug_ocr.sh -u $(HF_URL) -f scripts/tom_id_card_front.jpg -d

# debug-test allows overriding URL/FILE/ROI/DEBUG via envs
# Example:
#   make debug-test URL=https://space.hf.space FILE=scripts/tom_id_card_front.jpg ROI='{"x1":0,"y1":0,"x2":1,"y2":0.5}' DEBUG=1

debug-test: ## Run debug curl test with overrides: URL, FILE, ROI, DEBUG
	@URL=${URL:-http://localhost:7860} \
	FILE=${FILE:-scripts/tom_id_card_front.jpg} \
	ROI=${ROI:-} \
	DBG=${DEBUG:-0} \
	sh -c '\
	  CMD="./scripts/test_debug_ocr.sh -u $$URL -f $$FILE"; \
	  if [ "$$DBG" = "1" ]; then CMD="$$CMD -d"; fi; \
	  if [ -n "$$ROI" ]; then CMD="$$CMD -r '$$ROI'"; fi; \
	  echo "Running: $$CMD"; \
	  eval $$CMD \
	'