§
    ‚Štj�"  ã                   ó^  — 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%dS )é    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                 ód   •— t          ¦   «                              ||¦  «         |j        | _        d S ©N)ÚsuperÚ__init__Úattention_multiplierÚscaling©Úselfr   r   Ú	__class__s      €úi/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/granite/modular_granite.pyr    zGraniteAttention.__init__*   s+   ø€ Ý‰Œ×Ò˜ Ñ+Ô+Ð+ØÔ2ˆŒˆˆó    r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úintr    Ú__classcell__©r%   s   @r&   r   r   '   sZ   ø€ € € € € ØGÐGð3ð 3˜}ð 3¸¸t¹ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 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                 ó�   •— t          ¦   «                              ||¦  «         |j        | _        t          ||¬¦  «        | _        d S )N)r   r   )r   r    Úresidual_multiplierr   Ú	self_attnr#   s      €r&   r    zGraniteDecoderLayer.__init__0   s@   ø€ Ý‰Œ×Ò˜ Ñ+Ô+Ð+Ø#)Ô#=ˆÔ Ý)°À9ÐMÑMÔMˆŒˆˆr'   NFÚhidden_statesÚattention_maskÚposition_idsÚpast_key_valuesÚ	use_cacheÚposition_embeddingsÚkwargsÚreturnc           
      óî   — |}|                       |¦  «        } | j        d||||||dœ|¤Ž\  }}	||| j        z  z   }|}|                      |¦  «        }|                      |¦  «        }||| 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Ñ#KÑKˆà ˆØ×5Ò5°mÑDÔDˆØŸš Ñ/Ô/ˆØ  =°4Ô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ð Nð Nð Nð Nð Nð /3Ø04Ø(,Ø!&ØHLð2ð 2à”|ð2ð œ tÑ+ð2ð Ô&¨Ñ-ð	2ð
  ™ð2ð ˜$‘;ð2ð # 5¤<°´Ð#=Ô>ÀÑEð2ð Ð+Ô,ð2ð 
Œð2ð 2ð 2ð 2ð 2ð 2ð 2ð 2r'   r0   c                   ó   — e Zd ZeedœZdS )Ú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        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d S )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r=   )r0   )Ú.0r   r   s     €r&   ú
<listcomp>z)GraniteModel.__init__.<locals>.<listcomp>v   s$   ø€ ÐeÐeÐe¸	Õ  ¨Ñ3Ô3ÐeÐeÐer'   )r   r    Úembedding_multiplierr   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayers)r$   r   r%   s    `€r&   r    zGraniteModel.__init__r   s`   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø$*Ô$?ˆÔ!Ý”mØeÐeÐeÐeÅUÈ6ÔKcÑEdÔEdÐeÑeÔeñ
ô 
ˆŒˆˆr'   NÚ	input_idsr5   r6   r7   Úinputs_embedsr8   r:   r;   c           
      ó\  — |d u |d uz  rt          d¦  «        ‚|€|                      |¦  «        }|| j        z  }|r|€t          | j        ¬¦  «        }|€V|�|                     ¦   «         nd}t          j        |j        d         |j	        ¬¦  «        |z   }| 
                    d¦  «        }t          | j        ||||¬¦  «        }	|}
