fix: preserve Omni processor conditioning on vLLM 0.31
Signed-off-by: tzhouam <tzhouam@connect.ust.hk>
This commit is contained in:
1 parent
0c84edee02
commit
84cbf94b1b
8 files changed
+89
-13
No files matched your search
@@ -8,11 +8,39 @@ from typing import TypeVar
|
||||
|
||||
from transformers import BatchFeature
|
||||
from vllm.multimodal.parse import MultiModalDataItems
|
||||
from vllm.multimodal.processing import BaseMultiModalProcessor, BaseProcessingInfo
|
||||
from vllm.multimodal.processing import (
|
||||
BaseDummyInputsBuilder,
|
||||
BaseMultiModalProcessor,
|
||||
BaseProcessingInfo,
|
||||
ProcessorInputs,
|
||||
cached_encode,
|
||||
)
|
||||
|
||||
_I = TypeVar("_I", bound=BaseProcessingInfo)
|
||||
|
||||
|
||||
class OmniDummyInputsBuilder(BaseDummyInputsBuilder[_I]):
|
||||
"""Restore Omni's processor-input hook on the vLLM 0.31 API."""
|
||||
|
||||
def get_dummy_processor_inputs(
|
||||
self,
|
||||
seq_len: int,
|
||||
mm_counts: Mapping[str, int],
|
||||
mm_options: Mapping[str, object],
|
||||
) -> ProcessorInputs:
|
||||
dummy_text = self.get_dummy_text(mm_counts)
|
||||
dummy_mm_data = self.get_dummy_mm_data(seq_len, mm_counts, mm_options)
|
||||
dummy_mm_items = self.info.parse_mm_data(dummy_mm_data, validate=False)
|
||||
|
||||
tokenizer = self.info.ctx.tokenizer
|
||||
dummy_prompt = (
|
||||
[]
|
||||
if tokenizer is None
|
||||
else cached_encode(tokenizer, dummy_text, truncation=False)
|
||||
)
|
||||
return ProcessorInputs(prompt=dummy_prompt, mm_data_items=dummy_mm_items)
|
||||
|
||||
|
||||
class OmniMultiModalProcessor(BaseMultiModalProcessor[_I]):
|
||||
"""Share data/passthrough handling, leaving model processing in its owner.
|
||||
|
||||
@@ -23,6 +51,18 @@ class OmniMultiModalProcessor(BaseMultiModalProcessor[_I]):
|
||||
|
||||
_OMNI_PROMPT_TEXT_KEY = "_vllm_omni_original_prompt_text"
|
||||
|
||||
def get_dummy_inputs(
|
||||
self,
|
||||
seq_len: int,
|
||||
mm_counts: Mapping[str, int],
|
||||
mm_options: Mapping[str, object],
|
||||
) -> ProcessorInputs:
|
||||
if isinstance(self.dummy_inputs, OmniDummyInputsBuilder):
|
||||
return self.dummy_inputs.get_dummy_processor_inputs(
|
||||
seq_len, mm_counts, mm_options
|
||||
)
|
||||
return super().get_dummy_inputs(seq_len, mm_counts, mm_options)
|
||||
|
||||
def _apply_hf_processor_main(
|
||||
self,
|
||||
mm_items: MultiModalDataItems,
|
||||
|
||||
Reference in new issue
Block a user