§
    ‚Štjóm  ã                   óh  — d dl Z d dlmZ d dlmZ d dl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mZmZ ddlmZ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& ddl'm(Z( ddl)m*Z*m+Z+  e!j,        e-¦  «        Z.	 	 d7dej/        dej0        dej0        dej0        dej0        dz  de1dz  de1fd„Z2 G d„ d ej/        ¦  «        Z3 G d!„ d"e¦  «        Z4e G d#„ d$e¦  «        ¦   «         Z5e G d%„ d&e¦  «        ¦   «         Z6 ed'¬(¦  «        e G d)„ d*e¦  «        ¦   «         ¦   «         Z7 ed+¬(¦  «         G d,„ d-e5¦  «        ¦   «         Z8 G d.„ d/ej/        ¦  «        Z9 ed0¬(¦  «         G d1„ d2e5¦  «        ¦   «         Z: ed3¬(¦  «         G d4„ d5e5e¦  «        ¦   «         Z;g d6¢Z<dS )8é    N)ÚCallable)Ú	dataclass)Únné   )ÚACT2FN)ÚCacheÚEncoderDecoderCache)ÚGenerationMixin)Úcreate_bidirectional_mask)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚBaseModelOutputWithPoolingÚModelOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚloggingÚtorch_compilable_check)Úmerge_with_config_defaults)Úcapture_outputsé   )Ú	AutoModelé   )ÚAudioFlamingo3ConfigÚAudioFlamingo3EncoderConfigç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutc                 ó®  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «         	                    ¦   «         }	|	|fS )Néÿÿÿÿç      à¿r   r   )Údim©ÚpÚtrainingr   )
ÚsizeÚtorchÚmatmulÚ	transposer   Ú
functionalÚsoftmaxr'   r.   Ú
contiguous)
r!   r"   r#   r$   r%   r&   r'   ÚkwargsÚattn_weightsÚattn_outputs
             úx/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/audioflamingo3/modeling_audioflamingo3.pyÚeager_attention_forwardr:   0   sÆ   € ð €Ø—*’*˜R‘.”. DÑ(ˆå”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2Ð(Ñ>Ô>€Lå”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€LÝ”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$ó    c                   ó  ‡ — e Zd ZdZ	 	 	 	 	 	 ddededed	ed
edededz  dedz  fˆ fd„Z	 	 	 	 dde	j
        de	j
        dz  dedz  de	j
        dz  dedee         dee	j
        e	j
        dz  ee	j
                 dz  f         fd„Zˆ xZS )ÚAudioFlamingo3Attentionz=Multi-headed attention from 'Attention Is All You Need' paperr    FTNÚ	embed_dimÚ	num_headsr'   Ú
is_decoderÚbiasÚ	is_causalÚ	layer_idxÚconfigc	                 óp  •— t          ¦   «                              ¦   «          || _        || _        || _        ||z  | _        || _        | j        |z  | j        k    rt          d| j        › d|› d�¦  «        ‚| j        dz  | _        || _	        || _
        |€*|r(t                               d| j        j        › d�¦  «         || _        t!          j        ||d¬¦  «        | _        t!          j        |||¬¦  «        | _        t!          j        |||¬¦  «        | _        t!          j        |||¬¦  «        | _        d S )	Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).r*   zInstantiating a decoder z³ without passing `layer_idx` is not recommended and will to errors during the forward call, if caching is used. Please make sure to provide a `layer_idx` when creating this class.F©rA   )ÚsuperÚ__init__r>   r?   r'   Úhead_dimrD   Ú
ValueErrorr&   r@   rB   ÚloggerÚwarning_onceÚ	__class__Ú__name__rC   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)
Úselfr>   r?   r'   r@   rA   rB   rC   rD   rM   s
            €r9   rH   z AudioFlamingo3Attention.__init__M   sW  ø€ õ 	‰Œ×ÒÑÔÐØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒØˆŒàŒM˜IÑ%¨$¬.Ò8Ð8Ýð3ÈdÌnð 3ð 3Ø%.ð3ð 3ð 3ñô ð ð ”} dÑ*ˆŒØ$ˆŒØ"ˆŒàÐ ÐÝ×Òð,¨4¬>Ô+Bð ,ð ,ð ,ñô ð ð
 #ˆŒå”i 	¨9¸5ÐAÑAÔAˆŒÝ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝœ	 )¨Y¸TÐBÑBÔBˆŒˆˆr;   Úhidden_statesÚkey_value_statesÚpast_key_valuesr%   Úoutput_attentionsr6   Úreturnc                 ó¸  — |du}|j         dd…         }g |¢d‘| j        ‘R }	|                      |¦  «        | j        z                       |	¦  «                             dd¦  «                             ¦   «         }
