§
    ‚ŠtjËW  ã                   óŒ  — 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j)        ¦  «        Z*e! G d„ de¦  «        ¦   «         Z+e G d„ de¦  «        ¦   «         Z, G d„ dej)        ¦  «        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)¢Z3dS )*é    )Ú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k    rt          | j                 } || j        |¦  «        \  }| _
        |                      d|d¬¦  «         |                      d|                     ¦   «         d¬¦  «         |                      | j        ¦  «        }|                      d|d¬¦  «         d S )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         €úv/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/musicflamingo/modeling_musicflamingo.pyr)   z%MusicFlamingoRotaryEmbedding.__init__9   sû   ø€ Ý‰Œ×ÒÑÔÐØ"(Ô"@ˆÔØ$*Ô$BˆÔ!àˆŒàœÔ4°[ÔAˆŒØ!%Ô!EˆØŒ>˜YÒ&Ð&Ý.¨t¬~Ô>ˆLØ+7¨<¸¼ÀVÑ+LÔ+LÑ(ˆ�$Ô(à×Ò˜Z¨¸eÐÑDÔDÐDØ×ÒÐ0°(·.².Ñ2BÔ2BÈuÐÑUÔUÐUØ×7Ò7¸¼ÑFÔFˆØ×ÒÐ.°ÈEÐÑRÔRÐRÐRÐRó    r4   ztorch.deviceÚseq_lenÚreturnztorch.Tensorc                 óV  — | j         d         }| j                              dd¦  «        }t          | dd¦  «        p| j        | j        z  }t          ||z  ¦  «        }d}d|t          j        d|dt          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× :Ò :Ð;RÐTWÑ XÔ XÐÝ˜6 :¨tÑ4Ô4Ðh¸Ô8JÈfÔNhÑ8hˆÝ�(Ð2Ñ2Ñ3Ô3ˆàÐð Ø•U”\ ! S¨!µ5´;Ð?Ñ?Ô?×BÒBÈ&ÕX]ÔXcÐBÑdÔdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r8   Ú
timestampsc                 ó¤  — |dd…df                               | j        j        | j        j        ¬¦  «        }| j        j        dz  |z  }t          j        ||z  ¦  «        | j        z  }| 	                    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                        |¦  «        }	||	 	                    d¦  «        z  }|                     ¦   «         |                     ¦   «         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   sO  € ð
 # 1 1 1 a 4Ô(×+Ò+°4´=Ô3GÈtÌ}ÔObÐ+ÑcÔcˆØœ+Ô6¸Ñ:¸WÑDˆÝ œ; }°Ñ'FÑGÔGÈ$ÔJaÑaÐØ'×1Ò1°"Ñ5Ô5¸¼ÑEˆÝÔ.¨|¸QÀBÐGÑGÔGˆð $ A A A t¨Q¨Q¨Q JÔ/ˆØÔ)¨(¨7¨(Ô3°D¸!¸!¸!¸Q¸Q¸Q°JÔ?ˆ
Ý#4°\À:Ñ#NÔ#NÑ ˆ�jÝ”	˜<¨Ð4¸"Ð=Ñ=Ô=ˆØ�˜q‘¥2Ñ%×)Ò)¨%Ñ0Ô0ˆØ˜Ÿš¨Ñ+Ô+Ñ+ˆØ�yŠy‰{Œ{˜EŸIšI™KœKÐ'Ð'r8   c                 ó&  — t          j        t          | j        ¦  «        |j        |j        ¬¦  «        }|| j        z  dt          z  z  }|                     d¦  «        |z  }t          j        |dd¬¦  «        }| 	                    |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¥ TÔ%<Ñ!=Ô!=ÀhÄoÐ]eÔ]kÐlÑlÔlˆ	Ø Ô 7Ñ7¸1½r¹6ÑBˆ	Ø#×-Ò-¨bÑ1Ô1°HÑ<ˆÝÔ1°/À1È"ÐMÑMÔMˆØ×!Ò!¨¬Ð!Ñ7Ô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ÐÐÑðSð SÐ2ð Sð Sð Sð Sð Sð Sð$ à-1Ø+/Ø"ð*ð *Ø# dÑ*ð*à˜Ô(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ô	%ð	*ð *ð *ñ „\ð*ð> €U„]�_„_ð( &ð (°3ð (¸5ÀÈÀÔ;Pð (ð (ð (ñ „_ð(ð&8ð 8ð 8ð 8ð 8ð 8ð 8r8   r   c                   óv   ‡ — 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          ¦  «        r6|                     |j        ¦  «        }t          j        |j        |¦  «         d S d S 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ÔKˆLÝŒ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   ‡   sŠ   ø€ € € € € € àÐÐÑØÐØ(ÐØ&*Ð#ØÐØ#4Ð"5ÐØÐØ€NØ"&Ðà€U„]�_„_ð=ð =ð =ð =ñ „_ð=ð =ð =ð =ð =r8   rq   c                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )Ú 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†   ›   s7   € € € € € € ðð ð
 59Ð˜Ô*¨TÑ1Ð8Ð8Ñ8Ð8Ð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                 óJ  •— t          ¦   «                              ¦   «          t          j        |j        j        |j        j        |j        ¬¦  «        | _        t          |j
                 | _        t          j        |j        j        |j        j        |j        ¬¦  «        | _        d S )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ÐRXÔRgð
