# Опциональные зависимости ИИ-ПОИСКА по архиву (CLIP): pip install -r requirements-ai.txt
# (детекция объектов работает без этого пакета — onnxruntime уже в базовых)
# Ставится ~2 ГБ (torch CPU).
#
# ПАМЯТЬ. Замер 20.09.2026: импорт torch+open_clip+transformers — +352 МБ,
# токенизатор ещё +365, а с весами модели процесс доходит до 2.3–2.5 ГБ. На
# машине с 4 ГБ (наш стенд) модель НЕ помещается и уходит в свап, поэтому
# ИИ-поиску нужно от 8 ГБ памяти. Модель живёт в процессе ДЕТЕКТОРОВ, и её
# нехватка памяти остановила бы детекцию всех камер — отсюда порог
# ai.min_free_mb (3000 МБ), ниже которого поиск честно откажет.
#
# ПРО ОФЛАЙН. При первом использовании качаются ДВЕ разные вещи: веса модели
# (~1.4 ГБ) и ОТДЕЛЬНО токенизатор её текстовой башни. Для сервера без интернета
# перенести с другой машины надо весь кэш ~/.cache/huggingface — одних весов
# мало. Замер 20.09.2026 на стенде: в кэше лежал только
# open_clip_model.safetensors, токенизатора не было вовсе.
--extra-index-url https://download.pytorch.org/whl/cpu
torch>=2.2
open_clip_torch>=2.24
# transformers — НЕ роскошь и не «на будущее». Текстовая башня модели по
# умолчанию (ai.model = xlm-roberta-base-ViT-B-32, мультиязычная и выбранная
# ровно ради русских промтов) — это HuggingFace-модель, и без пакета
# create_model_and_transforms падает с «Please pip install transformers to use
# pre-trained HuggingFace models». Пакета не было с самого появления ИИ-поиска,
# то есть он не работал бы ни у одного заказчика, купившего ai_search, а наружу
# это вышло бы единственной строкой error в /api/search/status (замер 20.09).
# Экстра sentencepiece — как объявляет сам open_clip у себя
# (transformers[sentencepiece]): токенизатор xlm-roberta sentencepiece-овый.
transformers[sentencepiece]>=4.36
pillow>=10.0
numpy>=1.26
