§
    ‚Štj–D  ã                   óv  — d dl mZ d dlmZ d dlmZ d dl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 ddlmZ ddlmZmZmZmZmZmZ ddlmZ ddlm Z m!Z!m"Z"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z)  ej*        e+¦  «        Z, e¦   «         rd dlZ ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z-e G d„ de%¦  «        ¦   «         Z.d„ Z/d„ Z0 G d„ de)¦  «        Z1 G d„ de#¦  «        Z2e G d „ d!e"¦  «        ¦   «         Z3 G d"„ d#e!¦  «        Z4 ed$¬%¦  «         G d&„ d'e ¦  «        ¦   «         Z5g d(¢Z6dS ))é    )Ú	dataclass)Úpi)Ústrict)ÚTensorÚbroadcast_tensorsé   )Úinitialization)ÚCache)ÚPreTrainedConfig)ÚBaseModelOutputWithPooling)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚis_torch_availableÚloggingÚtorch_compilable_checké   )ÚAudioFlamingo3Config)Ú&AudioFlamingo3ForConditionalGenerationÚAudioFlamingo3ModelÚ!AudioFlamingo3ModelOutputWithPastÚAudioFlamingo3PreTrainedModel)ÚAudioFlamingo3Processor)ÚCONFIG_MAPPING)ÚMoonshineRotaryEmbeddingNznvidia/music-flamingo-2601-hf)Ú
checkpointc                   óX   — e Zd ZU dZdZeed<   dZeed<   dZe	ed<   dZ
edz  ed	<   d
„ ZdS )ÚMusicFlamingoConfiga…  
    audio_bos_token_id (`int`, *optional*, defaults to 151670):
        The beginning-of-audio token index used to mark the start of audio spans.
    audio_eos_token_id (`int`, *optional*, defaults to 151671):
        The end-of-audio token index used to mark the end of audio spans.
    audio_frame_step (`float`, *optional*, defaults to 0.01):
        Duration in seconds of one input mel frame (trained with hop_length 160 at sampling_rate 16000).

    Example:

    ```python
    >>> from transformers import MusicFlamingoForConditionalGeneration, MusicFlamingoConfig, AudioFlamingo3EncoderConfig, Qwen2Config

    >>> # Initializing an MusicFlamingoEncoder config
    >>> audio_config = AudioFlamingo3EncoderConfig()

    >>> # Initializing a Qwen2 config
    >>> text_config = Qwen2Config()

    >>> # Initializing an MusicFlamingo configuration
    >>> configuration = MusicFlamingoConfig(audio_config, text_config)

    >>> # Initializing a model from the musicflamingo style configuration
    >>> model = MusicFlamingoForConditionalGeneration(configuration)

    >>> # Accessing the model configuration
    >>> configuration = model.config
    ```ivP Úaudio_bos_token_idiwP Úaudio_eos_token_idg{®Gáz„?Úaudio_frame_stepNÚrope_parametersc                 ó”  — | j         €ddddœ| _         t          | j        t          ¦  «        rA| j        d         dv r
d| j        d<   t	          | j        d                  d
i | j        ¤Ž| _        n | j        €t	          d         ¦   «         | _        t          | j        t          ¦  «        rK| j                             dd¦  «        | j        d<   t	          | j        d                  d
i | j        ¤Ž| _        n | j        €t	          d         ¦   «         | _        | j         d	         | _        | j        j        | _	        t          j        | fi |¤Ž d S )NÚdefaultg     À’@gš™™™™™É?)Ú	rope_typeÚ
rope_thetaÚpartial_rotary_factorÚ
model_type)NÚmusicflamingo_encoderÚaudioflamingo3_encoderÚqwen2r(   © )r$   Ú
isinstanceÚaudio_configÚdictr   Útext_configÚgetÚmax_position_embeddingsÚhidden_sizeÚhead_dimr   Ú__post_init__)ÚselfÚkwargss     úu/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/musicflamingo/modular_musicflamingo.pyr7   z!MusicFlamingoConfig.__post_init__\   s[  € ØÔÐ'à&Ø$Ø),ð$ð $ˆDÔ õ
 �dÔ'­Ñ.Ô.ð 	KØÔ  Ô.Ð2QÐQÐQØ2J�Ô! ,Ñ/å .¨tÔ/@ÀÔ/NÔ OÐ dÐ dÐRVÔRcÐ dÐ dˆDÔÐØÔÐ&Ý .Ð/GÔ HÑ JÔ JˆDÔå�dÔ&­Ñ-Ô-ð 	9Ø-1Ô-=×-AÒ-AÀ,ÐPWÑ-XÔ-XˆDÔ˜\Ñ*Ý-¨dÔ.>¸|Ô.LÔMÐaÐaÐPTÔP`ÐaÐaˆDÔÐØÔÐ%Ý-¨gÔ6Ñ8Ô8ˆDÔà'+Ô';¸LÔ'IˆÔ$ØÔ)Ô5ˆŒÝÔ& tÐ6Ð6¨vÐ6Ð6Ð6Ð6Ð6ó    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   ÚintÚ__annotations__r"   r#   Úfloatr$   r1   r7   r.   r;   r:   r    r    7   sx   € € € € € € ðð ð: %Ð˜Ð$Ð$Ñ$Ø$Ð˜Ð$Ð$Ñ$Ø"Ð�eÐ"Ð"Ñ"Ø#'€O�T˜D‘[Ð'Ð'Ñ'ð7ð 7ð 7ð 7ð 7r;   r    c                   ó‚   ‡ — e Zd Z	 	 	 	 	 dˆ fd„	Zdeded	efd