|�Tt          |t          ¦  «        r?|j	         
                    | j        ¦  «        }|rd|j	        | j        <   |j        }n|j        }|�|n|}|r3|r1|r/|j        | j                 j        }|j        | j                 j        }nÓ|d         d| j        | j        f}|                      |¦  «                             |¦  «                             dd¦  «                             ¦   «         }|                      |¦  «                             |¦  «                             dd¦  «                             ¦   «         }|�|                     ||| j        ¦  «        \  }}t+          j        | j        j        t2          ¦  «        } || |
|||f| j        sdn| j        d|d	œ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )
z#Input shape: Batch x Time x ChannelNr)   r   r   Tr   r    ç      ð?)r'   r&   rX   )ÚshaperI   rR   r&   Úviewr2   r5   Ú
isinstancer	   Ú
is_updatedÚgetrC   Úcross_attention_cacheÚself_attention_cacheÚlayersÚkeysÚvaluesr?   rP   rQ   Úupdater   Úget_interfacerD   Ú_attn_implementationr:   r.   r'   ÚreshaperS   )rT   rU   rV   rW   r%   rX   r6   Úis_cross_attentionÚinput_shapeÚhidden_shapeÚquery_statesr_   Úcurrent_statesÚ
key_statesÚvalue_statesÚkv_shapeÚattention_interfacer8   r7   s                      r9   ÚforwardzAudioFlamingo3Attention.forwardu   sš  € ð .°TÐ9Ðà#Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆð Ÿš MÑ2Ô2°T´\ÑA×GÒGÈÑUÔU×_Ò_Ð`aÐcdÑeÔe×pÒpÑrÔrˆð Ð&­:°oÕGZÑ+[Ô+[Ð&Ø(Ô3×7Ò7¸¼ÑGÔGˆJØ!ð Gà=A�Ô*¨4¬>Ñ:Ø"1Ô"G��à"1Ô"F�ð .>Ð-IÐ)Ð)È}ˆØð 	l /ð 	l°jð 	là(Ô/°´Ô?ÔDˆJØ*Ô1°$´.ÔAÔHˆLˆLð
 $ Aœ¨¨D¬N¸D¼MÐJˆHØŸš ^Ñ4Ô4×9Ò9¸(ÑCÔC×MÒMÈaÐQRÑSÔS×^Ò^Ñ`Ô`ˆJØŸ;š; ~Ñ6Ô6×;Ò;¸HÑEÔE×OÒOÐPQÐSTÑUÔU×`Ò`ÑbÔbˆLØÐ*Ø+:×+AÒ+AÀ*ÈlÐ\`Ô\jÑ+kÔ+kÑ(�
˜Lå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð
%
ð  $œ}Ð>�C�C°$´,ØØ/ð
%
ð 
%
ð ð
%
ð 
%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—m’m KÑ0Ô0ˆà˜LÐ(Ð(r;   )r    FTFNN)NNNF)rN   Ú
__module__Ú__qualname__Ú__doc__ÚintÚfloatÚboolr   rH   r0   ÚTensorr   r   r   Útuplers   Ú__classcell__©rM   s   @r9   r=   r=   J   sy  ø€ € € € € ØGÐGð Ø ØØØ $Ø.2ð&Cð &Càð&Cð ð&Cð ð	&Cð
 ð&Cð ð&Cð ð&Cð ˜‘:ð&Cð % tÑ+ð&Cð &Cð &Cð &Cð &Cð &CðV 15Ø(,Ø.2Ø"'ðH)ð H)à”|ðH)ð  œ,¨Ñ-ðH)ð  ™ð	H)ð
 œ tÑ+ðH)ð  ðH)ð Ð-Ô.ðH)ð 
ˆuŒ|˜Uœ\¨DÑ0°%¸¼Ô2EÈÑ2LÐLÔ	MðH)ð H)ð H)ð H)ð H)ð H)ð H)ð H)r;   r=   c                   óf   ‡ — e Zd Zdefˆ fd„Zdej        dej        dee         dej        fd„Z	ˆ xZ
S )ÚAudioFlamingo3EncoderLayerrD   c                 ó  •— t          ¦   «                              ¦   «          |j        | _        t	          | j        |j        |j        |¬¦  «        | _        t          j	        | j        ¦  «        | _
        |j        | _        t          |j                 | _        |j        | _        t          j        | j        |j        ¦  «        | _        t          j        |j        | j        ¦  «        | _        t          j	        | j        ¦  «        | _        d S )N)r>   r?   r'   rD   )rG   rH   Úd_modelr>   r=   Úencoder_attention_headsÚattention_dropoutÚ	self_attnr   Ú	LayerNormÚself_attn_layer_normr'   r   Úactivation_functionÚactivation_fnÚactivation_dropoutrO   Úencoder_ffn_dimÚfc1Úfc2Úfinal_layer_norm©rT   rD   rM   s     €r9   rH   z#AudioFlamingo3EncoderLayer.__init__Á   sÐ   ø€ Ý‰Œ×ÒÑÔÐØœˆŒå0Ø”nØÔ4ØÔ,Øð	
ñ 
ô 
ˆŒõ %'¤L°´Ñ$@Ô$@ˆÔ!Ø”~ˆŒÝ# FÔ$>Ô?ˆÔØ"(Ô";ˆÔÝ”9˜Tœ^¨VÔ-CÑDÔDˆŒÝ”9˜VÔ3°T´^ÑDÔDˆŒÝ "¤¨T¬^Ñ <Ô <ˆÔÐÐr;   rU   r%   r6   rY   c                 óº  — |}|                       |¦  «        } | j        d||dœ|¤Ž\  }}t          j                             || j        | j        ¬¦  «        }||z   }|}|                      |¦  «        }|                      |                      |¦  «        ¦  «        }t          j                             || j	        | j        ¬¦  «        }|  
                    |¦  «        }t          j                             || j        | j        ¬¦  «        }||z   }|j        t          j        k    r9t          j        |j        ¦  «        j        dz
  }t          j        || |¬¦  «        }|S )a>  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
            attention_mask (`torch.FloatTensor`): attention mask of size
                `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
        )rU   r%   r,   iè  )ÚminÚmax© )r†   r„   r   r3   r'   r.   r�   rˆ   r‹   r‰   rŒ   Údtyper0   Úfloat16Úfinfor‘   Úclamp)rT   rU   r%   r6   ÚresidualÚ_Úclamp_values          r9   rs   z"AudioFlamingo3EncoderLayer.forwardÓ   s[  € ð !ˆØ×1Ò1°-Ñ@Ô@ˆØ)˜4œ>ð 
