# SPDX-License-Identifier: Apache-2.0 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project from collections.abc import Mapping from dataclasses import dataclass, field from vllm.config.multimodal import MMHasherAlgorithm from vllm.inputs import MultiModalHashes from ..hasher import MultiModalHasher from ..parse import MultiModalDataItems, MultiModalUUIDItems @dataclass class ProcessorInputs: """ Represents the keyword arguments to [`vllm.multimodal.processing.BaseMultiModalProcessor.apply`][]. """ prompt: list[int] mm_data_items: MultiModalDataItems mm_uuid_items: MultiModalUUIDItems | None = None hf_processor_mm_kwargs: Mapping[str, object] = field(default_factory=dict) def get_mm_hashes( self, model_id: str, hash_algorithm: MMHasherAlgorithm, ) -> MultiModalHashes: mm_data_items = self.mm_data_items mm_uuid_items = self.mm_uuid_items or {} hf_processor_mm_kwargs = self.hf_processor_mm_kwargs mm_hashes = dict[str, list[str]]() hasher = MultiModalHasher for modality, data_items in mm_data_items.items(): if modality in mm_uuid_items: uuid_items = mm_uuid_items[modality] # For None entries, compute a hash; otherwise, use provided ID. hashes: list[str] = [] for i, item in enumerate(data_items.get_all_items_for_hash()): uuid_item = uuid_items[i] # NOTE: Even if a uuid_item is provided, we still compute a hash # if `hf_processor_mm_kwargs` is provided. # This is because the processed multimodal inputs can be different # depending on the processor kwargs. if uuid_item is None or hf_processor_mm_kwargs: # NOTE: use provided hash string to hash with kwargs # if available for better performance. item = uuid_item if uuid_item is not None else item hashes.append( hasher.hash_kwargs( hash_algorithm, model_id=model_id, **{modality: item}, **hf_processor_mm_kwargs, ) ) else: hashes.append(uuid_item) mm_hashes[modality] = hashes else: mm_hashes[modality] = [ hasher.hash_kwargs( hash_algorithm, model_id=model_id, **{modality: item}, **hf_processor_mm_kwargs, ) for item in data_items.get_all_items_for_hash() ] return mm_hashes