Spaces:
Running
Running
| # ββ Stage 1: dependency builder βββββββββββββββββββββββββββββββββββββββββββββββ | |
| FROM python:3.11-slim AS builder | |
| WORKDIR /build | |
| # Build tools needed for FAISS and native C extensions | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| gcc g++ \ | |
| && rm -rf /var/lib/apt/lists/* | |
| COPY requirements.txt . | |
| RUN pip install --no-cache-dir --prefix=/install -r requirements.txt | |
| # ββ Stage 2: runtime image ββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FROM python:3.11-slim AS runtime | |
| WORKDIR /app | |
| # Copy compiled packages from builder | |
| COPY --from=builder /install /usr/local | |
| # Copy application source + model download script | |
| COPY main.py download_models.py ./ | |
| # ββ Pre-download models into /app/models at BUILD time ββββββββββββββββββββββββ | |
| # This bakes ~500 MB of weights into the image layer so the container never | |
| # hits the HuggingFace Hub at runtime β fixing Render's RAM/timeout failures. | |
| ARG EMBEDDING_MODEL=all-MiniLM-L6-v2 | |
| ARG RERANKER_MODEL=cross-encoder/ms-marco-MiniLM-L-6-v2 | |
| ENV EMBEDDING_MODEL=${EMBEDDING_MODEL} | |
| ENV RERANKER_MODEL=${RERANKER_MODEL} | |
| # Tell HuggingFace libraries to use our deterministic local path | |
| ENV HF_HOME=/app/models | |
| ENV TRANSFORMERS_CACHE=/app/models | |
| RUN python download_models.py | |
| # Ensure FAISS index directory exists | |
| RUN mkdir -p /app/indexes | |
| # ββ Runtime config βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Hugging Face Spaces requires port 7860 | |
| ENV PORT=7860 | |
| EXPOSE 7860 | |
| CMD ["sh", "-c", "uvicorn main:app --host 0.0.0.0 --port ${PORT} --workers 1"] | |