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
58 lines
1.2 KiB
Makefile
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
|