Ø'Ø)ð
ð 
ð ð
ð 
Ñˆ�qõ
 œ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆà ˆØ×-Ò-¨mÑ<Ô<ˆØ×*Ò*¨4¯8ª8°MÑ+BÔ+BÑCÔCˆÝœ×-Ò-¨m¸tÔ?VÐaeÔanÐ-ÑoÔoˆØŸš Ñ/Ô/ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆàÔ¥%¤-Ò/Ð/Ýœ+ mÔ&9Ñ:Ô:Ô>ÀÑEˆKÝ!œK¨¸K¸<È[ÐYÑYÔYˆMàÐr;   )rN   rt   ru   r   rH   r0   rz   r   r   rs   r|   r}   s   @r9   r   r   À   s‹   ø€ € € € € ð=Ð3ð =ð =ð =ð =ð =ð =ð$"à”|ð"ð œð"ð Ð+Ô,ð	"ð
 
Œð"ð "ð "ð "ð "ð "ð "ð "r;   r   c                   ó>   — e Zd ZU eed<   dZdZdZdgZdgZ	dZ
dZdZdS )ÚAudioFlamingo3PreTrainedModelrD   Úmodel)ÚaudioÚtextTr=   rW   N)rN   rt   ru   r   Ú__annotations__Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_attention_backendr’   r;   r9   r›   r›   ø   sS   € € € € € € à Ð Ð Ñ ØÐØ(ÐØ&*Ð#Ø2Ð3ÐØ#4Ð"5ÐØÐØ€NØ"&ÐÐÐr;   r›   c                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )Ú!AudioFlamingo3ModelOutputWithPastzg
    audio_hidden_states (`torch.FloatTensor`, *optional*):
        Projected audio hidden states.
    NÚaudio_hidden_states)rN   rt   ru   rv   rª   r0   ÚFloatTensorrŸ   r’   r;   r9   r©   r©     s7   € € € € € € ðð ð
 59Ð˜Ô*¨TÑ1Ð8Ð8Ñ8Ð8Ð8r;   r©   zZ
    Base class for AudioFlamingo3 causal language model (or autoregressive) outputs.
    ©Úcustom_introc                   óÖ   — 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 )	Ú$AudioFlamingo3CausalLMOutputWithPastaV  
    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ÚlogitsrW   rU   Ú
