§
    ‚ŠtjÑ7  ã                   ó®  — d dl mZ d dl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 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mZ ddlmZmZmZmZ ddl m!Z!m"Z" ddl#m$Z$  ej%        e&¦  «        Z' G d„ de!¦  «        Z( G d„ de"¦  «        Z) G d„ de¦  «        Z*e G d„ de¦  «        ¦   «         Z+ ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z, ed¬¦  «         G d „ d!e¦  «        ¦   «         Z- G d"„ d#e¦  «        Z. ed$¬¦  «         G d%„ d&e¦  «        ¦   «         Z/ ed'¬¦  «         G d(„ d)e¦  «        ¦   «         Z0g d*¢Z1dS )+é    )Ú	dataclassN)Únné   )ÚACT2FN)ÚCache)Úcreate_bidirectional_mask)ÚBaseModelOutputWithPoolingÚModelOutput)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚQwen2AudioEncoderÚQwen2AudioPreTrainedModel)ÚVoxtralForConditionalGenerationÚVoxtralModelÚVoxtralModelOutputWithPastÚVoxtralMultiModalProjector)ÚWhisperAttentionÚWhisperEncoderLayeré   )ÚAudioFlamingo3Configc                   ó   — e Zd ZdS )ÚAudioFlamingo3AttentionN©Ú__name__Ú
__module__Ú__qualname__© ó    úw/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/audioflamingo3/modular_audioflamingo3.pyr   r   .   ó   € € € € € Ø€Dr$   r   c                   ó   — e Zd ZdS )ÚAudioFlamingo3EncoderLayerNr   r#   r$   r%   r(   r(   2   r&   r$   r(   c                   ó   — e Zd ZdZdS )ÚAudioFlamingo3PreTrainedModelTN)r    r!   r"   Ú_supports_attention_backendr#   r$   r%   r*   r*   6   s   € € € € € Ø"&ÐÐÐr$   r*   c                   ó   — e Zd ZdS )Ú!AudioFlamingo3ModelOutputWithPastNr   r#   r$   r%   r-   r-   :   s   € € € € € à€Dr$   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ÚlogitsÚpast_key_valuesÚhidden_statesÚ
attentionsÚaudio_hidden_states)r    r!   r"   Ú__doc__r2   ÚtorchÚFloatTensorÚ__annotations__r3   r4   r   r5   Útupler6   r7   r#   r$   r%   r1   r1   ?   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$   r1   zT
    The audio model from AudioFlamingo3 without any head or projection on top.
    c            
       ót   — e Zd ZdZeedœZee	 dde	j
        de	j
        dz  deez  fd„¦   «         ¦   «         ZdS )	ÚAudioFlamingo3EncoderzY
    AudioFlamingo3 encoder: Whisper encoder, average pool (time/2), then LayerNorm.
    )r5   r6   NÚinput_featuresÚinput_features_maskÚreturnc                 óž  — |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   ©ÚdeviceNr   )ÚpÚtraining)ÚconfigÚinputs_embedsÚattention_mask)Úlast_hidden_state)ÚshapeÚsumr9   ÚarangerE   r   Ú
functionalÚgeluÚconv1Úconv2ÚpermuteÚembed_positionsÚweightÚdropoutrG   r   rH   ÚlayersÚrandÚ	layerdropÚ
avg_poolerÚ
layer_normr	   )Úselfr?   r@   ÚkwargsÚseq_lenÚinput_features_lengthsrI   r5   rJ   ÚlayerÚdrops              r%   ÚforwardzAudioFlamingo3Encoder.forwardh   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$   ©N)r    r!   r"   r8   r(   r   Ú_can_record_outputsr   r   r9   ÚTensorr<   r	   rb   r#   r$   r%   r>   r>   Y   s“   € € € € € ðð ð
 4Ø-ðð Ðð
  Øð 48ð3
ð 3
àœð3
ð #œ\¨DÑ0ð3
ð
 
