§
    ‚ŠtjÆ`  ã                   ó   — 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
 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)	 	 d3dej*        dej+        dej+        dej+        dej+        dz  de,dz  de,fd„Z- G d„ dej*        ¦  «        Z. G d„ d e¦  «        Z/e G d!„ d"e¦  «        ¦   «         Z0 ed#¬$¦  «         G d%„ d&e0¦  «        ¦   «         Z1 G d'„ d(ej*        ¦  «        Z2 ed)¬$¦  «        e G d*„ d+e¦  «        ¦   «         ¦   «         Z3 ed,¬$¦  «         G d-„ d.e0¦  «        ¦   «         Z4 ed/¬$¦  «         G d0„ d1e0e¦  «        ¦   «         Z5g d2¢Z6dS )4é    N)ÚCallable)Ú	dataclass)Únné   )ÚACT2FN)ÚCache)ÚGenerationMixin)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚBaseModelOutputWithPoolingÚCausalLMOutputWithPast)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚloggingÚtorch_compilable_check)Úmerge_with_config_defaults)Úcapture_outputsé   )Ú	AutoModelé   )ÚVoxtralConfigÚVoxtralEncoderConfigç        Ú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
             új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/voxtral/modeling_voxtral.pyÚeager_attention_forwardr7   .   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e	j
        dedefd„Z	 	 dde	j
        de	j
        dz  dedee	j
        e	j
        dz  ee	j
                 dz  f         fd„Zˆ xZS )ÚVoxtralAttentionz=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©r>   )ÚsuperÚ__init__r;   r<   r$   Úhead_dimrA   Ú
ValueErrorr#   r=   r?   ÚloggerÚwarning_onceÚ	__class__Ú__name__r@   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)
Úselfr;   r<   r$   r=   r>   r?   r@   rA   rJ   s
            €r6   rE   zVoxtralAttention.__init__K   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ˆŒˆˆr8   ÚtensorÚseq_lenÚbszc                 ó’   — |                      ||| j        | j        ¦  «                             dd¦  «                             ¦   «         S )Nr   r   )Úviewr<   rF   r/   r2   )rQ   rR   rS   rT   s       r6   Ú_shapezVoxtralAttention._shapes   s<   € Ø�{Š{˜3 ¨¬¸¼ÑGÔG×QÒQÐRSÐUVÑWÔW×bÒbÑdÔdÐdr8   Úhidden_statesr"   Úoutput_attentionsÚreturnc                 óN  — |                      ¦   «         \  }}}|                      |                      |¦  «        | j        z  ||¦  «        }|                      |                      |¦  «        d|¦  «        }	|                      |                      |¦  «        d|¦  «        }
t          j        | j        j	        t          ¦  «        } || ||	|
|f| j        sdn| j        d|dœ|¤Ž\  }}|                     ||d¦  «                             ¦   «         }|                      |¦  «        }||fS )z#Input shape: Batch x Time x Channelr&   r   ç      ð?)r$   r#   rY   )r,   rW   rO   r#   rM   rN   r   Úget_interfacerA   Ú_attn_implementationr7   r+   r$   Úreshaper2   rP   )rQ   rX   r"   rY   r3   rT   Útgt_lenÚ_Úquery_statesÚ
key_statesÚvalue_statesÚattention_interfacer5   r4   s                 r6   ÚforwardzVoxtralAttention.forwardv   s;  € ð (×,Ò,Ñ.Ô.‰ˆˆW�að —{’{ 4§;¢;¨}Ñ#=Ô#=ÀÄÑ#LÈgÐWZÑ[Ô[ˆØ—[’[ §¢¨]Ñ!;Ô!;¸RÀÑEÔEˆ
Ø—{’{ 4§;¢;¨}Ñ#=Ô#=¸rÀ3ÑGÔGˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð
%
ð  $œ}Ð>�C�C°$´,ØØ/ð
%
ð 
%
ð ð
%
ð 
%
Ñ!ˆ�\ð "×)Ò)¨#¨w¸Ñ;Ô;×FÒFÑHÔHˆØ—m’m KÑ0Ô0ˆà˜LÐ(Ð(r8   )r   FTFNN©NF)rK   Ú
__module__Ú__qualname__Ú__doc__ÚintÚfloatÚboolr   rE   r-   ÚTensorrW   Útuplerf   Ú__classcell__©rJ   s   @r6   r:   r:   H   sf  ø€ € € € € ØGÐGð Ø ØØØ $Ø'+ð&Cð &Càð&Cð ð&Cð ð	&Cð
 ð&Cð ð&Cð ð&Cð ˜‘:ð&Cð  Ñ$ð&Cð &Cð &Cð &Cð &Cð &CðPe˜Uœ\ð e°Cð e¸cð eð eð eð eð /3Ø"'ð	')ð ')à”|ð')ð œ tÑ+ð')ð  ð	')ð 
ˆuŒ|˜Uœ\¨DÑ0°%¸¼Ô2EÈÑ2LÐLÔ	Mð')ð ')ð ')ð ')ð ')ð ')ð ')ð ')r8   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 )ÚVoxtralEncoderLayerrA   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$   rA   )rD   rE   Úd_modelr;   r:   Úencoder_attention_headsÚattention_dropoutÚ	self_attnr   Ú	LayerNormÚself_attn_layer_normr$   r   Úactivation_functionÚactivation_fnÚactivation_dropoutrL   Úencoder_ffn_dimÚfc1Úfc2Úfinal_layer_norm©rQ   rA   rJ   s     €r6   rE   zVoxtralEncoderLayer.__init__¡   sÐ   ø€ Ý‰Œ×ÒÑÔÐØœˆŒå)Ø”nØÔ4ØÔ,Øð	
ñ 
ô 
ˆŒõ %'¤L°´Ñ$@Ô$@ˆÔ!Ø”~ˆŒÝ# FÔ$>Ô?ˆÔØ"(Ô";ˆÔÝ”9˜Tœ^¨VÔ-CÑDÔDˆŒÝ”9˜VÔ3°T´^ÑDÔDˆŒÝ "¤¨T¬^Ñ <Ô <ˆÔÐÐr8   rX   r"   r3   rZ   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.
        )rX   r"   r)   iè  )ÚminÚmax© )rz   rx   r   r0   r$   r+   r�   r|   r   r}   r€   Údtyper-   Úfloat16Úfinfor…   Úclamp)rQ   rX   r"   r3   Úresidualra   Úclamp_values          r6   rf   zVoxtralEncoderLayer.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àÐr8   )rK   rh   ri   r   rE   r-   rn   r   r   rf   rp   rq   s   @r6   rs   rs       sŠ   ø€ € € € € ð=˜}ð =ð =ð =ð =ð =ð =ð$"à”|ð"ð œð"ð Ð+Ô,ð	"ð
 
Œð"ð "ð "ð "ð "ð "ð "ð "r8   rs   c                   óH   — e Zd ZU eed<   dZdZdZdZdgZ	dZ
dZdZdZdZdZdS )ÚVoxtralPreTrainedModelrA   Úmodel)ÚaudioÚtextTNÚpast_key_values)rK   rh   ri   r   Ú__annotations__Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_supports_cache_classÚ_supports_attention_backendÚ_can_compile_fullgraphr†   r8   r6   rŽ   rŽ   Ø   sb   € € € € € € àÐÐÑØÐØ(ÐØ&*Ð#ØÐØ#4Ð"5ÐØÐØ€NØÐØ ÐØ"&ÐØ!ÐÐÐr8   rŽ   z:
    The Voxtral encoder, which is a Whisper encoder.
    ©Úcustom_introc                   óÚ   ‡ — 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e         d	eez  fd„¦   «         ¦   «         Zdej        fd„Zˆ xZS )ÚVoxtralEncoderz·
    Transformer encoder consisting of *config.encoder_layers* self attention layers. Each layer is a
    [`VoxtralEncoderLayer`].

    Args:
        config: VoxtralEncoderConfig
    rA   Úinput_featuresr�   rs   )Ú
attentionsrX   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†   )rs   )Ú.0ra   rA   s     €r6   ú
<listcomp>z+VoxtralEncoder.__init__.<locals>.<listcomp>  s"   ø€ Ð$gÐ$gÐ$gÀQÕ%8¸Ñ%@Ô%@Ð$gÐ$gÐ$gr8   )r¨   )rD   rE   r$   Úencoder_layerdropÚ	layerdropru   Únum_mel_binsÚmax_source_positionsÚscale_embeddingÚmathÚsqrtÚembed_scaler   ÚConv1dÚconv1Úconv2Ú	EmbeddingÚembed_positionsÚrequires_grad_Ú
ModuleListÚrangeÚencoder_layersÚlayersry   Ú
layer_normÚ	AvgPool1dÚ
avg_poolerÚgradient_checkpointingÚ	post_init)rQ   rA   r;   rJ   s    ` €r6   rE   zVoxtralEncoder.__init__   sM  øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø”~ˆŒØÔ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Ð$gÐ$gÐ$gÐ$gÍ%ÐPVÔPeÑJfÔJfÐ$gÑ$gÔ$gÑhÔhˆŒÝœ, v¤~Ñ6Ô6ˆŒåœ, q°Ð3Ñ3Ô3ˆŒà&+ˆÔ#à�ŠÑÔÐÐÐr8   c                 óP   — |                       ¦   «         D ]	}d|_        Œ
d| _        d S rg   )Ú
parametersÚrequires_gradÚ_requires_grad)rQ   Úparams     r6   Ú_freeze_parametersz!VoxtralEncoder._freeze_parameters  s4   € Ø—_’_Ñ&Ô&ð 	(ð 	(ˆEØ"'ˆEÔÐØ#ˆÔÐÐr8   rZ   c                 ó   — | j         S ©N©rµ   )rQ   s    r6   Úget_input_embeddingsz#VoxtralEncoder.get_input_embeddings  s
   € ØŒzÐr8   r!   c                 ó   — || _         d S rÊ   rË   )rQ   r!   s     r6   Úset_input_embeddingsz#VoxtralEncoder.set_input_embeddings!  s   € ØˆŒ
ˆ
ˆ
r8   Nr3   c           	      ór  — | j         j        | j        j        d         z  | j        j        d         z  }|j        d         |k    r$t          d|› d|j        d         › d|› d�¦  «        ‚|                     | j        j        j	        | j        j        j
        ¬¦  «        }t          j                             |                      |¦  «        ¦  «        }t          j                             |                      |¦  «        ¦  «        }|                     ddd	¦  «        }| j        j        }||z                        |j	        ¦  «        }t          j                             || j        | j        ¬
