Ë
    ÛÓ^jóm  ã                   ó8  — 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!jX                  e-«      Z.	 	 d6dej^                  dej`                  dej`                  dej`                  dej`                  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d/¬'«       G d0„ d1e5«      «       Z: ed2¬'«       G d3„ d4e5e«      «       Z;g d5¢Z<y)7é    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                 óœ  — |€|j                  d«      dz  }t        j                  ||j                  dd«      «      |z  }|�||z   }t        j
                  j                  |d¬«      }t        j
                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|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
             ú…/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/audioflamingo3/modeling_audioflamingo3.pyÚeager_attention_forwardr9   0   s¹   € ð €Ø—*‘*˜R“. DÑ(ˆä—<‘<  s§}¡}°Q¸Ó':Ó;¸gÑE€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2Ð(Ó>€Lä—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€LÜ—,‘,˜|¨UÓ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' paperNÚ	embed_dimÚ	num_headsr&   Ú
is_decoderÚbiasÚ	is_causalÚ	layer_idxÚconfigc	                 óz  •— t         ‰	| �  «        || _        || _        || _        ||z  | _        || _        | j
                  |z  | j                  k7  rt        d| j                  › d|› d�«      ‚| j
                  dz  | _        || _	        || _
        |€/|r-t        j                  d| j                  j                  › d�«       || _        t!        j"                  ||d¬«      | _        t!        j"                  |||¬«      | _        t!        j"                  |||¬«      | _        t!        j"                  |||¬«      | _        y )	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©r@   )ÚsuperÚ__init__r=   r>   r&   Úhead_dimrC   Ú
ValueErrorr%   r?   rA   ÚloggerÚwarning_onceÚ	__class__Ú__name__rB   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)
Úselfr=   r>   r&   r?   r@   rA   rB   rC   rL   s
            €r8   rG   z AudioFlamingo3Attention.__init__M   s   ø€ ô 	‰ÑÔØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒØˆŒà�M‰M˜IÑ%¨$¯.©.Ò8ÜØMÈdÏnÉnÐM]Ø$ Y K¨rð3óð ð —}‘} dÑ*ˆŒØ$ˆŒØ"ˆŒàÐ¡Ü×ÑØ*¨4¯>©>×+BÑ+BÐ*Cð D,ð ,ôð
 #ˆŒä—i‘i 	¨9¸5ÔAˆŒÜ—i‘i 	¨9¸4Ô@ˆŒÜ—i‘i 	¨9¸4Ô@ˆŒÜŸ	™	 )¨Y¸TÔBˆ�r:   Úhidden_statesÚkey_value_statesÚpast_key_valuesr$   Úoutput_attentionsr5   Úreturnc                 óø  — |du}|j                   dd }g |¢d‘| j                  ‘­}	| j                  |«      | j                  z  j	                  |	«      j                  dd«      j                  «       }
