Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ def _make_config(**overrides) -> Mock:
"route_to_encoder": False,
"disaggregation_mode": DisaggregationMode.AGGREGATED,
"embedding_worker": False,
# Pin to the real Config default: an auto-created Mock attribute is
# truthy, which enables the GMS shadow-mode path and imports the
# optional gpu_memory_service package (absent in some test images).
"gms_shadow_mode": False,
"realtime": False,
}
defaults.update(overrides)
return Mock(**defaults)
Expand Down
20 changes: 18 additions & 2 deletions container/templates/vllm_runtime.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -210,12 +210,16 @@ RUN uv pip uninstall triton && \

{% if context.vllm.enable_modelexpress == "true" %}
# Install only the ModelExpress client package. --no-deps preserves the upstream
# vLLM runtime dependency stack.
# vLLM runtime dependency stack. google-crc32c is imported eagerly by the MX
# vLLM plugin (>=0.5.0) and is not in the XPU base image, so install it
# alongside; the plugin-load guard later in this stage fails the build on any
# remaining --no-deps gap.
RUN --mount=type=cache,id=uv-root-{{ context.dynamo.uv_version }},target=/root/.cache/uv,sharing=locked \
set -eux; \
export UV_CACHE_DIR=/root/.cache/uv; \
uv pip install {{ pip_target }} --no-deps \
"modelexpress==${MODELEXPRESS_VERSION}"
"modelexpress==${MODELEXPRESS_VERSION}"; \
uv pip install {{ pip_target }} "google-crc32c>=1.5.0"
{% endif %}

{% endif %}
Expand Down Expand Up @@ -305,6 +309,18 @@ RUN --mount=type=bind,source=./container/deps/requirements.vllm.txt,target=/tmp/
# tool scripts referencing files not present in Dynamo's build context.
RUN rm -rf /workspace/vllm

{% if target not in ("dev", "local-dev") and context.vllm.enable_modelexpress == "true" %}
# Regression guard for the --no-deps ModelExpress install above: resolve and
# invoke the vllm.general_plugins entry points exactly as vLLM does at every
# startup, so a missing transitive dependency fails the build here instead of
# at pod startup. Runs after every package/library install in this stage
# (including the XPU apt step) so the check is order-independent.
RUN python3 -c "from importlib.metadata import entry_points; \
eps = [ep for ep in entry_points(group='vllm.general_plugins') if ep.name == 'modelexpress']; \
assert eps, 'modelexpress vllm.general_plugins entry point not found'; \
[ep.load()() for ep in eps]"
{% endif %}

USER dynamo

# Copy the workspace surface needed by the current vLLM pre-merge test image.
Expand Down
Loading