¦  «        }t%          | j        ¦  «        D ]\  }}	 |	||¬¦  «        }Œ|                      |¦  «        }t+          |¬¦  «        S )aÙ  
        Args:
            input_features (`torch.LongTensor` of shape `(batch_size, feature_size, sequence_length)`):
                Float values of mel features extracted from the raw speech waveform. Raw speech waveform can be
                obtained by loading a `.flac` or `.wav` audio file into an array of type `list[float]` or a
                `numpy.ndarray`, *e.g.* via the soundfile library (`pip install soundfile`). To prepare the array into
                `input_features`, the [`AutoFeatureExtractor`] should be used for extracting the mel features, padding
                and conversion into a tensor of type `torch.FloatTensor`. See [`~WhisperFeatureExtractor.__call__`]
            attention_mask (`torch.Tensor`)`, *optional*):
                Voxtral does not support masking of the `input_features`, this argument is preserved for compatibility,
                but it is not used. By default the silence in the input log mel spectrogram are ignored.
        r   r&   z7Voxtral expects the mel input features to be of length z, but found z-. Make sure to pad the input mel features to ú.©r‡   Údevicer   r   r)   )r"   )Úlast_hidden_state)rA   r¯   rµ   r¨   r¶   ÚshaperG   ÚtoÚweightr‡   rÒ   r   r0   ÚgeluÚpermuter¸   r$   r+   Ú	enumerater½   r¾   r   )
rQ   r£   r"   r3   Úexpected_seq_lengthÚinputs_embedsÚ	embed_posrX   ÚidxÚencoder_layers
             r6   rf   zVoxtralEncoder.forward$  sÛ  € ð( #œkÔ>ÀÄÔARÐSTÔAUÑUÐX\ÔXbÔXiÐjkÔXlÑlÐØÔ Ô#Ð':Ò:Ð:Ýð IÐJ]ð  Ið  IÐkyÔkð  ACô  lDð  Ið  Ið  sFð  Ið  Ið  Iñô ð ð (×*Ò*°´Ô1BÔ1HÐQUÔQ[ÔQbÔQiÐ*ÑjÔjˆÝœ×*Ò*¨4¯:ª:°nÑ+EÔ+EÑFÔFˆÝœ×*Ò*¨4¯:ª:°mÑ+DÔ+DÑEÔEˆØ%×-Ò-¨a°°AÑ6Ô6ˆàÔ(Ô/ˆ	Ø&¨Ñ2×6Ò6°}Ô7JÑKÔKˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆå"+¨D¬KÑ"8Ô"8ð 	ð 	ÑˆC�Ø)˜MØØ-ðñ ô ˆMˆMð
 Ÿš¨Ñ6Ô6ˆå)Ø+ð
ñ 
ô 
ð 	
r8   Ú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†   )rQ   rß   Úoutput_lengthss      r6   Ú _get_feat_extract_output_lengthsz/VoxtralEncoder._get_feat_extract_output_lengthsT  s7   € ð '¨Ñ*¨qÑ0°1Ñ4ˆØ'¨!Ñ+°Ñ1°AÑ5ˆØ˜nÐ,Ð,r8   rÊ   )rK   rh   ri   rj   r   r“   Úmain_input_namer•   r—   r:   rs   Ú_can_record_outputsrE   rÈ   r   ÚModulerÌ   rÎ   r   r   r   r   ro   r   rf   r-   Ú
LongTensorrâ   rp   rq   s   @r6   r¢   r¢   è   sC  ø€ € € € € € ðð ð !Ð Ð Ñ Ø&€OØÐØ.Ð/Ðà&Ø,ðð Ðð
Ð3ð ð ð ð ð ð ð2$ð $ð $ð
 b¤ið ð ð ð ð¨"¬)ð ð ð ð ð  Øð ð+
ð +
ð Ð+Ô,ð	+
ð
 
Ð+Ñ	+ð+
ð +
ð +
ñ „_ñ  Ôð+
ð\-¸eÔ>Nð -ð -ð -ð -ð -ð -ð -ð -r8   r¢   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚVoxtralMultiModalProjectorrA   c                 ó6  •— t          ¦   «                              ¦   «          t          j        |j        j        |j        j        d¬¦  «        | _        t          |j
                 | _        t          j        |j        j        |j        j        d¬¦  «        | _        d S ©NFrC   )rD   rE   r   rL   Úaudio_configÚintermediate_sizeÚtext_configÚhidden_sizeÚlinear_1r   Úprojector_hidden_actÚactÚlinear_2r‚   s     €r6   rE   z#VoxtralMultiModalProjector.__init__^  sv   ø€ Ý‰Œ×ÒÑÔÐÝœ	 &Ô"5Ô"GÈÔI[ÔIgÐnsÐtÑtÔtˆŒÝ˜&Ô5Ô6ˆŒÝœ	 &Ô"4Ô"@À&ÔBTÔB`ÐglÐmÑmÔmˆŒˆˆr8   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rÊ   )rï   rñ   rò   )rQ   Úaudio_featuresrX   s      r6   rf   z"VoxtralMultiModalProjector.forwardd  s;   € ØŸš nÑ5Ô5ˆØŸš Ñ/Ô/ˆØŸš mÑ4Ô4ˆØÐr8   )rK   rh   ri   r   rE   rf   rp   rq   s   @r6   rè   rè   ]  sZ   ø€ € € € € ðn˜}ð nð nð nð nð nð nðð ð ð ð ð ð r8   rè   zL
    Base class for Voxtral outputs, with hidden states and attentions.
    c                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )ÚVoxtralModelOutputWithPastzg
    audio_hidden_states (`torch.FloatTensor`, *optional*):
        Projected audio hidden states.
    NÚaudio_hidden_states)rK   rh   ri   rj   r÷   r-   ÚFloatTensorr“   r†   r8   r6   rö   rö   k  s7   € € € € € € ðð ð
 59Ð˜Ô*¨TÑ1Ð8Ð8Ñ8Ð8Ð8r8   rö   z™
    The Voxtral model, which consists of Whisper encoder, a multi-modal projector and a Llama language model,
    without a language modeling head.
    c                   ó~  ‡ — e Zd Zˆ fd„Ze ed¬¦  «        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dz  d	ej        dz  dedz  dee	         de
