§
    ‚Štjhj  ã                   ó<  — d Z ddlZddlmZ ddlmZ 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 dd	lmZ dd
lmZ ddl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%m&Z&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6  e(j7        e8¦  «        Z9 e'¦   «         rddl:m;Z;  e&d¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z< G d„ de/¦  «        Z= G d„ de0¦  «        Z>	 	 dAd ej?        d!ej@        d"ej@        d#ej@        d$eej@        d%f         d&eAdz  d'eAdz  d(eBej@        ej@        f         fd)„ZC e ¦   «         ZDeCeDd*<    G d+„ d,ej?        ¦  «        ZE G d-„ d.e-¦  «        ZF G d/„ d0ej?        ¦  «        ZG G d1„ d2e¦  «        ZH G d3„ d4e.¦  «        ZI G d5„ d6e6¦  «        ZJ	 	 	 	 dBd7ej@        eBej@                 z  dz  d8eKdz  d9eKdz  d:eKd$ej@        dz  d(ej@        eKz  fd;„ZL G d<„ d=e5¦  «        ZM G d>„ d?e,¦  «        ZNg d@¢ZOdS )CzPyTorch Doge model.é    N)ÚCallable)ÚUnion)Ústrict)Únné   )Úinitialization)ÚACT2FN)ÚCache)ÚPreTrainedConfig)Úcompile_friendly_flex_attention)ÚGradientCheckpointingLayer)ÚMoeCausalLMOutputWithPastÚMoeModelOutputWithPast)ÚRopeParameters)ÚAttentionInterfaceÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚis_torch_flex_attn_availableÚlogging)ÚOutputRecorderé   )ÚLlamaForSequenceClassificationÚLlamaMLPÚLlamaPreTrainedModelÚLlamaRMSNormÚLlamaRotaryEmbeddingÚapply_rotary_pos_embÚeager_attention_forwardÚ	repeat_kv)ÚMixtralForCausalLMÚMixtralModel)Ú	BlockMaskzSmallDoge/Doge-320M)Ú
checkpointc                   ó@  ‡ — e Zd ZU dZdZdgZddddddddddddœZd	gd
gfddgdgfdgdgfdœZdZe	e
d<   dZe	e
d<   dZe	e
d<   dZe	e
d<   dZee	z  e
d<   dZee
d<   dZee
d<   dZee
d<   dZee
d<   d Zee
d!<   dZe	e
d"<   d#Zeez  d#z  e
d$<   d%Ze	e
d&<   d#Ze	d#z  e
d'<   d Zee
d(<   dZed#z  e
d)<   d Zee
d*<   d#Z e	d#z  e
d+<   dZ!e	e
d,<   d Z"ee
d-<   d.Z#e	e
d/<   d0Z$e	e
d1<   d Z%ee
d2<   d Z&ee
d3<   d4Z'ee
d5<   d#Z(e	d#z  e
d6<   d#Z)e	d#z  e
d7<   d#Z*e	e+e	         z  d#z  e
d8<   ˆ fd9„Z,ˆ xZ-S ):Ú
DogeConfigaè  
    keep_window_size (`int`, *optional*, defaults to 2048):
        The window size of tokens that are not dynamically masked, and dynamic masking is only performed when the sequence length exceeds this value.
    is_moe (`bool`, *optional*, defaults to `False`):
        Whether to use the Cross Domain Mixture of Experts, if `True`, the MoE will inherit the MLP to initialize.

    ```python
    >>> from transformers import DogeConfig, DogeModel

    >>> # Initializing a Doge-320M style configuration
    >>> configuration = DogeConfig()

    >>> # Initializing a model from the Doge-320M style configuration
    >>> model = DogeModel(configuration)

    >>> # Accessing the model configuration
    >>> configuration = model.config
    ```ÚdogeÚpast_key_valuesÚcolwiseÚrowwiseÚcolwise_gather_outputÚrowwise_split_input)zlayers.*.self_attn.q_projzlayers.*.self_attn.k_projzlayers.*.self_attn.v_projzlayers.*.self_attn.dt_projzlayers.*.self_attn.o_projzlayers.*.mlp.gate_projzlayers.*.mlp.up_projzlayers.*.mlp.down_projzlayers.*.mlp.router_gatezlayers.*.mlp.down_embedzlayers.*.mlp.up_embedÚ	input_idsÚinputs_embedsÚhidden_statesÚattention_mask)Úembed_tokensÚlayersÚnormi €  Ú
