_get_list_inner (Pydantic) and _resolve_ts_list (TypeScript) collapsed
nested generics to "str" / "string[]" — so List[List[int]] became
List[str] and List[Dict[str,Any]] became List[str]. Fix recurses on
list-of-list and falls back to Dict[str,Any] / Record<string,unknown>
for list-of-dict.
Regenerated outputs:
- core/gpu/models/models.py: SegmentFieldResponse.boundary now
List[List[int]], unblocking /segment_field which was 500ing on every
request with pydantic ValidationError
- core/db/models.py + ui/common/types/generated.ts: Brand.airings now
matches its source schema (List[Dict[str,Any]] / Record<string,unknown>[])
- root pyproject.toml replaces requirements.txt and requirements-worker.txt
(worker = root + ffmpeg-python which root already had); test deps moved
to [dependency-groups] dev
- core/gpu/pyproject.toml replaces core/gpu/requirements.txt; uses
[tool.uv.sources] to pin torch/torchvision and paddlepaddle-gpu to their
CUDA index URLs, replacing the manual reinstall dance from old comments
- Dockerfiles use uv sync --frozen against uv.lock for reproducible builds;
PATH includes /app/.venv/bin so k8s manifests' bare uvicorn/celery
commands resolve without wrapping in uv run
- core/gpu/run.sh local mode now does uv sync + uv run python server.py;
errors out cleanly if uv is missing