Ë
    ÛÓ^j�"  ã                   óB  — 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mZ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 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«      Z# G d„ de«      Z$g d¢Z%y)é    N)Únné   )ÚCacheÚDynamicCache)Úcreate_causal_mask)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚLlamaAttentionÚLlamaDecoderLayerÚLlamaForCausalLMÚ
LlamaModelÚLlamaPreTrainedModelé   )ÚGraniteConfigc                   ó4   ‡ — e Zd ZdZddededz  fˆ fd„Zˆ xZS )ÚGraniteAttentionz=Multi-headed attention from 'Attention Is All You Need' paperNÚconfigÚ	layer_idxc                 óH   •— t         ‰| �  ||«       |j                  | _        y ©N)ÚsuperÚ__init__Úattention_multiplierÚscaling©Úselfr   r   Ú	__class__s      €úv/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/granite/modular_granite.pyr    zGraniteAttention.__init__*   s   ø€ Ü‰Ñ˜ Ô+Ø×2Ñ2ˆ�ó    r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úintr    Ú__classcell__©r%   s   @r&   r   r   '   s"   ø„ ÙGñ3˜}ð 3¸¸t¹÷ 3ñ 3r'   r   c                   ó  ‡ — e Zd Zdedefˆ fd„Z	 	 	 	 	 ddej                  dej                  dz  dej                  dz  de	dz  d	e
dz  d
eej                  ej                  f   dz  dee   dej                  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__0   s.   ø€ Ü‰Ñ˜ Ô+Ø#)×#=Ñ#=ˆÔ Ü)°À9ÔMˆ�r'   NÚhidden_statesÚattention_maskÚposition_idsÚpast_key_valuesÚ	use_cacheÚposition_embeddingsÚkwargsÚreturnc           
      óô   — |}| j                  |«      } | j                  d||||||dœ|¤Ž\  }}	||| j                  z  z   }|}| j                  |«      }| j	                  |«      }||| j                  z  z   }|S )af  
        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_values (`Cache`, *optional*): cached past key and value projection states
            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   © )Úinput_layernormr3   r2   Úpost_attention_layernormÚmlp)
r$   r4   r5   r6   r7   r8   r9   r:   ÚresidualÚ_s
             r&   ÚforwardzGraniteDecoderLayer.forward5   s¤   € ð< !ˆà×,Ñ,¨]Ó;ˆà)˜4Ÿ>™>ð 
Ø'Ø)Ø%Ø+ØØ 3ñ
ð ñ
Ñˆ�qð ! =°4×3KÑ3KÑ#KÑKˆà ˆØ×5Ñ5°mÓDˆØŸ™ Ó/ˆØ  =°4×3KÑ3KÑ#KÑKˆàÐr'   )NNNFN)r(   r)   r*   r   r,   r    ÚtorchÚTensorÚ
LongTensorr   ÚboolÚtupler
   r   rC   r-   r.   s   @r&   r0   r0   /   s¾   ø„ ðN˜}ð N¸õ Nð /3Ø04Ø(,Ø!&ØHLñ2à—|‘|ð2ð Ÿ™ tÑ+ð2ð ×&Ñ&¨Ñ-ð	2ð
  ™ð2ð ˜$‘;ð2ð # 5§<¡<°·±Ð#=Ñ>ÀÑEð2ð Ð+Ñ,ð2ð 
�‰÷2r'   r0   c                   ó   — e Zd ZeedœZy)ÚGranitePreTrainedModel)r4   Ú
attentionsN)r(   r)   r*   r0   r   Ú_can_record_outputsr=   r'   r&   rJ   rJ   j   s   „ à,Ø&ñÑr'   rJ   c                   óò   ‡ — e Zd Zdefˆ fd„Zeee	 	 	 	 	 	 d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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__r   sR   ø€ Ü‰Ñ˜Ô Ø$*×$?Ñ$?ˆÔ!Ü—m‘mÜEJÈ6×KcÑKcÓEdÖe¸	Ô  ¨Õ3Òeó
ˆ�ùÚes   ÁA(NÚ	input_idsr5   r6   r7   Úinputs_embedsr8   r:   r;   c           
      óZ  — |d u |d uz  rt        d«      ‚|€| j                  |«      }|| j                  z  }|r|€t        | j                  ¬«      }|€V|�|j                  «       nd}t        j                  |j                  d   |j                  ¬«      |z   }|j                  d«      }t        | j                  ||||¬«      }	|}
