From 111b9525357901d2d9570941902c2b3ee1f1f857 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Mon, 25 May 2026 17:31:06 -0400 Subject: [PATCH] =?UTF-8?q?fix(ml):=20load=20SigLIP=20image-only=20process?= =?UTF-8?q?or=20to=20avoid=20SentencePiece=20dep=20=E2=80=94=20Co-Authored?= =?UTF-8?q?-By:=20Claude=20Opus=204.7=20(1M=20context)=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/services/ml/embedder.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/backend/app/services/ml/embedder.py b/backend/app/services/ml/embedder.py index 49c40f4..5da36c5 100644 --- a/backend/app/services/ml/embedder.py +++ b/backend/app/services/ml/embedder.py @@ -34,10 +34,21 @@ class Embedder: if self._model is not None: return import torch - from transformers import AutoModel, AutoProcessor + from transformers import AutoModel, SiglipImageProcessor self._torch = torch - self._processor = AutoProcessor.from_pretrained(str(self._model_dir)) + # FC's embedder only does IMAGE inference — never text. AutoProcessor + # loads the full processor including SiglipTokenizer, which requires + # the sentencepiece library at import time even if we never call it. + # SiglipImageProcessor loads ONLY preprocessor_config.json (image + # side) and skips the tokenizer config entirely. Operator hit the + # ImportError 2026-05-25 once the ml-worker started actually running + # tag_and_embed; switching to the image-only loader avoids the + # tokenizer dep without adding ~30 MB of unused C++ build to the + # lean ml-worker image. + self._processor = SiglipImageProcessor.from_pretrained( + str(self._model_dir) + ) self._model = AutoModel.from_pretrained(str(self._model_dir)) self._model.eval()