ez  fd„¦   «         ¦   «         Zˆ xZS )ÚVoxtralModelc                 ó  •— t          ¦   «                              |¦  «         t          j        |j        ¦  «        | _        t          j        |j        ¦  «        | _        t          |¦  «        | _	        |  
                    ¦   «          d S rÊ   )rD   rE   r   Úfrom_configrë   Úaudio_towerrí   Úlanguage_modelrè   Úmulti_modal_projectorrÂ   r‚   s     €r6   rE   zVoxtralModel.__init__�  sm   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý$Ô0°Ô1DÑEÔEˆÔÝ'Ô3°FÔ4FÑGÔGˆÔÝ%?ÀÑ%GÔ%GˆÔ"Ø�ŠÑÔÐÐÐr8   zŸThis method is used to get the audio embeddings from input features (a log mel spectrogram), meaning inferring the audio encoder and the multi-modal projector.rŸ   r£   r3   rZ   c                 ó¶   —  | j         |fddi|¤Ž}|j        }|                     d| j        j        j        ¦  «        }|                      |¦  «        }||_        |S )aa  
        input_features (`torch.FloatTensor`):
            Float values of mel features extracted from the raw speech waveform. Raw speech waveform can be
            obtained by loading a `.flac` or `.wav` audio file into an array of type `list[float]` or a
            `numpy.ndarray`, *e.g.* via the soundfile library (`pip install soundfile`). To prepare the array into
            `input_features`, the [`AutoFeatureExtractor`] should be used for extracting the mel features, padding
            and conversion into a tensor of type `torch.FloatTensor`. See [`~WhisperFeatureExtractor.__call__`]
        Úreturn_dictTr&   )rý   rÓ   r_   rA   rë   rì   rÿ   Úpooler_output)rQ   r£   r3   Úaudio_outputsr÷   Úaudio_embedss         r6   Úget_audio_featureszVoxtralModel.get_audio_featuresˆ  sl   € ð )˜Ô(¨ÐTÐTÀTÐTÈVÐTÐTˆØ+Ô=ÐØ1×9Ò9¸"¸d¼kÔ>VÔ>hÑiÔiÐØ×1Ò1Ð2EÑFÔFˆØ&2ˆÔ#àÐr8   Ú	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.
        NrÑ   r&   r   z6Audio features and audio tokens do not match, tokens: z, features: )rÌ   r-   rR   rA   Úaudio_token_idÚlongrÒ   ÚallÚsumrÔ   Ú	unsqueezeÚ	expand_asrÕ   r   Únumel)rQ   r  rÛ   rô   Úspecial_audio_maskÚn_audio_tokensÚn_audio_featuress          r6   Úget_placeholder_maskz!VoxtralModel.get_placeholder_maskŸ  s  € ð ÐØ!.Ð2M°$×2KÒ2KÑ2MÔ2MÝ”˜Tœ[Ô7½u¼zÐR_ÔRfÐgÑgÔgñ3ô 3ò "Ðð "4×!7Ò!7¸Ñ!;Ô!;ÐÐà!*¨d¬kÔ.HÒ!HÐà+×/Ò/Ñ1Ô1ˆØ)Ô/°Ô2ÐØ/×9Ò9¸"Ñ=Ô=×GÒGÈÑVÔV×YÒYÐZgÔZnÑoÔoÐÝØÐ,Ô-×3Ò3Ñ5Ô5¸×9MÒ9MÑ9OÔ9OÒOØsÀ^ÐsÐsÐaqÐsÐsñ	