vocab_sizei   Úhidden_sizeé   Úintermediate_sizeé    Únum_hidden_layersç        Úhidden_dropoutÚsiluÚ
hidden_actg{®Gáz”?Úinitializer_rangeg�íµ ÷Æ°>Úrms_norm_epsTÚ	use_cacheFÚtie_word_embeddingsÚmax_position_embeddingsNÚrope_parametersé   Únum_attention_headsÚnum_key_value_headsÚattention_biasÚattention_dropoutÚmlp_biasÚsliding_windowÚkeep_window_sizeÚis_moei @  Únum_expertsé@   Únum_experts_per_tokÚnorm_topk_probÚoutput_router_logitsgü©ñÒMbP?Úrouter_aux_loss_coefÚpad_token_idÚbos_token_idÚeos_token_idc                 ó`   •— | j         €| j        | _          t          ¦   «         j        di |¤Ž d S )N© )rG   rF   ÚsuperÚ__post_init__)ÚselfÚkwargsÚ	__class__s     €úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/doge/modular_doge.pyrZ   zDogeConfig.__post_init__ƒ   s:   ø€ àÔ#Ð+Ø'+Ô'?ˆDÔ$à�‰ŒÔÐ'Ð' Ð'Ð'Ð'Ð'Ð'ó    ).Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
model_typeÚkeys_to_ignore_at_inferenceÚbase_model_tp_planÚbase_model_pp_planr5   ÚintÚ__annotations__r6   r8   r:   r<   Úfloatr>   Ústrr?   r@   rA   ÚboolrB   rC   rD   r   ÚdictrF   rG   rH   rI   rJ   rK   rL   rM   rN   rP   rQ   rR   rS   rT   rU   rV   ÚlistrZ   Ú__classcell__©r]   s   @r^   r'   r'   :   s¼  ø€ € € € € € ðð ð& €JØ#4Ð"5Ðð &/Ø%.Ø%.Ø&/Ø%.Ø"+Ø )Ø"+Ø$;Ø#8Ø!6ðð Ðð &˜¨Ð(9Ð:Ø#Ð%5Ð6¸Ð8IÐJØ!Ð" _Ð$5Ð6ðð Ðð €J�ÐÐÑØ€K�ÐÐÑØ!Ð�sÐ!Ð!Ñ!ØÐ�sÐÐÑØ"%€N�E˜C‘KÐ%Ð%Ñ%Ø€J�ÐÐÑØ#Ð�uÐ#Ð#Ñ#Ø€L�%ÐÐÑØ€IˆtÐÐÑØ %Ð˜Ð%Ð%Ñ%Ø#'Ð˜SÐ'Ð'Ñ'Ø48€O�^ dÑ*¨TÑ1Ð8Ð8Ñ8Ø Ð˜Ð Ð Ñ Ø&*Ð˜˜t™Ð*Ð*Ñ*Ø €N�DÐ Ð Ñ Ø&)Ð�u˜t‘|Ð)Ð)Ñ)Ø€HˆdÐÐÑØ!%€N�C˜$‘JÐ%Ð%Ñ%Ø Ð�cÐ Ð Ñ Ø€FˆDÐÐÑØ€K�ÐÐÑØ!Ð˜Ð!Ð!Ñ!Ø €N�DÐ Ð Ñ Ø!&Ð˜$Ð&Ð&Ñ&Ø"'Ð˜%Ð'Ð'Ñ'Ø#€L�#˜‘*Ð#Ð#Ñ#Ø#€L�#˜‘*Ð#Ð#Ñ#Ø+/€L�#˜˜Sœ	‘/ DÑ(Ð/Ð/Ñ/ð(ð (ð (ð (ð (ð (ð (ð (ð (r_   r'   c                   ó   — e Zd ZdS )ÚDogeRMSNormN©r`   ra   rb   rX   r_   r^   rr   rr   ‹   ó   € € € € € Ø€Dr_   rr   c                   ó   — e Zd ZdS )ÚDogeRotaryEmbeddingNrs   rX   r_   r^   rv   rv   �   rt   r_   rv   ÚmoduleÚqueryÚkeyÚvaluer1   r$   ÚscalingÚsoftcapÚreturnc           
      óP  ‡‡— d }d Št          |t          ¦  «        r|}n|Š‰�‰d d …d d …d d …d |j        d         …f         Šˆˆfd„}	t          ||||	|d|d¬¦  «        \  }
}|                     |j        ¦  «        }|
                     dd¦  «                             ¦   «         }
