# Phase 2 als Container.
#
#   podman build -t wurzelwerk-p2 .
#
# Debian trixie wie der Postgres-Container - dieselbe glibc, dieselbe
# Zeichensortierung. Fuer die Module ohne Modell spielt das keine Rolle,
# fuer kuenftige Vergleiche in der Datenbank schon.
FROM docker.io/library/python:3.13-slim-trixie

# OMP_NUM_THREADS ist keine Bequemlichkeit, sondern Voraussetzung:
#   - PyTorch liest die CPU-Zahl am Host ab, nicht die cgroup-Quota. Ohne
#     feste Zahl startet es im Container mehr Threads als es Kontingent hat.
#   - Die Threadzahl bestimmt die Reihenfolge der Gleitkommaadditionen und
#     damit die letzten Stellen jedes Vektors. Sie gehoert deshalb in die
#     coder_version (siehe embeddings.py).
# 4 laeuft auf jeder Maschine, die hier in Frage kommt - Prod hat 16 Threads,
# die Entwicklungsmaschine 32.
ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    HF_HOME=/cache/huggingface \
    OMP_NUM_THREADS=4 \
    MKL_NUM_THREADS=4 \
    TOKENIZERS_PARALLELISM=false

WORKDIR /app

# torch zuerst und in einer eigenen Schicht: 196 MB, die sich nicht aendern,
# wenn eine Anforderungsdatei angefasst wird. Ausdruecklich aus dem CPU-Index -
# die Vorgabe von PyPI zoege mehrere Gigabyte CUDA-Bibliotheken nach, die auf
# diesem Server nichts ausrichten koennen (der SM750 ist ein Anzeigechip).
RUN python3 -m pip install --no-cache-dir --upgrade pip \
 && python3 -m pip install --no-cache-dir \
        --index-url https://download.pytorch.org/whl/cpu torch==2.14.0+cpu

COPY requirements.txt requirements-embedding.txt ./
RUN python3 -m pip install --no-cache-dir -r requirements.txt \
 && python3 -m pip install --no-cache-dir -r requirements-embedding.txt \
 && python3 -m pip freeze > /app/requirements-lock.txt

COPY *.py ./
COPY migrations/ ./migrations/

# Eigener Benutzer, kein root. /cache traegt die Modellgewichte und muss ein
# Volume sein - 2,2 GB im Container-Layer waeren bei jedem Neubau weg.
RUN useradd --uid 10001 --create-home wurzelwerk \
 && mkdir -p /cache/huggingface \
 && chown -R 10001:10001 /cache /app
USER 10001

ENTRYPOINT ["python3"]
CMD ["check_db.py"]
