# syntax=docker/dockerfile:1.7
# DeepSeek-V4-Flash-DSpark — instanttensor on top of
# aidendle94/sparkrun-vllm-ds4-gb10:production-3.76.1
#
# production-3.76.1 (same lineage as 3.75) ships the patched NCCL 2.30.4 ABI
# (the base layers are byte-identical to production-3.2, which is labeled
# "patched NCCL 2.30.4"), so no NCCL re-alignment is needed. This overlay adds
# instanttensor for faster model loading (load-format instanttensor) plus the
# deepseek_v4 encoder reasoning-effort fix (see patch COPY below).
#
# Build: cd docker-images/deepseek-v4-flash-dspark && docker build -t sparkrun-vllm-ds4-gb10:fixed .
# Tag:   docker tag sparkrun-vllm-ds4-gb10:fixed aidendle94/sparkrun-vllm-ds4-gb10:production-3.76.1

FROM aidendle94/sparkrun-vllm-ds4-gb10:production-3.76.1

RUN pip install --no-cache-dir --no-deps --force-reinstall instanttensor==0.1.9

# production-3.76.1 itself ships a fixed deepseek_v4.py (layer LABEL
# "org.375.overlay=3.76.1"): it names thinking/enable_thinking/reasoning_effort/
# drop_thinking as explicit signature params so the vllm serving path
# (supports_kw, allow_var_kwargs=False) no longer drops them — the root-cause
# fix. So our vendored deepseek_v4.py is NOT needed on this base (it read the
# same kwargs via **kwargs and was equally dropped).
#
# The bundled deepseek_v4_encoding.py is still the stale revision (single
# REASONING_EFFORT_MAX wording, max used the high text, read the deprecated
# `reasoning` key) — 3.76.1's overlay layers do not touch it. deepseek_v4_encoding.py
# is therefore still replaced with the canonical model-card reference
# (deepseek-ai/DeepSeek-V4-Flash-0731 encoding/encoding_dsv4.py): full low/high/max
# prompt dict, correct gate for both high and max, and reasoning_content key.
# Mirrors the encoder fix 0rand bundled into his local
# production-3.75-reffix-0731 image (forums…/372268/708).
COPY patches/deepseek_v4_encoding.py \
     /opt/venv/lib/python3.12/site-packages/vllm/tokenizers/
