Ë
    ÜÓ^jËW  ã                   ó8  — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZmZ ddlmZ ddlmZ ddlmZ ddlm Z m!Z!m"Z"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(  e#«       rd dlZ G d„ dejR                  «      Z*e! G d„ de«      «       Z+e G d„ de«      «       Z, G d„ dejR                  «      Z-d„ Z.d„ Z/ e!d¬ «       G d!„ d"e+«      «       Z0 e!d#¬ «      e G d$„ d%e«      «       «       Z1 e!d&¬ «       G d'„ d(e+e«      «       Z2g d)¢Z3y)*é    )ÚCallable)Ú	dataclass)Úpi)ÚOptional)ÚTensorÚbroadcast_tensorsÚnné   )Úinitialization)ÚACT2FN)ÚCache)ÚGenerationMixin)ÚBaseModelOutputWithPastÚBaseModelOutputWithPoolingÚModelOutput)ÚROPE_INIT_FUNCTIONS)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚis_torch_availableÚtorch_compilable_checké   )Ú	AutoModelé   )ÚMusicFlamingoConfigNc                   óÜ   ‡ — e Zd ZU dZej
                  ed<   ddefˆ fd„Ze		 	 	 ddedz  de
d   dedz  d	ed
ef   fd„«       Z ej                  «       deded	eeef   fd„«       Zd„ Zˆ xZS )ÚMusicFlamingoRotaryEmbeddinga·  Rotary time embedding module used by MusicFlamingo checkpoints.

    This is a checkpoint-faithful integration, not a direct implementation of the RoTE formulation described in
    (Goel et al., 2024): https://arxiv.org/abs/2410.12109. It applies axial rotary embeddings over the window index
    within each audio sample and the encoder time index within each window, then modulates both axes with absolute
    timestamps in seconds.
    Úinv_freqNÚconfigc                 ó  •— t         ‰| �  «        |j                  | _        |j                  | _        || _        | j
                  j                  d   | _        | j                  }| j                  dk7  rt        | j                     } || j
                  |«      \  }| _
        | j                  d|d¬«       | j                  d|j                  «       d¬«       | j                  | j                  «      }| j                  d|d¬«       y )NÚ	rope_typeÚdefaultr    F)Ú
persistentÚoriginal_inv_freqÚposition_angles)ÚsuperÚ__init__Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenr!   Úrope_parametersr#   Úcompute_default_rope_parametersr   Úattention_scalingÚregister_bufferÚcloneÚ_compute_position_anglesr    )Úselfr!   ÚdeviceÚrope_init_fnr    r'   Ú	__class__s         €úƒ/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/musicflamingo/modeling_musicflamingo.pyr)   z%MusicFlamingoRotaryEmbedding.__init__9   sà   ø€ Ü‰ÑÔØ"(×"@Ñ"@ˆÔØ$*×$BÑ$BˆÔ!àˆŒàŸ™×4Ñ4°[ÑAˆŒØ!%×!EÑ!EˆØ�>‰>˜YÒ&Ü.¨t¯~©~Ñ>ˆLÙ+7¸¿¹ÀVÓ+LÑ(ˆ�$Ô(à×Ñ˜Z¨¸eÐÔDØ×ÑÐ0°(·.±.Ó2BÈuÐÔUØ×7Ñ7¸¿¹ÓFˆØ×ÑÐ.°ÈEÐÕRó    r4   ztorch.deviceÚseq_lenÚreturnztorch.Tensorc                 ón  — | j                   d   }| j                   j                  dd«      }t        | dd«      xs | j                  | j                  z  }t        ||z  «      }d}d|t        j                  d|dt        j                  ¬«      j                  |t        j                  ¬	«      |z  z  z  }||fS )
a¨  
        Computes the inverse frequencies according to the original RoPE implementation
        Args:
            config ([`~transformers.PreTrainedConfig`]):
                The model configuration.
            device (`torch.device`):
                The device to use for initialization of the inverse frequencies.
            seq_len (`int`, *optional*):
                The current sequence length. Unused for this type of RoPE.
        Returns:
            Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
            post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
        Ú
