# Use the official release image with its matching CUDA/PyTorch stack. ARG VLLM_VERSION=0.31.0 ARG VLLM_BASE_IMAGE=vllm/vllm-openai ARG VLLM_BASE_TAG=v${VLLM_VERSION} # We use registry-based layer caching for the dependencies, # where the tag is determined based on the hash of the contents # of files like pyproject.toml, etc. The deps stage should have # everything except the actual project dir, since that should not # change much across branches. FROM ${VLLM_BASE_IMAGE}:${VLLM_BASE_TAG} AS deps ARG VLLM_VERSION # Keep APP_DIR outside /workspace so k8s Buildkite workspace mounts cannot # shadow the editable install target (#5364). Docker WORKDIR creates /opt if # needed. ARG APP_DIR=/opt/vllm-omni WORKDIR ${APP_DIR} RUN ln -sf /usr/bin/python3 /usr/bin/python # Placeholder package tree so editable install can register APP_DIR. # The final stage COPY --link fills this directory with the real sources; # the editable .pth / egg-link keeps resolving imports there — no PYTHONPATH. RUN mkdir -p vllm_omni && touch vllm_omni/__init__.py # Install system dependencies RUN apt-get update && \ apt-get install -y espeak-ng git jq && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # Copy dependency related things first and install deps/ # We set the version str to 0.0.0 since it doesn't matter # for CI COPY pyproject.toml setup.py ./ COPY requirements/ requirements/ # Scope the override to Omni; dependency source builds need their own versions. ENV VLLM_OMNI_VERSION_OVERRIDE=0.0.0 # Editable install: deps + project metadata are cached in this layer, while # the package itself is linked to APP_DIR (populated later by COPY --link). # Do NOT use a non-editable install here — that copies an empty stub into # site-packages and breaks ``import vllm_omni.entrypoints``. RUN uv pip install --system -e ".[dev]" # Fail the image build if dependency resolution replaced the selected vLLM. # The CPU builder has no NVIDIA driver; CUDA imports are checked at the start # of each GPU test job by .buildkite/cuda/scripts/check_vllm_runtime.py. RUN python3 -c "import vllm; assert vllm.__version__ == '${VLLM_VERSION}', vllm.__version__" # The final stage just copies the working dir on top of the # dependencies image. This uses --link so that we can skip # the image pull in Buildkite when we have a cache hit. # # IMPORTANT: Do not make any modifications that depend on the # file system after the --link copy, otherwise we'd need to pull # the heavy base image to build it. Editable install above already # registered APP_DIR, so we must not re-pip-install after COPY. FROM deps ARG APP_DIR=/opt/vllm-omni WORKDIR ${APP_DIR} COPY --link . . ENTRYPOINT []