FROM nvidia/cuda:12.1.0-cudnn8-runtime-ubuntu22.04

# Установить Python 3.11
RUN apt-get update && apt-get install -y --no-install-recommends \
    python3.11 \
    python3.11-dev \
    python3-pip \
    python3.11-distutils \
    gcc \
    g++ \
    libpq-dev \
    curl \
    && rm -rf /var/lib/apt/lists/*

# Сделать python3.11 дефолтным и поставить pip именно для 3.11 (на CUDA-базе
# python3-pip ставит pip для системного python3.10 — он не виден из python3.11)
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1 && \
    update-alternatives --install /usr/bin/python python /usr/bin/python3.11 1 && \
    curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir --timeout 60 -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt

COPY . .

# Директория для FAISS индекса (монтируется как volume)
RUN mkdir -p /data/index

# -c 1 обязателен, пока VECTOR_BACKEND=faiss: индекс — синглтон в памяти процесса
# (app/faiss_manager.py). При -c N Celery форкает N процессов, у каждого своя копия
# индекса, и save() каждого затирает чужие векторы в общем файле — эмбеддинги
# теряются молча. Параллельность тут всё равно не нужна: Ollama занимает все ядра
# сервера обработкой одного запроса (замер: 2.29 req/s при конкурентности 1 против
# 2.48 при 16). Поднимать -c имеет смысл только вместе с VECTOR_BACKEND=qdrant,
# который допускает конкурентную запись.
CMD ["celery", "-A", "app.celery_app", "worker", "-Q", "queue.gpu", "-c", "1", "-n", "gpu@%h", "--loglevel=info"]
