§
    ‚Štjâ2  ã                   óF  — d dl Z d dlmc 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mZ ddlmZ dd	lmZ dd
lmZ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! ddl"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z)  G d„ de¦  «        Z* G d„ de¦  «        Z+ G d„ dej,        ¦  «        Z- G d„ de$¦  «        Z. G d„ dej,        ¦  «        Z/ G d„ de ¦  «        Z0 G d„ d e#¦  «        Z1e G d!„ d"e!e¦  «        ¦   «         Z2e G d#„ d$e&¦  «        ¦   «         Z3 G d%„ d&e%¦  «        Z4g d'¢Z5dS )(é    N)Únné   )Úinitialization)ÚCacheÚDynamicCache)Úcreate_causal_mask)ÚMoeCausalLMOutputWithPastÚMoeModelOutputWithPast)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstring)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚGraniteRMSNormÚGraniteRotaryEmbedding)ÚLlamaAttentionÚLlamaPreTrainedModel)ÚMixtralDecoderLayerÚMixtralExpertsÚMixtralForCausalLMÚMixtralModelÚload_balancing_loss_funcé   )ÚGraniteMoeConfigc                   ó   — e Zd ZdS )ÚGraniteMoeRMSNormN©Ú__name__Ú
__module__Ú__qualname__© ó    úo/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/granitemoe/modular_granitemoe.pyr   r   )   ó   € € € € € Ø€Dr%   r   c                   ó   — e Zd ZdS )ÚGraniteMoeRotaryEmbeddingNr    r$   r%   r&   r)   r)   -   r'   r%   r)   c                   ór   ‡ — e Zd ZdZdefˆ fd„Zdej        deej        ej        ej        f         fd„Z	ˆ xZ
S )ÚGraniteMoeTopKRoutera¡  Top-k gating that returns the routing decisions without grouping tokens by expert.

    Returns ``(top_k_index, top_k_weights, router_logits)``; the grouping/scattering used to live
    here (via ``expert_size.tolist()``, which broke fullgraph compile) and now happens inside the
    experts forward via ``use_experts_implementation`` so the default ``grouped_mm`` / ``batched_mm``
    paths can compile cleanly.
    Úconfigc                 óä   •— t          ¦   «                              ¦   «          |j        | _        |j        | _        t          j        t          j	        | j        |j
        ¦  «        ¦  «        | _        d S ©N)ÚsuperÚ__init__Únum_local_expertsÚnum_expertsÚnum_experts_per_tokÚtop_kr   Ú	ParameterÚtorchÚemptyÚhidden_sizeÚweight©Úselfr,   Ú	__class__s     €r&   r0   zGraniteMoeTopKRouter.__init__:   sU   ø€ Ý‰Œ×ÒÑÔÐØ!Ô3ˆÔØÔ/ˆŒ