ô 	
ð 	
ð "Ð!r8   Nr"   Úposition_idsr’   Ú	use_cachec           	      ó†  — |€ |                       ¦   «         |¦  «        }d }	|�d|�b|                      |d¬¦  «        j        }	|                      |||	¬¦  «        }
|                     |
|	                     |j        ¦  «        ¦  «        } | j        d|||||dœ|¤Ž}t          |j	        |j
        |j        |j        |	¬¦  «        S )NT)r  )rÛ   rô   )r"   r  r’   rÛ   r  )rÓ   r’   rX   r¤   r÷   r†   )rÌ   r  r  r  Úmasked_scatterrÕ   rÒ   rþ   rö   rÓ   r’   rX   r¤   )rQ   r  r£   r"   r  r’   rÛ   r  r3   r  r  Úoutputss               r6   rf   zVoxtralModel.forward·  s  € ð Ð Ø7˜D×5Ò5Ñ7Ô7¸	ÑBÔBˆMàˆØÐ%¨)Ð*?Ø×2Ò2°>ÈtÐ2ÑTÔTÔbˆLð "&×!:Ò!:Ø¨À|ð ";ñ "ô "Ðð *×8Ò8Ð9KÈ\Ï_Ê_Ð]jÔ]qÑMrÔMrÑsÔsˆMà+>¨4Ô+>ð ,
