Ë
    S^(h€/  ã                   óD  — d dl mZ d dl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 ddlmZ ddlmZ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  ej<                  e«      Z  G d„ de«      Z! G d„ de«      Z" G d„ de«      Z# G d„ dee«      Z$ G d„ de«      Z%y)é    )Úpartial)ÚListÚOptionalÚTupleÚUnionN)Únné   )ÚCacheÚDynamicCache)ÚFlashAttentionKwargs)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)ÚUnpack)Ú
LossKwargsÚloggingé   )ÚLlamaAttentionÚLlamaDecoderLayerÚLlamaForCausalLMÚ
LlamaModelé   )ÚGraniteConfigc                   ó4   ‡ — e Zd ZdZddedee   fˆ fd„Zˆ xZS )ÚGraniteAttentionz=Multi-headed attention from 'Attention Is All You Need' paperÚconfigÚ	layer_idxc                 óH   •— t         ‰| �  ||«       |j                  | _        y ©N)ÚsuperÚ__init__Úattention_multiplierÚscaling©Úselfr   r   Ú	__class__s      €úi/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/granite/modular_granite.pyr    zGraniteAttention.__init__&   s   ø€ Ü‰Ñ˜ Ô+Ø×2Ñ2ˆ�ó    r   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úintr    Ú__classcell__©r%   s   @r&   r   r   #   s"   ø„ ÙGñ3˜}ð 3¸À#¹÷ 3ñ 3r'   r   c                   óf  ‡ — e Zd Zdedefˆ fd„Z	 	 	 	 	 	 	 ddej                  deej                     deej                     dee
   dee   d	ee   d
eej                     deeej                  ej                  f      deej                  eeej                  ej                  f      f   fd„Zˆ xZS )ÚGraniteDecoderLayerr   r   c                 ól   •— t         ‰| �  ||«       |j                  | _        t        ||¬«      | _        y )N)r   r   )r   r    Úresidual_multiplierr   Ú	self_attnr#   s      €r&   r    zGraniteDecoderLayer.__init__,   s.   ø€ Ü‰Ñ˜ Ô+Ø#)×#=Ñ#=ˆÔ Ü)°À9ÔMˆ�r'   Úhidden_statesÚattention_maskÚposition_idsÚpast_key_valueÚoutput_attentionsÚ	use_cacheÚcache_positionÚposition_embeddingsÚreturnc	                 ó  — |}
| j                  |«      } | j                  d||||||||dœ|	¤Ž\  }}|
|| j                  z  z   }|}
| j                  |«      }| j	                  |«      }|
|| j                  z  z   }|f}|r||fz  }|S )a.  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
            attention_mask (`torch.FloatTensor`, *optional*):
                attention mask of size `(batch_size, sequence_length)` if flash attention is used or `(batch_size, 1,
                query_sequence_length, key_sequence_length)` if default attention is used.
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
            use_cache (`bool`, *optional*):
                If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding
                (see `past_key_values`).
            past_key_value (`Tuple(torch.FloatTensor)`, *optional*): cached past key and value projection states
            cache_position (`torch.LongTensor` of shape `(sequence_length)`, *optional*):
                Indices depicting the position of the input sequence tokens in the sequence
            position_embeddings (`Tuple[torch.FloatTensor, torch.FloatTensor]`, *optional*):
                Tuple containing the cosine and sine positional embeddings of shape `(batch_size, seq_len, head_dim)`,
                with `head_dim` being the embedding dimension of each attention head.
            kwargs (`dict`, *optional*):
                Arbitrary kwargs to be ignored, used for FSDP and other methods that injects code
                into the model
        )r4   r5   r6   r7   r8   r9   r:   r;   © )Úinput_layernormr3   r2   Úpost_attention_layernormÚmlp)r$   r4   r5   r6   r7   r8   r9   r:   r;   ÚkwargsÚresidualÚself_attn_weightsÚoutputss                r&   ÚforwardzGraniteDecoderLayer.forward1   sÈ   € ðD !ˆà×,Ñ,¨]Ó;ˆð ,:¨4¯>©>ð 
,
Ø'Ø)Ø%Ø)Ø/ØØ)Ø 3ñ
,
ð ñ
,
Ñ(ˆÐ(ð ! =°4×3KÑ3KÑ#KÑKˆð !ˆØ×5Ñ5°mÓDˆØŸ™ Ó/ˆØ  =°4×3KÑ3KÑ#KÑKˆà Ð"ˆáØÐ)Ð+Ñ+ˆGàˆr'   )NNNFFNN)r(   r)   r*   r   r,   r    ÚtorchÚTensorr   Ú
LongTensorr
   Úboolr   ÚFloatTensorrF   r-   r.   s   @r&   r0   r0   +   sþ   ø„ ðN˜}ð N¸õ Nð 26Ø37Ø*.Ø,1Ø$)Ø59ØKOñ?à—|‘|ð?ð ! §¡Ñ.ð?ð ˜u×/Ñ/Ñ0ð	?ð
 ! ™ð?ð $ D™>ð?ð ˜D‘>ð?ð ! ×!1Ñ!1Ñ2ð?ð & e¨E¯L©L¸%¿,¹,Ð,FÑ&GÑHð?ð 
