""" ONNX Runtime backend — default CPU inference for all vision models. Each create_* method returns a concrete implementation of the corresponding ABC from base.py. Models are loaded from ONNX files under settings.vision.models_dir, downloaded on first boot by bootstrap_models.py. """ import logging from app.config import VisionSettings from app.services.vision.base import Embedder, OCREngine, ObjectDetector, FaceProcessor, ContentClassifier logger = logging.getLogger(__name__) class ONNXBackend: """Factory for ONNX Runtime-based vision model instances.""" def __init__(self, vision_settings: VisionSettings): self._settings = vision_settings def create_embedder(self) -> Embedder: model_name = self._settings.embedder.name if model_name.startswith("siglip2"): from app.services.vision.embed import SigLIP2Embedder return SigLIP2Embedder(self._settings) else: from app.services.vision.embed import OpenCLIPEmbedder return OpenCLIPEmbedder(self._settings) def create_ocr(self) -> OCREngine: from app.services.vision.ocr import RapidOCREngine return RapidOCREngine(self._settings) def create_detector(self) -> ObjectDetector: from app.services.vision.detect import YOLOv8Detector return YOLOv8Detector(self._settings) def create_face_processor(self) -> FaceProcessor: from app.services.vision.insightface_processor import InsightFaceProcessor return InsightFaceProcessor(self._settings) def create_classifier(self) -> ContentClassifier: from app.services.vision.classify import CLIPContentClassifier return CLIPContentClassifier(self._settings)