Ø)Ø%Ø+Ø'Øð,
ð ,
ð ð,
ð ,
ˆõ *Ø%Ô7Ø#Ô3Ø!Ô/ØÔ)Ø ,ð
ñ 
ô 
ð 	
r8   )NNNNNNN)rK   rh   ri   rE   r   r   r-   rø   r   r   ro   r   r  ræ   r  rn   r   rm   rö   rf   rp   rq   s   @r6   rú   rú   z  s³  ø€ € € € € ðð ð ð ð ð Ø€^ð wðñ ô ðØ#Ô/ðØ;AÐBTÔ;Uðà	Ð+Ñ	+ðð ð ñô ñ Ôðð&"ØÔ)ð"Ø:?Ô:Kð"Ø]bÔ]nð"ð "ð "ð "ð0 Øð .2Ø37Ø.2Ø04Ø(,Ø26Ø!%ð'
ð '
àÔ# dÑ*ð'
ð Ô)¨DÑ0ð'
ð œ tÑ+ð	'
ð
 Ô&¨Ñ-ð'
ð  ™ð'
ð Ô(¨4Ñ/ð'
ð ˜$‘;ð'
ð Ð+Ô,ð'
ð 
Ð+Ñ	+ð'
ð '
ð '
ñ „^ñ Ôð'
ð '
ð '
ð '
ð '
r8   rú   zs
    The Voxtral model, which consists of Whisper encoder, a multi-modal projector and a Llama language model.
    c                   ó*  ‡ — e Zd Zdg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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ˆ fd„Zˆ xZS )ÚVoxtralForConditionalGenerationr¸   c                 óú   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        j        |j        j        d¬¦  «        | _	        |  
                    ¦   «          d S rê   )rD   rE   rú   r�   r   rL   rí   rî   Ú