|�it        |t        «      rY|j                  j                  | j                  «      }|r&d|j                  | j                  <   |j                  }n|j                  }|�|n|}|rK|rIrG|j                  | j                     j                  }|j                  | j                     j                   }n»|d   d| j"                  | j                  f}| j%                  |«      j	                  |«      j                  dd«      j                  «       }| j'                  |«      j	                  |«      j                  dd«      j                  «       }|� |j)                  ||| j                  «      \  }}t+        j,                  | j.                  j0                  t2        «      } || |
|||f| j4                  sdn| j6                  d|d	œ|¤Ž\  }} |j8                  g |¢d‘­Ž j                  «       }| j;                  |«      }||fS )
z#Input shape: Batch x Time x ChannelNr(   r   r   Tr   ç        ç      ð?)r&   r%   rW   )ÚshaperH   rQ   r%   Úviewr1   r4   Ú
isinstancer	   Ú
is_updatedÚgetrB   Úcross_attention_cacheÚself_attention_cacheÚlayersÚkeysÚvaluesr>   rO   rP   Úupdater   Úget_interfacerC   Ú_attn_implementationr9   r-   r&   ÚreshaperR   )rS   rT   rU   rV   r$   rW   r5   Úis_cross_attentionÚinput_shapeÚhidden_shapeÚquery_statesr_   Úcurrent_statesÚ
key_statesÚvalue_statesÚkv_shapeÚattention_interfacer7   r6   s                      r8   ÚforwardzAudioFlamingo3Attention.forwardu   s`  € ð .°TÐ9Ðà#×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆð Ÿ™ MÓ2°T·\±\ÑA×GÑGÈÓU×_Ñ_Ð`aÐcdÓe×pÑpÓrˆð Ð&¬:°oÔGZÔ+[Ø(×3Ñ3×7Ñ7¸¿¹ÓGˆJÙ!à=A�×*Ñ*¨4¯>©>Ñ:Ø"1×"GÑ"G‘à"1×"FÑ"F�ð .>Ð-IÑ)È}ˆÙ¡/±jà(×/Ñ/°·±Ñ?×DÑDˆJØ*×1Ñ1°$·.±.ÑA×HÑH‰Lð
 $ A™¨¨D¯N©N¸D¿M¹MÐJˆHØŸ™ ^Ó4×9Ñ9¸(ÓC×MÑMÈaÐQRÓS×^Ñ^Ó`ˆJØŸ;™; ~Ó6×;Ñ;¸HÓE×OÑOÐPQÐSTÓU×`Ñ`ÓbˆLØÐ*Ø+:×+AÑ+AÀ*ÈlÐ\`×\jÑ\jÓ+kÑ(�
˜Lä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð
%
ð  $Ÿ}š}‘C°$·,±,ØØ/ñ
%
ð ñ
%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—m‘m KÓ0ˆà˜LÐ(Ð(r:   )rZ   FTFNN)NNNF)rM   Ú
__module__Ú__qualname__Ú__doc__ÚintÚfloatÚboolr   rG   r/   ÚTensorr   r   r   Útuplers   Ú__classcell__©rL   s   @r8   r<   r<   J   s&  ø„ ÙGð Ø ØØØ $Ø.2ñ&Càð&Cð ð&Cð ð	&Cð
 ð&Cð ð&Cð ð&Cð ˜‘:ð&Cð % tÑ+õ&CðV 15Ø(,Ø.2Ø"'ñH)à—|‘|ðH)ð  Ÿ,™,¨Ñ-ðH)ð  ™ð	H)ð
 Ÿ™ tÑ+ðH)ð  ðH)ð Ð-Ñ.ðH)ð 
ˆu�|‰|˜UŸ\™\¨DÑ0°%¸¿¹Ñ2EÈÑ2LÐLÑ	M÷H)r:   r<   c                   ó~   ‡ — 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 )ÚAudioFlamingo3EncoderLayerrC   c                 óh  •— t         ‰| �  «        |j                  | _        t	        | j                  |j
                  |j                  |¬«      | _        t        j                  | j                  «      | _
        |j                  | _        t        |j                     | _        |j                  | _        t        j                   | j                  |j"                  «      | _        t        j                   |j"                  | j                  «      | _        t        j                  | j                  «      | _        y )N)r=   r>   r&   rC   )rF   rG   Úd_modelr=   r<   Úencoder_attention_headsÚattention_dropoutÚ	self_attnr   Ú	LayerNormÚself_attn_layer_normr&   r   Úactivation_functionÚactivation_fnÚactivation_dropoutrN   Úencoder_ffn_dimÚfc1Úfc2Úfinal_layer_norm©rS   rC   rL   s     €r8   rG   z#AudioFlamingo3EncoderLayer.__init__Á   sÑ   ø€ Ü‰ÑÔØŸ™ˆŒä0Ø—n‘nØ×4Ñ4Ø×,Ñ,Øô	
ˆŒô %'§L¡L°·±Ó$@ˆÔ!Ø—~‘~ˆŒÜ# F×$>Ñ$>Ñ?ˆÔØ"(×";Ñ";ˆÔÜ—9‘9˜TŸ^™^¨V×-CÑ-CÓDˆŒÜ—9‘9˜V×3Ñ3°T·^±^ÓDˆŒÜ "§¡¨T¯^©^Ó <ˆÕr:   rT   r$   r5   rX   c                 ó   — |}| j                  |«      } | j                  d||dœ|¤Ž\  }}t        j                  j	                  || j                  | j
                  ¬«      }||z   }|}| j                  |«      }| j                  | j                  |«      «      }t        j                  j	                  || j                  | j
                  ¬«      }| j                  |«      }t        j                  j	                  || j                  | j
                  ¬«      }||z   }|j                  t        j                  k(  rEt        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.
        )rT   r$   r+   iè  )ÚminÚmax© )r†   r„   r   r2   r&   r-   r�   rˆ   r‹   r‰   rŒ   Údtyper/   Úfloat16Úfinfor‘   Úclamp)rS   rT   r$   r5   ÚresidualÚ_Úclamp_values          r8   rs   z"AudioFlamingo3EncoderLayer.forwardÓ   sT  € ð !ˆØ×1Ñ1°-Ó@ˆØ)˜4Ÿ>™>ð 
Ø'Ø)ñ
ð ñ
Ñˆ�qô
 Ÿ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆà ˆØ×-Ñ-¨mÓ<ˆØ×*Ñ*¨4¯8©8°MÓ+BÓCˆÜŸ™×-Ñ-¨m¸t×?VÑ?VÐae×anÑanÐ-ÓoˆØŸ™ Ó/ˆÜŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆà×Ñ¤%§-¡-Ò/ÜŸ+™+ m×&9Ñ&9Ó:×>Ñ>ÀÑEˆKÜ!ŸK™K¨¸K¸<È[ÔYˆMàÐr:   )rM   rt   ru   r   rG   r/   rz   r   r   rs   r|   r}   s   @r8   r   r   À   sM   ø„ ð=Ð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y)ÚAudioFlamingo3PreTrainedModelrC   Úmodel)ÚaudioÚtextTr<   rV   N)rM   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:   r8   r›   r›   ø   s=   … à Ó ØÐØ(ÐØ&*Ð#Ø2Ð3ÐØ#4Ð"5ÐØÐØ€NØ"&Ñr:   r›   c                   ó:   — e Zd ZU dZdZej                  dz  ed<   y)Ú!AudioFlamingo3ModelOutputWithPastzg
    audio_hidden_states (`torch.FloatTensor`, *optional*):
        Projected audio hidden states.
    NÚaudio_hidden_states)rM   rt   ru   rv   rª   r/   ÚFloatTensorrŸ   r’   r:   r8   r©   r©     s   … ñð
 59Ð˜×*Ñ*¨TÑ1Ô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<   y)	Ú$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ÚlogitsrV   rT   Ú
attentionsrª   )rM   rt   ru   rv   r°   r/   r«   rŸ   r±   rV   r   rT   r{   r²   rª   r’   r:   r8   r¯   r¯     s‹   … ñ	ð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø$(€O�U˜T‘\Ó(Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ó6Ø48Ð˜×*Ñ*¨TÑ1Ô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j2                  fd„Zˆ xZS )ÚAudioFlamingo3EncoderzY
    AudioFlamingo3 encoder: Whisper encoder, average pool (time/2), then LayerNorm.
    rC   Úinput_featuresr�   r   )rT   r²   c                 ób  •— 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"                  j%                  d«       t        j&                  t)        |j*                  «      D �cg c]  }t-        |«      ‘Œ c}«      | _        t        j0                  |j
                  «      | _        t        j4                  dd¬«      | _        d| _        | j;                  «        y c c}w )	Nr[   r   r   )Úkernel_sizeÚpaddingr   )r·   Ústrider¸   F)r¹   )rF   rG   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_layersr   rc   r…   Ú
layer_normÚ	AvgPool1dÚ
avg_poolerÚgradient_checkpointingÚ	post_init)rS   rC   r=   r˜   rL   s       €r8   rG   zAudioFlamingo3Encoder.__init__>  s7  ø€ Ü‰Ñ˜Ô Ø—~‘~ˆŒØ×1Ñ1ˆŒà—N‘Nˆ	Ø"×/Ñ/ˆÔØ$*×$?Ñ$?ˆÔ!Ø39×3IÒ3Iœ4Ÿ9™9 YÔ/ÈsˆÔä—Y‘Y˜t×0Ñ0°)ÈÐTUÔVˆŒ
Ü—Y‘Y˜y¨)ÀÈ1ÐVWÔXˆŒ
ä!Ÿ|™|¨D×,EÑ,EÀyÓQˆÔØ×Ñ×+Ñ+¨EÔ2ä—m‘mÔQVÐW]×WlÑWlÓQmÖ$nÈAÔ%?ÀÕ%GÒ$nÓoˆŒÜŸ,™, v§~¡~Ó6ˆŒäŸ,™, q°Ô3ˆŒà&+ˆÔ#à�‰Õùò %os   Ä6F,c                 óJ   — | j                  «       D ]	  }d|_        Œ d| _        y )NF)Ú
parametersÚrequires_gradÚ_requires_grad)rS   Úparams     r8   Ú_freeze_parametersz(AudioFlamingo3Encoder._freeze_parametersW  s(   € Ø—_‘_Ó&ò 	(ˆEØ"'ˆEÕð	(à#ˆÕr:   rX   c                 ó   — | j                   S ©N©rÃ   )rS   s    r8   Úget_input_embeddingsz*AudioFlamingo3Encoder.get_input_embeddings\  s   € Ø�z‰zÐr:   r#   c                 ó   — || _         y r×   rØ   )rS   r#   s     r8   Úset_input_embeddingsz*AudioFlamingo3Encoder.set_input_embeddings_  s	   € Øˆ�
r:   NÚinput_features_maskc                 óª  — |j                   d   dz
  dz  dz   }|j                  d«      }|dz
  dz  dz   }t        j                  ||j                  ¬«      |dd…df   k  }t
        j                  j                  | j                  |«      «      }t
        j                  j                  | j                  |«      «      }|j                  ddd«      }|| j                  j                  z   }t
        j                  j                  || j                  | j                  ¬«      }t        | j                   ||¬«      }| j"                  D ]>  }	| j                  xr" t        j$                  g «      | j&                  k  }
|
rŒ6 |	||«      }Œ@ |j                  ddd«      }| j)                  |«      j                  ddd«      }| j+                  |«      }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+   )rC   Úinputs_embedsr$   )Úlast_hidden_state)r\   Úsumr/   Úarangerß   r   r2   ÚgelurÃ   rÄ   ÚpermuterÆ   Úweightr&   r-   r   rC   rc   Úrandr»   rÍ   rË   r   )rS   rµ   rÜ   r5   Úseq_lenÚinput_features_lengthsrà   rT   r$   ÚlayerÚdrops              r8   rs   zAudioFlamingo3Encoder.forwardb  s­  € ð( "×'Ñ'¨Ñ+¨aÑ/°AÑ5¸Ñ9ˆØ!4×!8Ñ!8¸Ó!<ÐØ"8¸1Ñ"<ÀÑ!BÀQÑ!FÐÜ#Ÿl™l¨7¸>×;PÑ;PÔQÐTjÒklÐnrÐkrÑTsÑsÐô Ÿ™×*Ñ*¨4¯:©:°nÓ+EÓFˆÜŸ™×*Ñ*¨4¯:©:°mÓ+DÓEˆØ%×-Ñ-¨a°°AÓ6ˆð &¨×(<Ñ(<×(CÑ(CÑCˆÜŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-Ódˆä2Ø—;‘;Ø'Ø.ô
ˆð —[‘[ò 	EˆEØ—=‘=ÒD¤U§Z¡Z°£^°d·n±nÑ%DˆDÚÙ % m°^Ó D‘ð	Eð &×-Ñ-¨a°°AÓ6ˆØŸ™¨Ó6×>Ñ>¸qÀ!ÀQÓGˆØŸ™¨Ó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’   )rS   rì   Úoutput_lengthss      r8   Ú _get_feat_extract_output_lengthsz6AudioFlamingo3Encoder._get_feat_extract_output_lengthsš  s7   € ð '¨Ñ*¨qÑ0°1Ñ4ˆØ'¨!Ñ+°Ñ1°AÑ5ˆØ˜nÐ,Ð,r:   r×   )rM   rt   ru   rv   r   rŸ   Úmain_input_namer¡   r£   r   r<   Ú_can_record_outputsrG   rÕ   r   ÚModulerÙ   rÛ   r   r   r/   rz   r{   r   rs   Ú
LongTensorrï   r|   r}   s   @r8   r´   r´   )  sÉ   ø… ñð
 (Ó'Ø&€OØÐØ5Ð6Ðð 4Ø-ñÐð
Ð:õ ò2$ð
 b§i¡ió ð¨"¯)©)ó ð  Øð 48ñ3
àŸ™ð3
ð #Ÿ\™\¨DÑ0ð3
ð
 
Ð+Ñ	+ò3
ó ó  ð3
ðl-¸e×>NÑ>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.
    rC   c                 óŽ  •— t         ‰| �  «        t        j                  |j                  j
                  |j                  j
                  |j                  ¬«      | _        t        |j                     | _        t        j                  |j                  j
                  |j                  j
                  |j                  ¬«      | _        y )NrE   )rF   rG   r   rN   Úaudio_configÚhidden_sizeÚtext_configÚprojector_biasÚlinear_1r   Úprojector_hidden_actÚactÚlinear_2rŽ   s     €r8   rG   z*AudioFlamingo3MultiModalProjector.__init__©  sŽ   ø€ Ü‰ÑÔÜŸ	™	Ø×Ñ×+Ñ+¨V×-?Ñ-?×-KÑ-KÐRX×RgÑRgô
ˆŒô ˜&×5Ñ5Ñ6ˆŒÜŸ	™	Ø×Ñ×*Ñ*¨F×,>Ñ,>×,JÑ,JÐQW×QfÑQfô
ˆ�r:   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r×   )rû   rý   rþ   )rS   Úaudio_featuresrT   s      r8   rs   z)AudioFlamingo3MultiModalProjector.forward³  s2   € ØŸ™ nÓ5ˆØŸ™ Ó/ˆØŸ™ mÓ4ˆØÐr:   )rM   rt   ru   rv   r   rG   rs   r|   r}   s   @r8   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        |«      | _	        | j                  «        y r×   )rF   rG   r   Úfrom_configr÷   Úaudio_towerrù   Úlanguage_modelrõ   Úmulti_modal_projectorrÏ   rŽ   s     €r8   rG   zAudioFlamingo3Model.__init__Å  sY   ø€ Ü‰Ñ˜Ô Ü$×0Ñ0°×1DÑ1DÓEˆÔÜ'×3Ñ3°F×4FÑ4FÓGˆÔÜ%FÀvÓ%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Ü   r5   rX   c                 óÄ  —  | j                   |f|ddœ|¤Ž}| j                  |j                  «      }|j                  d«      j	                  t
        j                  «      }| j                   j                  |«      \  }}t        j                  |j                  d   |j                  ¬«      ddd…f   |dd…df   k  }	||	j	                  |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â   Útor/   Úlongrï   rã   r\   rß   Úpooler_output)
rS   rµ   rÜ   r5   Úaudio_outputÚaudio_embedsrì   r˜   Úpost_lengthsÚ
valid_masks
             r8   Úget_audio_featuresz&AudioFlamingo3Model.get_audio_featuresÌ  sà   € ð" (�t×'Ñ'Øð
Ø0CÐQUñ
ØY_ñ
ˆð ×1Ñ1°,×2PÑ2PÓQˆð ,×/Ñ/°Ó3×6Ñ6´u·z±zÓBˆØ×*Ñ*×KÑKÈMÓZ‰ˆˆ<Ü—\‘\ ,×"4Ñ"4°QÑ"7À×@SÑ@SÔTÐUYÒ[\ÐU\Ñ]Ð`lÒmnÐptÐmtÑ`uÑuˆ
Ø%1°*·-±-À×@SÑ@SÓ2TÑ%UˆÔ"àÐr:   Ú	input_idsrà   r   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“   rß   r(   r   z6Audio features and audio tokens do not match, tokens: z, features: )rÙ   r/   ÚtensorrC   Úaudio_token_idr  rß   Úallrâ   r\   Ú	unsqueezeÚ	expand_asr
  r   Únumel)rS   r  rà   r   Úspecial_audio_maskÚn_audio_tokensÚn_audio_featuress          r8   Úget_placeholder_maskz(AudioFlamingo3Model.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ô	
ð "Ð!r:   r$   Úposition_idsrV   Ú	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  rV   r  )rá   rV   rT   r²   rª   r’   )rÙ   r  r  r  Úmasked_scatterr
  rß   r  r©   rá   rV   rT   r²   )rS   r  rµ   rÜ   r$   r  rV   rà   r  r5   r  r  Úoutputss                r8   rs   zAudioFlamingo3Model.forward  sø   € ð$ Ð Ø7˜D×5Ñ5Ó7¸	ÓBˆMàˆØÐ%¨)Ð*?Ø×2Ñ2°>ÐCVÐdhÐ2Ói×wÑwˆLð "&×!:Ñ!:Ø¨À|ð ";ó "Ðð *×8Ñ8Ð9KÈ\Ï_É_Ð]j×]qÑ]qÓMrÓsˆMà%�$×%Ñ%ð 
Ø'Ø)Ø%Ø+Øñ
ð ñ
ˆô 1Ø%×7Ñ7Ø#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø ,ô
ð 	
r:   )NNNNNNNN)rM   rt   ru   Ú_tp_planÚ_pp_planÚ_keep_in_fp32_modules_strictrG   r   r   r/   r«   rz   r   r   r{   r   r  ró   r  r   ry   r©   rs   r|   r}   s   @r8   r  r  º  s–  ø„ ð €HØ€HØ#'Ð ôð Ùð wôðà×)Ñ)ðð #Ÿ\™\ðð Ð+Ñ,ð	ð
 
Ð+Ñ	+òóó ðð4"Ø×)Ñ)ð"Ø:?×:KÑ:Kð"Ø]b×]nÑ]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                   óŽ  ‡ — 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¬«      | _	        | j                  «        y )NFrE   )rF   rG   r  rœ   r   rN   rù   rø   Ú
vocab_sizeÚlm_headrÏ   rŽ   s     €r8   rG   z/AudioFlamingo3ForConditionalGeneration.__init__<  sS   ø€ Ü‰Ñ˜Ô Ü(¨Ó0ˆŒ
Ü—y‘y ×!3Ñ!3×!?Ñ!?À×ASÑAS×A^ÑA^ÐejÔkˆŒØ�‰Õr:   c                 ó>   —  | j                   j                  ||fi |¤ŽS r×   )rœ   r  )rS   rµ   rÜ   r5   s       r8   r  z9AudioFlamingo3ForConditionalGeneration.get_audio_featuresB  s"   € Ø,ˆt�z‰z×,Ñ,¨^Ð=PÑ[ÐTZÑ[Ð[r:   r  rµ   rÜ   r$   r  rV   rà   Úlabelsr  Úlogits_to_keepr5   rX   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 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  rV   rà   r  N)r±   r,  r)  )r°   r±   rV   rT   r²   rª   r’   )rœ   rá   r^   rw   Úslicer*  Úloss_functionrC   rù   r)  r¯   rV   rT   r²   rª   )rS   r  rµ   rÜ   r$   r  rV   rà   r,  r  r-  r5   r"  rT   Úslice_indicesr±   r°   s                    r8   rs   z.AudioFlamingo3ForConditionalGeneration.forwardE  s÷   € ð> �$—*‘*ð 

ØØ)Ø 3Ø)Ø%Ø+Ø'Øñ

ð ñ

ˆð  ×1Ñ1ˆÜ8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ%ð Ø f¸¿¹×9PÑ9P×9[Ñ9[ñØ_eñˆDô 4ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø '× ;Ñ ;ô
ð 	
r:   F)Úis_first_iterationr2  c                ó²   •— |j                  dd «      }|j                  dd «      }t        ‰| �  |i |¤Ž}|s|j                  dd«      s|�||d<   |�||d<   |S )Nrµ   rÜ   r  F)ÚpoprF   Úprepare_inputs_for_generationr`   )rS   r2  Úargsr5   rµ   rÜ   Úmodel_inputsrL   s          €r8   r5  zDAudioFlamingo3ForConditionalGeneration.prepare_inputs_for_generationƒ  st   ø€ ØŸ™Ð$4°dÓ;ˆØ$Ÿj™jÐ)>ÀÓEÐä‘wÑ<¸dÐMÀfÑMˆá \×%5Ñ%5°kÀ5Ô%IØÐ)Ø1?�Ð-Ñ.Ø"Ð.Ø6I�Ð2Ñ3àÐr:   )
NNNNNNNNNr   )rM   rt   ru   r%  Ú_tied_weights_keysrG   r  r   r   r/   ró   r«   rz   r   ry   rw   r   r   r{   r¯   rs   r5  r|   r}   s   @r8   r'  r'  3  sP  ø„ ð %6Ð#6Ð ØÐôò\ð Øð .2Ø37Ø37Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñ:
à×#Ñ# dÑ*ð:
ð ×)Ñ)¨DÑ0ð:
ð #Ÿ\™\¨DÑ0ð	:
ð
 Ÿ™ tÑ+ð:
ð ×&Ñ&¨Ñ-ð:
ð  ™ð:
ð ×(Ñ(¨4Ñ/ð:
ð × Ñ  4Ñ'ð:
ð ˜$‘;ð:
ð ˜eŸl™lÑ*ð:
ð Ð+Ñ,ð:
ð 
Ð5Ñ	5ò:
ó ó ð:
ðx OTò Àt÷ ñ r:   r'  )r'  r›   r´   r  )NrZ   )=r¿   Úcollections.abcr   Údataclassesr   r/   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_loggerrM   rJ   rò   rz   rx   r9   r<   r   r›   r©   r¯   r´   rõ   r  r'  Ú__all__r’   r:   r8   ú<module>rK     sä  ðó, Ý $Ý !ã Ý å !ß 5Ý )Ý 6Ý BÝ 9ß `Ñ `ß FÝ &ß jÕ jÝ 7Ý 5Ý ß [ð 
ˆ×	Ñ	˜HÓ	%€ð !Øñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð �T‰\ð%ð ó%ô4s)˜bŸi™iô s)ôl5Ð!;ô 5ðp ô	' Oó 	'ó ð	'ð ô9Ð(?ó 9ó ð9ñ ðôð
 ô9¨;ó 9ó óð9ñ( ðôô
r-Ð9ó r-óð
r-ôj¨¯	©	ô ñ. ðôôp
Ð7ó p
óðp
ñf ðôô
WÐ-JÈOó Wóð
Wòt�r:   