Ð+Ñ	+ð3
ð 3
ð 3
ñ „_ñ  Ôð3
ð 3
ð 3
r$   r>   c                   ó(   ‡ — e Zd ZdZdefˆ f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.
    rH   c                 óJ  •— t          ¦   «                              ¦   «          t          j        |j        j        |j        j        |j        ¬¦  «        | _        t          |j
                 | _        t          j        |j        j        |j        j        |j        ¬¦  «        | _        d S )N)Úbias)ÚsuperÚ__init__r   ÚLinearÚaudio_configÚhidden_sizeÚtext_configÚprojector_biasÚlinear_1r   Úprojector_hidden_actÚactÚlinear_2©r\   rH   Ú	__class__s     €r%   rk   z*AudioFlamingo3MultiModalProjector.__init__¦   sŒ   ø€ Ý‰Œ×ÒÑÔÐÝœ	ØÔÔ+¨VÔ-?Ô-KÐRXÔRgð
ñ 
ô 
ˆŒõ ˜&Ô5Ô6ˆŒÝœ	ØÔÔ*¨FÔ,>Ô,JÐQWÔQfð
ñ 
ô 
ˆŒˆˆr$   )r    r!   r"   r8   r   rk   Ú__classcell__©rv   s   @r%   rg   rg       sO   ø€ € € € € ðð ð

Ð3ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r$   rg   z“
    The AudioFlamingo3 model (fine-tuned Whisper encoder, multi-modal projector, Qwen2 language model),
    without a language modeling head.
    c                   ór  ‡ — 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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 )ÚAudioFlamingo3ModelNc                 óJ   •— t          ¦   «                              |¦  «         d S rc   )rj   rk   ru   s     €r%   rk   zAudioFlamingo3Model.__init__¼   s!   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ð Ð 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@   r]   rA   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_dictrC   r   rD   N)Úaudio_towerÚmulti_modal_projectorrK   rM   Útor9   ÚlongÚ _get_feat_extract_output_lengthsrN   rL   rE   Úpooler_output)
r\   r?   r@   r]   Úaudio_outputÚaudio_embedsÚinput_lengthsÚ_Úpost_lengthsÚ
valid_masks
             r%   Ú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_idsrJ   Úposition_idsr4   rI   Ú	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}   )rI   Úaudio_features)rI   rJ   rŒ   r4   r�   )rK   r4   r5   r6   r7   r#   )Úget_input_embeddingsrŠ   rƒ   Úget_placeholder_maskÚmasked_scatterr€   rE   Úlanguage_modelr-   rK   r4   r5   r6   )r\   r‹   r?   r@   rJ   rŒ   r4   rI   r�   r]   r…   Úspecial_audio_maskÚoutputss                r%   rb   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)r    r!   r"   Ú_tp_planÚ_pp_planÚ_keep_in_fp32_modules_strictrk   r   r   r9   r:   re   r   r   r<   r	   rŠ   Ú
LongTensorr   Úboolrb   rw   rx   s   @r%   rz   rz   ±   s¤  ø€ € € € € ð €HØ€HØ#'Ð ð!ð !ð !ð !ð !ð Ø€^ð wðñ ô ðàÔ)ðð #œ\ðð Ð+Ô,ð	ð
 
Ð+Ñ	+ðð ð ñô ñ Ôðð4 Øð .2Ø37Ø37Ø.2Ø04Ø(,Ø26Ø!%ð,
ð ,
àÔ# dÑ*ð,
ð Ô)¨DÑ0ð,
ð #œ\¨DÑ0ð	,
ð
 œ tÑ+ð,
