Files
vllm-omni/vllm_omni/inputs/preprocess.py
T

63 lines
2.7 KiB
Python
Raw Normal View History

2026-09-03 03:32:56 +08:00
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
from typing import Any
from vllm.renderers import BaseRenderer
2025-11-17 14:44:10 +08:00
class OmniRenderer:
"""Delegate tokenization/chat rendering while extending engine-input routing.
2026-09-03 03:32:56 +08:00
Keep the original renderer's tokenizer, executors, and multimodal caches.
The upstream pipeline methods run on this adapter so both sync and async
entrypoints reach the Omni singleton processing below.
2026-09-03 03:32:56 +08:00
"""
render_cmpl = BaseRenderer.render_cmpl
render_cmpl_async = BaseRenderer.render_cmpl_async
render_chat = BaseRenderer.render_chat
render_chat_async = BaseRenderer.render_chat_async
process_for_engine = BaseRenderer.process_for_engine
process_for_engine_async = BaseRenderer.process_for_engine_async
_process_enc_dec = BaseRenderer._process_enc_dec
_process_enc_dec_async = BaseRenderer._process_enc_dec_async
2026-09-03 03:32:56 +08:00
def __init__(self, renderer: BaseRenderer) -> None:
self._renderer = renderer
2026-09-03 03:32:56 +08:00
def __getattr__(self, name: str) -> Any:
return getattr(self._renderer, name)
2026-09-03 03:32:56 +08:00
@staticmethod
def _with_omni_extras(inputs, prompt):
for key in ("prompt", "cache_salt", "additional_information", "model_intermediate_buffer"):
if key in prompt:
inputs[key] = prompt[key]
2026-09-03 03:32:56 +08:00
return inputs
def _process_singleton(self, prompt, *, skip_mm_cache: bool = False):
if "prompt_embeds" not in prompt and "mm_processor_kwargs" in prompt and not prompt.get("multi_modal_data"):
inputs = self._renderer._process_multimodal(
prompt["prompt_token_ids"],
2026-03-09 17:29:38 +08:00
{},
mm_processor_kwargs=prompt["mm_processor_kwargs"],
mm_uuids=prompt.get("multi_modal_uuids"),
skip_mm_cache=skip_mm_cache,
2026-02-27 10:29:14 +08:00
)
else:
inputs = self._renderer._process_singleton(prompt, skip_mm_cache=skip_mm_cache)
return self._with_omni_extras(inputs, prompt)
async def _process_singleton_async(self, prompt, *, skip_mm_cache: bool = False):
if "prompt_embeds" not in prompt and "mm_processor_kwargs" in prompt and not prompt.get("multi_modal_data"):
inputs = await self._renderer._process_multimodal_async(
prompt["prompt_token_ids"],
{},
mm_processor_kwargs=prompt["mm_processor_kwargs"],
mm_uuids=prompt.get("multi_modal_uuids"),
skip_mm_cache=skip_mm_cache,
)
else:
inputs = await self._renderer._process_singleton_async(prompt, skip_mm_cache=skip_mm_cache)
return self._with_omni_extras(inputs, prompt)