rope_thetaÚpartial_rotary_factorg      ð?Úhead_dimNr   r   ©Údtype©r4   r@   )r-   ÚgetÚgetattrÚhidden_sizeÚnum_attention_headsÚintÚtorchÚarangeÚint64ÚtoÚfloat)	r!   r4   r9   Úbaser=   r>   ÚdimÚattention_factorr    s	            r7   r.   z<MusicFlamingoRotaryEmbedding.compute_default_rope_parametersK   s»   € ð& ×%Ñ% lÑ3ˆØ &× 6Ñ 6× :Ñ :Ð;RÐTWÓ XÐÜ˜6 :¨tÓ4Òh¸×8JÑ8JÈf×NhÑNhÑ8hˆÜ�(Ð2Ñ2Ó3ˆàÐð Ø”U—\‘\ ! S¨!´5·;±;Ô?×BÑBÈ&ÔX]×XcÑXcÐBÓdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r8   Ú
timestampsc                 ó®  — |dd…df   j                  | j                  j                  | j                  j                  ¬«      }| j                  j
                  dz  |z  }t        j                  ||z  «      | j                  z  }|j                  d«      | j                  z  }t        j                  |dd¬«      }|dd…ddd…f   }| j                  d| ddd…dd…f   }t        ||«      \  }}t        j                  ||fd¬«      }| dz  t        z  j                  |«      }	||	j                  d«      z  }|j                  «       |j!                  «       fS )zBCompute 2D axial rotary embeddings for window and time dimensions.Nr   rA   é   éÿÿÿÿr   ©rM   )rJ   r    r4   r@   r!   Úaudio_frame_steprG   Úroundr+   Ú	unsqueezeÚrepeat_interleaver'   r   Úcatr   ÚcosÚsin)
r3   rO   r9   Úwindow_startsÚwindow_durationÚwindow_positionsÚwindow_freqsÚ
time_freqsÚfreqsÚangles
             r7   Úforwardz$MusicFlamingoRotaryEmbedding.forwardk   s5  € ð
 #¢1 a 4Ñ(×+Ñ+°4·=±=×3GÑ3GÈtÏ}É}×ObÑObÐ+ÓcˆØŸ+™+×6Ñ6¸Ñ:¸WÑDˆÜ Ÿ;™; }°Ñ'FÓGÈ$×JaÑJaÑaÐØ'×1Ñ1°"Ó5¸¿¹ÑEˆÜ×.Ñ.¨|¸QÀBÔGˆð $¢A tªQ JÑ/ˆØ×)Ñ)¨(¨7Ð3°Dº!ºQ°JÑ?ˆ
Ü#4°\À:Ó#NÑ ˆ�jÜ—	‘	˜<¨Ð4¸"Ô=ˆØ�˜q‘¤2Ñ%×)Ñ)¨%Ó0ˆØ˜Ÿ™¨Ó+Ñ+ˆØ�y‰y‹{˜EŸI™I›KÐ'Ð'r8   c                 óB  — t        j                  t        | j                  «      |j                  |j
                  ¬«      }|| j                  z  dt        z  z  }|j                  d«      |z  }t        j                  |dd¬«      }|j                  |j
                  ¬«      S )NrA   r   rR   rS   r?   )