vocab_sizeÚlm_headrÂ   r‚   s     €r6   rE   z(VoxtralForConditionalGeneration.__init__ë  se   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý! &Ñ)Ô)ˆŒ
Ý”y Ô!3Ô!?ÀÔASÔA^ÐejÐkÑkÔkˆŒØ�ŠÑÔÐÐÐr8   c                 ó&   —  | j         j        |i |¤ŽS rÊ   )r�   r  )rQ   Úargsr3   s      r6   r  z2VoxtralForConditionalGeneration.get_audio_featuresñ  s   € Ø,ˆtŒzÔ,¨dÐ=°fÐ=Ð=Ð=r8   Nr   r  r£   r"   r  r’   rÛ   Úlabelsr  Úlogits_to_keepr3   rZ   c
                 ó\  —  | 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        ¬¦  «        S )aj  
        Example:

        ```python
        >>> from transformers import VoxtralForConditionalGeneration, AutoProcessor
        >>> import torch

        >>> device = "cuda" if torch.cuda.is_available() else "cpu"
        >>> repo_id = "mistralai/Voxtral-Mini-3B-2507"

        >>> processor = AutoProcessor.from_pretrained(repo_id)
        >>> model = VoxtralForConditionalGeneration.from_pretrained(repo_id, dtype=torch.bfloat16, device_map=device)

        >>> conversation = [
            {
                "role": "user",
                "content": [
                    {
                        "type": "audio",
                        "url": "https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/dude_where_is_my_car.wav",
                    },
                    {"type": "text", "text": "What can you tell me about this audio?"},
                ],
            }
        ]

        >>> inputs = processor.apply_chat_template(conversation)
        >>> inputs = inputs.to(device, dtype=torch.bfloat16)

        >>> outputs = model.generate(**inputs, max_new_tokens=30)
        >>> processor.batch_decode(outputs[:, inputs.input_ids.shape[1]:], skip_special_tokens=True)
        ["This audio is a humorous conversation between two friends, likely in English, where one of them is trying to figure out what the other's tattoo says."]
        ```)r  r£   r"   r  r’   rÛ   r  N)Úlogitsr  r  )Úlossr"  r’   rX   r¤   r†   )r�   rÓ   Ú
