Files
vLLM/vllm/transformers_utils/processors/kimi_k3.py
T
+12 7c6729b769 [Model] Add Kimi K3 support: model files and kernels [1/N] (#50089)
Signed-off-by: zjy0516 <riverclouds.zhu@qq.com>
Signed-off-by: Isotr0py <Isotr0py@outlook.com>
Signed-off-by: Bugen Zhao <i@bugenzhao.com>
Signed-off-by: Yongye Zhu <zyy1102000@gmail.com>
Co-authored-by: Isotr0py <Isotr0py@outlook.com>
Co-authored-by: Thien Tran <gau.nernst@yahoo.com.sg>
Co-authored-by: Bugen Zhao <i@bugenzhao.com>
Co-authored-by: Yongye Zhu <zyy1102000@gmail.com>
Co-authored-by: Ziming Huang <zelda.huanghuang@gmail.com>
Co-authored-by: Roger Wang <hey@rogerw.io>
Co-authored-by: Isotr0py <mozf@inferact.ai>
Co-authored-by: aoshen02 <aoshen02@users.noreply.github.com>
Co-authored-by: Woosuk Kwon <woosuk@inferact.ai>
Co-authored-by: Jee Jee Li <jeejeelee@inferact.ai>
Co-authored-by: aoshen02 <aoshen@inferact.ai>
Co-authored-by: Summer Yang <girasoleyang@gmail.com>
Co-authored-by: Kevin H. Luu <khluu000@gmail.com>
Co-authored-by: Bowen Wang <abmfy@icloud.com>
Co-authored-by: gnovack <novackgm@gmail.com>
Co-authored-by: Nick Hill <nickhill123@gmail.com>
Co-authored-by: Yifan Qiao <yifanqiao@inferact.ai>
Co-authored-by: xiaozhoupy <peiyuanzhou1994@gmail.com>
Co-authored-by: Roy Wang <yasong.wang@inferact.ai>
Co-authored-by: Jeff (Junze) Ma <93145857+majunze2001@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
2026-07-29 14:10:58 +08:00

62 lines
2.1 KiB
Python

# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
from transformers import BaseImageProcessor, BatchFeature, TensorType
from transformers.processing_utils import ProcessorMixin
from vllm.tokenizers.hf import HfTokenizer
class KimiK3Processor(ProcessorMixin):
"""HF-style processor wrapper for the image-only Kimi-K3 model.
K3 exposes the standard ``image`` modality, so vLLM calls this processor
with ``images=[PIL, ...]``. The underlying checkpoint image processor
(``KimiK3VisionProcessor``) works on ``{"type": "image", "image": PIL}``
media dicts, so this wrapper adapts bare PIL images into that shape before
delegating to ``preprocess``.
Text is only tokenized here; the single ``<|kimi_image_placeholder|>``
token per image is expanded into the resolution-aware media block by the
model's ``_get_prompt_updates`` on the vLLM side.
"""
attributes = ["image_processor", "tokenizer"]
def __init__(
self,
image_processor: BaseImageProcessor,
tokenizer: HfTokenizer,
) -> None:
self.image_processor = image_processor
self.tokenizer = tokenizer
def __call__(
self,
text: str | list[str] | None = None,
images: object | list[object] | None = None,
return_tensors: str | TensorType | None = None,
**kwargs,
) -> BatchFeature:
if images is not None:
if not isinstance(images, list):
images = [images]
medias = [{"type": "image", "image": image} for image in images]
mm_inputs = self.image_processor.preprocess(
medias,
return_tensors=return_tensors,
)
else:
mm_inputs = {}
if text is not None:
if not isinstance(text, list):
text = [text]
text_inputs = self.tokenizer(text)
else:
text_inputs = {}
return BatchFeature(
data={**text_inputs, **mm_inputs},
tensor_type=return_tensors,
)