FROM ghcr.io/astral-sh/uv:python3.14-bookworm-slim # Create non-root user (HF Spaces convention: UID 1000) RUN useradd -m -u 1000 user USER user ENV HOME=/home/user \ PATH=/home/user/.local/bin:$PATH \ UV_LINK_MODE=copy WORKDIR /home/user/app # Install dependencies first for caching COPY --chown=user:user pyproject.toml uv.lock ./ RUN uv sync --frozen --no-install-project --no-dev # Copy source COPY --chown=user:user . . # Sync project (after copy, so package metadata is available) RUN uv sync --frozen --no-dev ENV PATH="/home/user/app/.venv/bin:$PATH" ENV PORT=7860 EXPOSE 7860 CMD ["sh", "-c", "uvicorn server:app --host 0.0.0.0 --port ${PORT}"]