„Zed„ ¦   «         Z	ed„ ¦   «         Z
d„ Zd„ Zd„ Zd„ Zˆ xZS )ÚMusicFlamingoProcessorNú<sound>ú<|sound_bos|>ú<|sound_eos|>é°  c                 óÜ   •— t          ¦   «                              |||||¬¦  «         | `|| _        || _        |                     |¦  «        | _        |                     |¦  «        | _        dS )as  
        audio_token (`Optional[str]`, *optional*, defaults to `"<sound>"`):
            Special token used to represent audio inputs in the chat template.
        audio_bos_token (`Optional[str]`, *optional*, defaults to `"<|sound_bos|>"`):
            Special token used to represent the beginning of audio.
        audio_eos_token (`Optional[str]`, *optional*, defaults to `"<|sound_eos|>"`):
            Special token used to represent the end of audio.
        max_audio_len (`int`, *optional*, defaults to 1200):
            Maximum length of audio sequences in seconds. Audio longer than this will be truncated.
        )Úchat_templateÚaudio_tokenÚmax_audio_lenN)ÚsuperÚ__init__Údefault_transcription_promptÚaudio_bos_tokenÚaudio_eos_tokenÚconvert_tokens_to_idsr!   r"   )	r8   Úfeature_extractorÚ	tokenizerrJ   rK   rP   rQ   rL   Ú	__class__s	           €r:   rN   zMusicFlamingoProcessor.__init__x   s   ø€ õ( 	‰Œ×ÒØØØ'Ø#Ø'ð 	ñ 	
ô 	
ð 	
ð Ð-Ø.ˆÔØ.ˆÔØ"+×"AÒ"AÀ/Ñ"RÔ"RˆÔØ"+×"AÒ"AÀ/Ñ"RÔ"RˆÔÐÐr;   Úaudio_inputsÚ	audio_idxÚreturnc                 óR   — |d         |         }| j         | j        |z  z   | j        z   S )NÚnum_audio_tokens)rP   rK   rQ   )r8   rV   rW   rZ   s       r:   Úreplace_audio_tokenz*MusicFlamingoProcessor.replace_audio_token™   s2   € Ø'Ð(:Ô;¸IÔFÐØÔ# dÔ&6Ð9IÑ&IÑIÈDÔL`Ñ`Ð`r;   c                 ó*   — | j         | j        | j        gS ©N)Úaudio_token_idr!   r"   ©r8   s    r:   Úaudio_token_idsz&MusicFlamingoProcessor.audio_token_ids�   s   € àÔ# TÔ%<¸dÔ>UÐVÐVr;   c                 óD   — t                                d¦  «         | j        S )zLDeprecated alias for `audio_token_ids`; will be removed in a future release.z@`audio_ids` is deprecated; please use `audio_token_ids` instead.)ÚloggerÚwarning_oncer`   r_   s    r:   Ú	audio_idsz MusicFlamingoProcessor.audio_ids¢   s"   € õ 	×ÒÐ^Ñ_Ô_Ð_ØÔ#Ð#r;   c                 ó    — t          d¦  «        ‚©Nz/This method is not supported for MusicFlamingo.©ÚNotImplementedError©r8   Úargsr9   s      r:   Úapply_transcription_requestz2MusicFlamingoProcessor.apply_transcription_request¨   ó   € Ý!Ð"SÑTÔTÐTr;   c                 ó    — t          d¦  «        ‚©Nz5MusicFlamingo does not need to overwrite this method.rg   ri   s      r:   ÚdecodezMusicFlamingoProcessor.decode«   ó   € Ý!Ð"YÑZÔZÐZr;   c                 ó    — t          d¦  «        ‚rn   rg   ri   s      r:   Úbatch_decodez#MusicFlamingoProcessor.batch_decode®   rp   r;   c                 ó    — t          d¦  «        ‚rf   rg   ri   s      r:   Ú"_strip_assistant_prefix_and_quotesz9MusicFlamingoProcessor._strip_assistant_prefix_and_quotes±   rl   r;   )NrE   rF   rG   rH   )r<   r=   r>   rN   r1   r@   Ústrr[   Úpropertyr`   rd   rk   ro   rr   rt   Ú__classcell__©rU   s   @r:   rD   rD   v   s
  ø€ € € € € ð ØØ'Ø'ØðSð Sð Sð Sð Sð SðBa°ð aÀð aÈð að að að að ðWð Wñ „XðWð ð$ð $ñ „Xð$ð
