Files
goodgo-platform/libs/ai-services
Ho Ngoc Hai 2c1e3771e9 feat(analytics): add Python NeighborhoodScore service + NestJS HTTP proxy (TEC-2756)
- 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>
2026-04-18 15:07:02 +07:00
..

@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"}