attentionsrª   )rN   rt   ru   rv   r°   r0   r«   rŸ   r±   rW   r   rU   r{   r²   rª   r’   r;   r9   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Ð8r;   r¯   zT
    The audio model from AudioFlamingo3 without any head or projection on top.
    c            
       óì   ‡ — e Zd ZU dZeed<   dZdZdgZe	e
dœZdefˆ fd„Zd„ Zd	ej        fd
„Zdej        fd„Zee	 ddej        dej        dz  d	eez  fd„¦   «         ¦   «         Zdej        fd„Zˆ xZS )ÚAudioFlamingo3EncoderzY
    AudioFlamingo3 encoder: Whisper encoder, average pool (time/2), then LayerNorm.
    rD   Úinput_featuresr�   r   )rU   r²   c                 ó  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        ‰j        }‰j        | _        ‰j        | _        ‰j        rt          j
        |¦  «        nd| _        t          j        | j        |dd¬¦  «        | _        t          j        ||ddd¬¦  «        | _        t          j        | j        |¦  «        | _        | j                             d¦  «         t          j        ˆfd„t)          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          j        ‰j        ¦  «        | _        t          j        dd¬	¦  «        | _        d| _        |                      ¦   «          d S )
Nr[   r   r   )Úkernel_sizeÚpaddingr   )r·   Ústrider¸   Fc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r’   )r   )Ú.0r˜   rD   s     €r9   ú
<listcomp>z2AudioFlamingo3Encoder.__init__.<locals>.<listcomp>N  s"   ø€ Ð$nÐ$nÐ$nÈAÕ%?ÀÑ%GÔ%GÐ$nÐ$nÐ$nr;   )r¹   )rG   rH   r'   Úencoder_layerdropÚ	layerdropr�   Únum_mel_binsÚmax_source_positionsÚscale_embeddingÚmathÚsqrtÚembed_scaler   ÚConv1dÚconv1Úconv2Ú	EmbeddingÚembed_positionsÚrequires_grad_Ú
ModuleListÚrangeÚencoder_layersrc   r…   Ú
layer_normÚ	AvgPool1dÚ
avg_poolerÚgradient_checkpointingÚ	post_init)rT   rD   r>   rM   s    ` €r9   rH   zAudioFlamingo3Encoder.__init__>  sN  øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø”~ˆŒØÔ1ˆŒà”Nˆ	Ø"Ô/ˆÔØ$*Ô$?ˆÔ!Ø39Ô3IÐR�4œ9 YÑ/Ô/Ð/ÈsˆÔå”Y˜tÔ0°)ÈÐTUÐVÑVÔVˆŒ
Ý”Y˜y¨)ÀÈ1ÐVWÐXÑXÔXˆŒ
å!œ|¨DÔ,EÀyÑQÔQˆÔØÔ×+Ò+¨EÑ2Ô2Ð2å”mÐ$nÐ$nÐ$nÐ$nÕQVÐW]ÔWlÑQmÔQmÐ$nÑ$nÔ$nÑoÔoˆŒÝœ, v¤~Ñ6Ô6ˆŒåœ, q°Ð3Ñ3Ô3ˆŒà&+ˆÔ#à�ŠÑÔÐÐÐr;   c                 óP   — |                       ¦   «         D ]	}d|_        Œ
d| _        d S )NF)Ú
parametersÚrequires_gradÚ_requires_grad)rT   Úparams     r9   Ú_freeze_parametersz(AudioFlamingo3Encoder._freeze_parametersW  s4   € Ø—_’_Ñ&Ô&ð 	(ð 	(ˆEØ"'ˆEÔÐØ#ˆÔÐÐr;   rY   c                 ó   — | j         S ©N©rÆ   )rT   s    r9   Úget_input_embeddingsz*AudioFlamingo3Encoder.get_input_embeddings\  s
   € ØŒzÐr;   r$   c                 ó   — || _         d S rÚ   rÛ   )rT   r$   s     r9   Úset_input_embeddingsz*AudioFlamingo3Encoder.set_input_embeddings_  s   € ØˆŒ
ˆ
ˆ
r;   NÚinput_features_maskc                 óž  — |j         d         dz
  dz  dz   }|                     d¦  «        }|dz
  dz  dz   }t          j        ||j        ¬¦  «        |dd…df         k     }t
          j                             |                      |¦  «        ¦  «        }t
          j                             |  	                    |¦  «        ¦  «        }| 
                    ddd¦  «        }|| j        j        z   }t
          j                             || j        | j        ¬¦  «        }t          | j        ||¬¦  «        }| j        D ]4}	| j        ot          j        g ¦  «        | j        k     }
|
s |	||¦  «        }Œ5| 
                    ddd¦  «        }|                      |¦  «         
                    ddd¦  «        }|                      |¦  «        }t-          |¬	¦  «        S )
ap  
        Args:
            input_features (`torch.FloatTensor` of shape `(batch_size, feature_size, sequence_length)`):
                Log-Mel features extracted from raw audio. Use the processor/feature extractor to compute and pad
                these features from waveform input.
            input_features_mask (`torch.FloatTensor` of shape `(batch_size, sequence_length)`, *optional*):
                Mask to avoid performing attention on padding feature indices. Mask values selected in `[0, 1]`:

                - 1 for tokens that are **not masked**,
                - 0 for tokens that are **masked**.
        r)   r   r   ©ÚdeviceNr   r,   )rD   Úinputs_embedsr%   )Úlast_hidden_state)r\   Úsumr0   Úarangerâ   r   r3   ÚgelurÆ   rÇ   ÚpermuterÉ   Úweightr'   r.   r   rD   rc   Úrandr¾   rÐ   rÎ   r   )rT   rµ   rß   r6   Úseq_lenÚinput_features_lengthsrã   rU   r%   ÚlayerÚdrops              r9   rs   zAudioFlamingo3Encoder.forwardb  sÙ  € ð( "Ô'¨Ô+¨aÑ/°AÑ5¸Ñ9ˆØ!4×!8Ò!8¸Ñ!<Ô!<ÐØ"8¸1Ñ"<ÀÑ!BÀQÑ!FÐÝ#œl¨7¸>Ô;PÐQÑQÔQÐTjÐklÐklÐklÐnrÐkrÔTsÒsÐõ œ×*Ò*¨4¯:ª:°nÑ+EÔ+EÑFÔFˆÝœ×*Ò*¨4¯:ª:°mÑ+DÔ+DÑEÔEˆØ%×-Ò-¨a°°AÑ6Ô6ˆð &¨Ô(<Ô(CÑCˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆå2Ø”;Ø'Ø.ð
ñ 
ô 
ˆð ”[ð 	Eð 	EˆEØ”=ÐD¥U¤Z°¡^¤^°d´nÒ%DˆDØð EØ %  m°^Ñ DÔ D�øð &×-Ò-¨a°°AÑ6Ô6ˆØŸš¨Ñ6Ô6×>Ò>¸qÀ!ÀQÑGÔGˆØŸš¨Ñ6Ô6ˆå)Ø+ð
ñ 
ô 
ð 	
r;   Úinput_lengthsc                 ó6   — |dz
  dz  dz   }|dz
  dz  dz   }||fS )zs
        Computes the output length of the convolutional layers and the output length of the audio encoder
        r   r   r’   )rT   rï   Úoutput_lengthss      r9   Ú _get_feat_extract_output_lengthsz6AudioFlamingo3Encoder._get_feat_extract_output_lengthsš  s7   € ð '¨Ñ*¨qÑ0°1Ñ4ˆØ'¨!Ñ+°Ñ1°AÑ5ˆØ˜nÐ,Ð,r;   rÚ   )rN   rt   ru   rv   r   rŸ   Úmain_input_namer¡   r£   r   r=   Ú_can_record_outputsrH   rØ   r   ÚModulerÜ   rÞ   r   r   r0   rz   r{   r   rs   Ú
LongTensorrò   r|   r}   s   @r9   r´   r´   )  sP  ø€ € € € € € ðð ð
 (Ð'Ð'Ñ'Ø&€OØÐØ5Ð6Ðð 4Ø-ðð Ðð
Ð:ð ð ð ð ð ð ð2$ð $ð $ð
 b¤ið ð ð ð ð¨"¬)ð ð ð ð ð  Øð 48ð3
ð 3
àœð3
ð #œ\¨DÑ0ð3
ð
 
Ð+Ñ	+ð3
ð 3
ð 3
ñ „_ñ  Ôð3
ðl-¸eÔ>Nð -ð -ð -ð -ð -ð -ð -ð -r;   r´   c                   ó.   ‡ — e Zd ZdZdefˆ fd„Zd„ Zˆ xZS )Ú!AudioFlamingo3MultiModalProjectorz•
    Audio adaptor (small MLP) that projects AudioFlamingo3Encoder features
    to the LLM embedding space so they can replace `<sound>` tokens.
    rD   c                 óJ  •— t          ¦   «                              ¦   «          t          j        |j        j        |j        j        |j        ¬¦  «        | _        t          |j
                 | _        t          j        |j        j        |j        j        |j        ¬¦  «        | _        d S )NrF   )rG   rH   r   rO   Úaudio_configÚhidden_sizeÚtext_configÚprojector_biasÚlinear_1r   Úprojector_hidden_actÚactÚlinear_2rŽ   s     €r9   rH   z*AudioFlamingo3MultiModalProjector.__init__©  sŒ   ø€ Ý‰Œ×ÒÑÔÐÝœ	ØÔÔ+¨VÔ-?Ô-KÐRXÔRgð
ñ 
ô 
ˆŒõ ˜&Ô5Ô6ˆŒÝœ	ØÔÔ*¨FÔ,>Ô,JÐQWÔQfð
ñ 
ô 
ˆŒˆˆr;   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rÚ   )rþ   r   r  )rT   Úaudio_featuresrU   s      r9   rs   z)AudioFlamingo3MultiModalProjector.forward³  s;   € ØŸš nÑ5Ô5ˆØŸš Ñ/Ô/ˆØŸš mÑ4Ô4ˆØÐr;   )rN   rt   ru   rv   r   rH   rs   r|   r}   s   @r9   rø   rø   £  s^   ø€ € € € € ðð ð

Ð3ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð r;   rø   z“
    The AudioFlamingo3 model (fine-tuned Whisper encoder, multi-modal projector, Qwen2 language model),
    without a language modeling head.
    c                   ó®  ‡ — e Zd ZdZdZdZˆ fd„Ze ed¬¦  «        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ˆ xZS )ÚAudioFlamingo3ModelNc                 ó  •— t          ¦   «                              |¦  «         t          j        |j        ¦  «        | _        t          j        |j        ¦  «        | _        t          |¦  «        | _	        |  
                    ¦   «          d S rÚ   )rG   rH   r   Úfrom_configrú   Úaudio_towerrü   Úlanguage_modelrø   Úmulti_modal_projectorrÒ   rŽ   s     €r9   rH   zAudioFlamingo3Model.__init__Å  sm   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý$Ô0°Ô1DÑEÔEˆÔÝ'Ô3°FÔ4FÑGÔGˆÔÝ%FÀvÑ%NÔ%NˆÔ"Ø�ŠÑÔÐÐÐr;   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¬   rµ   rß   r6   rY   c                 óÀ  —  | j         |f|ddœ|¤Ž}|                      |j        ¦  «        }|                     d¦  «                             t
          j        ¦  «        }| j                              |¦  «        \  }}t          j        |j	        d         |j
        ¬¦  «        ddd…f         |dd…df         k     }	||	                     |j
        ¦  «                 |_        |S )a1  
        input_features (`torch.FloatTensor`):
            Float values of mel features extracted from the raw speech waveform.
        input_features_mask (`torch.Tensor` of shape `(batch_size, feature_sequence_length)`):
            Mask to avoid performing attention on padded feature indices.
        T)rß   Úreturn_dictr)   r   rá   N)r  r
  rä   rå   Útor0   Úlongrò   ræ   r\   râ   Úpooler_output)
rT   rµ   rß   r6   Úaudio_outputÚaudio_embedsrï   r˜   Úpost_lengthsÚ
valid_masks
             r9   Úget_audio_featuresz&AudioFlamingo3Model.get_audio_featuresÌ  sõ   € ð" (�tÔ'Øð
Ø0CÐQUð
ð 
ØY_ð
ð 
ˆð ×1Ò1°,Ô2PÑQÔQˆð ,×/Ò/°Ñ3Ô3×6Ò6µu´zÑBÔBˆØÔ*×KÒKÈMÑZÔZ‰ˆˆ<Ý”\ ,Ô"4°QÔ"7ÀÔ@SÐTÑTÔTÐUYÐ[\Ð[\Ð[\ÐU\Ô]Ð`lÐmnÐmnÐmnÐptÐmtÔ`uÒuˆ
Ø%1°*·-²-ÀÔ@SÑ2TÔ2TÔ%UˆÔ"àÐr;   Ú	input_idsrã   r  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“   râ   r)   r   z6Audio features and audio tokens do not match, tokens: z, features: )rÜ   r0   ÚtensorrD   Úaudio_token_idr  râ   Úallrå   r\   Ú	unsqueezeÚ	expand_asr  r   Únumel)rT   r  rã   r  Úspecial_audio_maskÚn_audio_tokensÚn_audio_featuress          r9   Úget_placeholder_maskz(AudioFlamingo3Model.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ñ	
ô 	
ð 	
ð "Ð!r;   r%   Úposition_idsrW   Ú	use_cachec	           	      óˆ  — |€ |                       ¦   «         |¦  «        }d}
|�e|�c|                      ||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!  rW   r"  )rä   rW   rU   r²   rª   r’   )rÜ   r  r  r   Úmasked_scatterr  râ   r	  r©   rä   rW   rU   r²   )rT   r  rµ   rß   r%   r!  rW   rã   r"  r6   r  r  Úoutputss                r9   rs   zAudioFlamingo3Model.forward  s  € ð$ Ð Ø7˜D×5Ò5Ñ7Ô7¸	ÑBÔBˆMàˆØÐ%¨)Ð*?Ø×2Ò2°>ÐCVÐdhÐ2ÑiÔiÔwˆLð "&×!:Ò!:Ø¨À|ð ";ñ "ô "Ðð *×8Ò8Ð9KÈ\Ï_Ê_Ð]jÔ]qÑMrÔMrÑsÔsˆMà%�$Ô%ð 
Ø'Ø)Ø%Ø+Øð
ð 
ð ð
ð 
ˆõ 1Ø%Ô7Ø#Ô3Ø!Ô/ØÔ)Ø ,ð
ñ 
ô 
ð 	
r;   )NNNNNNNN)rN   rt   ru   Ú_tp_planÚ_pp_planÚ_keep_in_fp32_modules_strictrH   r   r   r0   r«   rz   r   r   r{   r   r  rö   r   r   ry   r©   rs   r|   r}   s   @r9   r  r  º  sé  ø€ € € € € ð €HØ€HØ#'Ð ðð ð ð ð ð Ø€^ð wðñ ô ðàÔ)ðð #œ\ðð Ð+Ô,ð	ð
 
Ð+Ñ	+ðð ð ñô ñ Ôðð4"ØÔ)ð"Ø:?Ô:Kð"Ø]bÔ]nð"ð "ð "ð "ð0 Øð .2Ø37Ø37Ø.2Ø04Ø(,Ø26Ø!%ð,
ð ,
àÔ# dÑ*ð,
ð Ô)¨DÑ0ð,
ð #œ\¨DÑ0ð	,
ð
 œ tÑ+ð,
ð Ô&¨Ñ-ð,
ð  ™ð,
ð Ô(¨4Ñ/ð,
ð ˜$‘;ð,
ð Ð+Ô,ð,
ð 
Ð2Ñ	2ð,
ð ,
ð ,
ñ „^ñ Ôð,
ð ,
ð ,
ð ,
ð ,
r;   r  z†
    The AudioFlamingo3 model which consists of a fine-tuned Whisper encoder, a multi-modal projector and a Qwen2 language model.
    c                   óP  ‡ — e Zd ZdgZdZˆ 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 )Ú&AudioFlamingo3ForConditionalGenerationrÉ   Nc                 óú   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        j        |j        j        d¬¦  «        | _	        |  
                    ¦   «          d S )NFrF   )rG   rH   r  rœ   r   rO   rü   rû   Ú
vocab_sizeÚlm_headrÒ   rŽ   s     €r9   rH   z/AudioFlamingo3ForConditionalGeneration.__init__<  se   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý(¨Ñ0Ô0ˆŒ
Ý”y Ô!3Ô!?ÀÔASÔA^ÐejÐkÑkÔkˆŒØ�ŠÑÔÐÐÐr;   c                 ó*   —  | j         j        ||fi |¤ŽS rÚ   )rœ   r  )rT   rµ   rß   r6   s       r9   r  z9AudioFlamingo3ForConditionalGeneration.get_audio_featuresB  s#   € Ø,ˆtŒzÔ,¨^Ð=PÐ[Ð[ÐTZÐ[Ð[Ð[r;   r   r  rµ   rß   r%   r!  rW   rã   Úlabelsr"  Úlogits_to_keepr6   rY   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 AudioFlamingo3ForConditionalGeneration, AutoProcessor

        >>> model_id = "nvidia/audio-flamingo-3-hf"
        >>> processor = AutoProcessor.from_pretrained(model_id)
        >>> model = AudioFlamingo3ForConditionalGeneration.from_pretrained(model_id, device_map="auto")
        ```)r  rµ   rß   r%   r!  rW   rã   r"  N)r±   r/  r,  )r°   r±   rW   rU   r²   rª   r’   )rœ   rä   r^   rw   Úslicer-  Úloss_functionrD   rü   r,  r¯   rW   rU   r²   rª   )rT   r  rµ   rß   r%   r!  rW   rã   r/  r"  r0  r6   r%  rU   Úslice_indicesr±   r°   s                    r9   rs   z.AudioFlamingo3ForConditionalGeneration.forwardE  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õ 4ØØØ#Ô3Ø!Ô/ØÔ)Ø 'Ô ;ð
