pg_orrery/search/Makefile
Ryan Malloy 317f74b33b Add search backend: FastAPI + FastMCP + pgvector for docs Q&A and live SQL
Search stack replicates the Hamilton site pattern with pg_orrery-specific
additions:

- FastAPI REST API (chat SSE streaming, semantic search, health check)
- FastMCP server at /mcp with doc search and live SQL query tools
- pgvector + pgai vectorizer for 1024-dim document embeddings
- Hybrid search (semantic cosine + text ILIKE with pg_trgm GIN)
- Dual LLM backend: self-hosted qwen3 via GPU gateway or Anthropic Claude
- Live read-only pg_orrery SQL execution with safety guardrails
  (SELECT-only validation, read-only transaction, 5s timeout, 100-row cap)
- Convenience MCP tools: planet_position, sky_survey, satellite_pass
- MDX content ingestion from docs/src/content/docs/ (50 pages)
- Docker Compose: pg_orrery+pgvector DB, pgai, vectorizer-worker, API
- Alembic async migrations, Makefile, .env.example
2026-03-01 15:42:14 -07:00

58 lines
1.2 KiB
Makefile

.PHONY: dev prod build logs down clean restart migrate ingest shell status
.DEFAULT_GOAL := dev
# Development mode with hot reload
dev:
@echo "Starting pg_orrery Search in development mode..."
docker compose --profile dev up -d --build
@sleep 3
docker compose logs -f
# Production mode
prod:
@echo "Starting pg_orrery Search in production mode..."
docker compose --profile prod up -d --build
@sleep 3
docker compose logs -f
# Build without starting
build:
docker compose build
# View logs
logs:
docker compose logs -f
# Stop containers
down:
docker compose down
# Clean up containers, images, volumes
clean:
docker compose down -v --rmi local
# Restart
restart: down dev
# Run database migrations
migrate:
docker compose exec api-dev alembic upgrade head
# Run content ingestion
ingest:
docker compose exec api-dev python -m orrery_search.ingest
# Shell into running API container
shell:
docker compose exec api-dev bash
# Check vectorizer status
status:
docker compose exec db psql -U orrery -d orrery_search -c "SELECT * FROM ai.vectorizer_status;"
# Test search
test-search:
@echo "Testing search API..."
curl -s "https://$$(grep DOMAIN .env | cut -d= -f2)/api/search?q=satellite+tracking" | python3 -m json.tool