Ë
    T^(hÍ=  ã                   ó°  — d dl mZmZmZmZmZ d dlZd dlZd dlmZ ddl	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 dd
lmZ ddlmZ ddlmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ ddl%m&Z&  ejN                  e(«      Z)dZ* G d„ de!«      Z+ G d„ de«      Z, G d„ de«      Z- G d„ de"«      Z. G d„ de«      Z/ G d„ de «      Z0 G d„ de«      Z1 G d„ d e«      Z2y)!é    )ÚCallableÚListÚOptionalÚTupleÚUnionN)Únné   )ÚCacheÚSlidingWindowCacheÚStaticCache)ÚAttentionMaskConverter)ÚFlashAttentionKwargs)ÚBaseModelOutputWithPastÚQuestionAnsweringModelOutput)ÚALL_ATTENTION_FUNCTIONS)ÚUnpack)Úloggingé   )
ÚLlamaAttentionÚLlamaDecoderLayerÚLlamaForCausalLMÚLlamaForQuestionAnsweringÚLlamaForSequenceClassificationÚLlamaForTokenClassificationÚLlamaMLPÚ
LlamaModelÚapply_rotary_pos_embÚeager_attention_forwardé   )ÚMistralConfigzmistralai/Mistral-7B-v0.1c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú
MistralMLPc                 óJ  •— t         ‰| �  |«       t        j                  | j                  | j
                  d¬«      | _        t        j                  | j                  | j
                  d¬«      | _        t        j                  | j
                  | j                  d¬«      | _        y ©NF)Úbias)	ÚsuperÚ__init__r   ÚLinearÚhidden_sizeÚintermediate_sizeÚ	gate_projÚup_projÚ	down_proj©ÚselfÚconfigÚ	__class__s     €úi/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/mistral/modular_mistral.pyr'   zMistralMLP.__init__#   ss   ø€ Ü‰Ñ˜Ô ÜŸ™ 4×#3Ñ#3°T×5KÑ5KÐRWÔXˆŒÜ—y‘y ×!1Ñ!1°4×3IÑ3IÐPUÔVˆŒÜŸ™ 4×#9Ñ#9¸4×;KÑ;KÐRWÔXˆ�ó    )Ú__name__Ú
__module__Ú__qualname__r'   Ú__classcell__©r1   s   @r2   r"   r"   "   s   ø„ ÷Yð Yr3   r"   c                   ó2  ‡ — e Zd Zdedefˆ fd„Z	 	 ddej                  deej                  ej                  f   de	ej                     de	e
   de	ej                     d	ee   d
eej                  e	ej                     e	eej                        f   fd„Zˆ xZS )ÚMistralAttentionr0   Ú	layer_idxc                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  | j                  z  d¬«      | _        t        j                  |j                  |j                  | j                  z  d¬«      | _	        t        j                  |j                  |j                  | j                  z  d¬«      | _
        t        j                  |j
                  | j                  z  |j                  d¬«      | _        y r$   )r&   r'   r   r(   r)   Únum_attention_headsÚhead_dimÚq_projÚnum_key_value_headsÚk_projÚv_projÚo_proj©r/   r0   r;   r1   s      €r2   r'   zMistralAttention.__init__+   s¿   ø€ Ü‰ÑÔÜ—i‘i × 2Ñ 2°F×4NÑ4NÐQU×Q^ÑQ^Ñ4^ÐejÔkˆŒÜ—i‘i × 2Ñ 2°F×4NÑ4NÐQU×Q^ÑQ^Ñ4^ÐejÔkˆŒÜ—i‘i × 2Ñ 2°F×4NÑ4NÐQU×Q^ÑQ^Ñ4^ÐejÔkˆŒÜ—i‘i × :Ñ :¸T¿]¹]Ñ JÈF×L^ÑL^ÐejÔkˆ�r3   Úhidden_statesÚposition_embeddingsÚattention_maskÚpast_key_valueÚcache_positionÚkwargsÚreturnc           
      óâ  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }	| j                  |«      j                  |«      j	                  dd«      }