|
|fS )Néþÿÿÿc                 ó~   •— ‰�‰t          j        | ‰z  ¦  «        z  } ‰�| ‰|         |         |         |         z   } | S ©N)ÚtorchÚtanh)ÚscoreÚ	batch_idxÚhead_idxÚq_idxÚkv_idxÚcausal_maskr|   s        €€r^   Ú	score_modz)flex_attention_forward.<locals>.score_mod§   sJ   ø€ ØÐØ�eœj¨°©Ñ9Ô9Ñ9ˆEØÐ"Ø˜K¨	Ô2°8Ô<¸UÔCÀFÔKÑKˆEØˆr_   T)rŠ   Ú
block_maskÚ
enable_gqaÚscaleÚ
return_lseé   r   )Ú
isinstancer$   Úshaper   ÚtoÚdtypeÚ	transposeÚ
contiguous)rw   rx   ry   rz   r1   r{   r|   r\   r‹   rŠ   Úattn_outputÚattention_weightsr‰   s         `     @r^   Úflex_attention_forwardr˜   “   s÷   øø€ ð €JØ€KÝ�.¥)Ñ,Ô,ð %Ø#ˆ
ˆ
à$ˆàÐØ! ! ! ! Q Q Q¨¨¨¨?¨S¬Y°r¬]¨?Ð":Ô;ˆðð ð ð ð ð õ &EØØØØØØØð ð&ñ &ô &Ñ"€KÐ"ð *×,Ò,¨U¬[Ñ9Ô9ÐØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€KàÐ)Ð)Ð)r_   Údoge_flex_attentionc                   ó   ‡ — e Zd Zddededz  fˆ fd„Z	 	 ddej        deej        ej        f         dej        dz  de	dz  d	eej        ej        dz  eej                 dz  f         f
d
„Z
	 	 ddej        dej        dedej        dz  fd„Zˆ xZS )ÚDogeAttentionNÚconfigÚ	layer_idxc                 óþ  •— t          ¦   «                              ¦   «          || _        || _        t	          |d|j        |j        z  ¦  «        | _        |j        |j        z  | _	        | j        dz  | _
        |j        | _        |j        | _        t          j        |j        |j        | j        z  |j        ¬¦  «        | _        t          j        |j        |j        | j        z  |j        ¬¦  «        | _        t          j        |j        |j        | j        z  |j        ¬¦  «        | _        t          j        t)          j        |j        ¦  «        ¦  «        | _        t          j        |j        | j        z  |j        |j        ¬¦  «        | _        t          j        |j        | j        z  |j        |j        ¬¦  «        | _        t3          | j        |j        ¬¦  «        | _        t3          | j        |j        ¬¦  «        | _        d S )NÚhead_dimg      à¿©Úbias©Úeps)rY   Ú__init__rœ   r�   Úgetattrr6   rF   rŸ   rG   Únum_key_value_groupsr{   rI   rL   r   ÚLinearrH   Úq_projÚk_projÚv_projÚ	Parameterr‚   ÚzerosÚAÚdt_projÚo_projrr   r@   Úq_normÚk_norm©r[   rœ   r�   r]   s      €r^   r¤   zDogeAttention.__init__Æ   sÊ  ø€ Ý‰Œ×ÒÑÔÐØˆŒØ"ˆŒÝ ¨
°FÔ4FÈ&ÔJdÑ4dÑeÔeˆŒØ$*Ô$>À&ÔB\Ñ$\ˆÔ!Ø”} dÑ*ˆŒØ!'Ô!9ˆÔØ &Ô 7ˆÔå”iØÔ Ô :¸T¼]Ñ JÐQWÔQfð
ñ 
ô 
ˆŒõ ”iØÔ Ô :¸T¼]Ñ JÐQWÔQfð
ñ 
ô 
ˆŒõ ”iØÔ Ô :¸T¼]Ñ JÐQWÔQfð
ñ 
ô 
ˆŒõ ”�eœk¨&Ô*DÑEÔEÑFÔFˆŒÝ”yØÔ&¨¬Ñ6¸Ô8RÐY_ÔYnð
ñ 
ô 
ˆŒõ ”iØÔ&¨¬Ñ6¸Ô8JÐQWÔQfð
ñ 
ô 
ˆŒõ " $¤-°VÔ5HÐIÑIÔIˆŒÝ! $¤-°VÔ5HÐIÑIÔIˆŒˆˆr_   r0   Úposition_embeddingsr1   r)   r}   c                 ó  — |j         d d…         }g |¢d‘| j        ‘R }|                      |                      |¦  «                             |¦  «        ¦  «                             dd¦  «        }|                      |                      |¦  «                             |¦  «        ¦  «                             dd¦  «        }	|                      |¦  «                             |¦  «                             dd¦  «        }
|\  }}t          ||	||¦  «        \  }}	|�| 
                    |	|
| j        ¦  «        \  }	}
|                      |
                     dd¦  «                             |
j         d         |
j         d         d¦  «        ¦  «        }t          j        | j        t#          j        |¦  «        z  ¦  «                             dd¦  «        }|                      ||| j        |¬¦  «        }t+          || j        ¦  «        }t.                               | j        j        t6          ¦  «        } || ||	|
f|| j        sdn| j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                       |¦  «        }||fS )	Néÿÿÿÿr�   r   r   r   )r0   Ú	dt_statesrL   r1   r;   )r1   Údropoutr{   )!r‘   rŸ   r°   r¨   Úviewr”   r±   r©   rª   r   Úupdater�   r®   Úreshaper‚   Úexpr­   ÚFÚsoftplusÚprepare_dynamic_maskrL   r!   r¦   ÚALL_ATTENTION_FUNCTIONSÚget_interfacerœ   Ú_attn_implementationr    ÚtrainingrI   r{   r•   r¯   )r[   r0   r³   r1   r)   r\   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚcosÚsinr¶   Ú	attn_maskÚattention_interfacer–   Úattn_weightss                     r^   ÚforwardzDogeAttention.forwardä   s˜  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà—{’{ 4§;¢;¨}Ñ#=Ô#=×#BÒ#BÀ<Ñ#PÔ#PÑQÔQ×[Ò[Ð\]Ð_`ÑaÔaˆØ—[’[ §¢¨]Ñ!;Ô!;×!@Ò!@ÀÑ!NÔ!NÑOÔO×YÒYÐZ[Ð]^Ñ_Ô_ˆ
Ø—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆà&‰ˆˆSÝ#7¸ÀjÐRUÐWZÑ#[Ô#[Ñ ˆ�jàÐ&Ø'6×'=Ò'=¸jÈ,ÐX\ÔXfÑ'gÔ'gÑ$ˆJ˜ð —L’LØ×"Ò" 1 aÑ(Ô(×0Ò0°Ô1CÀAÔ1FÈÔHZÐ[]ÔH^Ð`bÑcÔcñ
ô 
ˆ	õ ”I˜dœf¥q¤z°)Ñ'<Ô'<Ñ<Ñ=Ô=×GÒGÈÈBÑOÔOˆ	Ø×-Ò-Ø'ØØ!Ô2Ø)ð	 .ñ 
ô 
ˆ	õ ˜i¨Ô)BÑCÔCˆ	å(?×(MÒ(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØð		%
ð
 %Ø#œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(r_   r7   r¶   rL   c           	      óâ  — t          j        |j        ¦  «        j        }|j        }|dd…dd…ddd…f                              dd|j        d         d¦  «        }|�˜t          |t          ¦  «        sƒ|j        t           j        k    r7|j        }t          j	        |t          j
        d|j        |¬¦  «        |¦  «        }|                     |dd…dd…dd…d|j        d         …f         dk    |¦  «        }|j        d         |k    rkt          j        |||j        ¬¦  «        }t          j        ||ddd	¬
