@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 17e787a779
Fork 0

A high-throughput and memory-efficient inference and serving engine for LLMs

Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git

Synced Nov 5, 07:15 UTC

fix(kimi_k25): resolve media_placeholder_token_id from tokenizer (#39344)

Signed-off-by: r266-tech <r266.tech@gmail.com> Signed-off-by: Roger Wang <hey@rogerw.io> Co-authored-by: Roger Wang <hey@rogerw.io>

r266-tech committed Apr 12, 2026 at 12:10 UTC 17e787a7792bacb22c7cdbf49d884317c2e9d3b5
1 file changed +24 -3
vllm/model_executor/models/kimi_k25.py
+24 -3
@@ -113,7 +113,29 @@ class KimiK25ProcessingInfo(BaseProcessingInfo):
113 trust_remote_code=self.ctx.model_config.trust_remote_code,
114 )
115
116 - self.media_token_id = media_token_id = hf_config.media_placeholder_token_id
116 + # Resolve token ID from the tokenizer because transformers v5
117 + # may remap token IDs vs config.json.
118 + config_token_id = hf_config.media_placeholder_token_id
119 + resolved_token_id = tokenizer.convert_tokens_to_ids("<|media_pad|>")
120 + is_valid_resolved = isinstance(resolved_token_id, int) and (
121 + tokenizer.unk_token_id is None
122 + or resolved_token_id != tokenizer.unk_token_id
123 + )
124 + if is_valid_resolved and resolved_token_id != config_token_id:
125 + logger.warning_once(
126 + "Kimi-K2.5 config.media_placeholder_token_id (%d) disagrees "
127 + "with tokenizer mapping for <|media_pad|> (%d). "
128 + "Using tokenizer value.",
129 + config_token_id,
130 + resolved_token_id,
131 + )
132 + media_token_id = resolved_token_id
133 + # Patch config so downstream code also sees the correct ID.
134 + hf_config.media_placeholder_token_id = resolved_token_id
135 + else:
136 + media_token_id = config_token_id
137 +
138 + self.media_token_id = media_token_id
139 self.media_token = tokenizer.decode(media_token_id)
140
141 self.image_processor = image_processor
@@ -232,8 +254,7 @@ class KimiK25MultiModalProcessor(BaseMultiModalProcessor[KimiK25ProcessingInfo])
254 hf_processor_mm_kwargs: Mapping[str, Any],
255 out_mm_kwargs: MultiModalKwargsItems,
256 ) -> Sequence[PromptUpdate]:
235 - hf_config = self.info.get_hf_config()
236 - media_token_id = hf_config.media_placeholder_token_id
257 + media_token_id = self.info.media_token_id
258
259 def get_replacement(item_idx: int):
260 media = mm_items.get_items("vision_chunk", (VisionChunkProcessorItems,))