# Stage 1: Build frontend SPA FROM node:22-slim AS frontend WORKDIR /frontend COPY frontend/package.json frontend/package-lock.json* ./ RUN npm ci --ignore-scripts 2>/dev/null || npm install COPY frontend/ . RUN npm run build # Stage 2: Build Python package (NVIDIA CUDA 12.4) FROM nvidia/cuda:12.4.0-runtime-ubuntu22.04 AS builder RUN apt-get update && \ apt-get install -y --no-install-recommends python3 python3-pip python3-venv && \ rm -rf /var/lib/apt/lists/* WORKDIR /app COPY pyproject.toml README.md ./ COPY src/ src/ COPY --from=frontend /src/openjarvis/server/static src/openjarvis/server/static/ RUN pip install --no-cache-dir uv && \ uv pip install --system ".[server]" # Stage 3: Runtime FROM nvidia/cuda:12.4.0-runtime-ubuntu22.04 RUN apt-get update && \ apt-get install -y --no-install-recommends python3 python3-pip && \ rm -rf /var/lib/apt/lists/* COPY --from=builder /usr/local /usr/local COPY --from=builder /app /app WORKDIR /app EXPOSE 8000 ENTRYPOINT ["jarvis"] CMD ["serve", "--host", "0.0.0.0", "--port", "8000"]