isinstancerk   Úslicer  Úloss_functionrA   rí   r  r   r’   rX   r¤   )rQ   r  r£   r"   r  r’   rÛ   r  r  r   r3   r  rX   Úslice_indicesr"  r#  s                   r6   rf   z'VoxtralForConditionalGeneration.forwardô  s  € ð` �$”*ð 	
ØØ)Ø)Ø%Ø+Ø'Øð	
ð 	
ð ð	
ð 	
ˆð  Ô1ˆÝ8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ%�4Ô%ð Ø f¸¼Ô9PÔ9[ðð Ø_eðð ˆDõ &ØØØ#Ô3Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r8   c                 óÌ   •— |                      dd ¦  «        }|                     dd¦  «        } t          ¦   «         j        |i |¤Ž}|s|                     dd¦  «        s||d<   |S )Nr£   Úis_first_iterationFr  T)ÚpopÚgetrD   Úprepare_inputs_for_generation)rQ   r  r3   r£   r)  Úmodel_inputsrJ   s         €r6   r,  z=VoxtralForConditionalGeneration.prepare_inputs_for_generationA  sw   ø€ ð  ŸšÐ$4°dÑ;Ô;ˆØ#ŸZšZÐ(<¸eÑDÔDÐà<•u‘w”wÔ<¸dÐMÀfÐMÐMˆàð 	< V§Z¢Z°¸TÑ%BÔ%Bð 	<à-;ˆLÐ)Ñ*àÐr8   )	NNNNNNNNr   )rK   rh   ri   Ú_keep_in_fp32_modules_strictrE   r  r   r   r-   ræ   rø   rn   r   rm   rk   r   r   ro   r   rf   r,  rp   rq   s   @r6   r  r  ã  s  ø€ € € € € ð %6Ð#6Ð ðð ð ð ð ð>ð >ð >ð Øð .2Ø37Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ðI
ð I
àÔ# dÑ*ðI
ð Ô)¨DÑ0ðI
ð œ tÑ+ð	I
ð
 Ô&¨Ñ-ðI
ð  ™ðI
ð Ô(¨4Ñ/ðI
ð Ô  4Ñ'ðI
ð ˜$‘;ðI
ð ˜eœlÑ*ðI
ð Ð+Ô,ðI
ð 
Ð'Ñ	'ðI
ð I
ð I
ñ „^ñ ÔðI
ðVð ð ð ð ð ð ð ð r8   r  )rŽ   r¢   rú   r  )Nr   )7r±   Úcollections.abcr   Údataclassesr   r-   r   Úactivationsr   Úcache_utilsr   Ú
generationr	   Úmodeling_layersr
   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úautor   Úconfiguration_voxtralr   r   Ú
get_loggerrK   rH   rå   rn   rl   r7   r:   rs   rŽ   r¢   rè   rö   rú   r  Ú__all__r†   r8   r6   ú<module>r?     s  ðð, €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  Ø )Ð )Ð )Ð )Ð )Ð )Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø kÐ kÐ kÐ kÐ kÐ kÐ kÐ kÐ kÐ kØ 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Ø Ð Ð Ð Ð Ð Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fð 
ˆÔ	˜HÑ	%Ô	%€ð !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð %ð %ð %ð4U)ð U)ð U)ð U)ð U)�r”yñ U)ô U)ð U)ðp5ð 5ð 5ð 5ð 5Ð4ñ 5ô 5ð 5ðp ð"ð "ð "ð "ð "˜_ñ "ô "ñ „ð"ð €ððñ ô ð
m-ð m-ð m-ð m-ð m-Ð+ñ m-ô m-ñô ð
m-ð`ð ð ð ð  ¤ñ ô ð ð €ððñ ô ð
 ð9ð 9ð 9ð 9ð 9Ð!8ñ 9ô 9ñ „ñô ð9ð €ððñ ô ð`
ð `
ð `
ð `
ð `
Ð)ñ `
ô `
ñô ð`
ðF €ððñ ô ð
eð eð eð eð eÐ&<¸oñ eô eñô ð
eðP jÐ
iÐ
i€€€r8   