ñ 
ô 
ˆŒõ ˜&Ô5Ô6ˆŒÝœ	ØÔÔ*¨FÔ,>Ô,JÐQWÔQfð
ñ 
ô 
ˆŒˆˆr8   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S re   )r“   r•   r–   )r3   Úaudio_featuresÚhidden_statess      r7   rb   z(MusicFlamingoMultiModalProjector.forwardµ   s;   € ØŸš nÑ5Ô5ˆØŸš Ñ/Ô/ˆØŸš mÑ4Ô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‘R Ž } |                      d¬¦  «        \  }}t          j        | |fd¬¦  «        } |                      d¦  «        S )NrR   r   rS   éþÿÿÿ)ÚreshapeÚshapeÚunbindrG   ÚstackÚflatten)ÚxÚx1Úx2s      r7   Úrotate_halfr¥   ¼   sn   € ØˆŒ	Ð'�1”7˜3˜B˜3”<Ð' Ð' QÐ'Ð'Ð'€AØ�XŠX˜"ˆXÑÔ�F€BˆÝŒ�b�S˜"�I 2Ð&Ñ&Ô&€AØ�9Š9�R‰=Œ=Ðr8   c                 ór  — | j         }|                      t          j        ¦  «        } |                     | ¦  «        }|                     | ¦  «        }|j        d         }| d|d …f         }| dd |…f         }||z  t          |¦  «        |z  z   }t          j        ||fd¬¦  «                             |¦  «        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Ô3€MØ
�&Š&�Ñ
Ô
€CØ
�&Š&�Ñ
Ô
€CØŒi˜Œm€Gà  W X X Ô.€KØ˜C  ' ˜MÔ*€GØ˜‰}¥¨WÑ!5Ô!5¸Ñ!;Ñ<€GÝŒ9�g˜{Ð+°Ð4Ñ4Ô4×7Ò7¸ÑGÔGÐGr8   z’
    The MusicFlamingo model (fine-tuned Whisper encoder, multi-modal projector, Qwen2 language model),
    without a language modeling head.
    ©Úcustom_introc                   óø  ‡ — 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          |¦  «        | _        |                      ¦   «          d S re   )r(   r)   r   Úfrom_configr�   Úaudio_towerr‘   Úlanguage_modelr‹   Úmulti_modal_projectorr   Úpos_embÚ	post_initr—   s     €r7   r)   zMusicFlamingoModel.__init__Û   s|   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý$Ô0°Ô1DÑEÔEˆÔÝ'Ô3°FÔ4FÑGÔGˆÔÝ%EÀfÑ%MÔ%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                              |                     d¦  «                             t
          j        ¦  «        ¦  «        \  }}|                      |||j        d         ¦  «        }	|  	                    |	                     |j
        ¦  «        |j        d         ¬¦  «        \  }
}t          ||
|¦  «        }|                      |¦  «        }t          j        |j        d         |j
        ¬¦  «        ddd…f         |dd…df         k     }||                     |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ã   sc  € ð" (�tÔ'Øð
