[Frontend][Multimodal] Allow skipping media data when UUIDs are provided. (#23950)
Signed-off-by: Roger Wang <hey@rogerw.io> Signed-off-by: Chenheli Hua <huachenheli@outlook.com> Signed-off-by: Roger Wang <hey@rogerw.me> Co-authored-by: Roger Wang <hey@rogerw.io> Co-authored-by: Roger Wang <hey@rogerw.me>
This commit is contained in:
@@ -1491,6 +1491,11 @@ class LLM:
|
||||
|
||||
for i, prompt in enumerate(it):
|
||||
|
||||
if isinstance(prompt, dict):
|
||||
self._validate_mm_data_and_uuids(
|
||||
prompt.get("multi_modal_data"),
|
||||
prompt.get("multi_modal_uuids"))
|
||||
|
||||
param = params[i] if isinstance(params, Sequence) else params
|
||||
|
||||
tokenization_kwargs: dict[str, Any] = {}
|
||||
@@ -1507,6 +1512,41 @@ class LLM:
|
||||
priority=priority[i] if priority else 0,
|
||||
)
|
||||
|
||||
def _validate_mm_data_and_uuids(
|
||||
self,
|
||||
multi_modal_data: Optional[Any], # MultiModalDataDict
|
||||
multi_modal_uuids: Optional[Any], # MultiModalUUIDDict
|
||||
):
|
||||
"""
|
||||
Validate that if any multi-modal data is skipped (i.e. None),
|
||||
then its corresponding UUID must be set.
|
||||
"""
|
||||
if multi_modal_data is None:
|
||||
return
|
||||
|
||||
for modality, data in multi_modal_data.items():
|
||||
if isinstance(data, list):
|
||||
for i, d in enumerate(data):
|
||||
if d is None:
|
||||
if multi_modal_uuids is None or modality not in multi_modal_uuids or multi_modal_uuids[ # noqa: E501
|
||||
modality] is None:
|
||||
raise ValueError(
|
||||
f"Multi-modal data for {modality} is None "
|
||||
f"but UUID is not provided")
|
||||
else:
|
||||
if len(
|
||||
multi_modal_uuids[modality]
|
||||
) <= i or multi_modal_uuids[modality][i] is None:
|
||||
raise ValueError(
|
||||
f"Multi-modal data for {modality} is None "
|
||||
f"but UUID is not provided")
|
||||
else:
|
||||
if data is None and (multi_modal_uuids is None
|
||||
or modality not in multi_modal_uuids
|
||||
or multi_modal_uuids[modality] is None):
|
||||
raise ValueError(f"Multi-modal data for {modality} is None"
|
||||
f" but UUID is not provided")
|
||||
|
||||
def _add_request(
|
||||
self,
|
||||
prompt: PromptType,
|
||||
|
||||
Reference in New Issue
Block a user