ˆu× Ñ  (¨5°×1BÑ1BÀE×DUÑDUÐ1UÑ+VÑ"WÐWÑ	X÷?r'   r0   c                   ó  ‡ — e Zd Zdefˆ fd„Z	 	 	 	 	 	 	 	 	 ddeej                     deej                     deej                     dee	   deej                     dee   d	ee   d
ee   deej                     dee   defd„Zˆ xZS )ÚGraniteModelr   c           	      óÚ   •— t         ‰| �  |«       |j                  | _        t        j                  t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        y c c}w r   )	r   r    Úembedding_multiplierr   Ú
ModuleListÚrangeÚnum_hidden_layersr0   Úlayersr#   s      €r&   r    zGraniteModel.__init__t   sR   ø€ Ü‰Ñ˜Ô Ø$*×$?Ñ$?ˆÔ!Ü—m‘mÜEJÈ6×KcÑKcÓEdÖe¸	Ô  ¨Õ3Òeó
ˆ�ùÚes   ÁA(Ú	input_idsr5   r6   Úpast_key_valuesÚinputs_embedsr9   r8   Úoutput_hidden_statesr:   Úflash_attn_kwargsr<   c
                 ó0  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|d u |d uz  rt	        d«      ‚| j
                  r%| j                  r|rt        j                  d«       d}|€| j                  |«      }|| j                  z  }|r|€
t        «       }|	€F|�|j                  «       nd}t        j                  |||j                  d   z   |j                   ¬«      }	|€|	j#                  d«      }| j%                  |||	||«      }|}| j'                  ||«      }|rdnd }|rdnd }| j(                  d | j                   j*                   D ]r  }|r||fz  }| j
                  r:| j                  r.| j-                  t/        |j0                  fi |
¤Ž|||||||	|«	      }n ||f||||||	|dœ|
¤Ž}|d   }|sŒj||d   fz  }Œt | j3                  |«      }|r||fz  }t5        ||r|nd ||¬	«      S )
Nz:You must specify exactly one of input_ids or inputs_embedszX`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`.Fr   r   )Údevicer>   )r5   r6   r7   r8   r9   r:   r;   )Úlast_hidden_staterU   r4   Ú
attentions)r   r8   rW   r9   Ú
ValueErrorÚgradient_checkpointingÚtrainingÚloggerÚwarning_onceÚembed_tokensrO   r   Úget_seq_lengthrG   ÚarangeÚshaperZ   Ú	unsqueezeÚ_update_causal_maskÚ
rotary_embrS   rR   Ú_gradient_checkpointing_funcr   Ú__call__Únormr   )r$   rT   r5   r6   rU   rV   r9   r8   rW   r:   rX   Úpast_seen_tokensÚcausal_maskr4   r;   Úall_hidden_statesÚall_self_attnsÚdecoder_layerÚlayer_outputss                      r&   rF   zGraniteModel.forward{   s’  € ð 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð "+Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	à˜Ð -°tÐ";Ò<ÜÐYÓZÐZà×&Ò&¨4¯=ª=¹YÜ×ÑØjôð ˆIàÐ Ø ×-Ñ-¨iÓ8ˆMà%¨×(AÑ(AÑAˆá˜Ð0Ü*›nˆOàÐ!ØCRÐC^˜×=Ñ=Ô?ÐdeÐÜ"Ÿ\™\Ø Ð"2°]×5HÑ5HÈÑ5KÑ"KÐTa×ThÑThôˆNð ÐØ)×3Ñ3°AÓ6ˆLà×.Ñ.Ø˜M¨>¸?ÐL]ó
ˆð &ˆð #Ÿo™o¨m¸\ÓJÐñ #7™B¸DÐÙ0™°dˆà!Ÿ[™[Ð)H¨4¯;©;×+HÑ+HÐIò  	6ˆMÙ#Ø! mÐ%5Ñ5Ð!à×*Ò*¨t¯}ª}Ø $× AÑ AÜ˜M×2Ñ2ÑHÐ6GÑHØ!ØØ Ø#Ø%ØØ"Ø'ó
!‘ñ !.Ø!ð
!à#.Ø!-Ø#2Ø&7Ø'Ø#1Ø(;ñ
!ð (ñ
!�ð *¨!Ñ,ˆMâ Ø =°Ñ#3Ð"5Ñ5‘ðA 	6ðD Ÿ	™	 -Ó0ˆñ  Ø -Ð!1Ñ1Ðä&Ø+Ù/8™O¸dØ+Ø%ô	
ð 	
r'   )	NNNNNNNNN)r(   r)   r*   r   r    r   rG   rI   rH   r
   rK   rJ   r   r   r   rF   r-   r.   s   @r&   rM   rM   s   sô   ø„ ð
˜}õ 
ð 15Ø15Ø37Ø+/Ø59Ø$(Ø,0Ø/3Ø59ñg
à˜E×,Ñ,Ñ-ðg
ð ! §¡Ñ.ðg
ð ˜u×/Ñ/Ñ0ð	g
ð
 " %™ðg
ð   × 1Ñ 1Ñ2ðg
ð ˜D‘>ðg
ð $ D™>ðg
ð ' t™nðg
ð ! ×!1Ñ!1Ñ2ðg
ð $Ð$8Ñ9ðg
ð 
!÷g
r'   rM   c                   ó   — e Zd Zy)ÚKwargsForCausalLMN)r(   r)   r*   r>   r'   r&   rs   rs   å   s   … r'   rs   c                   ó\  — e 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   d	ee   d
ee   deej
                     deeej                  f   dee   defd„Zy)ÚGraniteForCausalLMNrT   r5   r6   rU   rV   Úlabelsr9   r8   rW   r:   Úlogits_to_keeprB   r<   c                 ó  — |�|n| j                   j                  }|	�|	n| j                   j                  }	 | j                  d||||||||	|