rG   rH   rF   r+   r4   r@   r   rV   rW   rJ   )r3   r    Ú	positionsr'   s       r7   r2   z5MusicFlamingoRotaryEmbedding._compute_position_angles   s„   € Ü—L‘L¤ T×%<Ñ%<Ó!=ÀhÇoÁoÐ]e×]kÑ]kÔlˆ	Ø × 7Ñ 7Ñ7¸1¼r¹6ÑBˆ	Ø#×-Ñ-¨bÓ1°HÑ<ˆÜ×1Ñ1°/À1È"ÔMˆØ×!Ñ!¨¯©Ð!Ó7Ð7r8   ©N)NNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rG   r   Ú__annotations__r   r)   Ústaticmethodr   rF   ÚtuplerK   r.   Úno_gradrb   r2   Ú__classcell__©r6   s   @r7   r   r   .   s»   ø… ñð �l‰lÓñSÐ2õ Sð$ à-1Ø+/Ø"ñ*Ø# dÑ*ð*à˜Ñ(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ñ	%ò	*ó ð*ð> €U‡]�]ƒ_ð( &ð (°3ð (¸5ÀÈÀÑ;Pò (ó ð(ö&8r8   r   c                   ót   ‡ — e Zd ZU eed<   dZdZdZdZdgZ	dZ
dZdZ ej                  «       ˆ fd„«       Zˆ xZS )ÚMusicFlamingoPreTrainedModelr!   Úmodel)ÚaudioÚtextTNÚpast_key_valuesc                 ó¼   •— t         ‰| �  |«       t        |t        «      r<|j	                  |j
                  «      }t        j                  |j                  |«       y y re   )	r(   Ú_init_weightsÚ
isinstancer   r2   r    ÚinitÚcopy_r'   )r3   ÚmoduleÚbuffer_valuer6   s      €r7   rw   z*MusicFlamingoPreTrainedModel._init_weights“   sH   ø€ ä‰Ñ˜fÔ%Ü�fÔ:Ô;Ø!×:Ñ:¸6¿?¹?ÓKˆLÜ�J‰J�v×-Ñ-¨|Õ<ð <r8   )rf   rg   rh   r   rj   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_attention_backendrG   rm   rw   rn   ro   s   @r7   rq   rq   ‡   sU   ø… àÓØÐØ(ÐØ&*Ð#ØÐØ#4Ð"5ÐØÐØ€NØ"&Ðà€U‡]�]ƒ_ó=ó ô=r8   rq   c                   ó:   — e Zd ZU dZdZej                  dz  ed<   y)Ú MusicFlamingoModelOutputWithPastzg
    audio_hidden_states (`torch.FloatTensor`, *optional*):
        Projected audio hidden states.
    NÚaudio_hidden_states)rf   rg   rh   ri   r‡   rG   ÚFloatTensorrj   © r8   r7   r†   r†   ›   s   … ñð
 59Ð˜×*Ñ*¨TÑ1Ô8r8   r†   c                   ó.   ‡ — e Zd ZdZdefˆ fd„Zd„ Zˆ xZS )Ú MusicFlamingoMultiModalProjectorz”
    Audio adaptor (small MLP) that projects MusicFlamingoEncoder features
    to the LLM embedding space so they can replace `<sound>` tokens.
    r!   c                 óŽ  •— t         ‰| �  «        t        j                  |j                  j
                  |j                  j
                  |j                  ¬«      | _        t        |j                     | _        t        j                  |j                  j
                  |j                  j
                  |j                  ¬«      | _        y )N©Úbias)r(   r)   r	   ÚLinearÚaudio_configrD   Útext_configÚprojector_biasÚlinear_1r   Úprojector_hidden_actÚactÚlinear_2©r3   r!   r6   s     €r7   r)   z)MusicFlamingoMultiModalProjector.__init__«   sŽ   ø€ Ü‰ÑÔÜŸ	™	Ø×Ñ×+Ñ+¨V×-?Ñ-?×-KÑ-KÐRX×RgÑRgô
ˆŒô ˜&×5Ñ5Ñ6ˆŒÜŸ	™	Ø×Ñ×*Ñ*¨F×,>Ñ,>×,JÑ,JÐQW×QfÑQfô
ˆ�r8   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S re   )r“   r•   r–   )r3   Úaudio_featuresÚhidden_statess      r7   rb   z(MusicFlamingoMultiModalProjector.forwardµ   s2   € ØŸ™ nÓ5ˆØŸ™ Ó/ˆØŸ™ mÓ4ˆØÐr8   )rf   rg   rh   ri   r   r)   rb   rn   ro   s   @r7   r‹   r‹   ¥   s   ø„ ñð