ñ 
ô 
ð 	
r;   F)Úis_first_iterationr5  c                óÞ   •— |                      dd ¦  «        }|                      dd ¦  «        } t          ¦   «         j        |i |¤Ž}|s|                     dd¦  «        s|�||d<   |�||d<   |S )Nrµ   rß   r"  F)ÚpoprG   Úprepare_inputs_for_generationr`   )rT   r5  Úargsr6   rµ   rß   Úmodel_inputsrM   s          €r9   r8  zDAudioFlamingo3ForConditionalGeneration.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àÐr;   )
NNNNNNNNNr   )rN   rt   ru   r(  Ú_tied_weights_keysrH   r  r   r   r0   rö   r«   rz   r   ry   rw   r   r   r{   r¯   rs   r8  r|   r}   s   @r9   r*  r*  3  s©  ø€ € € € € ð %6Ð#6Ð ØÐðð ð ð ð ð\ð \ð \ð Øð .2Ø37Ø37Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ð:
ð :
àÔ# dÑ*ð:
ð Ô)¨DÑ0ð:
ð #œ\¨DÑ0ð	:
ð
 œ tÑ+ð:
ð Ô&¨Ñ-ð:
ð  ™ð:
ð Ô(¨4Ñ/ð:
ð Ô  4Ñ'ð:
ð ˜$‘;ð:
ð ˜eœlÑ*ð:
ð Ð+Ô,ð:
ð 
Ð5Ñ	5ð:
ð :
ð :
ñ „^ñ Ôð:
ðx OTð ð ð Àtð ð ð ð ð ð ð ð ð ð r;   r*  )r*  r›   r´   r  )Nr    )=rÂ   Úcollections.abcr   Údataclassesr   r0   r   Úactivationsr   Úcache_utilsr   r	   Ú
generationr
   Úmasking_utilsr   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úautor   Úconfiguration_audioflamingo3r   r   Ú
