- Add POST /avm/v2/upload-training-data so AvmRetrainCronService can push
CSV rows before triggering retraining (was called but missing)
- Add per-district MAE/MAPE/RMSE/R² to _evaluate_ensemble output;
district_metrics are now returned in AVMv2TrainResponse and stored
separately from global metrics in the model registry
- Add predict_with_ab() that applies the active model's ab_test_traffic_pct
for deterministic per-property cohort assignment (v2 vs heuristic baseline)
- Add POST /avm/v2/ab-config to set traffic_pct on the active registry entry
- Add AVMv2ABConfigRequest schema
- Expand test suite: 24 → 28 tests covering upload, A/B config, and new
validation paths; all green
Co-Authored-By: Paperclip <noreply@paperclip.ing>