| j                  |«      j                  |«      j	                  dd«      }|\  }}t        |	|
||«      \  }	}
|�'|||dœ}|j                  |
|| j                  |«      \  }
}t        }| j                  j                  dk7  r^| j                  j                  dk(  r(|j                  dd«      rt        j                  d	«       nt         | j                  j                     } || |	|
||f| j"                  sd
n| j$                  | j&                  t)        | j                  dd «      dœ|¤Ž\  }} |j*                  g |¢d‘­Ž j-                  «       }| j/                  |«      }||fS )Néÿÿÿÿr   r   )ÚsinÚcosrI   ÚeagerÚsdpaÚoutput_attentionsFzã`torch.nn.functional.scaled_dot_product_attention` does not support `output_attentions=True`. Falling back to eager attention. This warning can be removed using the argument `attn_implementation="eager"` when loading the model.ç        Úsliding_window)ÚdropoutÚscalingrT   )Úshaper>   r?   ÚviewÚ	transposerA   rB   r   Úupdater;   r   r0   Ú_attn_implementationÚgetÚloggerÚwarning_oncer   ÚtrainingÚattention_dropoutrV   ÚgetattrÚreshapeÚ
contiguousrC   )r/   rE   rF   rG   rH   rI   rJ   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesrO   rN   Úcache_kwargsÚattention_interfaceÚattn_outputÚattn_weightss                     r2   ÚforwardzMistralAttention.forward2   sò  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆØ—[‘[ Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆà&‰ˆˆSÜ#7¸ÀjÐRUÐWZÓ#[Ñ ˆ�jàÐ%à#&¨sÀnÑUˆLØ'5×'<Ñ'<¸ZÈÐW[×WeÑWeÐgsÓ'tÑ$ˆJ˜ä(?ÐØ�;‰;×+Ñ+¨wÒ6Ø�{‰{×/Ñ/°6Ò9¸f¿j¹jÐI\Ð^cÔ>dÜ×#Ñ#ðLõô
 '>¸d¿k¹k×>^Ñ>^Ñ&_Ð#á$7ØØØØØð
%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘LÜ" 4§;¡;Ð0@À$ÓGñ
%
ð ñ
%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(r3   )NN)r4   r5   r6   r    Úintr'   ÚtorchÚTensorr   r   r
   Ú
LongTensorr   r   rm   r7   r8   s   @r2   r:   r:   *   sÅ   ø„ ðl˜}ð l¸õ lð +/Ø59ñ0)à—|‘|ð0)ð # 5§<¡<°·±Ð#=Ñ>ð0)ð ! §¡Ñ.ð	0)ð
 ! ™ð0)ð ! ×!1Ñ!1Ñ2ð0)ð Ð-Ñ.ð0)ð 
ˆu�|‰|˜X e§l¡lÑ3°X¸eÀEÇLÁLÑ>QÑ5RÐRÑ	S÷0)r3   r:   c                   ó(   ‡ — e Zd Zdedefˆ fd„Zˆ xZS )ÚMistralDecoderLayerr0   r;   c                 ój   •— t         ‰| �  ||«       t        ||¬«      | _        t	        |«      | _        y )N)r0   r;   )r&   r'   r:   Ú	self_attnr"   ÚmlprD   s      €r2   r'   zMistralDecoderLayer.__init__f   s,   ø€ Ü‰Ñ˜ Ô+Ü)°À9ÔMˆŒÜ˜fÓ%ˆ�r3   )r4   r5   r6   r    rn   r'   r7   r8   s   @r2   rs   rs   e   s   ø„ ð&˜}ð &¸÷ &ñ &r3   rs   c                   ó  ‡ — e Zd Zdefˆ fd„Z	 ddej                  dej                  dej                  dedef
d„Z	e
dej                  d	ed
edej                  dej                  dej                  dededefd„«       Zˆ xZS )ÚMistralModelr0   c           	      ó¸   •— t         ‰| �  |«       t        j                  t	        |j
                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        y c c}w ©N)r&   r'   r   Ú