¦  «        j        }	|                     d|	d¦  «        }|                     |dk    |¦  «        }|S )a8  
        The core idea of DMA is to calculate the dynamic attention mask to mask the tokens that should be masked, so as to form sparse attention.

        Combine `dt_states` with `attention_mask` to generate the final `attn_mask`.

        Args:
            hidden_states (`torch.Tensor`): The input hidden_states, used to determine the minimum value of the current input precision.
            dt_states (`torch.Tensor`): dt_states of shape `(batch_size, num_heads, key_sequence_length)`.
            keep_window_size (`int`): The window size of tokens that are not dynamically masked, and dynamic masking is only performed when the sequence length exceeds this value.
            attention_mask (`torch.Tensor`, *optional*): attention mask of shape `(batch_size, 1, query_sequence_length, key_sequence_length)`.
        Nrµ   r�   r;   )Údevicer“   r   ©r“   rÏ   TF)ÚdimÚlargestÚsortedg      ð?)r‚   Úfinfor“   ÚminÚexpandr‘   r�   r$   rl   ÚwhereÚtensorrÏ   Úmasked_fillÚ
zeros_likeÚtopkÚindicesÚscatter)
r[   r0   r¶   rL   r1   Ú	min_dtyper“   rÊ   Úactive_maskÚtopk_indicess
             r^   r¾   z"DogeAttention.prepare_dynamic_mask  s‡  € õ$ ”K Ô 3Ñ4Ô4Ô8ˆ	ØÔ#ˆØ˜a˜a˜a    D¨!¨!¨!˜mÔ,×3Ò3Ø��MÔ'¨Ô*¨Bñ
ô 
ˆ	ð Ð%­j¸ÍÑ.SÔ.SÐ%ØÔ#¥u¤zÒ1Ð1Ø%Ô+�Ý!&¤Ø"¥E¤L°¸^Ô=RÐZ_Ð$`Ñ$`Ô$`Ðbkñ"ô "�ð "×-Ò-¨n¸Q¸Q¸QÀÀÀÀ1À1À1ÐF[È	ÌÐXZÔH[ÐF[Ð=[Ô.\Ð`aÒ.aÐclÑmÔmˆIØŒ?˜2ÔÐ!1Ò1Ð1ÝÔ*¨9¸EÈ)ÔJZÐ[Ñ[Ô[ˆKÝ œ: iÐ1AÀrÐSWÐ`eÐfÑfÔfÔnˆLØ%×-Ò-¨b°,ÀÑDÔDˆKØ!×-Ò-¨k¸SÒ.@À)ÑLÔLˆIØÐr_   r�   ©NN)r7   N)r`   ra   rb   r'   rh   r¤   r‚   ÚTensorÚtupler
   rÍ   r¾   ro   rp   s   @r^   r›   r›   Å   s>  ø€ € € € € ðJð J˜zð J°c¸D±jð Jð Jð Jð Jð Jð JðD /3Ø(,ð3)ð 3)à”|ð3)ð # 5¤<°´Ð#=Ô>ð3)ð œ tÑ+ð	3)ð
  ™ð3)ð 
ˆuŒ|˜Uœ\¨DÑ0°%¸¼Ô2EÈÑ2LÐLÔ	Mð3)ð 3)ð 3)ð 3)ðr !%Ø.2ð#ð #à”|ð#ð ”<ð#ð ð	#ð
 œ tÑ+ð#ð #ð #ð #ð #ð #ð #ð #r_   r›   c                   ó   — e Zd ZdS )ÚDogeMLPNrs   rX   r_   r^   rå   rå   ?  rt   r_   rå   c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )Ú	DogeCDMoErœ   c                 ó2  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        t          |j                 | _        |j        | _        t          j	        t          j
        | j        ¦  «        ¦  «        | _        |j        | _        |j        | _        t          j        | j        | j        |j        ¬¦  «        | _        t          j        | j        | j        |j        ¬¦  «        | _        t          j        | j        | j        |j        ¬¦  «        | _        t          j        | j        | j        dz  d¬¦  «        | _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        d S )Nr    r   F)rY   r¤   r6   r8   r	   r>   Úact_fnrN   ÚmathÚfloorÚsqrtÚnum_keysrP   Útop_krQ   r   r§   rJ   Ú	gate_projÚup_projÚ	down_projÚrouter_gateÚ	EmbeddingÚ