Uð Uð Uð[ð [ð [ð[ð [ð [ðUð Uð Uð Uð Uð Uð Ur;   rD   c                 óÌ   —  | j         g | j        d d…         ¢d‘d‘R Ž } |                      d¬¦  «        \  }}t          j        | |fd¬¦  «        } |                      d¦  «        S )Néÿÿÿÿr   ©Údiméþÿÿÿ)ÚreshapeÚshapeÚunbindÚtorchÚstackÚflatten)ÚxÚx1Úx2s      r:   Úrotate_halfr‡   µ   sn   € ØˆŒ	Ð'�1”7˜3˜B˜3”<Ð' Ð' QÐ'Ð'Ð'€AØ�XŠX˜"ˆXÑÔ�F€BˆÝŒ�b�S˜"�I 2Ð&Ñ&Ô&€AØ�9Š9�R‰=Œ=Ðr;   c                 ór  — | j         }|                      t          j        ¦  «        } |                     | ¦  «        }|                     | ¦  «        }|j        d         }| d|d …f         }| dd |…f         }||z  t          |¦  «        |z  z   }t          j        ||fd¬¦  «                             |¦  «        S )Nrz   .r{   )ÚdtypeÚtor�   Úfloat64r   r‡   Úcat)Úhidden_statesÚcosÚsinÚoriginal_dtypeÚrot_dimÚpassthroughÚrotateds          r:   Ú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ÐGr;   c            	       ó~   ‡ — e Zd ZdZd
defˆ fd„Zd„ Z ej        ¦   «         de	de
dee	e	f         f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.
    NÚconfigc                 ó²   •— t          ¦   «                              ||¬¦  «         |                      | j        ¦  «        }|                      d|d¬¦  «         d S )N©ÚdeviceÚposition_anglesF)Ú
persistent)rM   rN   Ú_compute_position_anglesÚinv_freqÚregister_buffer)r8   r—   rš   r›   rU   s       €r:   rN   z%MusicFlamingoRotaryEmbedding.__init__Ò   sW   ø€ Ý‰Œ×Ò˜¨ÐÑ/Ô/Ð/Ø×7Ò7¸¼ÑFÔFˆØ×ÒÐ.°ÈEÐÑRÔRÐRÐRÐRr;   c                 ó&  — t          j        t          | j        ¦  «        |j        |j        ¬¦  «        }|| j        z  dt          z  z  }|                     d¦  «        |z  }t          j        |dd¬¦  «        }| 	                    |j        ¬¦  «        S )N©rš   r‰   r   rz   r{   )r‰   )
r�   Úaranger@   Úmax_seq_len_cachedrš   r‰   r   Ú	unsqueezeÚrepeat_interleaverŠ   )r8   rž   Ú	positionsr›   s       r:   r�   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Ð7r;   Ú
timestampsÚseq_lenrX   c                 ó¤  — |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   r¡   é   rz   r   r{   )rŠ   rž   rš   r‰   r—   r#   r�   Úroundr£   r¤   r¥   r›   r   rŒ   r   rŽ   r�   )
r8   r§   r¨   Úwindow_startsÚwindow_durationÚwindow_positionsÚwindow_freqsÚ
time_freqsÚfreqsÚangles
             r:   Úforwardz$MusicFlamingoRotaryEmbedding.forwardÞ   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Ð'Ð'r;   r]   )r<   r=   r>   r?   r    rN   r�   r�   Úno_gradr   r@   Útupler³   rw   rx   s   @r:   r–   r–   É   s±   ø€ € € € € ðð ðSð SÐ2ð Sð Sð Sð Sð Sð Sð
