fix(ml): tolerate truncated images in WD14 and SigLIP preprocess

PIL's strict load was raising OSError on images missing the trailing
end-of-stream marker (e.g. '6 bytes not processed' on a JPEG without
its FF D9 EOI), failing the entire ML task for an image the model
could otherwise score fine. Set ImageFile.LOAD_TRUNCATED_IMAGES = True
in both ML modules so a minutely-corrupt tail doesn't block tagging
or embedding.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-04-25 22:35:03 -04:00
parent f3094ec24f
commit 8af9f12544
2 changed files with 12 additions and 2 deletions
+5 -1
View File
@@ -3,7 +3,11 @@ from __future__ import annotations
import os
import numpy as np
from PIL import Image
from PIL import Image, ImageFile
# Mirror wd14.py: tolerate minutely-truncated source images so embedding
# doesn't fail on the same images WD14 successfully tagged.
ImageFile.LOAD_TRUNCATED_IMAGES = True
# Defer torch/transformers imports to lazily-loaded functions to allow
# importing MODEL_VERSION in non-ML-worker contexts (e.g., web container
+7 -1
View File
@@ -6,7 +6,13 @@ from typing import Iterable
import numpy as np
import onnxruntime as ort
from PIL import Image
from PIL import Image, ImageFile
# Some images in the library are minutely truncated (e.g. 6 bytes short of
# the JPEG end-of-image marker). The model doesn't care about the last few
# pixels, but PIL's default strict load raises OSError. Tolerate them so a
# single corrupt tail doesn't block tagging the rest of the image.
ImageFile.LOAD_TRUNCATED_IMAGES = True
MODEL_VERSION = os.environ.get('WD14_MODEL_VERSION', 'wd-eva02-large-tagger-v3')
_MODEL_DIR = os.environ.get('ML_MODEL_DIR', '/models')