ModuleListÚrangeÚnum_hidden_layersrs   ÚlayersrD   s      €r2   r'   zMistralModel.__init__m   sD   ø€ Ü‰Ñ˜Ô Ü—m‘mÜEJÈ6×KcÑKcÓEdÖe¸	Ô  ¨Õ3Òeó
ˆ�ùÚes   ·ArG   Úinput_tensorrI   Úpast_key_valuesrR   c                 ó  — | j                   j                  dk(  rS|�H|�F|d d …df   j                  «       j                  «       |j	                  «       d   k7  }|rt        d«      ‚|�d|v r|S y |�|j                  «       nd}t        |t        «      }t        |t        «      }	| j                   j                  dk(  r?|s=|	s;|s9t        j                  |||| j                   j                  | j                  ¬«      ry |j                  |j                  }}
t!        j"                  |
«      j$                  }|j&                  d   }|	s|r|j)                  «       }n1t        |t         j*                  «      r|j&                  d   n||z   dz   }| j-                  ||||
|||j&                  d   | j                   |¬	«	      }| j                   j                  dk(  r2|�0|j                  j.                  d
v r|st        j0                  ||«      }|S )NÚflash_attention_2rM   r   zìYou are attempting to perform batched generation with padding_side='right' this may lead to unexpected behaviour for Flash Attention version of Mistral. Make sure to  call `tokenizer.padding_side  = 'left'` before tokenizing the input. rS   rQ   )Úinputs_embedsÚpast_key_values_lengthrT   Úis_trainingr   )Úsequence_lengthÚtarget_lengthÚdtypeÚdevicerI   Ú
batch_sizer0   r€   )ÚcudaÚxpu)r0   r[   ÚsumÚitemÚsizeÚ
ValueErrorÚget_seq_lengthÚ
isinstancer   r   r   Ú_ignore_causal_mask_sdparT   r_   rˆ   r‰   ro   ÚfinfoÚminrW   Úget_max_cache_shaperp   Ú5_prepare_4d_causal_attention_mask_with_cache_positionÚtypeÚ_unmask_unattended)r/   rG   r   rI   r€   rR   Úis_padding_rightÚpast_seen_tokensÚusing_static_cacheÚusing_sliding_window_cacherˆ   r‰   Ú	min_dtyper†   r‡   Úcausal_masks                   r2   Ú_update_causal_maskz MistralModel._update_causal_masks   s  € ð �;‰;×+Ñ+Ð/BÒBØÐ)¨oÐ.IØ#1²!°R°%Ñ#8×#<Ñ#<Ó#>×#CÑ#CÓ#EÈ×IZÑIZÓI\Ð]^ÑI_Ñ#_Ð Ù#Ü$ðaóð ð
 Ð)¨c°^Ñ.CØ%Ð%Øð
 @OÐ?Z˜?×9Ñ9Ô;Ð`aÐÜ'¨¼ÓEÐÜ%/°ÔASÓ%TÐ"ð �K‰K×,Ñ,°Ò6Ù'Ñ+EÙ%ä%×>Ñ>ØØ*Ø'7Ø#Ÿ{™{×9Ñ9Ø ŸM™Mõð à$×*Ñ*¨L×,?Ñ,?ˆvˆÜ—K‘K Ó&×*Ñ*ˆ	Ø&×,Ñ,¨QÑ/ˆá%Ñ);Ø+×?Ñ?ÓA‰Mô
 ˜n¬e¯l©lÔ;ð ×$Ñ$ RÒ(à%¨Ñ7¸!Ñ;ð ð ×PÑPØØ+Ø'ØØØ)Ø#×)Ñ)¨!Ñ,Ø—;‘;Ø+ð Qó 

ˆð �K‰K×,Ñ,°Ò6ØÐ*Ø×%Ñ%×*Ñ*¨oÑ=Ù%ô
 1×CÑCÀKÐQZÓ[ˆKàÐr3   r†   r‡   rˆ   r‰   rŠ   c	                 óp  — | �| j                  «       dk(  r| }	|	S t        j                  |«      j                  }
t        j                  ||f|
||¬«      }	t        j
                  ||¬«      |j                  dd«      kD  }|j                  �]t        |t        «      r||kD  rHt        j
                  ||¬«      |j                  dd«      |j                  z
  k  }|j                  |«       |	|z  }	|	dddd…dd…f   j                  |ddd«      }	| �©|	j                  «       }	| j                  d   |kD  r| dd…d|…f   } | j                  d   }|	dd…dd…dd…d|…f   | dd…dddd…f   j                  |	j                  «      z   }|dk(  }|	dd…dd…dd…d|…f   j!                  ||
«      |	dd…dd…dd…d|…f<   |	S )aV  
        Creates a causal 4D mask of shape `(batch_size, 1, query_length, key_value_length)` from a 2D mask of shape
        `(batch_size, key_value_length)`, or if the input `attention_mask` is already 4D, do nothing.

        Args:
            attention_mask (`torch.Tensor`):
                A 2D attention mask of shape `(batch_size, key_value_length)` or a 4D attention mask of shape `(batch_size, 1, query_length, key_value_length)`.
            sequence_length (`int`):
                The sequence length being processed.
            target_length (`int`):
                The target length: when generating with static cache, the mask should be as long as the static cache, to account for the 0 padding, the part of the cache that is not filled yet.
            dtype (`torch.dtype`):
                The dtype to use for the 4D attention mask.
            device (`torch.device`):
                The device to place the 4D attention mask on.
            cache_position (`torch.Tensor`):
                Indices depicting the position of the input sequence tokens in the sequence.
            batch_size (`torch.Tensor`):
                Batch size.
            config (`MistralConfig`):
                The model's configuration class
            past_key_values (`Cache`):
                The cache class that is being used currently to generate
        Né   )Ú
fill_valuerˆ   r‰   )r‰   rM   r   r   )Údimro   r”   r•   ÚfullÚarangerb   rT   r’   r   Úbitwise_or_ÚexpandÚclonerW   Útor‰   Úmasked_fill)rG   r†   r‡   rˆ   r‰   rI   rŠ   r0   r€   rŸ   rž   Údiagonal_attend_maskÚsliding_attend_maskÚmask_lengthÚpadding_masks                  r2   r—   zBMistralModel._prepare_4d_causal_attention_mask_with_cache_positionÆ   sò  € ðH Ð%¨.×*<Ñ*<Ó*>À!Ò*Cà(ˆKð: Ðô7 Ÿ™ EÓ*×.Ñ.ˆIÜŸ*™*Ø  -Ð0¸YÈeÐ\bôˆKô $)§<¡<°ÀfÔ#MÐP^×PfÑPfÐgiÐklÓPmÑ#mÐ Ø×$Ñ$Ð0ô " /Ô3EÔFÈ/Ð\iÒJiÜ*/¯,©,°}ÈVÔ*TØ&×.Ñ.¨r°1Ó5¸×8MÑ8MÑMñ+Ð'ð )×4Ñ4Ð5HÔIØÐ/Ñ/ˆKØ% d¨D²!²QÐ&6Ñ7×>Ñ>¸zÈ1ÈbÐRTÓUˆKØÐ)Ø)×/Ñ/Ó1�Ø!×'Ñ'¨Ñ+¨mÒ;Ø%3²A°~¸°~Ð4EÑ%F�NØ,×2Ñ2°2Ñ6�Ø*ª1ªa²°L°[°LÐ+@ÑAÀNÒSTÐVZÐ\`ÒbcÐScÑDd×DgÑDgØ×&Ñ&óEñ  �ð  ,¨qÑ0�Ø5@ÂÂAÂqÈ,È;È,ÐAVÑ5W×5cÑ5cØ  )ó6�šAšq¢! \ k \Ð1Ñ2ð Ðr3   )F)r4   r5   r6   r    r'   ro   rp   r
   Úboolr    Ústaticmethodrn   rˆ   r‰   r—   r7   r8   s   @r2   rx   rx   l   sá   ø„ ð
˜}õ 
ð #(ñQàŸ™ðQð —l‘lðQð Ÿ™ð	Qð
 ðQð  óQðf ðBØŸ™ðBàðBð ðBð �{‰{ð	Bð
 —‘ðBð Ÿ™ðBð ðBð ðBð òBó ôBr3   rx   c                   ó   — e Zd Zy)ÚMistralForCausalLMN©r4   r5   r6   © r3   r2   r³   r³     ó   „ Ør3   r³   c                   ó   — e Zd Zy)ÚMistralForTokenClassificationNr´   rµ   r3   r2   r¸   r¸     r¶   r3   r¸   c                   ó   — e Zd Zy)Ú MistralForSequenceClassificationNr´   rµ   r3   r2   rº   rº     r¶   r3   rº   c                   óD  ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Z	 	 	 	 	 	 	 	 	 ddeej                     deej                     deej                     deeeeej                     f      d	eej                     d
eej                     deej                     dee   dee   defd„Zˆ xZS )ÚMistralForQuestionAnsweringÚmodelc                 óH   •— t         ‰| �  |«       t        |«      | _        | `y rz   )r&   r'   rx   r½   Útransformerr.   s     €r2   r'   z$MistralForQuestionAnswering.__init__  s"   ø€ Ü‰Ñ˜Ô Ü! &Ó)ˆŒ
ØÑr3   c                 ó.   — | j                   j                  S rz   ©r½   Úembed_tokens)r/   s    r2   Úget_input_embeddingsz0MistralForQuestionAnswering.get_input_embeddings   s   € Ø�z‰z×&Ñ&Ð&r3   c                 ó&   — || j                   _        y rz   rÁ   )r/   Úvalues     r2   Úset_input_embeddingsz0MistralForQuestionAnswering.set_input_embeddings#  s   € Ø"'ˆ�
‰
Õr3   Ú	input_idsrG   Úposition_idsr€   rƒ   Ústart_positionsÚend_positionsrR   Úoutput_hidden_statesrK   c
           	      ó”  — | j                  |||||||	¬«      }|j                  }| j                  |«      }|j                  dd¬«      \  }}|j	                  d«      j                  «       }|j	                  d«      j                  «       }d}|�|� | j                  ||||fi |
