Drops face recognition, OCR, object detection, and semantic embeddings. The sole remaining vision task is a CLIP-based binary classifier (photography vs other); photos in "other" get needs_review=true so screenshots, documents, memes and scans can be triaged from a new filter pill in the UI. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
30 lines
806 B
Python
30 lines
806 B
Python
"""
|
|
ModelRegistry — lazy-loads the single content classifier per worker.
|
|
"""
|
|
import logging
|
|
from functools import lru_cache
|
|
|
|
from app.config import settings
|
|
from app.services.vision.base import ContentClassifier
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class ModelRegistry:
|
|
def __init__(self):
|
|
self._vision = settings.vision
|
|
|
|
@lru_cache(maxsize=1)
|
|
def get_classifier(self) -> ContentClassifier:
|
|
logger.info("Loading content classifier (backend=%s)", self._vision.backend)
|
|
from app.services.vision.classify import CLIPContentClassifier
|
|
return CLIPContentClassifier(self._vision)
|
|
|
|
def warmup(self):
|
|
logger.info("Warming up vision classifier...")
|
|
self.get_classifier()
|
|
logger.info("Vision warmup complete")
|
|
|
|
|
|
registry = ModelRegistry()
|