|                      |
|¬¦  «        }| j        d | j        j        …         D ]} ||
f|	||||dœ|¤Ž}
Œ|                      |
¦  «        }
t!          |
|¬	¦  «        S )
Nz:You must specify exactly one of input_ids or inputs_embeds)r   r   r   )Údevice)r   rY   r5   r7   r6   )r6   )r5   r6   r7   r8   r9   )Úlast_hidden_stater7   )Ú
ValueErrorÚembed_tokensrS   r   r   Úget_seq_lengthrD   ÚarangeÚshaper[   Ú	unsqueezer   Ú
rotary_embrW   rV   Únormr   )r$   rX   r5   r6   r7   rY   r8   r:   Úpast_seen_tokensÚcausal_maskr4   r9   Údecoder_layers                r&   rC   zGraniteModel.forwardy   s—  € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø ×-Ò-¨iÑ8Ô8ˆMà%¨Ô(AÑAˆàð 	?˜Ð0Ý*°$´+Ð>Ñ>Ô>ˆOàÐØCRÐC^˜×=Ò=Ñ?Ô?Ð?ÐdeÐÝ œ<¨Ô(;¸AÔ(>À}ÔG[Ð\Ñ\Ô\Ð_oÑoˆLØ'×1Ò1°!Ñ4Ô4ˆLå(Ø”;Ø'Ø)Ø+Ø%ð
ñ 
ô 
ˆð &ˆØ"Ÿošo¨mÈ,˜oÑWÔWÐà!œ[Ð)H¨4¬;Ô+HÐ)HÔIð 		ð 		ˆMØ)˜MØðà*Ø)Ø /Ø#Ø$7ðð ð ðð ˆMˆMð Ÿ	š	 -Ñ0Ô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
ð 5
àÔ# dÑ*ð5
ð œ tÑ+ð5
ð Ô&¨Ñ-ð	5
ð
  ™ð5
ð Ô(¨4Ñ/ð5
ð ˜$‘;ð5
ð Ð+Ô,ð5
ð 
!ð5
ð 5
ð 5
ñ „^ñ „_ñ  Ôð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dS )ÚGraniteForCausalLMNr   rX   r5   r6   r7   rY   Úlabelsr8   Úlogits_to_keepr:   r;   c	           
      ón  —  | j         d||||||dœ|	¤Ž}
|
j        }t          |t          ¦  «        rt	          | d ¦  «        n|}|                      |d d …|d d …f         ¦  «        }|| j        j        z  }d }|� | j        d||| j        j	        dœ|	¤Ž}t          |||
j        |
j        |
j        ¬¦  «        S )N)rX   r5   r6   r7   rY   r8   )Úlogitsrk   Ú
vocab_size)Úlossrn   r7   r4   rK   r=   )Úmodelr\   Ú
isinstancer,   ÚsliceÚlm_headr   Úlogits_scalingÚloss_functionro   r	   r7   r4   rK   )r$   rX   r5   r6   r7   rY   rk   r8   rl   r:   Úoutputsr4   Úslice_indicesrn   rp   s                  r&   rC   zGraniteForCausalLM.forwardµ   s  € ð ,6¨4¬:ð ,
ØØ)Ø%Ø+Ø'Øð,
ð ,
ð ð,
ð ,
ˆð  Ô1ˆÝ8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆØ˜$œ+Ô4Ñ4ˆàˆØÐØ%�4Ô%Ðp¨V¸FÈtÌ{ÔOeÐpÐpÐioÐpÐpˆDå%ØØØ#Ô3Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r'   )NNNNNNNr   )r(   r)   r*   r   r   rD   rF   rE   r   rh   rG   r,   r
   r   r	   rC   r=   r'   r&   rj   rj   ´   sú   € € € € € ØØð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ð%
ð %
àÔ# dÑ*ð%
ð œ tÑ+ð%
ð Ô&¨Ñ-ð	%
ð
  ™ð%
ð Ô(¨4Ñ/ð%
ð Ô  4Ñ'ð%
ð ˜$‘;ð%
ð ˜eœlÑ*ð%
ð Ð+Ô,ð%
ð 
 ð%
ð %
ð %
ñ „^ñ Ôð%
ð %
ð %
r'   rj   )rj   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   rj   Ú__all__r=   r'   r&   ú<module>r…      s  ðð  €€€Ø Ð Ð Ð Ð Ð à .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø /Ð /Ð /Ð /Ð /Ð /Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ &Ð &Ð &Ð &Ð &Ð &Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 1Ð 0Ð 0Ð 0Ð 0Ð 0ð 
ˆÔ	˜HÑ	%Ô	%€ð3ð 3ð 3ð 3ð 3�~ñ 3ô 3ð 3ð8ð 8ð 8ð 8ð 8Ð+ñ 8ô 8ð 8ðvð ð ð ð Ð1ñ ô ð ð@
ð @
ð @
ð @
ð @
�:ñ @
ô @
ð @
ðF(
ð (
ð (
ð (
ð (
Ð)ñ (
ô (
ð (
ðV KÐ
JÐ
J€€€r'   