ARG BASE_IMAGE=vllm/vllm-openai@sha256:a551e05307cd2e0092139d84db32af9c97e67d2eeeff072d21e429131d8c23f0
FROM ${BASE_IMAGE} AS stable_builder
USER root
ARG PIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple
ENV PIP_INDEX_URL=${PIP_INDEX_URL} UV_DEFAULT_INDEX=${PIP_INDEX_URL} UV_HTTP_TIMEOUT=60
WORKDIR /src
COPY vllm/ /src/
ENV TORCH_CUDA_ARCH_LIST=12.1a MAX_JOBS=2 FLASHINFER_NVCC_THREADS=1
COPY vendor/wheels /tmp/dsv41-wheels
RUN uv venv --system-site-packages /src/.venv && uv pip install --python /src/.venv/bin/python \
    --no-index --find-links /tmp/dsv41-wheels cmake==3.31.6
COPY cutlass-stable/ /src/build/_deps/cutlass-src/
RUN /src/.venv/bin/python -c 'import pathlib,re; p=pathlib.Path("CMakeLists.txt"); s=p.read_text(); p.write_text(re.sub(r"(?m)^(\s*)include\(cmake/external_projects/",r"\1# stable-only: include(cmake/external_projects/",s))'
RUN export PATH=/src/.venv/bin:$PATH && \
    PYPATH=$(/src/.venv/bin/python -c 'import sys;print(":".join(p for p in sys.path if p))') && \
    TORCH_PREFIX=$(/src/.venv/bin/python -c 'import torch;print(torch.utils.cmake_prefix_path)') && \
    cmake -S /src -B /src/build -G Ninja -DCMAKE_BUILD_TYPE=Release -DVLLM_TARGET_DEVICE=cuda \
      -DVLLM_PYTHON_EXECUTABLE=/src/.venv/bin/python -DVLLM_PYTHON_PATH="$PYPATH" \
      -DFETCHCONTENT_BASE_DIR=/src/build/_deps -DFETCHCONTENT_SOURCE_DIR_CUTLASS=/src/build/_deps/cutlass-src \
      -DCMAKE_PREFIX_PATH="$TORCH_PREFIX" -DNVCC_THREADS=1 -DCUDA_nvrtc_LIBRARY=/usr/local/cuda/lib64/libnvrtc.so && \
    cmake --build /src/build --target _C_stable_libtorch -j 2 && \
    cmake --install /src/build --component _C_stable_libtorch --prefix /src

FROM ${BASE_IMAGE}
USER root
ARG PIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple
ENV PIP_INDEX_URL=${PIP_INDEX_URL} UV_DEFAULT_INDEX=${PIP_INDEX_URL} UV_HTTP_TIMEOUT=60
COPY --from=stable_builder /src/vllm/ /usr/local/lib/python3.12/dist-packages/vllm/
ENV TORCH_CUDA_ARCH_LIST=12.1a FLASHINFER_CUDA_ARCH_LIST=12.1a \
    FLASHINFER_DISABLE_VERSION_CHECK=1 VLLM_HAS_FLASHINFER_CUBIN=1 MAX_JOBS=2 FLASHINFER_NVCC_THREADS=1
RUN uv pip uninstall --system flashinfer-jit-cache flashinfer-cubin flashinfer-python
COPY flashinfer/ /opt/fi-src/
COPY flashinfer-cutlass/ /opt/fi-src/3rdparty/cutlass/
COPY cccl/ /opt/fi-src/3rdparty/cccl/
COPY spdlog/ /opt/fi-src/3rdparty/spdlog/
RUN cd /opt/fi-src && BUILD_NVEP=0 FLASHINFER_BUILD_NO_PIP=1 uv pip install --system --no-deps --no-build-isolation .
COPY verify_kernels.py /opt/dsv41-verify-kernels.py
RUN python3 /opt/dsv41-verify-kernels.py --build && \
    python3 /opt/dsv41-verify-kernels.py
LABEL megacube.vllm.commit=e47aa780bccf59f59dfa2cbb18e17a10b4fe69ba \
      megacube.recipe.commit=fc725ecf10869c184f4347dd73336536d395753c \
      megacube.model=DeepSeek-V4.1-Flash \
      megacube.deepseek41.precompiled=1
