- libs/ai-services: new POST /neighborhood/score router computing weighted 6-axis livability score from per-category POI counts; algorithm versioned for future iteration (sigmoid curves, percentile thresholds). - apps/api: HttpNeighborhoodScoreService proxies to Python first, falls back to PrismaNeighborhoodScoreService when AI service unavailable. Mirrors the HttpAVMService pattern. Existing GET /analytics/neighborhoods/:district/score endpoint and CQRS handler now flow through the proxy. - AnalyticsModule binds Http variant by default, retains Prisma variant as injectable fallback. - Tests: 5 pytest cases for Python heuristic, 4 vitest cases for HTTP proxy fallback behaviour. Co-Authored-By: Paperclip <noreply@paperclip.ing>
@goodgo/ai-services
Python FastAPI AI/ML microservice for the GoodGo Platform.
Services
| Service | Router | Description |
|---|---|---|
| AVM | /avm |
Automated Valuation Model — XGBoost-based property price predictions |
| Moderation | /moderation |
Content moderation for listings (text + image analysis) |
| NLP | /nlp |
Vietnamese NLP — feature extraction, search query understanding |
Tech Stack
- Python 3.12+
- FastAPI 0.115 + Uvicorn
- XGBoost 2.1 (property valuation model)
- Underthesea 6.8 (Vietnamese NLP tokenizer)
- Pydantic 2.9 (request/response schemas)
Quick Start
# Via Docker (recommended — runs as part of the platform stack)
docker compose up -d ai-services
# Standalone
cd libs/ai-services
pip install -e ".[dev]"
uvicorn app.main:app --reload --port 8000
Project Structure
libs/ai-services/
├── app/
│ ├── main.py # FastAPI app entry point
│ ├── config.py # Settings (Pydantic BaseSettings)
│ ├── middleware.py # CORS, rate limiting, error handling
│ ├── models/ # Pydantic request/response schemas
│ │ ├── avm.py
│ │ ├── moderation.py
│ │ └── nlp.py
│ ├── routers/ # API route handlers
│ │ ├── avm.py
│ │ ├── moderation.py
│ │ └── nlp.py
│ └── services/ # Business logic
│ ├── avm_service.py
│ ├── moderation_service.py
│ └── nlp_service.py
├── tests/ # pytest test suite
├── Dockerfile # Production container image
└── pyproject.toml # Dependencies and config
Testing
cd libs/ai-services
pytest
Health Check
GET /health → {"status": "ok"}