 ---------- Stage 1: Frontend ----------
FROM node:22-bullseye-slim AS frontend

WORKDIR /app
# Pull source with all submodules
RUN apt-get update && apt-get install -y git \
 && git clone --branch main --recurse-submodules https://github.com/open-webui/open-webui.git . \
 && git submodule update --init --recursive

# Build frontend
ENV NODE_OPTIONS="--max_old_space_size=8192"
RUN npm ci --legacy-peer-deps && npm run build
# Optional check
RUN ls -la /app/build

# ---------- Stage 2: Backend ----------
FROM nvidia/cuda:12.9.1-cudnn-runtime-ubuntu22.04

# Install system deps
RUN apt-get update && apt-get install -y \
    python3.11 python3-pip git curl libgl1 libglib2.0-0 ffmpeg \
 && apt-get clean && rm -rf /var/lib/apt/lists/*

RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.11 1 \
 && update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1

RUN python -m pip install --upgrade pip

# Clone backend code
WORKDIR /app
RUN git clone --branch main --recurse-submodules https://github.com/open-webui/open-webui.git . \
 && git submodule update --init --recursive

# Patch (if needed) for logging API change
RUN sed -i 's/logging.getLevelNamesMapping()/logging._nameToLevel/' backend/open_webui/env.py

# Copy frontend build from Stage 1
COPY --from=frontend /app/build /app/build

# Install Python deps
WORKDIR /app/backend
RUN pip install --no-cache-dir -r requirements.txt uvicorn \
 && pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

# Force Python to see /app as a top‑level package location
WORKDIR /app
ENV PYTHONPATH=/app:/app/backend

EXPOSE 3000

CMD ["uvicorn", "backend.open_webui.main:app", "--host", "0.0.0.0", "--port", "3000"]