à 3Øð
ð 
ð ð	
ð 
ˆð %Ô6ˆØÔ*×KÒKÐL_×LcÒLcÐdfÑLgÔLg×LjÒLjÕkpÔkuÑLvÔLvÑwÔw‰ˆˆ<Ø×7Ò7¸	À<ÐQ^ÔQdÐegÔQhÑiÔiÐØ—<’<Ð 0× 3Ò 3°MÔ4HÑ IÔ IÐS`ÔSfÐgiÔSj�<ÑkÔk‰ˆˆSÝ-¨m¸SÀ#ÑFÔFˆØ×1Ò1°-Ñ@Ô@ˆõ ”\ ,Ô"4°QÔ"7ÀÔ@SÐTÑTÔTÐUYÐ[\Ð[\Ð[\ÐU\Ô]Ð`lÐmnÐmnÐmnÐptÐmtÔ`uÒuˆ
Ø%1°*·-²-ÀÔ@SÑ2TÔ2TÔ%UˆÔ"àÐr8   Úinputs_embedsr™   c                 ó>  — |€e| |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    }|                     d¦  «        }n|| j        j        k    }|                     ¦   «         }|j	        d         }| 
                    d¦  «                             |¦  «                             |j        ¦  «        }t          ||                              ¦   «         |                     ¦   «         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.
        N)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Ô2MÝ”˜Tœ[Ô7½u¼zÐR_ÔRfÐgÑgÔgñ3ô 3ò "Ðð "4×!7Ò!7¸Ñ!;Ô!;ÐÐà!*¨d¬kÔ.HÒ!HÐà+×/Ò/Ñ1Ô1ˆØ)Ô/°Ô2ÐØ/×9Ò9¸"Ñ=Ô=×GÒGÈÑVÔV×YÒYÐZgÔZnÑoÔoÐÝØÐ,Ô-×3Ò3Ñ5Ô5¸×9MÒ9MÑ9OÔ9OÒOØsÀ^ÐsÐsÐaqÐsÐsñ	
ô 	
ð 	
ð "Ð!r8   Úattention_maskÚposition_idsru   Ú	use_cachec	           	      óŠ  — |€ |                       ¦   «         |¦  «        }d}
|�f|�d|                      |||d¬¦  «        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Ô7¸	ÑBÔBˆMàˆØÐ%¨)Ð*?Ø×2Ò2ØÐ 3¸yÐVZð 3ñ ô äð ð
 "&×!:Ò!:Ø¨À|ð ";ñ "ô "Ðð *×8Ò8Ð9KÈ\Ï_Ê_Ð]jÔ]qÑMrÔMrÑsÔsˆMà%�$Ô%ð 
Ø'Ø)Ø%Ø+Øð
ð 
ð ð
ð 
ˆõ 0Ø%Ô7Ø#Ô3Ø!Ô/ØÔ)Ø ,ð
ñ 
ô 
ð 	
r8   rÇ   Úmax_post_lengthc                 ó\  — || j         j        k    }t          j        t          j        j                             |                     ¦   «         dd¬¦  «        d¬¦  «        }t          j        |dk    ¦  «        \  }}t          j        |dk    ¦  «        \  }}||z
   	                    t          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
  }|                     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ÐÝŒz�%œ(Ô-×1Ò1Ð2B×2FÒ2FÑ2HÔ2HÈ&ÐXYÐ1ÑZÔZÐ`aÐbÑbÔbˆÝ”K ¨¢	Ñ*Ô*‰	ˆˆ6Ý”+˜d bšjÑ)Ô)‰ˆˆ4Ø ™-×+Ò+­E¬JÑ7Ô7ˆà)×-Ò-Ñ/Ô/ˆØ'×+Ò+Ñ-Ô-ÐÝØÐ.Ò.ØsÀ^ÐsÐsÐaqÐsÐsñ	
ô 	
ð 	
ð "&¤Ô!=ÀÑ!AÐåŒL˜°Ô1DÍEÌMÐZÑZÔZÐ]sÑsð 	õ
 ”i¥¤¨Q°|Ô7JÐ!KÑ!KÔ!KÍUÌ\ÐZfÐlmÐMnÑMnÔMnÐorÐprÐorÔMsÐ tÑuÔuˆÝœ n¸!Ð<Ñ<Ô<ˆÝÔ+¨N¸KÈtÐTÑTÔTˆõ "Ô.Ø�EœL¨Ô)=¸aÔ)@ÈÔI\Ð]Ñ]Ô]ñ
ô 
Ðõ ŒL˜Ô+¨AÔ.°|Ô7JÐKÑKÔ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°   Ð   sT  ø€ € € € € ð €HØ€HØ#'Ð ðÐ2ð ð ð ð ð ð ð Ø€^ð wðñ ô ðàÔ)ðð #œ\ðð Ô#ð	ð
 Ð+Ô,ðð 