Ð2õ 
ör8   r‹   c                 óÈ   —  | j                   g | j                  d d ¢d‘d‘­Ž } | j                  d¬«      \  }}t        j                  | |fd¬«      } | j                  d«      S )NrR   r   rS   éþÿÿÿ)ÚreshapeÚshapeÚunbindrG   ÚstackÚflatten)ÚxÚx1Úx2s      r7   Úrotate_halfr¥   ¼   sa   € Øˆ�	‰	Ð'�1—7‘7˜3˜B�<Ð' Ð' QÒ'€AØ�X‰X˜"ˆXÓ�F€BˆÜ�‰�b�S˜"�I 2Ô&€AØ�9‰9�R‹=Ðr8   c                 óV  — | j                   }| j                  t        j                  «      } |j                  | «      }|j                  | «      }|j                  d   }| d|d …f   }| dd |…f   }||z  t        |«      |z  z   }t        j                  ||fd¬«      j                  |«      S )NrR   .rS   )r@   rJ   rG   Úfloat64rž   r¥   rX   )rš   rY   rZ   Úoriginal_dtypeÚrot_dimÚpassthroughÚrotateds          r7   Úapply_rotary_time_embr¬   Ã   s¥   € Ø"×(Ñ(€NØ!×$Ñ$¤U§]¡]Ó3€MØ
�&‰&�Ó
€CØ
�&‰&�Ó
€CØ�i‰i˜‰m€Gà  W¡X Ñ.€KØ˜C  ' ˜MÑ*€GØ˜‰}¤¨WÓ!5¸Ñ!;Ñ<€GÜ�9‰9�g˜{Ð+°Ô4×7Ñ7¸ÓGÐGr8   z’
    The MusicFlamingo model (fine-tuned Whisper encoder, multi-modal projector, Qwen2 language model),
    without a language modeling head.
    ©Úcustom_introc                   ód  ‡ — e Zd ZdZdZdZdefˆ fd„Ze e	d¬«      de
j                  de
j                  de
j                  d	ee   d
eez  f
d„«       «       Zde
j                  de
j                  de
j                  fd„Zee		 	 	 	 	 	 	 	 dde
j                  dz  de
j                  dz  de
j                  dz  de
j                  dz  de
j                  dz  dedz  de
j                  dz  dedz  d	ee   d
eez  fd„«       «       Zde
j                  de
j                  ded
e
j                  fd„Zˆ xZS )ÚMusicFlamingoModelNr!   c                 ó  •— t         ‰| �  |«       t        j                  |j                  «      | _        t        j                  |j                  «      | _        t        |«      | _	        t        |«      | _        | j                  «        y re   )r(   r)   r   Úfrom_configr�   Úaudio_towerr‘   Úlanguage_modelr‹   Úmulti_modal_projectorr   Úpos_embÚ	post_initr—   s     €r7   r)   zMusicFlamingoModel.__init__Û   se   ø€ Ü‰Ñ˜Ô Ü$×0Ñ0°×1DÑ1DÓEˆÔÜ'×3Ñ3°F×4FÑ4FÓGˆÔÜ%EÀfÓ%MˆÔ"Ü3°FÓ;ˆŒØ�‰Õr8   zŸThis method is used to get the audio embeddings from input features (a log mel spectrogram), meaning inferring the audio encoder and the multi-modal projector.r­   Úinput_featuresÚinput_features_maskÚ	input_idsÚkwargsr:   c                 ó–  —  | j                   |f|ddœ|¤Ž}|j                  }| j                   j                  |j                  d«      j	                  t
        j                  «      «      \  }}| j                  |||j                  d   «      }	| j                  |	j	                  |j                  «      |j                  d   ¬«      \  }
}t        ||
|«      }| j                  |«      }t        j                  |j                  d   |j                  ¬«      ddd…f   |dd…df   k  }||j	                  |j                  «         |_        |S )	az  
        input_features_mask (`torch.Tensor` of shape `(batch_size, feature_sequence_length)`):
            Mask to avoid performing attention on padded feature indices.
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            Token ids containing the audio token ID placeholders, for reconstructing rotary time embedding timestamps.
        T)r¹   Úreturn_dictrR   rœ   )r9   r   ©r4   N)r³   Úlast_hidden_stateÚ _get_feat_extract_output_lengthsÚsumrJ   rG   ÚlongÚ_build_audio_timestampsrž   r¶   r4   r¬   rµ   rH   Úpooler_output)r3   r¸   r¹   rº   r»   Úaudio_outputrš   Ú_Úpost_lengthsÚaudio_timestampsrY   rZ   Úaudio_embedsÚ
