diff --git a/requirements.txt b/requirements.txt index 209ad00..77598f2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ accelerate>=1.9.0 torch==2.6.0 torchaudio==2.6.0 -transformers==4.49.0 +transformers>=4.50.0,<5.0.0 fastapi>=0.116.1 librosa>=0.11.0 pydantic>=2.11.7 diff --git a/src/mimo_audio/modeling_mimo_audio.py b/src/mimo_audio/modeling_mimo_audio.py index f9681ad..95246a0 100644 --- a/src/mimo_audio/modeling_mimo_audio.py +++ b/src/mimo_audio/modeling_mimo_audio.py @@ -13,6 +13,7 @@ from transformers.generation.utils import ( GenerateOutput, GenerationConfig, + GenerationMixin, StoppingCriteriaList, is_deepspeed_zero3_enabled, ) @@ -221,7 +222,12 @@ def to_dict(self): } -class MiMoAudioForCausalLM(Qwen2PreTrainedModel): +class MiMoAudioForCausalLM(Qwen2PreTrainedModel, GenerationMixin): + # transformers>=4.50 移除了 PreTrainedModel._supports_cache_class, + # 但 prepare_inputs_for_generation 中仍引用它来决定是否传递 cache_position。 + # MiMo 使用 DynamicCache,显式声明为 True。 + _supports_cache_class = True + def __init__( self, config: MiMoAudioConfig | Qwen2Config, @@ -746,9 +752,10 @@ def slm_sample( this_peer_finished, synced_gpus, device=input_ids.device, - cur_len=cur_len, - max_length=max_length, ): + # 长度检查(transformers>=4.50 不再由 _has_unfinished_sequences 负责) + if cur_len >= max_length: + break # prepare model inputs model_inputs = self.prepare_inputs_for_generation(input_ids, **model_kwargs)