down_embedÚup_embed©r[   rœ   r]   s     €r^   r¤   zDogeCDMoE.__init__D  sA  ø€ Ý‰Œ×ÒÑÔÐØ!Ô-ˆÔØ!'Ô!9ˆÔÝ˜VÔ.Ô/ˆŒà!Ô-ˆÔÝœ
¥4¤9¨TÔ-=Ñ#>Ô#>Ñ?Ô?ˆŒØÔ/ˆŒ
Ø$Ô3ˆÔõ œ 4Ô#3°TÔ5KÐRXÔRaÐbÑbÔbˆŒÝ”y Ô!1°4Ô3IÐPVÔP_Ð`Ñ`Ô`ˆŒÝœ 4Ô#9¸4Ô;KÐRXÔRaÐbÑbÔbˆŒõ œ9 TÔ%5°t´}ÀqÑ7HÈuÐUÑUÔUˆÔõ œ, tÔ'7¸Ô9IÑJÔJˆŒÝœ TÔ%5°tÔ7GÑHÔHˆŒˆˆr_   r0   r}   c                 ó  — |j         \  }}}|                      |¦  «                             d||z  d¦  «        }|                     | j        d¬¦  «        \  \  }}\  }	}
|                     d¦  «        |                     d¦  «        z   }|	                     d¦  «        | j        z  |
                     d¦  «        z   } |j        g |j         d d…         ¢d‘R Ž } |j        g |j         d d…         ¢d‘R Ž }|                     | j        d¬¦  «        \  }}|                     d|¦  «        }t          j	        |d¬¦  «        }| j
        r||                     dd¬¦  «        z  }|                      |¦  «        }|                      |¦  «        }t          j        ||                     ||z  dd¦  «        ¦  «                             ||z  d¦  «        }|                      |¦  «        |z  }t          j        |                     ||z  dd¦  «        |¦  «                             ||d¦  «        }|                      |                      |                      |¦  «        ¦  «        |                      |¦  «        z  ¦  «        }||z   }||fS )Nr   rµ   ©rÑ   r   T)rÑ   Úkeepdimr�   )r‘   rò   r¸   rÛ   rí   Ú	unsqueezerî   Úgatherr¼   ÚsoftmaxrQ   Úsumrô   rõ   r‚   Úmatmulré   rñ   rï   rð   )r[   r0   r\   ÚbszÚseq_lenÚ_Úrouter_logitsÚscores_xÚscores_yÚ	indices_xÚ	indices_yÚ
all_scoresÚall_indicesÚscoresÚposition_indicesrÜ   Úrouting_weightsrô   rõ   Úexperts_weightsÚexperts_statess                        r^   rÍ   zDogeCDMoE.forward[  sŠ  € ð
 (Ô-‰ˆˆW�að ×(Ò(¨Ñ7Ô7×<Ò<¸QÀÀgÁÈrÑRÔRˆð 8E×7IÒ7IÈ$Ì-Ð]_Ð7IÑ7`Ô7`Ñ4Ñˆ�8Ñ4˜y¨)Ø×'Ò'¨Ñ+Ô+¨h×.@Ò.@ÀÑ.DÔ.DÑDˆ
Ø×)Ò)¨"Ñ-Ô-°´Ñ=À	×@SÒ@SÐTVÑ@WÔ@WÑWˆØ$�Z”_Ð@ jÔ&6°s¸°sÔ&;Ð@¸RÐ@Ð@Ð@ˆ
Ø&�kÔ&ÐC¨Ô(9¸#¸2¸#Ô(>ÐCÀÐCÐCÐCˆØ#-§?¢?°4´:À2 ?Ñ#FÔ#FÑ ˆÐ Ø×$Ò$ RÐ)9Ñ:Ô:ˆÝœ) F°Ð3Ñ3Ô3ˆØÔð 	IØ˜×2Ò2°rÀ4Ð2ÑHÔHÑHˆOð —_’_ WÑ-Ô-ˆ
Ø—=’= Ñ)Ô)ˆÝœ, z°=×3EÒ3EÀcÈGÁmÐUWÐYZÑ3[Ô3[Ñ\Ô\×aÒaÐbeÐhoÑboÐqsÑtÔtˆØŸ+š+ oÑ6Ô6¸ÑHˆÝœ o×&:Ò&:¸3À¹=È!ÈRÑ&PÔ&PÐRZÑ[Ô[×`Ò`ÐadÐfmÐoqÑrÔrˆØŸš t§{¢{°4·>²>À-Ñ3PÔ3PÑ'QÔ'QÐTX×T`ÒT`ÐanÑToÔToÑ'oÑpÔpˆØ%¨Ñ6ˆØ˜mÐ+Ð+r_   )	r`   ra   rb   r'   r¤   r‚   râ   rÍ   ro   rp   s   @r^   rç   rç   C  su   ø€ € € € € ðI˜zð Ið Ið Ið Ið Ið Ið.,à”|ð,ð 
Œð	,ð ,ð ,ð ,ð ,ð ,ð ,ð ,r_   rç   c                   ó  ‡ — e Zd Zddededz  fˆ fd„Z	 	 	 	 	 ddej        deej        ej        f         dz  dej        dz  d	ej	        dz  d
e
dz  dedz  dee         deej        eej        ej        f         dz  f         fd„Zˆ xZS )ÚDogeDecoderLayerNrœ   r�   c                 ó   •— t          ¦   «                              ¦   «          |j        | _        t          |j        |j        ¬¦  «        | _        t          ||¬¦  «        | _        t          j
        t          j        |j        ¦  «        ¦  «        | _        t          |j        |j        ¬¦  «        | _        |j        st!          |¦  «        nt#          |¦  «        | _        t          j
        t          j        |j        ¦  «        ¦  «        | _        d S )Nr¢   )rœ   r�   )rY   r¤   r<   rr   r6   r@   Úinput_layernormr›   Ú	self_attnr   r«   r‚   ÚonesÚinput_residualÚpost_attention_layernormrM   rå   rç   ÚmlpÚpost_attention_residualr²   s      €r^   r¤   zDogeDecoderLayer.__init__}  sÒ   ø€ Ý‰Œ×ÒÑÔÐØ$Ô3ˆÔå*¨6Ô+=À6ÔCVÐWÑWÔWˆÔÝ&¨fÀ	ÐJÑJÔJˆŒÝ œl­5¬:°fÔ6HÑ+IÔ+IÑJÔJˆÔå(3°FÔ4FÈFÔL_Ð(`Ñ(`Ô(`ˆÔ%Ø*0¬-ÐN•7˜6‘?”?�?½YÀvÑ=NÔ=NˆŒÝ')¤|µE´J¸vÔ?QÑ4RÔ4RÑ'SÔ'SˆÔ$Ð$Ð$r_   Fr0   r³   r1   Úposition_idsr)   rA   r\   r}   c           
      ór  — |}|                       |¦  «        } | j        d||||||dœ|¤Ž\  }}	t          j        || j        | j        ¬¦  «        }| j        |z  |z   }|}|                      |¦  «        }|                      |¦  «        }t          j        || j        | j        ¬¦  «        }| j	        |z  |z   }|S )N)r0   r³   r1   r  r)   rA   )ÚprÂ   rX   )
r  r  r¼   r·   r<   rÂ   r  r  r  r  )
r[   r0   r³   r1   r  r)   rA   r\   ÚresidualÚself_attn_weightss
             r^   rÍ   zDogeDecoderLayer.forward‰  sì   € ð !ˆØ×,Ò,¨]Ñ;Ô;ˆØ+9¨4¬>ð ,
Ø'Ø 3Ø)Ø%Ø+Øð,
ð ,
ð ð,
ð ,
Ñ(ˆÐ(õ œ	 -°4Ô3FÐQUÔQ^Ð_Ñ_Ô_ˆØÔ+¨hÑ6¸ÑFˆð !ˆØ×5Ò5°mÑDÔDˆØŸš Ñ/Ô/ˆÝœ	 -°4Ô3FÐQUÔQ^Ð_Ñ_Ô_ˆØÔ4°xÑ?À-ÑOˆàÐr_   r�   )NNNNF)r`   ra   rb   r'   rh   r¤   r‚   râ   rã   Ú
LongTensorr
   rl   r   r   ÚFloatTensorrÍ   ro   rp   s   @r^   r  r  |  s,  ø€ € € € € ð
Tð 
T˜zð 
T°c¸D±jð 
Tð 
Tð 
Tð 
Tð 
Tð 
Tð IMØ.2Ø04Ø(,Ø!&ð ð  à”|ð ð # 5¤<°´Ð#=Ô>ÀÑEð ð œ tÑ+ð	 ð
 Ô&¨Ñ-ð ð  ™ð ð ˜$‘;ð ð Ð+Ô,ð ð 
ˆuÔ  %¨Ô(9¸5Ô;LÐ(LÔ"MÐPTÑ"TÐTÔ	Uð ð  ð  ð  ð  ð  ð  ð  r_   r  c                   óh   — e Zd ZdZdZ eed¬¦  «        eedœZ	 e
j        ¦   «         d„ ¦   «         ZdS )ÚDogePreTrainedModelFr�   )Úindex)r  r0   Ú
attentionsc                 óŠ  — t          j        | |¦  «         t          |t          ¦  «        r-t	          |d¦  «        rt          j        |j        ¦  «         dS dS t          |t          ¦  «        rTt	          |d¦  «        rt          j	        |j
        ¦  «         t	          |d¦  «        rt          j	        |j        ¦  «         dS dS dS )zInitialize the weightsr­   r  r  N)r   Ú_init_weightsr�   r›   ÚhasattrÚinitÚzeros_r­   r  Úones_r  r  )r[   rw   s     r^   r$  z!DogePreTrainedModel._init_weightsµ  sÖ   € õ 	Ô% d¨FÑ3Ô3Ð3Ý�f�mÑ,Ô,ð 	;Ý�v˜sÑ#Ô#ð &Ý”˜FœHÑ%Ô%Ð%Ð%Ð%ð&ð &å˜Õ 0Ñ1Ô1ð 	;Ý�vÐ/Ñ0Ô0ð 2Ý”
˜6Ô0Ñ1Ô1Ð1Ý�vÐ8Ñ9Ô9ð ;Ý”
˜6Ô9Ñ:Ô:Ð:Ð:Ð:ð		;ð 	;ð;ð ;r_   N)r`   ra   rb   Ú_supports_flash_attnÚ_can_compile_fullgraphr   rç   r  r›   Ú_can_record_outputsr‚   Úno_gradr$  rX   r_   r^   r   r   ¬  sh   € € € € € Ø ÐØ"Ðà'˜¨	¸Ð;Ñ;Ô;Ø)Ø#ðð Ðð €U„]�_„_ð
;ð 
;ñ „_ð
;ð 
;ð 
;r_   r   c                   ó   — e Zd ZdS )Ú	DogeModelNrs   rX   r_   r^   r.  r.  Ã  rt   r_   r.  Úgate_logitsrN   rí   rî   c                 óT  — | �t          | t          ¦  «        sdS | d         j        }| d         j        }g }g }| D �]9}	|	                     |¦  «        }	|	                     |d¬¦  «        \  \  }
}\  }}|
                     d¦  «        |                     d¦  «        z   }|                     d¦  «        |z  |                     d¦  «        z   } |j        g |j        dd…         ¢d‘R Ž } |j        g |j        dd…         ¢d‘R Ž }|                     |d¬¦  «        \  }}| 	                    d|¦  «        }t          j        |d¬¦  «        }|                     |¦  «         |                     |¦  «         �Œ;t          j        |d¬¦  «        }t          j        |d¬¦  «        }|€€|                     d¦  «        }t          j        |||¬¦  «        }t          j        |||¬¦  «        }|                     d||¦  «        |j        d         z  }t          j        |d¬¦  «        }�nk|j        \  }}t'          | ¦  «        }|ddd…dd…df                              ||||f¦  «                             d¦  «                             |¦  «        }|                     d¦  «        |                     ¦   «                  }t          j        |||¬¦  «        }t          j        |||¬¦  «        }|                     d||¦  «        t          j        |¦  «        z  }|ddd…dd…df                              ||||f¦  «                             d|¦  «                             |¦  «        }t          j        ||z  d¬¦  «        t          j        |d¬¦  «        z  }t          j        ||z  ¦  «        }||z  S )aø  
    Computes auxiliary load balancing loss as in Switch Transformer - implemented in Pytorch.

    See Switch Transformer (https://huggingface.co/papers/2101.03961) for more details. This function implements the loss
    function presented in equations (4) - (6) of the paper. It aims at penalizing cases where the routing between
    experts is too unbalanced.

    Args:
        gate_logits:
            Logits from the `router_gate`, should be a tuple of model.config.num_hidden_layers tensors of
            shape [2, batch_size * sequence_length, num_keys].
        num_experts:
            Number of experts
        num_keys:
            Number of keys
        top_k:
            The number of experts to route per-token, can be also interpreted as the `top-k` routing
            parameter.
        attention_mask (`torch.Tensor`, *optional*):
            The attention_mask used in forward function
            shape [batch_size X sequence_length] if not None.

    Returns:
        The auxiliary loss.
    Nr   rµ   rø   r   rÐ   )r�   rã   r“   rÏ   r’   rÛ   rú   r¸   r‘   rû   r¼   rü   Úappendr‚   Úcatr¬   Ú	ones_likeÚscatter_add_ÚmeanÚlenrÖ   rº   rl   rý   )r/  rN   rí   rî   r1   Úcompute_dtypeÚcompute_deviceÚall_expert_indicesÚall_routing_weightsÚlayer_gate_logitsr  r  r  r  r  r  r  r
  Úexpert_indicesr  Útokens_per_expertÚpadÚrouter_prob_per_expertÚ
batch_sizeÚsequence_lengthr:   Úexpert_attention_maskÚ router_per_expert_attention_maskÚoverall_losss                                r^   Úload_balancing_loss_funcrE  Ç  s  € ð@ Ð¥*¨[½%Ñ"@Ô"@ÐØˆqà ”NÔ(€MØ  ”^Ô*€NØÐØÐà(ð 4ñ 4ÐØ-×0Ò0°Ñ@Ô@Ðà7H×7MÒ7MÈhÐ\^Ð7MÑ7_Ô7_Ñ4Ñˆ�8Ñ4˜y¨)à×'Ò'¨Ñ+Ô+¨h×.@Ò.@ÀÑ.DÔ.DÑDˆ
Ø×)Ò)¨"Ñ-Ô-°Ñ8¸9×;NÒ;NÈrÑ;RÔ;RÑRˆØ$�Z”_Ð@ jÔ&6°s¸°sÔ&;Ð@¸RÐ@Ð@Ð@ˆ
Ø&�kÔ&ÐC¨Ô(9¸#¸2¸#Ô(>ÐCÀÐCÐCÐCˆà(Ÿošo¨e¸˜oÑ<Ô<ÑˆÐØ$×+Ò+¨BÐ0@ÑAÔAˆåœ) J°BÐ7Ñ7Ô7ˆà×!Ò! .Ñ1Ô1Ð1Ø×"Ò" ?Ñ3Ô3Ð3Ñ3ÝœÐ#5¸1Ð=Ñ=Ô=ÐÝœ)Ð$7¸QÐ?Ñ?Ô?ÐàÐà/×4Ò4°RÑ8Ô8ÐÝ!œK¨¸=ÐQ_Ð`Ñ`Ô`ÐÝŒoÐ0¸ÈnÐ]Ñ]Ô]ˆØ-×:Ò:¸1Ð>PÐRUÑVÔVÐYkÔYqÐrsÔYtÑtÐõ "'¤Ð,?ÀQÐ!GÑ!GÔ!GÐÑà&4Ô&:Ñ#ˆ
�OÝ Ñ,Ô,Ðð ˜4    A A A tÐ+Ô,ßŠVÐ&¨
°OÀUÐKÑLÔLßŠW�R‰[Œ[ßŠR�ÑÔð	 	ð 0×4Ò4°RÑ8Ô8Ð9N×9SÒ9SÑ9UÔ9UÔVÐõ "œK¨¸=ÐQ_Ð`Ñ`Ô`ÐÝŒoÐ0¸ÈnÐ]Ñ]Ô]ˆØ-×:Ò:¸1Ð>PÐRUÑVÔVÕY^ÔYbØ!ñZ
ô Z
ñ 
Ðð ˜4    A A A tÐ+Ô,ßŠVÐ&¨
°OÀ[ÐQÑRÔRßŠW�R˜Ñ%Ô%ßŠR�ÑÔð	 	)õ "'¤Ð+>ÐAaÑ+aÐghÐ!iÑ!iÔ!iÕlqÔluØ,°!ðm
ñ m
ô m
ñ "
Ðõ ”9Ð.Ð1GÑGÑHÔH€LØ˜+Ñ%Ð%r_   c                   óä   ‡ — e Zd Zˆ fd„Z	 	 	 	 	 	 	 	 	 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	dz  dee         defd„Zˆ xZS )ÚDogeForCausalLMc                 óŠ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        | _        d S r�   )rY   r¤   r.  ÚmodelrN   rö   s     €r^   r¤   zDogeForCausalLM.__init__2  s;   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý˜vÑ&Ô&ˆŒ
Ø!Ô-ˆÔÐÐr_   Nr   r.   r1   r  r)   r/   ÚlabelsrA   Úlogits_to_keeprR   r\   r}   c
           
      ó^  — |	�|	n| j         j        }	 | j        d||||||dœ|