valid_masks                 r7   Úget_audio_featuresz%MusicFlamingoModel.get_audio_featuresã   sL  € ð" (�t×'Ñ'Øð
à 3Øñ
ð ñ	
ˆð %×6Ñ6ˆØ×*Ñ*×KÑKÐL_×LcÑLcÐdfÓLg×LjÑLjÔkp×kuÑkuÓLvÓw‰ˆˆ<Ø×7Ñ7¸	À<ÐQ^×QdÑQdÐegÑQhÓiÐØ—<‘<Ð 0× 3Ñ 3°M×4HÑ4HÓ IÐS`×SfÑSfÐgiÑSj�<Ók‰ˆˆSÜ-¨m¸SÀ#ÓFˆØ×1Ñ1°-Ó@ˆô —\‘\ ,×"4Ñ"4°QÑ"7À×@SÑ@SÔTÐUYÒ[\ÐU\Ñ]Ð`lÒmnÐptÐmtÑ`uÑuˆ
Ø%1°*·-±-À×@SÑ@SÓ2TÑ%UˆÔ"àÐr8   Úinputs_embedsr™   c                 ó.  — |€m| | j                  «       t        j                  | j                  j                  t        j
                  |j                  ¬«      «      k(  }|j                  d«      }n|| j                  j                  k(  }|j                  «       }|j                  d   }|j                  d«      j                  |«      j                  |j                  «      }t        ||   j                  «       |j                  «       k(  d|› d|› �«       |S )zï
        Obtains multimodal placeholder mask from `input_ids` or `inputs_embeds`, and checks that the placeholder token count is
        equal to the length of multimodal features. If the lengths are different, an error is raised.
        )r@   r4   rR   r   ú6Audio features and audio tokens do not match, tokens: ú, features: )Úget_input_embeddingsrG   Útensorr!   Úaudio_token_idrÂ   r4   ÚallrÁ   rž   rV   Ú	expand_asrJ   r   Únumel)r3   rº   rÌ   r™   Úspecial_audio_maskÚn_audio_tokensÚn_audio_featuress          r7   Úget_placeholder_maskz'MusicFlamingoModel.get_placeholder_mask  s  € ð ÐØ!.Ð2M°$×2KÑ2KÓ2MÜ—‘˜TŸ[™[×7Ñ7¼u¿z¹zÐR_×RfÑRfÔgó3ñ "Ðð "4×!7Ñ!7¸Ó!;Ñà!*¨d¯k©k×.HÑ.HÑ!HÐà+×/Ñ/Ó1ˆØ)×/Ñ/°Ñ2ÐØ/×9Ñ9¸"Ó=×GÑGÈÓV×YÑYÐZg×ZnÑZnÓoÐÜØÐ,Ñ-×3Ñ3Ó5¸×9MÑ9MÓ9OÑOØDÀ^ÐDTÐT`ÐaqÐ`rÐsô	
ð "Ð!r8   Úattention_maskÚposition_idsru   Ú	use_cachec	           	      óš  — |€ | j                  «       |«      }d}
|�`|�^| j                  |||d¬«      j                  }
| j                  |||
¬«      }|j	                  ||
j                  |j                  «      «      } | j                  d|||||dœ|	¤Ž}t        |j                  |j                  |j                  |j                  |
¬«      S )z³
        input_features_mask (`torch.Tensor` of shape `(batch_size, feature_sequence_length)`):
            Mask to avoid performing attention on padding feature indices.
        NT)rº   r½   )rÌ   r™   )rÌ   rÚ   rÛ   ru   rÜ   )r¿   ru   rš   Ú
attentionsr‡   r‰   )rÐ   rË   rÄ   rÙ   Úmasked_scatterrJ   r4   r´   r†   r¿   ru   rš   rÞ   )r3   rº   r¸   r¹   rÚ   rÛ   ru   rÌ   rÜ   r»   rÉ   rÖ   Úoutputss                r7   rb   zMusicFlamingoModel.forward  s  € ð$ Ð Ø7˜D×5Ñ5Ó7¸	ÓBˆMàˆØÐ%¨)Ð*?Ø×2Ñ2ØÐ 3¸yÐVZð 3ó ç‰mð ð
 "&×!:Ñ!:Ø¨À|ð ";ó "Ðð *×8Ñ8Ð9KÈ\Ï_É_Ð]j×]qÑ]qÓMrÓsˆMà%�$×%Ñ%ð 