dœ	|¤Ž}|j                  }t        |t        «      rt        | d «      n|}| j                  |d d …|d d …f   «      }|| j                   j                  z  }d }|�* | j                  d||| j                   j                  dœ|¤Ž}t        |||j                  |j                  |j                  ¬«      S )N)	rT   r5   r6   rU   rV   r9   r8   rW   r:   )Úlogitsrv   Ú
vocab_size)Úlossry   rU   r4   r\   r>   )r   r8   rW   Úmodelr[   Ú
isinstancer,   ÚsliceÚlm_headÚlogits_scalingÚloss_functionrz   r   rU   r4   r\   )r$   rT   r5   r6   rU   rV   rv   r9   r8   rW   r:   rw   rB   rE   r4   Úslice_indicesry   r{   s                     r&   rF   zGraniteForCausalLM.forwardé   s.  € ð 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð
 ,6¨4¯:©:ð ,
ØØ)Ø%Ø+Ø'ØØ/Ø!5Ø)ñ,
ð ñ,
ˆð  ×1Ñ1ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆØ˜$Ÿ+™+×4Ñ4Ñ4ˆàˆØÐØ%�4×%Ñ%Ðp¨V¸FÈtÏ{É{×OeÑOeÑpÐioÑpˆDä%ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r'   )NNNNNNNNNNr   )r(   r)   r*   r   rG   rI   rH   r   r
   r   rK   rJ   r,   r   rs   r   rF   r>   r'   r&   ru   ru   è   s$  „ ð 15Ø15Ø37ØKOØ59Ø-1Ø$(Ø,0Ø/3Ø59Ø34ñ2
à˜E×,Ñ,Ñ-ð2
ð ! §¡Ñ.ð2
ð ˜u×/Ñ/Ñ0ð	2
ð
 " %¨¨t°E×4EÑ4EÑ/FÐ(FÑ"GÑHð2
ð   × 1Ñ 1Ñ2ð2
ð ˜×)Ñ)Ñ*ð2
ð ˜D‘>ð2
ð $ D™>ð2
ð ' t™nð2
ð ! ×!1Ñ!1Ñ2ð2
ð ˜c 5§<¡<Ð/Ñ0ð2
ð Ð*Ñ+ð2
ð 
 ô2
r'   ru   )&Ú	functoolsr   Útypingr   r   r   r   rG   Útorch.utils.checkpointr   Úcache_utilsr
   r   Úmodeling_flash_attention_utilsr   Úmodeling_outputsr   r   Úprocessing_utilsr   Úutilsr   r   Úllama.modeling_llamar   r   r   r   Úconfiguration_graniter   Ú
get_loggerr(   r`   r   r0   rM   rs   ru   r>   r'   r&   ú<module>rŽ      sŠ   ðõ  ß /Ó /ã Û Ý ç .Ý Bß OÝ &ß (ß bÓ bÝ 0ð 
ˆ×	Ñ	˜HÓ	%€ô3�~ô 3ôEÐ+ô EôPo
�:ô o
ôd ?Ð,¨jÔ >ô3
Ð)õ 3
r'   