8ð 8ð 8ð €U„]�_„_ð( &ð (°3ð (¸5ÀÈÀÔ;Pð (ð (ð (ñ „_ð(ð (ð (ð (ð (r;   r–   c                   óB   — e Zd ZdZ ej        ¦   «         d„ ¦   «         ZdS )ÚMusicFlamingoPreTrainedModelNc                 óÆ   — t          j        | |¦  «         t          |t          ¦  «        r6|                     |j        ¦  «        }t          j        |j        |¦  «         d S d S r]   )	r   Ú_init_weightsr/   r–   r�   rž   ÚinitÚcopy_r›   )r8   ÚmoduleÚbuffer_values      r:   r¹   z*MusicFlamingoPreTrainedModel._init_weightsö   sb   € åÔ% d¨FÑ3Ô3Ð3Ý�fÕ:Ñ;Ô;ð 	=Ø!×:Ò:¸6¼?ÑKÔKˆLÝŒJ�vÔ-¨|Ñ<Ô<Ð<Ð<Ð<ð	=ð 	=r;   )r<   r=   r>   Ú_no_split_modulesr�   r´   r¹   r.   r;   r:   r·   r·   ó   s;   € € € € € ØÐà€U„]�_„_ð=ð =ñ „_ð=ð =ð =r;   r·   c                   ó   — e Zd ZdS )Ú MusicFlamingoModelOutputWithPastN)r<   r=   r>   r.   r;   r:   rÀ   rÀ   þ   s   € € € € € à€Dr;   rÀ   c                   ó°  ‡ — e Zd Zdefˆ fd„Zdej        dej        dedej        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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         fd„¦   «         ¦   «         Zˆ xZS )ÚMusicFlamingoModelr—   c                 ór   •— t          ¦   «                              |¦  «         t          |¦  «        | _        d S r]   )rM   rN   r–   Úpos_emb©r8   r—   rU   s     €r:   rN   zMusicFlamingoModel.__init__  s.   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý3°FÑ;Ô;ˆŒˆˆr;   Ú	input_idsÚpost_lengthsÚmax_post_lengthrX   c                 ó\  — || 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   )ÚvaluerÊ   r{   rz   z6Audio features and audio tokens do not match, tokens: z, features: rª   r¡   r™   T)Úright)r—   r^   r�   ÚdiffÚnnÚ
functionalÚpadr@   ÚwhererŠ   ÚlongÚsumr   r#   r¢   rš   Úfloat32rŒ   ÚzerosÚcumsumÚsearchsortedr   r¤   )r8   rÆ   rÇ   rÈ   Úaudio_token_maskrÍ   Ú_ÚstartsÚendsÚsample_lengthsÚn_audio_tokensÚn_audio_featuresÚaudio_embed_frame_stepÚframe_offsetsÚcumsum_postÚcumsum_samplesÚsample_indicesÚsample_start_rowsÚwindow_indicess                      r:   Ú_build_audio_timestampsz*MusicFlamingoModel._build_audio_timestamps  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Ðer;   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.©Úcustom_introÚinput_featuresÚinput_features_maskr9   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_dictrz   r}   )r¨   rÊ   r™   N)Úaudio_towerÚlast_hidden_stateÚ _get_feat_extract_output_lengthsrÓ   rŠ   r�   rÒ   ræ   r   rÄ   rš   r”   Úmulti_modal_projectorr¢   Úpooler_output)r8   ré   rê   rÆ   r9   Úaudio_outputr�   rÙ   rÇ   Úaudio_timestampsrŽ   r�   Úaudio_embedsÚ
valid_masks                 r:   Úget_audio_featuresz%MusicFlamingoModel.get_audio_features1  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ˆÔ"àÐr;   NÚattention_maskÚposition_idsÚpast_key_valuesÚinputs_embedsÚ	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ú   Úaudio_features)rú   r÷   rø   rù   rû   )rî   rù   r�   Ú
attentionsÚaudio_hidden_statesr.   )Úget_input_embeddingsrö   rñ   Úget_placeholder_maskÚmasked_scatterrŠ   rš   Úlanguage_modelrÀ   rî   rù   r�   rþ   )r8   rÆ   ré   rê   r÷   rø   rù   rú   rû   r9   rô   Úspecial_audio_maskÚoutputss                r:   r³   zMusicFlamingoModel.forwardU  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Ø!Ô/ØÔ)Ø ,ð
ñ 
ô 
ð 	
r;   )NNNNNNNN)r<   r=   r>   r    rN   r�   Ú
LongTensorr@   ÚFloatTensorræ   r   r   r   r   r   rµ   r   rö   r
   Úboolr³   rw   rx   s   @r:   rÂ   rÂ     sù  ø€ € € € € ð<Ð2ð <ð <ð <ð <ð <ð <ð'fàÔ#ð'fð Ô&ð'fð ð	'fð
 