Ø'Ø)Ø%Ø+Øñ
ð ñ
ˆô 0Ø%×7Ñ7Ø#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø ,ô
ð 	
r8   rÇ   Úmax_post_lengthc                 óž  — || j                   j                  k(  }t        j                  t        j                  j
                  j                  |j                  «       dd¬«      d¬«      }t        j                  |dk(  «      \  }}t        j                  |dk(  «      \  }}||z
  j                  t        j                  «      }	|j                  «       }
|j                  «       }t        |
|k(  d|
› d|› �«       | j                   j                  d	z  }t        j                  ||j                  t        j                   ¬
«      |z  }t        j"                  t        j$                  d|j                  ¬«      t        j&                  |d¬«      d d g«      }t        j&                  |	d¬«      }t        j(                  ||d¬«      }t        j(                  |t        j                  |	j*                  d   |j                  ¬«      «      }t        j                  |j*                  d   |j                  ¬«      ||   z
  }|j-                  d«      |z  |z  |z   S )N)r   r   r   )Úvaluer   rS   rR   rÎ   rÏ   rQ   rA   r¾   T)Úright)r!   rÒ   rG   Údiffr	   Ú
functionalÚpadrF   ÚwhererJ   rÂ   rÁ   r   rT   rH   r4   Úfloat32rX   ÚzerosÚcumsumÚsearchsortedrž   rV   )r3   rº   rÇ   rá   Úaudio_token_maskrå   rÆ   ÚstartsÚendsÚsample_lengthsr×   rØ   Úaudio_embed_frame_stepÚframe_offsetsÚcumsum_postÚcumsum_samplesÚsample_indicesÚsample_start_rowsÚwindow_indicess                      r7   rÃ   z*MusicFlamingoModel._build_audio_timestampsQ  sý  € ð %¨¯©×(BÑ(BÑBÐÜ�z‰zœ%Ÿ(™(×-Ñ-×1Ñ1Ð2B×2FÑ2FÓ2HÈ&ÐXYÐ1ÓZÐ`aÔbˆÜ—K‘K ¨¡	Ó*‰	ˆˆ6Ü—+‘+˜d b™jÓ)‰ˆˆ4Ø ™-×+Ñ+¬E¯J©JÓ7ˆà)×-Ñ-Ó/ˆØ'×+Ñ+Ó-ÐÜØÐ.Ñ.ØDÀ^ÐDTÐT`ÐaqÐ`rÐsô	
ð "&§¡×!=Ñ!=ÀÑ!AÐä�L‰L˜°×1DÑ1DÌEÏMÉMÔZÐ]sÑsð 	ô
 —i‘i¤§¡¨Q°|×7JÑ7JÔ!KÌUÏ\É\ÐZfÐlmÔMnÐorÐprÐMsÐ tÓuˆÜŸ™ n¸!Ô<ˆÜ×+Ñ+¨N¸KÈtÔTˆô "×.Ñ.ØœEŸL™L¨×)=Ñ)=¸aÑ)@È×I\ÑI\Ô]ó
Ðô �L‰L˜×+Ñ+¨AÑ.°|×7JÑ7JÔKÐN_Ð`nÑNoÑoð 	ð
 ×'Ñ'¨Ó*¨_Ñ<Ð?UÑUÐXeÑeÐer8   )NNNNNNNN)rf   rg   rh   Ú_tp_planÚ_pp_planÚ_keep_in_fp32_modules_strictr   r)   r   r   rG   rˆ   r   Ú
LongTensorr   r   rl   r   rË   rÙ   r   Úboolr†   rb   rF   rÃ   rn   ro   s   @r7   r°   r°   Ð   sò  ø„ ð €HØ€HØ#'Ð ðÐ2õ ð Ùð wôðà×)Ñ)ðð #Ÿ\™\ðð ×#Ñ#ð	ð
 Ð+Ñ,ðð 
Ð+Ñ	+òóó ðð@"Ø×)Ñ)ð"Ø:?×:KÑ:Kð"Ø]b×]nÑ]nó"ð0 Øð .2Ø37Ø37Ø.2Ø04Ø(,Ø26Ø!%ñ.
à×#Ñ# dÑ*ð.
ð ×)Ñ)¨DÑ0ð.
ð #Ÿ\™\¨DÑ0ð	.
ð
 Ÿ™ tÑ+ð.