Ý”l¥5¤;¨tÔ/?ÀÔASÑ#TÔ#TÑUÔUˆŒˆˆr%   Úhidden_statesÚreturnc                 óô   — t          j        || j        ¦  «                             ¦   «         }|                     | j        d¬¦  «        \  }}t          j        |d¬¦  «                             |¦  «        }|||fS )Néÿÿÿÿ)Údim)	ÚFÚlinearr9   ÚfloatÚtopkr4   r6   ÚsoftmaxÚtype_as)r;   r=   Úrouter_logitsÚtop_k_logitsÚtop_k_indexÚtop_k_weightss         r&   ÚforwardzGraniteMoeTopKRouter.forward@   so   € Ýœ °´Ñ<Ô<×BÒBÑDÔDˆØ$1×$6Ò$6°t´zÀrÐ$6Ñ$JÔ$JÑ!ˆ�kÝœ l¸Ð;Ñ;Ô;×CÒCÀMÑRÔRˆØ˜M¨=Ð8Ð8r%   )r!   r"   r#   Ú__doc__r   r0   r6   ÚTensorÚtuplerL   Ú__classcell__©r<   s   @r&   r+   r+   1   sŽ   ø€ € € € € ðð ðVÐ/ð Vð Vð Vð Vð Vð Vð9 U¤\ð 9°e¸E¼LÈ%Ì,ÐX]ÔXdÐ<dÔ6eð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9r%   r+   c                   ó   — e Zd ZdS )ÚGraniteMoeExpertsNr    r$   r%   r&   rS   rS   G   r'   r%   rS   c                   óL   ‡ — e Zd ZdZdefˆ fd„Zdej        dej        fd„Zˆ xZ	S )ÚGraniteMoeMoEzISparsely-gated mixture-of-experts block: router decides, experts compute.r,   c                 ó°   •— t          ¦   «                              ¦   «          |j        | _        t	          |¦  «        | _        t          |¦  «        | _        d S r.   )r/   r0   r8   Ú
input_sizer+   ÚrouterrS   Úexpertsr:   s     €r&   r0   zGraniteMoeMoE.__init__N   sE   ø€ Ý‰Œ×ÒÑÔÐØ Ô,ˆŒÝ*¨6Ñ2Ô2ˆŒÝ(¨Ñ0Ô0ˆŒˆˆr%   Úlayer_inputr>   c                 óö   — |                      ¦   «         \  }}}|                     d|¦  «        }|                      |¦  «        \  }}}|                      |||¦  «        }	|	                     ||| j        ¦  «        S )Nr@   )ÚsizeÚreshaperX   rY   ÚviewrW   )
r;   rZ   ÚbszÚlengthÚemb_sizer=   rJ   rK   Ú_Úlayer_outputs
             r&   rL   zGraniteMoeMoE.forwardT   sv   € Ø +× 0Ò 0Ñ 2Ô 2ÑˆˆV�XØ#×+Ò+¨B°Ñ9Ô9ˆØ(,¯ª°MÑ(BÔ(BÑ%ˆ�] AØ—|’| M°;ÀÑNÔNˆØ× Ò   f¨d¬oÑ>Ô>Ð>r%   )
