| FROM python:3.10-slim | |
| # Install system dependencies for OpenCV and PaddlePaddle | |
| RUN apt-get update && apt-get install -y \ | |
| libgl1 \ | |
| libglib2.0-0 \ | |
| libgomp1 \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Set working directory | |
| WORKDIR /app | |
| # 1. Install huggingface-hub first to download the model. | |
| # This isolates the 4.7GB download layer. If you change requirements.txt or app.py, | |
| # Docker will CACHE this download layer and NEVER pull the 4.7GB model again! | |
| RUN pip install --no-cache-dir huggingface-hub | |
| # 2. Download LLM weights early in the building phase. | |
| # Points to Bartowski's stable and verified repository path to resolve the 404 error. | |
| RUN python -c "from huggingface_hub import hf_hub_download; hf_hub_download(repo_id='Bartowski/Qwen2.5-7B-Instruct-GGUF', filename='Qwen2.5-7B-Instruct-Q4_K_M.gguf')" | |
| # 3. Force the pre-compiled CPU wheel for instant installation | |
| RUN pip install --no-cache-dir llama-cpp-python \ | |
| --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu \ | |
| --only-binary llama-cpp-python | |
| # 4. Copy and install the rest of the dependencies from requirements.txt | |
| COPY requirements.txt . | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| # 5. Copy application files (changes to app.py will only invalidate this quick layer) | |
| COPY . . | |
| # Set environment variables for Gradio | |
| ENV GRADIO_SERVER_NAME="0.0.0.0" | |
| ENV GRADIO_SERVER_PORT="7860" | |
| # Expose the Gradio port | |
| EXPOSE 7860 | |
| # Run the application | |
| CMD ["python", "app.py"] |