From 5bd76947819ecbe76c8f7bdab302fddb3ba88962 Mon Sep 17 00:00:00 2001 From: Raushan Turganbay Date: Mon, 10 Feb 2025 09:35:13 +0100 Subject: [PATCH] Processors: allow tuples of images when checking (#36084) allow tuples of images --- .../models/idefics2/processing_idefics2.py | 6 +++--- .../models/idefics3/processing_idefics3.py | 6 +++--- .../models/paligemma/processing_paligemma.py | 10 ++-------- src/transformers/models/pixtral/processing_pixtral.py | 8 ++++++-- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/transformers/models/idefics2/processing_idefics2.py b/src/transformers/models/idefics2/processing_idefics2.py index 8c1647cdf..9502f1e95 100644 --- a/src/transformers/models/idefics2/processing_idefics2.py +++ b/src/transformers/models/idefics2/processing_idefics2.py @@ -221,7 +221,7 @@ class Idefics2Processor(ProcessorMixin): if images is not None: if is_image_or_image_url(images): images = [[images]] - elif isinstance(images, list) and is_image_or_image_url(images[0]): + elif isinstance(images, (list, tuple)) and is_image_or_image_url(images[0]): if text is not None: if sum(n_images_in_text) != len(images): raise ValueError( @@ -238,8 +238,8 @@ class Idefics2Processor(ProcessorMixin): images = [images] elif ( - not isinstance(images, list) - and not isinstance(images[0], list) + not isinstance(images, (list, tuple)) + and not isinstance(images[0], (list, tuple)) and not is_image_or_image_url(images[0][0]) ): raise ValueError( diff --git a/src/transformers/models/idefics3/processing_idefics3.py b/src/transformers/models/idefics3/processing_idefics3.py index 40c8829fe..06be2d0c0 100644 --- a/src/transformers/models/idefics3/processing_idefics3.py +++ b/src/transformers/models/idefics3/processing_idefics3.py @@ -252,7 +252,7 @@ class Idefics3Processor(ProcessorMixin): if images is not None: if is_image_or_image_url(images): images = [[images]] - elif isinstance(images, list) and is_image_or_image_url(images[0]): + elif isinstance(images, (list, tuple)) and is_image_or_image_url(images[0]): if text is not None: if sum(n_images_in_text) != len(images): raise ValueError( @@ -268,8 +268,8 @@ class Idefics3Processor(ProcessorMixin): else: images = [images] elif ( - not isinstance(images, list) - and not isinstance(images[0], list) + not isinstance(images, (list, tuple)) + and not isinstance(images[0], (list, tuple)) and not is_image_or_image_url(images[0][0]) ): raise ValueError( diff --git a/src/transformers/models/paligemma/processing_paligemma.py b/src/transformers/models/paligemma/processing_paligemma.py index ac4b98e70..63ea785df 100644 --- a/src/transformers/models/paligemma/processing_paligemma.py +++ b/src/transformers/models/paligemma/processing_paligemma.py @@ -19,7 +19,7 @@ Processor class for PaliGemma. from typing import List, Optional, Union from ...feature_extraction_utils import BatchFeature -from ...image_utils import ImageInput, is_valid_image, make_flat_list_of_images +from ...image_utils import ImageInput, is_valid_image, make_flat_list_of_images, make_nested_list_of_images from ...processing_utils import ( ImagesKwargs, ProcessingKwargs, @@ -256,13 +256,7 @@ class PaliGemmaProcessor(ProcessorMixin): ) # make a nested list of lists to be able to iterate over the images and text below - if is_valid_image(images): - images = [[images]] - elif isinstance(images, list) and is_valid_image(images[0]): - images = [[image] for image in images] - elif not (isinstance(images, list) and isinstance(images[0], list) and is_valid_image(images[0][0])): - raise ValueError("images must be an image, list of images or list of list of images") - + images = make_nested_list_of_images(images) input_strings = [ build_string_from_input( prompt=prompt, diff --git a/src/transformers/models/pixtral/processing_pixtral.py b/src/transformers/models/pixtral/processing_pixtral.py index aea6375f7..d6130699f 100644 --- a/src/transformers/models/pixtral/processing_pixtral.py +++ b/src/transformers/models/pixtral/processing_pixtral.py @@ -154,9 +154,13 @@ class PixtralProcessor(ProcessorMixin): if images is not None: if is_image_or_image_url(images): images = [images] - elif isinstance(images, list) and is_image_or_image_url(images[0]): + elif isinstance(images, (list, tuple)) and is_image_or_image_url(images[0]): pass - elif isinstance(images, list) and isinstance(images[0], list) and is_image_or_image_url(images[0][0]): + elif ( + isinstance(images, (list, tuple)) + and isinstance(images[0], (list, tuple)) + and is_image_or_image_url(images[0][0]) + ): images = [image for sublist in images for image in sublist] else: raise ValueError(