| j                  |
|¬«      }| j                  d | j                  j                   D ]  } ||
f|	||||dœ|¤Ž}
Œ | j                  |
«      }
t!        |
|¬	«      S )
Nz:You must specify exactly one of input_ids or inputs_embeds)r   r   r   )Údevice)r   rV   r5   r7   r6   )r6   )r5   r6   r7   r8   r9   )Úlast_hidden_stater7   )Ú
ValueErrorÚembed_tokensrP   r   r   Úget_seq_lengthrD   ÚarangeÚshaperX   Ú	unsqueezer   Ú
rotary_embrT   rS   Únormr   )r$   rU   r5   r6   r7   rV   r8   r:   Úpast_seen_tokensÚcausal_maskr4   r9   Údecoder_layers                r&   rC   zGraniteModel.forwardy   s\  € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø ×-Ñ-¨iÓ8ˆMà%¨×(AÑ(AÑAˆá˜Ð0Ü*°$·+±+Ô>ˆOàÐØCRÐC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<™<¨×(;Ñ(;¸AÑ(>À}×G[ÑG[Ô\Ð_oÑoˆLØ'×1Ñ1°!Ó4ˆLä(Ø—;‘;Ø'Ø)Ø+Ø%ô
ˆð &ˆØ"Ÿo™o¨mÈ,˜oÓWÐà!Ÿ[™[Ð)H¨4¯;©;×+HÑ+HÐIò 		ˆMÙ)Øðà*Ø)Ø /Ø#Ø$7ñð ñ‰Mð		ð Ÿ	™	 -Ó0ˆä&Ø+Ø+ô
ð 	
r'   )NNNNNN)r(   r)   r*   r   r    r   r   r   rD   rF   rE   r   ÚFloatTensorrG   r
   r   r   rC   r-   r.   s   @r&   rN   rN   q   sÍ   ø„ ð
˜}õ 
ð  ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ñ5
à×#Ñ# dÑ*ð5
ð Ÿ™ tÑ+ð5
ð ×&Ñ&¨Ñ-ð	5
ð
  ™ð5
ð ×(Ñ(¨4Ñ/ð5
ð ˜$‘;ð5
ð Ð+Ñ,ð5
ð 
!ò5
ó ó ó  ô5
r'   rN   c                   ó  — e Zd Zee	 	 	 	 	 	 	 	 d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fd„«       «       Zy)ÚGraniteForCausalLMNrU   r5   r6   r7   rV   Úlabelsr8   Úlogits_to_keepr:   r;   c	           
      óª  —  | 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)rU   r5   r6   r7   rV   r8   )Úlogitsrh   Ú
vocab_size)Úlossrk   r7   r4   rK   r=   )ÚmodelrY   Ú
isinstancer,   ÚsliceÚlm_headr   Úlogits_scalingÚloss_functionrl   r	   r7   r4   rK   )r$   rU   r5   r6   r7   rV   rh   r8   ri   r:   Úoutputsr4   Úslice_indicesrk   rm   s                  r&   rC   zGraniteForCausalLM.forwardµ   sí   € ð ,6¨4¯:©:ð ,
ØØ)Ø%Ø+Ø'Øñ,
ð ñ,
ˆð  ×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'   )NNNNNNNr   )r(   r)   r*   r   r   rD   rF   rE   r   re   rG   r,   r
   r   r	   rC   r=   r'   r&   rg   rg   ´   sä   „ ØØð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñ%
à×#Ñ# dÑ*ð%
ð Ÿ™ tÑ+ð%
ð ×&Ñ&¨Ñ-ð	%
ð
  ™ð%
ð ×(Ñ(¨4Ñ/ð%
ð × Ñ  4Ñ'ð%
ð ˜$‘;ð%
ð ˜eŸl™lÑ*ð%
ð Ð+Ñ,ð%
ð 
 ò%
ó ó ñ%
r'   rg   )rg   rN   rJ   )&rD   r   Úcache_utilsr   r   Úmasking_utilsr   Úmodeling_outputsr   r	   Úprocessing_utilsr
   Úutilsr   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úllama.modeling_llamar   r   r   r   r   Úconfiguration_graniter   Ú
get_loggerr(   Úloggerr   r0   rJ   rN   rg   Ú__all__r=   r'   r&   ú<module>r‚      s”   ðó  Ý ç .Ý /ß OÝ &ß RÓ RÝ 7Ý 5÷õ õ 1ð 
ˆ×	Ñ	˜HÓ	%€ô3�~ô 3ô8Ð+ô 8ôvÐ1ô ô@
�:ô @
ôF(
Ð)ô (
òV K�r'   