r!   r"   r#   rM   r   r0   r6   rN   rL   rP   rQ   s   @r&   rU   rU   K   sq   ø€ € € € € ØSÐSð1Ð/ð 1ð 1ð 1ð 1ð 1ð 1ð? 5¤<ð ?°E´Lð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?r%   rU   c                   ó(   ‡ — e Zd Zdedefˆ fd„Zˆ xZS )ÚGraniteMoeAttentionr,   Ú	layer_idxc                 óf   •— t          ¦   «                              | ||¦  «         |j        | _        d S r.   )r/   r0   Úattention_multiplierÚscaling©r;   r,   rf   r<   s      €r&   r0   zGraniteMoeAttention.__init__]   s-   ø€ Ý‰Œ×Ò˜˜v yÑ1Ô1Ð1ØÔ2ˆŒˆˆr%   )r!   r"   r#   r   Úintr0   rP   rQ   s   @r&   re   re   \   sL   ø€ € € € € ð3Ð/ð 3¸Cð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3r%   re   c                   ó    ‡ — e Zd Zdedefˆ fd„Z	 	 	 ddej        dej        dz  dedz  de	ej        ej        f         dz  d	ej        f
d
„Z
ˆ xZS )ÚGraniteMoeDecoderLayerr,   rf   c                 ód  •— t          ¦   «                              ||¦  «         t          ||¬¦  «        | _        t	          |¦  «        | _        t          |j        |j        ¬¦  «        | _	        t          |j        |j        ¬¦  «        | _
        | `t	          |¦  «        | _        |j        | _        d S )N)r,   rf   ©Úeps)r/   r0   re   Ú	self_attnrU   Úblock_sparse_moer   r8   Úrms_norm_epsÚinput_layernormÚpost_attention_layernormÚmlpÚresidual_multiplierrj   s      €r&   r0   zGraniteMoeDecoderLayer.__init__c   sž   ø€ Ý‰Œ×Ò˜ Ñ+Ô+Ð+Ý,°FÀiÐPÑPÔPˆŒÝ -¨fÑ 5Ô 5ˆÔÝ0°Ô1CÈÔI\Ð]Ñ]Ô]ˆÔÝ(9¸&Ô:LÐRXÔReÐ(fÑ(fÔ(fˆÔ%ØˆHÝ -¨fÑ 5Ô 5ˆÔØ#)Ô#=ˆÔ Ð Ð r%   Nr=   Úattention_maskÚpast_key_valuesÚposition_embeddingsr>   c                 óê   — |}|                       |¦  «        } | j        d||||dœ|¤Ž\  }}||| j        z  z   }|}|                      |¦  «        }|                      |¦  «        }||| j        z  z   }|S )N)r=   rx   ry   rz   r$   )rt   rq   rw   ru   rr   )r;   r=   rx   ry   rz   ÚkwargsÚresidualrb   s           r&   rL   zGraniteMoeDecoderLayer.forwardm   s«   € ð !ˆØ×,Ò,¨]Ñ;Ô;ˆØ)˜4œ>ð 
Ø'Ø)Ø+Ø 3ð	
ð 
ð
 ð
ð 
Ñˆ�qð ! =°4Ô3KÑ#KÑKˆØ ˆØ×5Ò5°mÑDÔDˆØ×-Ò-¨mÑ<Ô<ˆØ  =°4Ô3KÑ#KÑKˆØÐr%   )NNN)r!   r"   r#   r   rk   r0   r6   rN   r   rO   rL   rP   rQ   s   @r&   rm   rm   b   sÂ   ø€ € € € € ð>Ð/ð >¸Cð >ð >ð >ð >ð >ð >ð /3Ø(,ØHLðð à”|ðð œ tÑ+ðð  ™ð	ð
 # 5¤<°´Ð#=Ô>ÀÑEðð 
Œðð ð ð ð ð ð ð r%   rm   c                   ój   — e Zd ZU eed<   dZdZdgZdgZdZ	dZ
dZ ej        ¦   «         d„ ¦   «         ZdS )ÚGraniteMoePreTrainedModelr,   ÚmodelTrm   ry   c                 óp  — t          j        | |¦  «         t          |t          ¦  «        rNt	          j        |j        d| j        j        ¬¦  «         t	          j        |j	        d| j        j        ¬¦  «         d S t          |t          ¦  «        r(t	          j        |j        d| j        j        ¬¦  «         d S d S )Ng        )ÚmeanÚstd)r   Ú_init_weightsÚ
isinstancerS   ÚinitÚnormal_Úgate_up_projr,   Úinitializer_rangeÚ	down_projr+   r9   )r;   Úmodules     r&   r„   z'GraniteMoePreTrainedModel._init_weights‘   s±   € åÔ% d¨FÑ3Ô3Ð3Ý�fÕ/Ñ0Ô0ð 	UÝŒL˜Ô,°3¸D¼KÔ<YÐZÑZÔZÐZÝŒL˜Ô)°¸¼Ô9VÐWÑWÔWÐWÐWÐWÝ˜Õ 4Ñ5Ô5ð 	UÝŒL˜œ¨S°d´kÔ6SÐTÑTÔTÐTÐTÐTð	Uð 	Ur%   N)r!   r"   r#   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_can_compile_fullgraphr6   Úno_gradr„   r$   r%   r&   r   r   †   sw   € € € € € € àÐÐÑØÐØ&*Ð#Ø1Ð2ÐØ#4Ð"5ÐØÐØ€NØ!Ðà€U„]�_„_ðUð Uñ „_ðUð Uð Ur%   r   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 )ÚGraniteMoeModelr,   c                 ó  •‡— t          ¦   «                              ‰¦  «         t          j        ˆfd„t	          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          ‰j        ‰j	        ¬¦  «        | _
        ‰j        | _        d S )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r$   )rm   )Ú.0rf   r,   s     €r&   ú
<listcomp>z,GraniteMoeModel.__init__.<locals>.<listcomp>    s$   ø€ ÐhÐhÐh¸9Õ# F¨IÑ6Ô6ÐhÐhÐhr%   ro   )r/   r0   r   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayersr   r8   rs   ÚnormÚembedding_multiplierr:   s    `€r&   r0   zGraniteMoeModel.__init__�   s~   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý”mØhÐhÐhÐhÍÈfÔNfÑHgÔHgÐhÑhÔhñ
ô 
ˆŒõ & fÔ&8¸fÔ>QÐRÑRÔRˆŒ	Ø$*Ô$?ˆÔ!Ð!Ð!r%   NÚ	input_idsrx   Úposition_idsry   Úinputs_embedsÚ	use_cacher|   r>   c           
      óZ  — |d u |d uz  rt          d¦  «        ‚|r|€t          | j        ¬¦  «        }|€|                      |¦  «        }|€V|�|                     ¦   «         nd}t          j        |j        d         |j        ¬¦  «        |z   }| 	                    d¦  «        }t          | j        ||||¬¦  «        }	|| j        z  }|}
