From 6a0a3c04622d452709021ac63f2cc8ba58b11ff6 Mon Sep 17 00:00:00 2001 From: DN6 Date: Tue, 21 Oct 2025 11:09:09 +0530 Subject: [PATCH 1/3] update --- .../pipelines/pipeline_loading_utils.py | 15 +++++++ src/diffusers/utils/__init__.py | 2 +- src/diffusers/utils/deprecation_utils.py | 42 +++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/diffusers/pipelines/pipeline_loading_utils.py b/src/diffusers/pipelines/pipeline_loading_utils.py index dd542145d3fa..026cd7b2dde0 100644 --- a/src/diffusers/pipelines/pipeline_loading_utils.py +++ b/src/diffusers/pipelines/pipeline_loading_utils.py @@ -33,6 +33,7 @@ ONNX_WEIGHTS_NAME, SAFETENSORS_WEIGHTS_NAME, WEIGHTS_NAME, + _should_remap_transformers_class, deprecate, get_class_from_dynamic_module, is_accelerate_available, @@ -356,6 +357,11 @@ def maybe_raise_or_warn( """Simple helper method to raise or warn in case incorrect module has been passed""" if not is_pipeline_module: library = importlib.import_module(library_name) + + # Handle deprecated Transformers classes + if library_name == "transformers": + class_name = _should_remap_transformers_class(class_name) or class_name + class_obj = getattr(library, class_name) class_candidates = {c: getattr(library, c, None) for c in importable_classes.keys()} @@ -390,6 +396,11 @@ def simple_get_class_obj(library_name, class_name): class_obj = getattr(pipeline_module, class_name) else: library = importlib.import_module(library_name) + + # Handle deprecated Transformers classes + if library_name == "transformers": + class_name = _should_remap_transformers_class(class_name) or class_name + class_obj = getattr(library, class_name) return class_obj @@ -416,6 +427,10 @@ def get_class_obj_and_candidates( # else we just import it from the library. library = importlib.import_module(library_name) + # Handle deprecated Transformers classes + if library_name == "transformers": + class_name = _should_remap_transformers_class(class_name) or class_name + class_obj = getattr(library, class_name) class_candidates = {c: getattr(library, c, None) for c in importable_classes.keys()} diff --git a/src/diffusers/utils/__init__.py b/src/diffusers/utils/__init__.py index 63932221b207..a36eef9589fe 100644 --- a/src/diffusers/utils/__init__.py +++ b/src/diffusers/utils/__init__.py @@ -38,7 +38,7 @@ WEIGHTS_INDEX_NAME, WEIGHTS_NAME, ) -from .deprecation_utils import deprecate +from .deprecation_utils import _should_remap_transformers_class, deprecate from .doc_utils import replace_example_docstring from .dynamic_modules_utils import get_class_from_dynamic_module from .export_utils import export_to_gif, export_to_obj, export_to_ply, export_to_video diff --git a/src/diffusers/utils/deprecation_utils.py b/src/diffusers/utils/deprecation_utils.py index 4f001b3047d6..78ffdb0a8d80 100644 --- a/src/diffusers/utils/deprecation_utils.py +++ b/src/diffusers/utils/deprecation_utils.py @@ -5,6 +5,48 @@ from packaging import version +# Mapping for deprecated Transformers classes to their replacements +# This is used to handle models that reference deprecated class names in their configs +# Reference: https://github.com/huggingface/transformers/issues/40822 +# Format: { +# "DeprecatedClassName": { +# "new_class": "NewClassName", +# "transformers_version": (">=", "5.0.0"), # (operation, version) tuple +# } +# } +TRANSFORMERS_CLASS_REMAPPING = { + "CLIPFeatureExtractor": { + "new_class": "CLIPImageProcessor", + "transformers_version": (">=", "4.57.0"), + }, +} + + +def _should_remap_transformers_class(class_name: str) -> Optional[str]: + """ + Check if a Transformers class should be remapped to a newer version. + + Args: + class_name: The name of the class to check + + Returns: + The new class name if remapping should occur, None otherwise + """ + if class_name not in TRANSFORMERS_CLASS_REMAPPING: + return None + + from .import_utils import is_transformers_version + + mapping = TRANSFORMERS_CLASS_REMAPPING[class_name] + operation, required_version = mapping["transformers_version"] + + # Only remap if the transformers version meets the requirement + if is_transformers_version(operation, required_version): + return mapping["new_class"] + + return None + + def deprecate(*args, take_from: Optional[Union[Dict, Any]] = None, standard_warn=True, stacklevel=2): from .. import __version__ From 027e387bb1fd48f6d2bcca052de28875b0d25ea2 Mon Sep 17 00:00:00 2001 From: DN6 Date: Tue, 21 Oct 2025 11:15:12 +0530 Subject: [PATCH 2/3] update --- src/diffusers/utils/deprecation_utils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/diffusers/utils/deprecation_utils.py b/src/diffusers/utils/deprecation_utils.py index 78ffdb0a8d80..5f276382b61e 100644 --- a/src/diffusers/utils/deprecation_utils.py +++ b/src/diffusers/utils/deprecation_utils.py @@ -14,10 +14,10 @@ # "transformers_version": (">=", "5.0.0"), # (operation, version) tuple # } # } -TRANSFORMERS_CLASS_REMAPPING = { +_TRANSFORMERS_CLASS_REMAPPING = { "CLIPFeatureExtractor": { "new_class": "CLIPImageProcessor", - "transformers_version": (">=", "4.57.0"), + "transformers_version": (">", "4.57.0"), }, } @@ -32,12 +32,12 @@ def _should_remap_transformers_class(class_name: str) -> Optional[str]: Returns: The new class name if remapping should occur, None otherwise """ - if class_name not in TRANSFORMERS_CLASS_REMAPPING: + if class_name not in _TRANSFORMERS_CLASS_REMAPPING: return None from .import_utils import is_transformers_version - mapping = TRANSFORMERS_CLASS_REMAPPING[class_name] + mapping = _TRANSFORMERS_CLASS_REMAPPING[class_name] operation, required_version = mapping["transformers_version"] # Only remap if the transformers version meets the requirement From a4415e2bd60b334ff8881a6e6abe32fd89cf1284 Mon Sep 17 00:00:00 2001 From: DN6 Date: Thu, 23 Oct 2025 08:18:57 +0530 Subject: [PATCH 3/3] update --- src/diffusers/pipelines/pipeline_loading_utils.py | 8 ++++---- src/diffusers/utils/__init__.py | 2 +- src/diffusers/utils/deprecation_utils.py | 8 +++++++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/diffusers/pipelines/pipeline_loading_utils.py b/src/diffusers/pipelines/pipeline_loading_utils.py index 026cd7b2dde0..c4085f6f2055 100644 --- a/src/diffusers/pipelines/pipeline_loading_utils.py +++ b/src/diffusers/pipelines/pipeline_loading_utils.py @@ -33,7 +33,7 @@ ONNX_WEIGHTS_NAME, SAFETENSORS_WEIGHTS_NAME, WEIGHTS_NAME, - _should_remap_transformers_class, + _maybe_remap_transformers_class, deprecate, get_class_from_dynamic_module, is_accelerate_available, @@ -360,7 +360,7 @@ def maybe_raise_or_warn( # Handle deprecated Transformers classes if library_name == "transformers": - class_name = _should_remap_transformers_class(class_name) or class_name + class_name = _maybe_remap_transformers_class(class_name) or class_name class_obj = getattr(library, class_name) class_candidates = {c: getattr(library, c, None) for c in importable_classes.keys()} @@ -399,7 +399,7 @@ def simple_get_class_obj(library_name, class_name): # Handle deprecated Transformers classes if library_name == "transformers": - class_name = _should_remap_transformers_class(class_name) or class_name + class_name = _maybe_remap_transformers_class(class_name) or class_name class_obj = getattr(library, class_name) @@ -429,7 +429,7 @@ def get_class_obj_and_candidates( # Handle deprecated Transformers classes if library_name == "transformers": - class_name = _should_remap_transformers_class(class_name) or class_name + class_name = _maybe_remap_transformers_class(class_name) or class_name class_obj = getattr(library, class_name) class_candidates = {c: getattr(library, c, None) for c in importable_classes.keys()} diff --git a/src/diffusers/utils/__init__.py b/src/diffusers/utils/__init__.py index a36eef9589fe..d8e1a5540100 100644 --- a/src/diffusers/utils/__init__.py +++ b/src/diffusers/utils/__init__.py @@ -38,7 +38,7 @@ WEIGHTS_INDEX_NAME, WEIGHTS_NAME, ) -from .deprecation_utils import _should_remap_transformers_class, deprecate +from .deprecation_utils import _maybe_remap_transformers_class, deprecate from .doc_utils import replace_example_docstring from .dynamic_modules_utils import get_class_from_dynamic_module from .export_utils import export_to_gif, export_to_obj, export_to_ply, export_to_video diff --git a/src/diffusers/utils/deprecation_utils.py b/src/diffusers/utils/deprecation_utils.py index 5f276382b61e..d76623541b9f 100644 --- a/src/diffusers/utils/deprecation_utils.py +++ b/src/diffusers/utils/deprecation_utils.py @@ -4,6 +4,10 @@ from packaging import version +from ..utils import logging + + +logger = logging.get_logger(__name__) # Mapping for deprecated Transformers classes to their replacements # This is used to handle models that reference deprecated class names in their configs @@ -22,7 +26,7 @@ } -def _should_remap_transformers_class(class_name: str) -> Optional[str]: +def _maybe_remap_transformers_class(class_name: str) -> Optional[str]: """ Check if a Transformers class should be remapped to a newer version. @@ -42,6 +46,8 @@ def _should_remap_transformers_class(class_name: str) -> Optional[str]: # Only remap if the transformers version meets the requirement if is_transformers_version(operation, required_version): + new_class = mapping["new_class"] + logger.warning(f"{class_name} appears to have been deprecated in transformers. Using {new_class} instead.") return mapping["new_class"] return None