# GLM-5.2 Int4-Int8Mix overlay on sparkrun-vllm-ds4-gb10:glm52 # # Unsets VLLM_PREFIX_CACHE_RETENTION_INTERVAL (baked at 4096 in the base # deepseek image, breaks GLM-5.2) via a wrapper that sources the original # nvidia_entrypoint.sh first, then hands off with exec after the unset. # # Build: # cd docker-images/glm52 && bash build.sh # Tags: sparkrun-vllm-ds4-gb10:glm52 FROM aidendle94/sparkrun-vllm-ds4-gb10:production-hybrid-1.4 # 1.4 patches quantization/__init__.py to `from . import hybrid_modelopt_ct` # but never ships hybrid_modelopt_ct.py — a build bug in the base image that # breaks all vLLM imports with a circular-import error. Remove the dangling # import; no recipe uses hybrid_modelopt_ct (all use hybrid_mxfp4_ct). RUN sed -i '/from . import hybrid_modelopt_ct/d' \ /opt/venv/lib/python3.12/site-packages/vllm/model_executor/layers/quantization/__init__.py # Patch vLLM structured-output reasoning-boundary bug under speculative # decoding (MTP). When the reasoning parser emits the reasoning-end marker # () under MTP, the grammar FSM (used by response_format / guided decoding) # failed to advance, so the content channel was unconstrained — models # emitted prose or markdown-fence prefixes before JSON (tool-eval-bench # Structured Output: 50% instead of 100%). # # Ports upstream vLLM PRs: # #44297 — Constrain bitmask and trim grammar advance at the boundary # #44993 — Advance grammar across reasoning boundary (fixes #34650, # #43388, #48228) # # Changes: should_advance() accepts new_token_ids (authoritative step delta), # records reasoning_end_token_index, returns True for all constraint types; # scheduler trims reasoning content before accept_tokens; grammar_bitmask # constrains draft tokens after the marker mid-window. COPY patch-structured-output.py /tmp/patch-structured-output.py RUN python3 /tmp/patch-structured-output.py && rm /tmp/patch-structured-output.py RUN pip install --no-cache-dir --no-deps --force-reinstall nvidia-nccl-cu13==2.30.4 \ && pip install --no-cache-dir --no-deps --force-reinstall instanttensor==0.1.9 # Wrapper: unset the baked var, then hand off to the original entrypoint. # The original nvidia_entrypoint.sh does `exec "$@"` at the end, so this # runs as PID 1 with conda/CUDA paths sourced and the baked var gone. RUN printf '#!/bin/bash\nunset VLLM_PREFIX_CACHE_RETENTION_INTERVAL\nexec /opt/nvidia/nvidia_entrypoint.sh "$@"\n' > /entrypoint-wrapper.sh && chmod +x /entrypoint-wrapper.sh ENTRYPOINT ["/entrypoint-wrapper.sh"]