|                      |
|¦  «        }| 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,   r£   rx   ry   r¢   )rz   rx   r¢   ry   r¤   )Úlast_hidden_statery   )Ú
ValueErrorr   r,   Úembed_tokensÚget_seq_lengthr6   ÚarangeÚshaper¦   Ú	unsqueezer   r    Ú
rotary_embrž   r�   rŸ   r
   )r;   r¡   rx   r¢   ry   r£   r¤   r|   Úpast_seen_tokensÚcausal_maskr=   rz   Údecoder_layers                r&   rL   zGraniteMoeModel.forward¥   s—  € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàð 	?˜Ð0Ý*°$´+Ð>Ñ>Ô>ˆOàÐ Ø ×-Ò-¨iÑ8Ô8ˆMàÐØCRÐC^˜×=Ò=Ñ?Ô?Ð?ÐdeÐÝ œ<¨Ô(;¸AÔ(>À}ÔG[Ð\Ñ\Ô\Ð_oÑoˆLØ'×1Ò1°!Ñ4Ô4ˆLå(Ø”;Ø'Ø)Ø+Ø%ð
ñ 
ô 
ˆð &¨Ô(AÑAˆØ%ˆð #Ÿošo¨m¸\ÑJÔJÐà!œ[Ð)H¨4¬;Ô+HÐ)HÔIð 		ð 		ˆMØ)˜MØðà$7Ø*Ø)Ø /Ø#ðð ð ðð ˆMˆMð Ÿ	š	 -Ñ0Ô0ˆå%Ø+Ø+ð
ñ 
ô 
ð 	
r%   )NNNNNN)r!   r"   r#   r   r0   r   r   r   r6   Ú
LongTensorrN   r   ÚFloatTensorÚboolr   r   r
   rL   rP   rQ   s   @r&   r–   r–   ›   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%   r–   c                   óô   ‡ — e Zd Zdefˆ f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z  fd„¦   «         ¦   «         Zˆ xZS )ÚGraniteMoeForCausalLMr,   c                 óŠ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        | _        d S r.   )r/   r0   r–   r€   Úlogits_scalingr:   s     €r&   r0   zGraniteMoeForCausalLM.__init__á   s;   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý$ VÑ,Ô,ˆŒ
Ø$Ô3ˆÔÐÐr%   Nr   r¡   rx   r¢   ry   r£   ÚlabelsÚoutput_router_logitsÚlogits_to_keepr>   c	           	      ó2  — |�|n| j         j        } | j        d|||||dœ|	¤Ž}
|
j        }t	          |t
          ¦  «        rt          | d¦  «        n|}|                      |dd…|dd…f         ¦  «        }|| j         j        z  }d}|� | j	        ||fd| j         j
        i|	¤Ž}d}|rHt          |
j        | j        | j        |¦  «        }|�%|| j        |                     |j        ¦  «        z  z  }t%          ||||
j        |
j        |
j        |
j        ¬¦  «        S )al  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

        Example:

        ```python
        >>> from transformers import AutoTokenizer, GraniteMoeForCausalLM

        >>> model = GraniteMoeForCausalLM.from_pretrained("ibm/PowerMoE-3b")
        >>> tokenizer = AutoTokenizer.from_pretrained("ibm/PowerMoE-3b")

        >>> prompt = "Hey, are you conscious? Can you talk to me?"
        >>> inputs = tokenizer(prompt, return_tensors="pt")

        >>> # Generate
        >>> generate_ids = model.generate(inputs.input_ids, max_length=30)
        >>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
        "Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
        ```N)r¡   rx   r¢   ry   r£   Ú
