# ═══════════════════════════════════════════════════════════════════ # 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"]