Add POST /avm/v2/compare-v1 endpoint that runs both v1 (single-model) and v2 (ensemble) AVM predictions on the same property and returns a side-by-side comparison with price diff, confidence delta, and a recommendation on which model to prefer. - ABComparisonRequest/Response schemas in avm_v2 models - compare_v1() method in AVMv2EnsembleService - 4 new integration tests for the comparison endpoint - All 47 Python tests pass 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"}