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,))