¤Ž}|j        }t	          |t
          ¦  «        rt          | d¦  «        n|}|                      |dd…|dd…f         ¦  «        }d}|� | j        ||| j	        fi |
¤Ž}d}|	rrt          |j        | j        t          j        t          j        | j        ¦  «        ¦  «        | j        |¦  «        }|�%|| j        |                     |j        ¦  «        z  z  }t)          ||||j        |j        |j        |j        ¬¦  «        S )ah  
        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, DogeForCausalLM

        >>> model = DogeForCausalLM.from_pretrained("SmallDoge/Doge-320M")
        >>> tokenizer = AutoTokenizer.from_pretrained("SmallDoge/Doge-320M")

        >>> 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.   r1   r  r)   r/   rA   )ÚlossÚaux_lossÚlogitsr)   r0   r"  r  rX   )rœ   rR   rI  Úlast_hidden_stater�   rh   ÚsliceÚlm_headÚloss_functionr5   rE  r  rN   rê   rë   rì   rP   rS   r’   rÏ   r   r)   r0   r"  )r[   r.   r1   r  r)   r/   rJ  rA   rK  rR   r\   Úoutputsr0   Úslice_indicesrO  rM  rN  s                    r^   rÍ   zDogeForCausalLM.forward7  s…  € ðH %9Ð$DÐ Ð È$Ì+ÔJjð 	ð
 +5¨$¬*ð +
