FAISS-индекс — файловый синглтон в RAM одного воркера (save на каждую запись, без блокировок, без HA, не горизонтален). Добавлен альтернативный бэкенд Qdrant с тем же classmethod-интерфейсом, выбор через VECTOR_BACKEND — аддитивно и безопасно: дефолт остаётся faiss, ничего не ломается, пока не переключат. - app/qdrant_manager.py — search/add_vectors/save(no-op)/total_vectors поверх qdrant-client (коллекция Cosine, id точки = doc_id, upsert идемпотентен); - app/vector_store.py — get_backend() по настройке; задачи search/plagiarism переведены на него (больше не импортируют FAISSManager напрямую); - app/migrate_faiss_to_qdrant.py — перелив существующих векторов (reconstruct из IndexIDMap2 → upsert), идемпотентно; - docker-compose.prod.yml — сервис qdrant под профилем `qdrant` (по умолчанию не поднимается, ресурсов не ест) + volume; README — раздел про переключение. Тесты (9) гоняют QdrantManager против ВСТРОЕННОГО Qdrant (qdrant-client :memory:, не моки) + диспетчеризацию бэкенда. Всего тестов: 82 (indexer 24, gost 24, gpu 34). Плюсы Qdrant активируются только после явного переключения + миграции. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
15 lines
518 B
Plaintext
15 lines
518 B
Plaintext
celery==5.4.0
|
|
redis==5.0.4
|
|
sqlalchemy==2.0.30
|
|
psycopg2-binary==2.9.9
|
|
sentence-transformers==3.0.0
|
|
faiss-cpu==1.8.0 # faiss-gpu нет в pip для py3.11; индексы в коде CPU-типа, GPU занят эмбеддингами (torch) и LLM (Ollama)
|
|
qdrant-client==1.19.0 # альтернативный векторный бэкенд (VECTOR_BACKEND=qdrant), снимает SPOF FAISS
|
|
torch==2.3.0
|
|
numpy==1.26.4
|
|
httpx==0.27.0
|
|
minio==7.2.7
|
|
datasketch==1.6.5
|
|
pydantic-settings==2.2.1
|
|
elasticsearch==8.13.0
|