File size: 1,829 Bytes
d8423e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dec9d98
d8423e6
 
 
 
 
dec9d98
 
 
 
d8423e6
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# ── Build stage ────────────────────────────────────────────────────────
FROM python:3.12-slim AS builder

WORKDIR /app

# Install uv for fast dependency management
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv

# Copy project files
COPY pyproject.toml .
COPY src/ src/

# Install dependencies into .venv
RUN uv venv .venv && \
    uv pip install --no-cache -r pyproject.toml

# ── Runtime stage ─────────────────────────────────────────────────────
FROM python:3.12-slim

WORKDIR /app

# Copy the virtual environment from builder
COPY --from=builder /app/.venv /app/.venv
COPY --from=builder /app/src /app/src

# Copy application files
COPY ui/ ui/
COPY scripts/start_hf_space.sh scripts/start_hf_space.sh
COPY deployment/qdrant/local_db/ deployment/qdrant/local_db/

# Set PATH to use .venv python
ENV PATH="/app/.venv/bin:$PATH"
ENV PYTHONPATH="/app/src"
ENV PYTHONUNBUFFERED=1
ENV QDRANT_PATH="/app/deployment/qdrant/local_db"

# Download local inference models during image build so runtime startup is fast.
RUN python -c "from ahcgr.services.embedding import EmbeddingService; from ahcgr.services.reranker import RerankerService; EmbeddingService(); RerankerService()"

# Create logs directory
RUN mkdir -p /app/logs && chmod +x /app/scripts/start_hf_space.sh

# Expose API and Hugging Face Spaces ports
EXPOSE 8000
EXPOSE 7860

# Run FastAPI locally, or the combined API + Streamlit process on Hugging Face Spaces.
CMD ["sh", "-c", "if [ -n \"$SPACE_ID\" ]; then /app/scripts/start_hf_space.sh; else uvicorn ahcgr.api.server:create_app --factory --host 0.0.0.0 --port 8000; fi"]