ØØ)Ø%Ø+Ø'Øð+
ð +
ð ð+
ð +
ˆð  Ô1ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ%�4Ô% f¨f°d´oÐPÐPÈÐPÐPˆDàˆØð 		MÝ/ØÔ%ØÔ Ý”
�4œ9 TÔ%5Ñ6Ô6Ñ7Ô7ØÔ(Øñô ˆHð Ð!Ø˜Ô1°H·K²KÀÄÑ4LÔ4LÑLÑL�å(ØØØØ#Ô3Ø!Ô/ØÔ)Ø!Ô/ð
ñ 
ô 
ð 	
r_   )	NNNNNNNr   N)r`   ra   rb   r¤   r‚   r  râ   r
   r  rl   rh   r   r   r   rÍ   ro   rp   s   @r^   rG  rG  1  s.  ø€ € € € € ð.ð .ð .ð .ð .ð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.Ø,0ðO
ð O
àÔ# dÑ*ðO
ð œ tÑ+ðO
ð Ô&¨Ñ-ð	O
ð
  ™ðO
ð Ô(¨4Ñ/ðO
ð Ô  4Ñ'ðO
ð ˜$‘;ðO
ð ˜eœlÑ*ðO
ð # T™kðO
ð Ð+Ô,ðO
ð 
#ðO
ð O
ð O
ð O
ð O
ð O
ð O
ð O
r_   rG  c                   ó   — e Zd ZdS )ÚDogeForSequenceClassificationNrs   rX   r_   r^   rW  rW  ‰  rt   r_   rW  )r'   rG  r.  r   rW  rá   )NNr   N)Prc   rê   Úcollections.abcr   Útypingr   r‚   Útorch.nn.functionalr   Ú
functionalr¼   Úhuggingface_hub.dataclassesr   Ú r   r&  Úactivationsr	   Úcache_utilsr
   Úconfiguration_utilsr   Úintegrations.flex_attentionr   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.output_capturingr   Úllama.modeling_llamar   r   r   r   r   r   r    r!   Úmixtral.modeling_mixtralr"   r#   Ú
get_loggerr`   ÚloggerÚ!torch.nn.attention.flex_attentionr$   r'   rr   rv   ÚModulerâ   rj   rã   r˜   r¿   r›   rå   rç   r  r   r.  rh   rE  rG  rW  Ú__all__rX   r_   r^   ú<module>rp     s¦  ðð  Ð à €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø JÐ JÐ JÐ JÐ JÐ JØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ &Ð &Ð &Ð &Ð &Ð &Ø ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð HÐ GÐ GÐ GÐ GÐ GÐ GÐ Gð 
ˆÔ	˜HÑ	%Ô	%€àÐÑ!Ô!ð <Ø;Ð;Ð;Ð;Ð;Ð;ð €Ð0Ð1Ñ1Ô1ØðL(ð L(ð L(ð L(ð L(Ð!ñ L(ô L(ñ „ñ 2Ô1ðL(ð^	ð 	ð 	ð 	ð 	�,ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð.ñ 	ô 	ð 	ð !Ø ð+*ð +*ØŒIð+*àŒ<ð+*ð 
Œð+*ð Œ<ð	+*ð
 ˜%œ,¨Ð3Ô4ð+*ð �T‰\ð+*ð �T‰\ð+*ð ˆ5Œ<˜œÐ%Ô&ð+*ð +*ð +*ð +*ð\ -Ð,Ñ.Ô.Ð Ø1GÐ Ð-Ñ .ðwð wð wð wð w�B”Iñ wô wð wðt	ð 	ð 	ð 	ð 	ˆhñ 	ô 	ð 	ð6,ð 6,ð 6,ð 6,ð 6,�”	ñ 6,ô 6,ð 6,ðr-ð -ð -ð -ð -Ð1ñ -ô -ð -ð`;ð ;ð ;ð ;ð ;Ð.ñ ;ô ;ð ;ð.	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ð #ØØØ*.ðg&ð g&Ø”  e¤lÔ 3Ñ3°dÑ:ðg&à�t‘ðg&ð �D‰jðg&ð ð	g&ð
 ”L 4Ñ'ðg&ð „\�CÑðg&ð g&ð g&ð g&ðTU
ð U
ð U
ð U
ð U
Ð(ñ U
ô U
ð U
ðp	ð 	ð 	ð 	ð 	Ð$Bñ 	ô 	ð 	ðð ð €€€r_   