From a8e6364e66453ed2f2ac06ef1811e39d8c2a59ab Mon Sep 17 00:00:00 2001 From: DoubleMathew Date: Thu, 9 Oct 2025 10:39:50 -0500 Subject: [PATCH] Handle transformers rename from PretrainedConfig to PreTrainedConfig --- unsloth_zoo/compiler.py | 2 +- unsloth_zoo/empty_model.py | 7 ++++++- unsloth_zoo/hf_utils.py | 7 ++++++- unsloth_zoo/patching_utils.py | 7 ++++++- unsloth_zoo/saving_utils.py | 2 +- unsloth_zoo/temporary_patches/gpt_oss.py | 8 +++++++- 6 files changed, 27 insertions(+), 6 deletions(-) diff --git a/unsloth_zoo/compiler.py b/unsloth_zoo/compiler.py index 3125db73b..e9114445b 100644 --- a/unsloth_zoo/compiler.py +++ b/unsloth_zoo/compiler.py @@ -2148,7 +2148,7 @@ def replaced_tqdm(*args, **kwargs): # Get all functions as well functions = [x for x in functions if x not in torch_modules or not compile_torch_modules or not compile_custom_modules] - # Get all PretrainedModel classes + # Get all PreTrainedModel classes pretrained_modules = re.findall(r"class ([^\s]{1,})\(.+?PreTrainedModel\)", full_source) # Remove if no forward function diff --git a/unsloth_zoo/empty_model.py b/unsloth_zoo/empty_model.py index d73cf05eb..36cfce8b1 100644 --- a/unsloth_zoo/empty_model.py +++ b/unsloth_zoo/empty_model.py @@ -47,7 +47,12 @@ def compare_dicts(orig_dict, new_dict, prefix=""): print(f"Dict key {key_path} type mismatch: original {type(orig_val)} != new model {type(new_val)}") def compare_attributes(original_model, new_model): - from transformers.configuration_utils import PretrainedConfig + try: + from transformers.configuration_utils import PreTrainedConfig + PretrainedConfig = PreTrainedConfig + except: + from transformers.configuration_utils import PretrainedConfig + print("=== ATTRIBUTE COMPARISON REPORT ===") missing_attrs = [] type_mismatches = [] diff --git a/unsloth_zoo/hf_utils.py b/unsloth_zoo/hf_utils.py index ee7763a31..5f0477fca 100644 --- a/unsloth_zoo/hf_utils.py +++ b/unsloth_zoo/hf_utils.py @@ -21,7 +21,12 @@ import json import re from .log import logger -from transformers import PretrainedConfig +try: + from transformers import PreTrainedConfig + PretrainedConfig = PreTrainedConfig +except: + from transformers import PretrainedConfig + HAS_TORCH_DTYPE = "torch_dtype" in PretrainedConfig.__doc__ __all__ = [ diff --git a/unsloth_zoo/patching_utils.py b/unsloth_zoo/patching_utils.py index 0f1288c68..fd9c9ef05 100644 --- a/unsloth_zoo/patching_utils.py +++ b/unsloth_zoo/patching_utils.py @@ -242,7 +242,12 @@ def verify_and_set_device(module,): def patch_to_dict(): from functools import wraps - from transformers.configuration_utils import PretrainedConfig + try: + from transformers.configuration_utils import PreTrainedConfig + PretrainedConfig = PreTrainedConfig + except: + from transformers.configuration_utils import PretrainedConfig + from .hf_utils import _normalize_dict_dtypes original_to_dict = PretrainedConfig.to_dict original_to_diff_dict = PretrainedConfig.to_diff_dict diff --git a/unsloth_zoo/saving_utils.py b/unsloth_zoo/saving_utils.py index eb674081d..bcf8b7e8b 100644 --- a/unsloth_zoo/saving_utils.py +++ b/unsloth_zoo/saving_utils.py @@ -1780,7 +1780,7 @@ def detect_keys_format(keys_to_check, forward_mapping): def _convert_lora_keys_to_safetensor_format( lora_weights, # Global dict of LoraStats objects safetensor_keys, # List of keys from the CURRENT shard - model_class_name="PretrainedModel" # The actual model instance (e.g. Qwen2VLForConditionalGeneration) + model_class_name="PreTrainedModel" # The actual model instance (e.g. Qwen2VLForConditionalGeneration) ): import re diff --git a/unsloth_zoo/temporary_patches/gpt_oss.py b/unsloth_zoo/temporary_patches/gpt_oss.py index 0a369a7e9..06901f0d6 100644 --- a/unsloth_zoo/temporary_patches/gpt_oss.py +++ b/unsloth_zoo/temporary_patches/gpt_oss.py @@ -1414,7 +1414,13 @@ def encode_conversations_with_harmony( # RuntimeError: Unsloth: Failed to load model. Both AutoConfig and PeftConfig loading failed. # AutoConfig error: 'GptOssConfig' object has no attribute 'max_position_embeddings' try: - from transformers.configuration_utils import PretrainedConfig, layer_type_validation + from transformers.configuration_utils import layer_type_validation + try: + from transformers.configuration_utils import PreTrainedConfig + PretrainedConfig = PreTrainedConfig + except: + from transformers.configuration_utils import PretrainedConfig + from transformers.modeling_rope_utils import rope_config_validation class Old_GptOssConfig(PretrainedConfig):