ð ×&Ñ&¨Ñ-ð.
ð  ™ð.
ð ×(Ñ(¨4Ñ/ð.
ð ˜$‘;ð.
ð Ð+Ñ,ð.
ð 
Ð1Ñ	1ò.
ó ó ð.
ð`'fà×#Ñ#ð'fð ×&Ñ&ð'fð ð	'fð
 
×	Ñ	÷'fr8   r°   zY
    Base class for MusicFlamingo causal language model (or autoregressive) outputs.
    c                   óú   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	e
dz  ed<   dZeej                     dz  ed<   dZeej                     dz  ed<   dZej                  dz  ed<   y)	Ú#MusicFlamingoCausalLMOutputWithPastaV  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction).
    logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the language modeling head.
    past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
        It is a [`~cache_utils.Cache`] instance.
    audio_hidden_states (`torch.FloatTensor`, *optional*):
        Hidden states of the audio encoder after projection.
    NÚlossÚlogitsru   rš   rÞ   r‡   )rf   rg   rh   ri   rÿ   rG   rˆ   rj   r   ru   r   rš   rl   rÞ   r‡   r‰   r8   r7   rþ   rþ   {  s‹   … ñ	ð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø$(€O�U˜T‘\Ó(Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ó6Ø48Ð˜×*Ñ*¨TÑ1Ô8r8   rþ   z�
    The MusicFlamingo model which consists of a fine-tuned Whisper encoder, rotary time embedding, a multi-modal projector, and a Qwen2 language model.
    c                   ó”  ‡ — e Zd ZdgZdZdefˆ fd„Zd„ Zee		 	 	 	 	 	 	 	 	 	 dde
j                  dz  de
j                  dz  de
j                  dz  d	e
j                  dz  d
e
j                  dz  dedz  de
j                  dz  de
j                  dz  dedz  dee
j                  z  dee   deez  fd„«       «       Zddœdefˆ fd„Zˆ xZS )Ú%MusicFlamingoForConditionalGenerationÚembed_positionsNr!   c                 óî   •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  j                  |j                  j                  d¬«      | _	        | j                  «        y )NFr�   )r(   r)   r°   rr   r	   r�   r‘   rD   Ú
vocab_sizeÚlm_headr·   r—   s     €r7   r)   z.MusicFlamingoForConditionalGeneration.__init__ž  sS   ø€ Ü‰Ñ˜Ô Ü'¨Ó/ˆŒ
Ü—y‘y ×!3Ñ!3×!?Ñ!?À×ASÑAS×A^ÑA^ÐejÔkˆŒØ�‰Õr8   c                 ó@   —  | j                   j                  |||fi |¤ŽS re   )rr   rË   )r3   r¸   r¹   rº   r»   s        r7   rË   z8MusicFlamingoForConditionalGeneration.get_audio_features¤  s%   € Ø,ˆt�z‰z×,Ñ,¨^Ð=PÐR[ÑfÐ_eÑfÐfr8   rº   r¸   r¹   rÚ   rÛ   ru   rÌ   ÚlabelsrÜ   Úlogits_to_keepr»   r:   c                 ó¦  —  | j                   d||||||||	dœ|¤Ž}|j                  }t        |
t        «      rt	        |
 d«      n|
}| j                  |dd…|dd…f   «      }d}|�4 | j                  d||| j                  j                  j                  dœ|¤Ž}t        |||j                  |j                  |j                  |j                  ¬«      S )a¯  
        input_features_mask (`torch.Tensor` of shape `(batch_size, feature_sequence_length)`):
            Mask to avoid performing attention on padding feature indices.
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss.

        Example:

        ```python
        >>> from transformers import MusicFlamingoForConditionalGeneration, AutoProcessor

        >>> model_id = "nvidia/audio-flamingo-3-hf"
        >>> processor = AutoProcessor.from_pretrained(model_id)
        >>> model = MusicFlamingoForConditionalGeneration.from_pretrained(model_id, device_map="auto")
        ```)rº   r¸   r¹   rÚ   rÛ   ru   rÌ   rÜ   N)r   r  r  )rÿ   r   ru   rš   rÞ   r‡   r‰   )rr   r¿   rx   rF   Úslicer  Úloss_functionr!   r‘   r  rþ   ru   rš   rÞ   r‡   )r3   rº   r¸   r¹   rÚ   rÛ   ru   rÌ   r  rÜ   r	  r»   rà   rš   Úslice_indicesr   rÿ   s                    r7   rb   z-MusicFlamingoForConditionalGeneration.forward§  s÷   € ð> �$—*‘*ð 

ØØ)Ø 3Ø)Ø%Ø+Ø'Øñ

ð ñ

ˆð  ×1Ñ1ˆÜ8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ%ð Ø f¸¿¹×9PÑ9P×9[Ñ9[ñØ_eñˆDô 3ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø '× ;Ñ ;ô
ð 	
r8   F)Úis_first_iterationr  c                ó²   •— |j                  dd «      }|j                  dd «      }t        ‰| �  |i |¤Ž}|s|j                  dd«      s|�||d<   |�||d<   |S )Nr¸   r¹   rÜ   F)Úpopr(   Úprepare_inputs_for_generationrB   )r3   r  Úargsr»   r¸   r¹   Úmodel_inputsr6   s          €r7   r  zCMusicFlamingoForConditionalGeneration.prepare_inputs_for_generationå  st   ø€ ØŸ™Ð$4°dÓ;ˆØ$Ÿj™jÐ)>ÀÓEÐä‘wÑ<¸dÐMÀfÑMˆá \×%5Ñ%5°kÀ5Ô%IØÐ)Ø1?�Ð-Ñ.Ø"Ð.Ø6I�Ð2Ñ3àÐr8   )
NNNNNNNNNr   )rf   rg   rh   rú   Ú_tied_weights_keysr   r)   rË   r   r   rG   rû   rˆ   r   r   rü   rF   r   r   rl   rþ   rb   r  rn   ro   s   @r7   r  r  •  sX  ø„ ð %6Ð#6Ð ØÐðÐ2õ ògð Øð .2Ø37Ø37Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñ:
à×#Ñ# dÑ*ð:
ð ×)Ñ)¨DÑ0ð:
ð #Ÿ\™\¨DÑ0ð	:
ð
 Ÿ™ tÑ+ð:
ð ×&Ñ&¨Ñ-ð:
ð  ™ð:
ð ×(Ñ(¨4Ñ/ð:
ð × Ñ  4Ñ'ð:
ð ˜$‘;ð:
ð ˜eŸl™lÑ*ð:
ð Ð+Ñ,ð:
ð 
Ð4Ñ	4ò:
ó ó ð:
ðx OTò Àt÷ ñ r8   r  )r  r°   rq   )4Úcollections.abcr   Údataclassesr   Úmathr   Útypingr   rG   r   r   r	   Ú r   ry   Úactivationsr   Úcache_utilsr   Ú
generationr   Úmodeling_outputsr   r   r   Úmodeling_rope_utilsr   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úautor   Úconfiguration_musicflamingor   ÚModuler   rq   r†   r‹   r¥   r¬   r°   rþ   r  Ú__all__r‰   r8   r7   ú<module>r&     s@  ðõ, %Ý !Ý Ý ç /Ñ /å &Ý !Ý  Ý )ß `Ñ `Ý 6Ý -Ý &ß uÕ uÝ Ý <ñ ÔÛôV8 2§9¡9ô V8ðr ô= ?ó =ó ð=ð& ô9Ð'>ó 9ó ð9ô r§y¡yô ò.ò
Hñ ðôôbfÐ5ó bfóðbfñJ ðôð
 ô9¨+ó 9ó óð9ñ( ðôô
WÐ,HÈ/ó Wóð
Wòt j�r8   