¤Ž}t        ||||j                  |j                  ¬«      S )a  
        start_positions (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for position (index) of the start of the labelled span for computing the token classification loss.
            Positions are clamped to the length of the sequence (`sequence_length`). Position outside of the sequence
            are not taken into account for computing the loss.
        end_positions (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for position (index) of the end of the labelled span for computing the token classification loss.
            Positions are clamped to the length of the sequence (`sequence_length`). Position outside of the sequence
            are not taken into account for computing the loss.
        )rG   rÈ   r€   rƒ   rR   rË   r   rM   )r¤   N)ÚlossÚstart_logitsÚ
end_logitsrE   Ú
attentions)
r½   Úlast_hidden_stateÚ
qa_outputsÚsplitÚsqueezerc   Úloss_functionr   rE   rÐ   )r/   rÇ   rG   rÈ   r€   rƒ   rÉ   rÊ   rR   rË   rJ   ÚoutputsÚsequence_outputÚlogitsrÎ   rÏ   rÍ   s                    r2   rm   z#MistralForQuestionAnswering.forward&  sç   € ð0 ,0¯:©:ØØ)Ø%Ø+Ø'Ø/Ø!5ð ,6ó ,
ˆð "×3Ñ3ˆà—‘ Ó1ˆØ#)§<¡<°°r <Ó#:Ñ ˆ�jØ#×+Ñ+¨BÓ/×:Ñ:Ó<ˆØ×'Ñ'¨Ó+×6Ñ6Ó8ˆ
àˆØÐ&¨=Ð+DØ%�4×%Ñ% l°JÀÐQ^ÑiÐbhÑiˆDä+ØØ%Ø!Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r3   )	NNNNNNNNN)r4   r5   r6   Úbase_model_prefixr'   rÃ   rÆ   r   ro   rq   ÚFloatTensorr   r
   r   r°   r   rm   r7   r8   s   @r2   r¼   r¼     s   ø„ ØÐôò