vocab_size)ÚlossÚaux_lossÚlogitsry   r=   Ú
attentionsrH   r$   )r,   rº   r€   r§   r…   rk   ÚsliceÚlm_headr¸   Úloss_functionr½   r   rH   r2   r3   Úrouter_aux_loss_coefÚtor¦   r	   ry   r=   rÁ   )r;   r¡   rx   r¢   ry   r£   r¹   rº   r»   r|   Úoutputsr=   Úslice_indicesrÀ   r¾   r¿   s                   r&   rL   zGraniteMoeForCausalLM.forwardæ   s‘  € ðJ %9Ð$DÐ Ð È$Ì+ÔJjð 	ð �$”*ð 
ØØ)Ø%Ø+Ø'ð
ð 
ð ð
ð 
ˆð  Ô1ˆÝ8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆØ˜$œ+Ô4Ñ4ˆàˆØÐà%�4Ô%ØØðð ð  œ;Ô1ðð ð	ð ˆDð ˆØð 	MÝ/ØÔ%ØÔ ØÔ(Øñ	ô ˆHð Ð!Ø˜Ô1°H·K²KÀÄÑ4LÔ4LÑLÑL�Ý(ØØØØ#Ô3Ø!Ô/ØÔ)Ø!Ô/ð
ñ 
ô 
ð 	
r%   )NNNNNNNr   )r!   r"   r#   r   r0   r   r   r6   r²   rN   r   r³   r´   rk   rO   r	   rL   rP   rQ   s   @r&   r¶   r¶   à   s5  ø€ € € € € ð4Ð/ð 4ð 4ð 4ð 4ð 4ð 4ð
 Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø,0Ø-.ðQ
ð Q
àÔ# dÑ*ðQ
ð œ tÑ+ðQ
ð Ô&¨Ñ-ð	Q
ð
  ™ðQ
ð Ô(¨4Ñ/ðQ
ð Ô  4Ñ'ðQ
ð # T™kðQ
ð ˜eœlÑ*ðQ
ð 
Ð*Ñ	*ðQ
ð Q
ð Q
ñ Ôñ „^ðQ
ð Q
ð Q
ð Q
ð Q
r%   r¶   )r¶   r–   r   )6r6   Útorch.nn.functionalr   Ú
functionalrB   Ú r   r†   Úcache_utilsr   r   Úmasking_utilsr   Úmodeling_outputsr	   r
   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   Úutils.genericr   r   Úutils.output_capturingr   Úgranite.modeling_graniter   r   Úllama.modeling_llamar   r   Úmixtral.modeling_mixtralr   r   r   r   r   Úconfiguration_granitemoer   r   r)   ÚModuler+   rS   rU   re   rm   r   r–   r¶   Ú__all__r$   r%   r&   ú<module>rÚ      st  ðð  €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø /Ð /Ð /Ð /Ð /Ð /Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ GÐ GÐ GÐ GÐ GÐ GÐ GÐ Gðð ð ð ð ð ð ð ð ð ð ð ð ð ð 7Ð 6Ð 6Ð 6Ð 6Ð 6ð	ð 	ð 	ð 	ð 	˜ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð 6ñ 	ô 	ð 	ð9ð 9ð 9ð 9ð 9˜2œ9ñ 9ô 9ð 9ð,	ð 	ð 	ð 	ð 	˜ñ 	ô 	ð 	ð?ð ?ð ?ð ?ð ?�B”Iñ ?ô ?ð ?ð"3ð 3ð 3ð 3ð 3˜.ñ 3ô 3ð 3ð!ð !ð !ð !ð !Ð0ñ !ô !ð !ðH ðUð Uð Uð Uð UÐ 4°oñ Uô Uñ „ðUð( ðA
ð A
ð A
ð A
ð A
�lñ A
ô A
ñ „ðA
ðHY
ð Y
ð Y
ð Y
ð Y
Ð.ñ Y
ô Y
ð Y
ðx TÐ
SÐ
S€€€r%   