ð Ô&¨Ñ-ð,
ð  ™ð,
ð Ô(¨4Ñ/ð,
ð ˜$‘;ð,
ð Ð+Ô,ð,
ð ,
ð ,
ñ „^ñ Ôð,
ð ,
ð ,
ð ,
ð ,
r$   rz   z†
    The AudioFlamingo3 model which consists of a fine-tuned Whisper encoder, a multi-modal projector and a Qwen2 language model.
    c                   óJ  ‡ — e Zd 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 )Ú&AudioFlamingo3ForConditionalGenerationNc                 óš   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |                      ¦   «          d S rc   )rj   rk   rz   ÚmodelÚ	post_initru   s     €r%   rk   z/AudioFlamingo3ForConditionalGeneration.__init__  s@   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý(¨Ñ0Ô0ˆŒ
Ø�ŠÑÔÐÐÐr$   c                 ó*   —  | j         j        ||fi |¤ŽS rc   )rž   rŠ   )r\   r?   r@   r]   s       r%   rŠ   z9AudioFlamingo3ForConditionalGeneration.get_audio_features  s#   € Ø,ˆtŒzÔ,¨^Ð=PÐ[Ð[ÐTZÐ[Ð[Ð[r$   r   r‹   r?   r@   rJ   rŒ   r4   rI   Úlabelsr�   Úlogits_to_keepr]   rA   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@   rJ   rŒ   r4   rI   r�   N)r3   r¡   Ú
vocab_size)r2   r3   r4   r5   r6   r7   r#   )rž   rK   Ú
isinstanceÚintÚsliceÚlm_headÚloss_functionrH   ro   r¤   r1   r4   r5   r6   r7   )r\   r‹   r?   r@   rJ   rŒ   r4   rI   r¡   r�   r¢   r]   r•   r5   Úslice_indicesr3   r2   s                    r%   rb   z.AudioFlamingo3ForConditionalGeneration.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õ 4ØØØ#Ô3Ø!Ô/ØÔ)Ø 'Ô ;ð
ñ 
ô 
ð 	
r$   F)Úis_first_iterationr«   c                óÞ   •— |                      dd ¦  «        }|                      dd ¦  «        } t          ¦   «         j        |i |¤Ž}|s|                     dd¦  «        s|�||d<   |�||d<   |S )Nr?   r@   r�   F)Úpoprj   Úprepare_inputs_for_generationÚget)r\   r«   Úargsr]   r?   r@   Úmodel_inputsrv   s          €r%   r®   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   )r    r!   r"   Ú_tied_weights_keysrk   rŠ   r   r   r9   r™   r:   re   r   rš   r¦   r   r   r<   r1   rb   r®   rw   rx   s   @r%   rœ   rœ     s   ø€ € € € € ð Ððð ð ð ð ð
\ð \ð \ð Øð .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>   rz   )2Údataclassesr   r9   r   Úactivationsr   Úcache_utilsr   Úmasking_utilsr   Úmodeling_outputsr	   r
   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.output_capturingr   Ú qwen2_audio.modeling_qwen2_audior   r   Úvoxtral.modeling_voxtralr   r   r   r   Úwhisper.modeling_whisperr   r   Úconfiguration_audioflamingo3r   Ú
get_loggerr    Úloggerr   r(   r*   r-   r1   r>   rg   rz   rœ   Ú__all__r#   r$   r%   ú<module>rÃ      sÖ  ðð  "Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ &Ð &Ð &Ð &Ð &Ð &Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð MÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ >Ð >Ð >Ð >Ð >Ð >ð 
ˆÔ	˜HÑ	%Ô	%€ð	ð 	ð 	ð 	ð 	Ð.ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð!4ñ 	ô 	ð 	ð'ð 'ð 'ð 'ð 'Ð$=ñ 'ô 'ð 'ð ð	ð 	ð 	ð 	ð 	Ð(Bñ 	ô 	ñ „ð	ð €ððñ ô ð
 ð9ð 9ð 9ð 9ð 9¨;ñ 9ô 9ñ „ñô ð9ð( €ððñ ô ð
?
ð ?
ð ?
ð ?
ð ?
Ð-ñ ?
ô ?
ñô ð
?
ðD
ð 
ð 
ð 
ð 
Ð(Bñ 
ô 
ð 
ð" €ððñ ô ðT
ð T
ð T
ð T
ð T
˜,ñ T
ô T
ñô ðT
ðn €ððñ ô ð
Uð Uð Uð Uð UÐ-Lñ Uô Uñô ð
Uðpð ð €€€r$   