Ô	ð'fð 'fð 'fð 'fðR Ø€^ð wðñ ô ðàÔ)ðð #œ\ðð Ô#ð	ð
 Ð+Ô,ðð 
Ð+Ñ	+ðð ð ñô ñ Ôðð@ Øð .2Ø37Ø37Ø.2Ø04Ø(,Ø26Ø!%ð.
ð .
àÔ# dÑ*ð.
ð Ô)¨DÑ0ð.
ð #œ\¨DÑ0ð	.
ð
 œ tÑ+ð.
ð Ô&¨Ñ-ð.
ð  ™ð.
ð Ô(¨4Ñ/ð.
ð ˜$‘;ð.
ð Ð+Ô,ð.
ð .
ð .
ñ „^ñ Ôð.
ð .
ð .
ð .
ð .
r;   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.
    rç   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )Ú%MusicFlamingoForConditionalGenerationr—   c                 óš   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |                      ¦   «          d S r]   )rM   rN   rÂ   ÚmodelÚ	post_initrÅ   s     €r:   rN   z.MusicFlamingoForConditionalGeneration.__init__Ž  s@   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý'¨Ñ/Ô/ˆŒ
Ø�ŠÑÔÐÐÐr;   c                 ó,   —  | j         j        |||fi |¤ŽS r]   )r  rö   )r8   ré   rê   rÆ   r9   s        r:   rö   z8MusicFlamingoForConditionalGeneration.get_audio_features“  s&   € Ø,ˆtŒzÔ,¨^Ð=PÐR[ÐfÐfÐ_eÐfÐfÐfr;   )r<   r=   r>   r    rN   rö   rw   rx   s   @r:   r
  r
  ˆ  s[   ø€ € € € € ðÐ2ð ð ð ð ð ð ð
gð gð gð gð gð gð gr;   r
  )r    rD   r
  rÂ   r·   )7Údataclassesr   Úmathr   Úhuggingface_hub.dataclassesr   r�   r   r   Ú r	   rº   Úcache_utilsr
   Úconfiguration_utilsr   Úmodeling_outputsr   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   r   r   r   Ú+audioflamingo3.configuration_audioflamingo3r   Ú&audioflamingo3.modeling_audioflamingo3r   r   r   r   Ú(audioflamingo3.processing_audioflamingo3r   Úautor   Úmoonshine.modeling_moonshiner   Ú
get_loggerr<   rb   r    rD   r‡   r”   r–   r·   rÀ   rÂ   r
  Ú__all__r.   r;   r:   ú<module>r      s¬  ðð  "Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à .Ð .Ð .Ð .Ð .Ð .Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +à &Ð &Ð &Ð &Ð &Ð &Ø  Ð  Ð  Ð  Ð  Ð  Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø :Ð :Ð :Ð :Ð :Ð :Ø -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð OÐ NÐ NÐ NÐ NÐ Nðð ð ð ð ð ð ð ð ð ð ð ð OÐ NÐ NÐ NÐ NÐ NØ !Ð !Ð !Ð !Ð !Ð !Ø CÐ CÐ CÐ CÐ CÐ Cð 
ˆÔ	˜HÑ	%Ô	%€ð ÐÑÔð Ø€L€L€Lð €Ð:Ð;Ñ;Ô;Øð:7ð :7ð :7ð :7ð :7Ð.ñ :7ô :7ñ „ñ <Ô;ð:7ðz ð;Uð ;Uð ;Uð ;Uð ;UÐ4ñ ;Uô ;Uñ „ð;Uð|ð ð ð
Hð 
Hð 
Hð'(ð '(ð '(ð '(ð '(Ð#;ñ '(ô '(ð '(ðT=ð =ð =ð =ð =Ð#@ñ =ô =ð =ð ð	ð 	ð 	ð 	ð 	Ð'Hñ 	ô 	ñ „ð	ðB
ð B
ð B
ð B
ð B
Ð,ñ B
ô B
ð B
ðJ €ððñ ô ð
gð gð gð gð gÐ,Rñ gô gñô ð
gðð ð €€€r;   