FROM python:3.11-slim WORKDIR /app ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 RUN apt-get update \ && apt-get install -y --no-install-recommends \ git \ openssh-client \ && rm -rf /var/lib/apt/lists/* # ZP Wiki je do kontajnera pripájaná ako /zpwiki RUN git config --system --add safe.directory /zpwiki # CPU-only PyTorch. RUN python -m pip install --no-cache-dir \ torch==2.11.0 \ --index-url https://download.pytorch.org/whl/cpu COPY deployment/requirements.txt ./deployment/requirements.txt RUN python -m pip install --no-cache-dir \ -r deployment/requirements.txt # Prepare immutable assets before application code, so code-only changes do # not invalidate model preparation. The preparer only imports its own module. COPY tools/__init__.py ./tools/__init__.py COPY tools/runtime/__init__.py tools/runtime/runtime_assets.py ./tools/runtime/ COPY runtime_assets/ /opt/zp-assets/ ARG EMBEDDING_MODEL=intfloat/multilingual-e5-small ARG EMBEDDING_REVISION="" ARG CHUNK_TOKEN_ENCODING=cl100k_base ARG RAG_LLM_TOKEN_ENCODING=cl100k_base RUN python -m tools.runtime.runtime_assets prepare --output /opt/zp-assets \ --model "$EMBEDDING_MODEL" --revision "$EMBEDDING_REVISION" \ --encoding "$CHUNK_TOKEN_ENCODING" --encoding "$RAG_LLM_TOKEN_ENCODING" # Cross-encoder reranker and Stanza Slovak lemmatizer (pinned, checksummed, # probed offline); answering never downloads a model. RUN python -m tools.runtime.runtime_assets prepare-extras --output /opt/zp-assets COPY app ./app COPY tools ./tools ENV ZP_RUNTIME_ASSETS=/opt/zp-assets ENV ZP_ASSETS_REQUIRED=1 ENV HF_HUB_OFFLINE=1 ENV TRANSFORMERS_OFFLINE=1 ENV TIKTOKEN_CACHE_DIR=/opt/zp-assets/tiktoken ENV STANZA_RESOURCES_DIR=/opt/zp-assets/stanza RUN mkdir -p data EXPOSE 8000 CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]