########################
# 1️⃣  Build stage
########################
FROM python:3.10-slim AS builder
ENV DEBIAN_FRONTEND=noninteractive

# 系统依赖：编译 C/C++ 扩展 & git 拉源码
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        build-essential  \
        git              \
        curl             && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /build

# 先复制 requirements 目录，利用 Docker layer cache
COPY evalscope.0.17.0/requirements ./evalscope/requirements

# 更新 pip & 预装常用 build tools
RUN pip install --upgrade pip setuptools wheel

# 把所有依赖装进 /install 目录（✳️ 关键）
RUN pip install --no-cache-dir --prefix=/install \
        -r ./evalscope/requirements/framework.txt \
        -r ./evalscope/requirements/opencompass.txt \
        -r ./evalscope/requirements/vlmeval.txt \
        -r ./evalscope/requirements/aigc.txt \
        -r ./evalscope/requirements/app.txt \
        -r ./evalscope/requirements/dev.txt \
        -r ./evalscope/requirements/docs.txt \
        -r ./evalscope/requirements/perf.txt \
        -r ./evalscope/requirements/rag.txt

# 安装 evalscope 本体（非 editable，减少后续 COPY）
COPY evalscope.0.17.0/ ./evalscope
RUN pip install --no-cache-dir --prefix=/install ./evalscope

# 仅带上入口脚本
COPY gradio_ui.py .

########################
# 2️⃣  Runtime stage
########################
FROM python:3.10-slim AS runtime
ENV DEBIAN_FRONTEND=noninteractive

# 把 builder 阶段产物注入到 /usr/local 下
# /install/bin 里可能有可执行文件；site-packages 在 /install/lib/…
COPY --from=builder /install /usr/local
COPY --from=builder /build/gradio_ui.py /app/gradio_ui.py

WORKDIR /app
EXPOSE 7900

# 可选：彻底关闭 pip 缓存，避免 runtime 再次安装时产生垃圾
ENV PIP_NO_CACHE_DIR=1

CMD ["python3", "gradio_ui.py"]