get_loggerrN   rK   rõ   rz   rx   r:   r=   r   r›   r©   r¯   r´   rø   r  r*  Ú__all__r’   r;   r9   ú<module>rN     s‚  ðð, €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø )Ð )Ð )Ð )Ð )Ð )Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø BÐ BÐ BÐ BÐ BÐ BØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð Ø [Ð [Ð [Ð [Ð [Ð [Ð [Ð [ð 
ˆÔ	˜HÑ	%Ô	%€ð !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð %ð %ð %ð4s)ð s)ð s)ð s)ð s)˜bœiñ s)ô s)ð s)ðl5ð 5ð 5ð 5ð 5Ð!;ñ 5ô 5ð 5ðp ð	'ð 	'ð 	'ð 	'ð 	' Oñ 	'ô 	'ñ „ð	'ð ð9ð 9ð 9ð 9ð 9Ð(?ñ 9ô 9ñ „ð9ð €ððñ ô ð
 ð9ð 9ð 9ð 9ð 9¨;ñ 9ô 9ñ „ñô ð9ð( €ððñ ô ð
r-ð r-ð r-ð r-ð r-Ð9ñ r-ô r-ñô ð
r-ðjð ð ð ð ¨¬	ñ ô ð ð. €ððñ ô ðp
ð p
ð p
ð p
ð p
Ð7ñ p
ô p
ñô ðp
ðf €ððñ ô ð
Wð Wð Wð Wð WÐ-JÈOñ Wô Wñô ð
Wðtð ð €€€r;   