Ð+Ñ	+ðð ð ñô ñ Ôðð@"ØÔ)ð"Ø:?Ô:Kð"Ø]bÔ]nð"ð "ð "ð "ð0 Øð .2Ø37Ø37Ø.2Ø04Ø(,Ø26Ø!%ð.
ð .
àÔ# dÑ*ð.
ð Ô)¨DÑ0ð.
ð #œ\¨DÑ0ð	.
ð
 œ tÑ+ð.
ð Ô&¨Ñ-ð.
ð  ™ð.
ð Ô(¨4Ñ/ð.
ð ˜$‘;ð.
ð Ð+Ô,ð.
ð 
Ð1Ñ	1ð.
ð .
ð .
ñ „^ñ Ôð.
ð`'fàÔ#ð'fð Ô&ð'fð ð	'fð
 
Ô	ð'fð 'fð 'fð '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<   dS )	Ú#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Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ø48Ð˜Ô*¨TÑ1Ð8Ð8Ñ8Ð8Ð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                   óV  ‡ — 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¬¦  «        | _	        |  
                    ¦   «          d S )NFr�   )r(   r)   r°   rr   r	   r�   r‘   rD   Ú
vocab_sizeÚlm_headr·   r—   s     €r7   r)   z.MusicFlamingoForConditionalGeneration.__init__ž  se   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý'¨Ñ/Ô/ˆŒ
Ý”y Ô!3Ô!?ÀÔASÔA^ÐejÐkÑkÔ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Ô,¨^Ð=PÐR[ÐfÐfÐ_eÐfÐfÐfr8   r   rº   r¸   r¹   rÚ   rÛ   ru   rÌ   ÚlabelsrÜ   Úlogits_to_keepr»   r:   c                 ój  —  | j         d||||||||	dœ|¤Ž}|j        }t          |
t          ¦  «        rt	          |
 d¦  «        n|
}|                      |dd…|dd…f         ¦  «        }d}|�  | 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ˆÝ8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ%�4Ô%ð Ø f¸¼Ô9PÔ9[ðð Ø_eðð ˆDõ 3ØØØ#Ô3Ø!Ô/ØÔ)Ø 'Ô ;ð
ñ 
ô 
ð 	
r8   F)Úis_first_iterationr  c                óÞ   •— |                      dd ¦  «        }|                      dd ¦  «        } t          ¦   «         j        |i |¤Ž}|s|                     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å  s�   ø€ ØŸšÐ$4°dÑ;Ô;ˆØ$ŸjšjÐ)>ÀÑEÔEÐà<•u‘w”wÔ<¸dÐMÀfÐMÐMˆàð 	J \×%5Ò%5°kÀ5Ñ%IÔ%Ið 	JØÐ)Ø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  •  s¶  ø€ € € € € ð %6Ð#6Ð ØÐðÐ2ð ð ð ð ð ð ðgð gð gð Øð .2Ø37Ø37Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ð:
ð :
àÔ# dÑ*ð:
ð Ô)¨DÑ0ð:
ð #œ\¨DÑ0ð	:
ð
 œ tÑ+ð:
ð Ô&¨Ñ-ð:
ð  ™ð:
ð Ô(¨4Ñ/ð:
ð Ô  4Ñ'ð:
ð ˜$‘;ð:
ð ˜eœ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Ð 6Ð 6Ð 6Ð 6Ð 6Ø -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø uÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uØ Ð Ð Ð Ð Ð Ø <Ð <Ð <Ð <Ð <Ð <ð ÐÑÔð Ø€L€L€LðV8ð V8ð V8ð V8ð V8 2¤9ñ V8ô V8ð V8ðr ð=ð =ð =ð =ð = ?ñ =ô =ñ „ð=ð& ð9ð 9ð 9ð 9ð 9Ð'>ñ 9ô 9ñ „ð9ðð ð ð ð  r¤yñ ô ð ð.ð ð ð
Hð 
Hð 
Hð €ððñ ô ðbfð bfð bfð bfð bfÐ5ñ bfô bfñô ðbfðJ €ððñ ô ð
 ð9ð 9ð 9ð 9ð 9¨+ñ 9ô 9ñ „ñô ð9ð( €ððñ ô ð
Wð Wð Wð Wð WÐ,HÈ/ñ Wô Wñô ð
Wðt jÐ
iÐ
i€€€r8   