'ò(ð
 15Ø6:Ø37ØKOØ59Ø6:Ø48Ø,0Ø/3ñ3
à˜E×,Ñ,Ñ-ð3
ð ! ×!2Ñ!2Ñ3ð3
ð ˜u×/Ñ/Ñ0ð	3
ð
 " %¨¨t°E×4EÑ4EÑ/FÐ(FÑ"GÑHð3
ð   × 1Ñ 1Ñ2ð3
ð " %×"2Ñ"2Ñ3ð3
ð   × 0Ñ 0Ñ1ð3
ð $ D™>ð3
ð ' t™nð3
ð 
&÷3
r3   r¼   )3Útypingr   r   r   r   r   ro   Útorch.utils.checkpointr   Úcache_utilsr
   r   r   Úmodeling_attn_mask_utilsr   Úmodeling_flash_attention_utilsr   Úmodeling_outputsr   r   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   Úllama.modeling_llamar   r   r   r   r   r   r   r   r   r   Úconfiguration_mistralr    Ú
get_loggerr4   r]   Ú_CHECKPOINT_FOR_DOCr"   r:   rs   rx   r³   r¸   rº   r¼   rµ   r3   r2   ú<module>rè      sÇ   ðß 9Õ 9ã Û Ý ç AÑ AÝ >Ý Bß UÝ 5Ý &Ý ÷÷ ÷ õ 1ð 
ˆ×	Ñ	˜HÓ	%€à1Ð ôY�ô Yô8)�~ô 8)ôv&Ð+ô &ô]�:ô ]ô@	Ð)ô 	ô	Ð$?ô 	ô	Ð'Eô 	ôA
Ð";õ A
r3   