Files
geotech/Makefile

164 lines
4.8 KiB
Makefile

# Makefile for Geotechnical Layer Extractor
.PHONY: help setup single test-optimizer clean test info
.DEFAULT_GOAL := help
# Variables
PYTHON := python3
VENV := venv
VENV_BIN := $(VENV)/bin
PIP := $(VENV_BIN)/pip
PYTHON_VENV := $(VENV_BIN)/python
# Optimizer variables
EXAMPLES_DIR ?= examples
EXPECTED_DIR ?= output_man
help:
@echo "🪨 Geotechnical Layer Extractor"
@echo "================================"
@echo ""
@echo "📦 Setup:"
@echo " make setup - Install all dependencies and create venv"
@echo ""
@echo "🚀 Running:"
@echo " make single PDF= - Extract layers from a single PDF"
@echo " make test-optimizer - Run prompt optimization on test PDFs"
@echo ""
@echo "🧹 Maintenance:"
@echo " make clean - Clean all generated files"
@echo " make test - Test Azure connections"
@echo " make info - Show system information"
@echo ""
@echo "Examples:"
@echo " make single PDF=document.pdf"
@echo " make single PDF=examples/sample.pdf"
@echo " make test-optimizer"
# Create virtual environment
venv:
@echo "🐍 Creating virtual environment..."
@$(PYTHON) -m venv $(VENV)
@echo "✅ Virtual environment created!"
# Setup - Install all dependencies
setup: venv
@echo "📦 Installing dependencies..."
@$(PIP) install --upgrade pip
@$(PIP) install -r requirements.txt
@mkdir -p output
@mkdir -p output_man
@mkdir -p examples
@echo "✅ Setup complete!"
@echo ""
@echo "⚠️ Don't forget to:"
@echo "1. Add your Azure keys in the scripts"
@echo "2. Add test PDFs in examples/ folder"
@echo "3. Add expected results in output_man/ folder"
# Extract layers from a single PDF
single:
@if [ -z "$(PDF)" ]; then \
echo "❌ Please provide a PDF file: make single PDF=your_file.pdf"; \
exit 1; \
fi
@if [ ! -f "$(PDF)" ]; then \
echo "❌ File not found: $(PDF)"; \
exit 1; \
fi
@if [ ! -f "extract_single.py" ]; then \
echo "❌ extract_single.py not found!"; \
exit 1; \
fi
@echo "🚀 Extracting layers from: $(PDF)"
@$(PYTHON_VENV) extract_single.py "$(PDF)" --pretty
# Run prompt optimizer
test-optimizer:
@echo "🔬 Running Prompt Optimizer"
@echo "=============================="
@echo "📁 Examples directory: $(EXAMPLES_DIR)"
@echo "📁 Expected results: $(EXPECTED_DIR)"
@echo ""
@if [ ! -f "prompt_optimizer.py" ]; then \
echo "❌ prompt_optimizer.py not found!"; \
exit 1; \
fi
@if [ ! -d "$(EXAMPLES_DIR)" ]; then \
echo "❌ Examples directory not found: $(EXAMPLES_DIR)"; \
echo "💡 Create it with: mkdir -p $(EXAMPLES_DIR)"; \
exit 1; \
fi
@if [ ! -d "$(EXPECTED_DIR)" ]; then \
echo "❌ Expected results directory not found: $(EXPECTED_DIR)"; \
echo "💡 Create it with: mkdir -p $(EXPECTED_DIR)"; \
exit 1; \
fi
@echo "🚀 Starting optimization..."
@$(PYTHON_VENV) prompt_optimizer.py \
--examples-dir $(EXAMPLES_DIR) \
--expected-dir $(EXPECTED_DIR)
# Test Azure connections
test:
@echo "🧪 Testing Azure connections..."
@$(PYTHON_VENV) -c "from azure.ai.formrecognizer import DocumentAnalysisClient; \
from azure.core.credentials import AzureKeyCredential; \
from openai import AzureOpenAI; \
print('✅ Azure imports successful')"
@echo "✅ All imports working!"
# Clean all generated files
clean:
@echo "🧹 Cleaning all files..."
@rm -rf $(VENV)
@rm -rf __pycache__ */__pycache__
@rm -rf .pytest_cache
@rm -rf *.pyc */*.pyc
@rm -rf output/*.json output/*.txt output/*.html
@rm -rf *.log
@rm -rf test_results.json
@find . -type f -name ".DS_Store" -delete 2>/dev/null || true
@echo "✅ Clean complete!"
# Show system information
info:
@echo "📊 System Information:"
@echo "======================"
@echo "OS: $$(uname -s)"
@echo "Python: $$($$(which $(PYTHON)) --version)"
@if [ -d "$(VENV)" ]; then \
echo "Virtual env: ✅ $(VENV) exists"; \
echo "Pip version: $$($(PIP) --version 2>/dev/null || echo 'N/A')"; \
else \
echo "Virtual env: ❌ Not created (run 'make setup')"; \
fi
@echo ""
@echo "📁 Project structure:"
@if [ -f "extract_single.py" ]; then \
echo "✅ extract_single.py found"; \
else \
echo "❌ extract_single.py missing"; \
fi
@if [ -f "prompt_optimizer.py" ]; then \
echo "✅ prompt_optimizer.py found"; \
else \
echo "❌ prompt_optimizer.py missing"; \
fi
@echo ""
@echo "📁 Directories:"
@if [ -d "output" ]; then \
echo "✅ output/ exists ($$(ls -1 output/ 2>/dev/null | wc -l | tr -d ' ') files)"; \
else \
echo "❌ output/ not found"; \
fi
@if [ -d "$(EXAMPLES_DIR)" ]; then \
echo "$(EXAMPLES_DIR)/ exists ($$(ls -1 $(EXAMPLES_DIR)/*.pdf 2>/dev/null | wc -l | tr -d ' ') PDFs)"; \
else \
echo "$(EXAMPLES_DIR)/ not found"; \
fi
@if [ -d "$(EXPECTED_DIR)" ]; then \
echo "$(EXPECTED_DIR)/ exists ($$(ls -1 $(EXPECTED_DIR)/*_layers.json 2>/dev/null | wc -l | tr -d ' ') JSON files)"; \
else \
echo "$(EXPECTED_DIR)/ not found"; \
fi