Fix runtime GIS uploads for operator QA
GeoIntel CI / docs-smoke (push) Has been cancelled
GeoIntel CI / contract-smoke (push) Has been cancelled

This commit is contained in:
Codex
2026-07-09 14:03:38 +02:00
parent a1b33555b9
commit 7bf0757470
9 changed files with 75 additions and 5 deletions
+30
View File
@@ -5937,3 +5937,33 @@ Open:
## Next recommended pass
- Use `yolo-building-tile-uniquehardneg160` as the next safer hard-negative training dataset candidate. Benchmark after training before changing defaults.
# Sprint 151 - Runtime GIS upload and AOI1024 YOLO candidate
## What changed
- Fixed `scripts/train_operator_yolo_detector.sh` so the all-in-one image uses `/opt/geointel/venv/bin/python` by default when that AI venv exists. Explicit `PYTHON_BIN` still wins, and local shells still fall back to `python3`.
- Raised the Nginx request body limit to `250m` in both `frontend/nginx.conf` and `deploy/unraid/nginx-all-in-one.conf` after the live 1024px GeoTIFF upload path returned `413 Request Entity Too Large`.
- Kept the change runtime-only: no API contract, persistence model, migration, model-download behavior or default model selection changed.
## What was tested
- Red/green TDD guard for the training wrapper fallback:
- `python -m pytest backend\tests\test_sprint129_operator_yolo_training_dataset.py -q`
- Red/green TDD guard for real GIS upload payload support:
- `python -m pytest backend\tests\test_docker_runtime_config.py::test_nginx_runtime_allows_real_gis_upload_payloads -q`
- `bash -n scripts/train_operator_yolo_detector.sh`
- Tower live model training on `/app/storage/operator-data/yolo-building-aoi1024-visible025`:
- output model: `/app/models/geointel-building-yolov8s-aoi1024visible025e50.pt`
- model asset id: `geointel-building-yolov8s-aoi1024visible025e50-pt`
- final Ultralytics validation: precision approximately `0.275`, recall `0.331`, mAP50 `0.188`, mAP50-95 `0.0716`
## Known limitations
- The AOI1024 tile audit is still `needs_attention`: median normalized box area is below gate and small-box share remains high.
- Several dense 1024 GRB reference exports reached the current 1000-feature source cap. Treat those samples as useful but potentially reference-capped until the provider query path supports paging or smaller dense AOIs are chosen.
- The trained model is intentionally inactive. It needs persisted detection QA/QC matrix evidence and background/hard-negative evidence before default promotion.
## Next recommended pass
- Rebuild/deploy the runtime upload-limit fix, rerun the four-sample AOI1024 persisted QA matrix, then decide whether label/source paging or additional AOI quality work comes before another training run.
+5 -1
View File
@@ -464,4 +464,8 @@ This file now starts with the current implementation status. Older preparation/b
- [x] Prepare the new samples on Tower and build a fresh hard-negative tile dataset.
- [x] Rebuild Tower all-in-one image so the newly copied operator scripts are available inside `/app/scripts` without `docker cp`.
- [x] Fix YOLO preflight CLI so it respects Tower `.env` runtime configuration.
- [ ] Train a new candidate from `yolo-building-tile-uniquehardneg160` and run the positive/background promotion gates before activating it.
- [x] Train a new inactive AOI1024 YOLOv8s candidate with visible-label filtering.
- [x] Fix the all-in-one/compose Nginx upload limit after live 1024px GeoTIFF uploads hit `413 Request Entity Too Large`.
- [ ] Rerun persisted QA/QC matrix for `geointel-building-yolov8s-aoi1024visible025e50-pt` after redeploying the upload-limit fix.
- [ ] Add GRB paging or smaller dense AOI sampling before trusting 1000-feature-capped dense reference exports as full ground truth.
- [ ] Keep every local YOLO candidate inactive until positive-AOI and hard-negative promotion reports recommend default activation.