| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Minecraft Bot LLM Backend β Dockerfile | |
| # Target: Hugging Face Spaces (Docker template), port 7860 | |
| # Model: Qwen2.5-Coder-7B-Instruct (Q4_K_M GGUF, ~4.4 GB) | |
| # Runtime: llama-cpp-python (CPU-optimised build) | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # ββ Stage 1: builder ββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FROM python:3.11-slim AS builder | |
| # Build deps for llama-cpp-python C++ compilation | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| build-essential \ | |
| cmake \ | |
| git \ | |
| wget \ | |
| && rm -rf /var/lib/apt/lists/* | |
| WORKDIR /build | |
| COPY requirements.txt . | |
| # Build llama-cpp-python wheel with optimised CPU flags (AVX2 if available) | |
| # Set CMAKE_ARGS for pure CPU; swap for CUDA_DOCKER_ARCH if GPU available | |
| ENV CMAKE_ARGS="-DLLAMA_BLAS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS" | |
| ENV FORCE_CMAKE=1 | |
| RUN pip install --upgrade pip && \ | |
| pip install --no-cache-dir -r requirements.txt --target /build/deps | |
| # ββ Stage 2: runtime ββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FROM python:3.11-slim | |
| # Runtime system libs | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| libgomp1 \ | |
| libopenblas-dev \ | |
| wget \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # ββ HF Spaces requires a non-root user named "user" βββββββββββββββββ | |
| RUN useradd -m -u 1000 user | |
| USER user | |
| ENV HOME=/home/user \ | |
| PATH=/home/user/.local/bin:$PATH \ | |
| PYTHONPATH=/app/deps | |
| WORKDIR /app | |
| # Copy installed Python packages from builder | |
| COPY --from=builder --chown=user /build/deps /app/deps | |
| # Copy application source | |
| COPY --chown=user app.py . | |
| # ββ Prepare model directory ββββββββββββββββββββββββββββββββββββββββββ | |
| # TαΊ‘o sαΊ΅n thΖ° mα»₯c lΖ°u model vα»i quyα»n cα»§a user hiα»n tαΊ‘i | |
| RUN mkdir -p /app/models | |
| # ββ Environment defaults (overridable via HF Space Secrets) βββββββββ | |
| ENV MODEL_PATH=/app/models/qwen2.5-coder-7b-instruct-q4_k_m.gguf \ | |
| MODEL_NAME=qwen2.5-coder-7b-instruct \ | |
| N_CTX=4096 \ | |
| N_THREADS=4 \ | |
| N_GPU_LAYERS=0 \ | |
| MAX_TOKENS=1024 | |
| # BEARER_TOKEN must be injected as a Secret β never hard-coded here | |
| EXPOSE 7860 | |
| CMD ["python", "-m", "uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860", "--workers", "1"] | |