Ë
    ÛÓ^j]  ã                   óÌ  — d Z ddlmZ ddl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 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 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.m/Z/m0Z0m1Z1 ddl2m3Z3  e"jh                  e5«      Z6 G d„ de-«      Z7 G d„ de.«      Z8 G d„ dejr                  «      Z: G d„ dejr                  «      Z; G d „ d!ejr                  «      Z< G d"„ d#ejr                  «      Z= G d$„ d%ejr                  «      Z> G d&„ d'e)«      Z?e  G d(„ d)e,«      «       Z@e  G d*„ d+e+«      «       ZA G d,„ d-e@e«      ZB G d.„ d/ee@«      ZCg d0¢ZDy)1zPyTorch JetMoe model.é    )ÚCallableN)Únn)Ú
functionalé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úcreate_causal_mask)Ú GenericForSequenceClassification)ÚMoeCausalLMOutputWithPastÚMoeModelOutputWithPast)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )ÚLlamaDecoderLayer)ÚMixtralModelÚMixtralPreTrainedModelÚMixtralRMSNormÚMixtralRotaryEmbeddingÚapply_rotary_pos_embÚeager_attention_forwardÚload_balancing_loss_funcé   )ÚJetMoeConfigc                   ó   — e Zd Zy)ÚJetMoeRMSNormN©Ú__name__Ú
__module__Ú__qualname__© ó    út/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/jetmoe/modular_jetmoe.pyr&   r&   4   ó   „ Ør,   r&   c                   ó   — e Zd Zy)ÚJetMoeRotaryEmbeddingNr'   r+   r,   r-   r0   r0   8   r.   r,   r0   c                   ó6   ‡ — e Zd Zdedededdfˆ fd„Zd„ Zˆ xZS )ÚJetMoeParallelExpertsÚnum_expertsÚ
input_sizeÚoutput_sizeÚreturnNc                 óª   •— t         ‰| �  «        t        j                  t	        j
                  |||«      «      | _        || _        || _        || _	        y)aÃ  
        Initialize the JetMoeParallelExperts module.
        The experts weights are stored in [num_experts, output_size, input_size] format. Such that it's compatible with
        many MoE libraries, such as [Megablock](https://github.com/databricks/megablocks) and
        [ScatterMoE](https://github.com/shawntan/scattermoe), as well as the
        [MoE kernel](https://github.com/vllm-project/vllm/blob/main/vllm/model_executor/layers/fused_moe/fused_moe.py)
        used in vllm.

        Args:
            num_experts (int):
                Number of experts.
            input_size (int):
                Size of the input.
            output_size (int):
                Size of the output.
        N)
ÚsuperÚ__init__r   Ú	ParameterÚtorchÚemptyÚweightr3   r4   r5   )Úselfr3   r4   r5   Ú	__class__s       €r-   r9   zJetMoeParallelExperts.__init__=   sD   ø€ ô" 	‰ÑÔÜ—l‘l¤5§;¡;¨{¸KÈÓ#TÓUˆŒØ&ˆÔØ$ˆŒØ&ˆÕr,   c                 óü   — |j                  |d¬«      }g }t        | j                  «      D ]7  }|j                  t	        j
                  ||   | j                  |   «      «       Œ9 t        j                  |d¬«      }|S )a  
        Forward pass of the JetMoeParallelExperts module.

        Args:
            inputs (Tensor):
                Input tensor.
            expert_size:
                Expert size information.

        Returns:
            Tensor: Output tensor.
        r   ©Údim)	ÚsplitÚranger3   ÚappendÚFÚlinearr=   r;   Úcat)r>   ÚinputsÚexpert_sizeÚ
input_listÚoutput_listÚiÚresultss          r-   ÚforwardzJetMoeParallelExperts.forwardT   sq   € ð —\‘\ +°1�\Ó5ˆ
ØˆÜ�t×'Ñ'Ó(ò 	HˆAØ×ÑœqŸx™x¨
°1©°t·{±{À1±~ÓFÕGð	Hä—)‘)˜K¨QÔ/ˆØˆr,   ©r(   r)   r*   Úintr9   rO   Ú__classcell__©r?   s   @r-   r2   r2   <   s)   ø„ ð' Cð '°Sð 'Àsð 'Ètõ 'ö.r,   r2   c                   ó2   ‡ — e Zd Zdededefˆ fd„Zd„ Zˆ xZS )ÚJetMoeTopKGatingr4   r3   Útop_kc                 ó†   •— t         ‰| �  «        || _        || _        || _        t        j                  ||d¬«      | _        y)a  
        Initialize the top-k gating mechanism.

        Args:
            input_size (`int`):
                Size of the input.
            num_experts (`int`):
                Number of experts.
            top_k (`int`):
                Number of top experts to select.
        F©ÚbiasN)r8   r9   r3   r4   rV   r   ÚLinearÚlayer)r>   r4   r3   rV   r?   s       €r-   r9   zJetMoeTopKGating.__init__j   s:   ø€ ô 	‰ÑÔà&ˆÔØ$ˆŒØˆŒ
ä—Y‘Y˜z¨;¸UÔCˆ�
r,   c                 ó˜  — | j                  |«      j                  «       }|j                  | j                  d¬«      \  }}t	        j
                  |d¬«      j                  |«      }t	        j                  |j                  d«      | j                  g|j                  |j                  ¬«      }|j                  d|d«      }|j                  «       j                  d«      }|j                  «       }|j!                  «       }	|	j#                  d«      \  }
}|j%                  | j                  d¬«      }|j!                  «       }||   }|||||fS )Nr#   rA   r   ©ÚdtypeÚdeviceÚtrunc)Úrounding_mode)r[   ÚfloatÚtopkrV   r;   ÚsoftmaxÚtype_asÚzerosÚsizer3   r^   r_   ÚscatterÚlongÚsumÚtolistÚflattenÚsortÚdiv)r>   Úhidden_statesÚlogitsÚtop_k_logitsÚtop_k_indicesÚtop_k_gatesrf   ÚgatesrJ   Útop_k_expertsÚ_Úindex_sorted_expertsÚbatch_indexÚbatch_gatess                 r-   rO   zJetMoeTopKGating.forward~   s.  € à—‘˜MÓ*×0Ñ0Ó2ˆØ&,§k¡k°$·*±*À! kÓ&DÑ#ˆ�mÜ—m‘m L°aÔ8×@Ñ@ÀÓOˆô —‘Ø×Ñ˜aÓ  $×"2Ñ"2Ð3¸;×;LÑ;LÐU`×UgÑUgô
ˆð —‘˜a °Ó2ˆØ—j‘j“l×&Ñ& qÓ)ˆð "×(Ñ(Ó*ˆð &×-Ñ-Ó/ˆØ"/×"4Ñ"4°QÓ"7ÑˆÐØ*×.Ñ.¨t¯z©zÈÐ.ÓQˆð "×)Ñ)Ó+ˆØ!Ð"6Ñ7ˆà# [°+¸{ÈFÐRÐRr,   rP   rS   s   @r-   rU   rU   i   s'   ø„ ðD 3ð D°Sð DÀõ Dö(Sr,   rU   c                   ó.   ‡ — e Zd ZdZdefˆ fd„Zd„ Zˆ xZS )Ú	JetMoeMoEzº
    A Sparsely gated mixture of experts layer with 1-layer Feed-Forward networks as experts.

    Args:
        config:
            Configuration object with model hyperparameters.
    Úconfigc                 ó@  •— t         ‰| �  «        |j                  | _        |j                  | _        t
        |j                     | _        t        j                  j                  t        j                  | j                  «      «      | _        t        |j                  | j                  | j                  dz  «      | _        t        |j                  | j                  | j                  «      | _        t#        | j                  |j                  |j$                  ¬«      | _        y )Nr   ©r4   r3   rV   )r8   r9   Úhidden_sizer4   Úintermediate_sizer   Úactivation_functionÚ
activationr;   r   r:   r<   rY   r2   Únum_local_expertsÚinput_linearÚoutput_linearrU   Únum_experts_per_tokÚrouter©r>   r|   r?   s     €r-   r9   zJetMoeMoE.__init__£   sÏ   ø€ Ü‰ÑÔà ×,Ñ,ˆŒØ!×3Ñ3ˆÔÜ  ×!;Ñ!;Ñ<ˆŒÜ—H‘H×&Ñ&¤u§{¡{°4·?±?Ó'CÓDˆŒ	Ü1°&×2JÑ2JÈDÏOÉOÐ]a×]mÑ]mÐpqÑ]qÓrˆÔÜ2°6×3KÑ3KÈT×M]ÑM]Ð_c×_nÑ_nÓoˆÔä&Ø—‘Ø×0Ñ0Ø×,Ñ,ô
ˆ�r,   c                 ó8  — |j                  «       \  }}}|j                  d|«      }| j                  |«      \  }}}}}	||   }
| j                  |
|«      }|j	                  dd¬«      }| j                  |d   «      |d   z  }| j                  ||«      }||dd…df   z  }t        j                  ||z  | j                  f|j                  |j                  ¬«      }|j                  d||«      }|j                  ||| j                  «      }|| j                  z   }|S )a  
        Forward pass of the mixture of experts layer.

        Args:
            layer_input (Tensor):
                Input tensor.

        Returns:
            Tensor:
                Output tensor.
            Tensor:
                Router logits.
        éÿÿÿÿr   rA   r   r#   Nr]   )rg   Úreshaper‡   r„   Úchunkr‚   r…   r;   rf   r4   r^   r_   Ú	index_addÚviewrY   )r>   Úlayer_inputÚbszÚlengthÚemb_sizerv   rx   ry   rJ   Úrouter_logitsÚexpert_inputsro   Úchunked_hidden_statesÚexpert_outputsrf   Úlayer_outputs                   r-   rO   zJetMoeMoE.forward³   s%  € ð !,× 0Ñ 0Ó 2ÑˆˆV�XØ!×)Ñ)¨"¨hÓ7ˆØBFÇ+Á+ÈkÓBZÑ?ˆˆ;˜ [°-à# KÑ0ˆØ×)Ñ)¨-¸ÓEˆØ -× 3Ñ 3°A¸2Ð 3Ó >ÐØŸ™Ð(=¸aÑ(@ÓAÐDYÐZ[ÑD\Ñ\ˆØ×+Ñ+¨M¸;ÓGˆà'¨+²a¸°gÑ*>Ñ>ˆä—‘˜S 6™\¨4¯?©?Ð;À>×CWÑCWÐ`n×`uÑ`uÔvˆØ—‘ q¨+°~ÓFˆØ#×(Ñ(¨¨f°d·o±oÓFˆØ# d§i¡iÑ/ˆØÐr,   )r(   r)   r*   Ú__doc__r$   r9   rO   rR   rS   s   @r-   r{   r{   š   s   ø„ ñð
˜|õ 
ö r,   r{   c                   ó:   ‡ — e Zd ZdZdefˆ fd„Zd„ Zd„ Zd„ Zˆ xZ	S )Ú	JetMoeMoAzÅ
    A Sparsely gated mixture of attention layer with pairs of query- and output-projections as experts.

    Args:
        config:
            Configuration object with model hyperparameters.
    r|   c                 óh  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  |j                  z  | _        |j                  | _	        t        j                  j                  t        j                  | j
                  «      «      | _        t        | j                  | j
                  | j                  «      | _        t        | j                  | j                  | j
                  «      | _        t%        | j
                  | j                  | j                  ¬«      | _        y )Nr~   )r8   r9   rƒ   r3   r   r4   Úkv_channelsÚnum_key_value_headsr†   rV   r;   r   r:   r<   rY   r2   r„   r…   rU   r‡   rˆ   s     €r-   r9   zJetMoeMoA.__init__Ý   sÛ   ø€ Ü‰ÑÔà!×3Ñ3ˆÔØ ×,Ñ,ˆŒØ!×-Ñ-°×0JÑ0JÑJˆÔØ×/Ñ/ˆŒ
Ü—H‘H×&Ñ&¤u§{¡{°4·?±?Ó'CÓDˆŒ	ä1°$×2BÑ2BÀDÇOÁOÐUY×UeÑUeÓfˆÔÜ2°4×3CÑ3CÀT×EUÑEUÐW[×WfÑWfÓgˆÔä&Ø—‘Ø×(Ñ(Ø—*‘*ô
ˆ�r,   c                 ó²  — |j                  «       \  }}}|j                  d|«      }| j                  |«      \  }}}}}	||||f}
||   }| j                  ||«      }t	        j
                  ||z  | j                  z  | j                  f|j                  |j                  ¬«      }|j                  d||«      }|j                  ||| j                  d«      }||	|
fS )z�
        Map inputs to attention experts according to routing decision and compute query projection inside each experts.
        rŠ   r]   r   )rg   r‹   r‡   r„   r;   rf   rV   r   r^   r_   r�   rŽ   )r>   r�   r�   r‘   r’   rw   rx   ry   rJ   r“   Ú	topo_infor”   r–   rf   r—   s                  r-   ÚmapzJetMoeMoA.mapï   sì   € ð !,× 0Ñ 0Ó 2ÑˆˆV�XØ!×)Ñ)¨"¨hÓ7ˆØUY×U`ÑU`ÐalÓUmÑRÐ˜k¨;¸À]Ø)¨;¸À[ÐQˆ	ð $ KÑ0ˆØ×*Ñ*¨=¸+ÓFˆô —‘Ø�6‰\˜DŸJ™JÑ&¨×(8Ñ(8Ð9À×AUÑAUÐ^l×^sÑ^sô
ˆð —‘ qÐ*>ÀÓOˆØ#×(Ñ(¨¨f°d·j±jÀ"ÓEˆØ˜]¨IÐ5Ð5r,   c                 óœ  — |j                  «       \  }}}}|j                  d|«      }|\  }}}	}
||   }| j                  ||
«      }||	dd…df   z  }t        j                  ||z  | j
                  f|j                  |j                  ¬«      }|j                  d||«      }|j                  ||| j
                  «      }|| j                  z   }|S )zu
        Compute output projection inside each attention experts and merge the outputs of different experts.
        rŠ   Nr]   r   )rg   r‹   r…   r;   rf   r4   r^   r_   r�   rŽ   rY   )r>   r�   rŸ   r�   r‘   Úkr   rw   rx   ry   rJ   r”   r–   rf   r—   s                  r-   ÚreducezJetMoeMoA.reduce  sÜ   € ð '2×&6Ñ&6Ó&8Ñ#ˆˆV�Q˜Ø!×)Ñ)¨"¨kÓ:ˆØFOÑCÐ˜k¨;¸ð $Ð$8Ñ9ˆØ×+Ñ+¨M¸;ÓGˆð (¨+²a¸°gÑ*>Ñ>ˆô —‘˜S 6™\¨4¯?©?Ð;À>×CWÑCWÐ`n×`uÑ`uÔvˆØ—‘ q¨+°~ÓFˆØ#×(Ñ(¨¨f°d·o±oÓFˆØ# d§i¡iÑ/ˆØÐr,   c                 ó   — t        d«      ‚)Nz-This module doesn't support call and forward.)ÚNotImplementedError)r>   r�   s     r-   rO   zJetMoeMoA.forward  s   € Ü!Ð"QÓRÐRr,   )
r(   r)   r*   r˜   r$   r9   r    r£   rO   rR   rS   s   @r-   rš   rš   Ô   s$   ø„ ñð
˜|õ 
ò$6ò.ö,Sr,   rš   c                   ó   ‡ — e Zd ZdZddededz  fˆ fd„Z	 	 	 ddej                  dej                  dz  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ˆ xZS )ÚJetMoeAttentionzH
    Multi-headed attention from 'Attention Is All You Need' paper.
    Nr|   Ú	layer_idxc                 ób  •— t         ‰| �  «        || _        || _        d| _        |€-t
        j                  d| j                  j                  › d�«       d| _	        |j                  | _        |j                  | _        |j                  |j                  z  | _        |j                  | _        |j                   | _        |j                  | _        | j$                  dz  | _        t)        |«      | _        t,        j.                  j1                  |j2                  | j                  dz  d¬	«      | _        y)
zä
        Initialize the JetMoeAttention module.

        Args:
            config:
                Configuration object with model hyperparameters.
            layer_idx:
                Index of the layer in the model.
        TNzInstantiating z¹ without passing a `layer_idx` is not recommended and will lead to errors during the forward call if caching is used. Please make sure to provide a `layer_idx` when creating this class.r#   g      à¿r   FrX   )r8   r9   r|   r¨   Ú	is_causalÚloggerÚwarning_oncer?   r(   Únum_key_value_groupsr†   rV   Úattention_dropoutrœ   r�   Úkv_projection_sizeÚnum_attention_headsÚ	num_headsÚhead_dimÚscalingrš   Úexpertsr;   r   rZ   r   Úkv_proj©r>   r|   r¨   r?   s      €r-   r9   zJetMoeAttention.__init__%  s  ø€ ô 	‰ÑÔØˆŒØ"ˆŒØˆŒØÐÜ×ÑØ  §¡×!8Ñ!8Ð 9ð :,ð ,ôð %&ˆÔ!Ø×/Ñ/ˆŒ
Ø!'×!9Ñ!9ˆÔØ"(×"4Ñ"4°v×7QÑ7QÑ"QˆÔØ#)×#=Ñ#=ˆÔ Ø×3Ñ3ˆŒØ×*Ñ*ˆŒØ—}‘} dÑ*ˆŒÜ  Ó(ˆŒä—x‘x—‘ v×'9Ñ'9¸4×;RÑ;RÐUVÑ;VÐ]b�Ócˆ�r,   ro   Úattention_maskÚposition_embeddingsÚpast_key_valuesr6   c                 óì  — |j                   d d }g |¢d‘| j                  ‘­}| j                  j                  |«      \  }}	}
| j	                  |«      j                  dd¬«      \  }}|j                  |«      j                  dd«      }|j                  |«      j                  dd«      }|j                  |«      j                  dd«      }|\  }}t        ||||«      \  }}|� |j                  ||| j                  «      \  }}t        j                  | j                  j                  t        «      }|j!                  d| j"                  dd«      }|j!                  d| j"                  dd«      } || ||||f| j$                  sdn| j&                  | j(                  dœ|¤Ž\  }} |j                  g |¢| j"                  ‘d‘­Ž }| j                  j+                  ||
«      } |j                  g |¢d‘­Ž }|||	fS )NrŠ   r   rA   r#   ç        )Údropoutr³   )Úshaper²   r´   r    rµ   rŒ   rŽ   Ú	transposer    Úupdater¨   r   Úget_interfacer|   Ú_attn_implementationr!   ÚrepeatrV   Útrainingr®   r³   r£   )r>   ro   r·   r¸   r¹   ÚkwargsÚinput_shapeÚhidden_shapeÚquery_statesr“   rŸ   Ú
key_statesÚvalue_statesÚcosÚsinÚattention_interfaceÚattn_outputÚattn_weightss                     r-   rO   zJetMoeAttention.forwardF  s  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà15·±×1AÑ1AÀ-Ó1PÑ.ˆ�m YØ#'§<¡<°Ó#>×#DÑ#DÀQÈBÐ#DÓ#OÑ ˆ
�Là#×(Ñ(¨Ó6×@Ñ@ÀÀAÓFˆØ—_‘_ \Ó2×<Ñ<¸QÀÓBˆ
Ø#×(Ñ(¨Ó6×@Ñ@ÀÀAÓFˆà&‰ˆˆSÜ#7¸ÀjÐRUÐWZÓ#[Ñ ˆ�jàÐ&Ø'6×'=Ñ'=¸jÈ,ÐX\×XfÑXfÓ'gÑ$ˆJ˜ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðð  ×&Ñ& q¨$¯*©*°a¸Ó;ˆ
Ø#×*Ñ*¨1¨d¯j©j¸!¸QÓ?ˆá$7ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð '�k×&Ñ&ÐD¨ÐD°T·Z±ZÐDÀÒDˆØ—l‘l×)Ñ)¨+°yÓAˆØ&�k×&Ñ&Ð8¨Ð8°RÒ8ˆØ˜L¨-Ð7Ð7r,   ©N)NNN)r(   r)   r*   r˜   r$   rQ   r9   r;   ÚTensorÚ
LongTensorr	   ÚtuplerO   rR   rS   s   @r-   r§   r§      s¦   ø„ ññd˜|ð d¸¸d¹
õ dðH /3Ø7;Ø(,ñ/8à—|‘|ð/8ð Ÿ™ tÑ+ð/8ð #×-Ñ-°Ñ4ð	/8ð
  ™ð/8ð 
ˆu�|‰|˜UŸ\™\¨DÑ0°%¸¿¹Ñ2EÈÑ2LÐLÑ	M÷/8r,   r§   c                   ó
  ‡ — e Zd Zddededz  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 )ÚJetMoeDecoderLayerNr|   r¨   c                 óÔ   •— t         ‰| �  ||«       t        |j                  «      | _        t        ||«      | _        t        |j                  «      | _        t        |«      | _	        | `
y rÏ   )r8   r9   r&   r   Úinput_layernormr§   Úself_attentionÚpost_attention_layernormr{   ÚmlpÚ	self_attnr¶   s      €r-   r9   zJetMoeDecoderLayer.__init__y  sX   ø€ Ü‰Ñ˜ Ô+Ü,¨V×-?Ñ-?Ó@ˆÔÜ-¨f°iÓ@ˆÔÜ(5°f×6HÑ6HÓ(IˆÔ%Ü˜VÓ$ˆŒØ‰Nr,   ro   r·   Úposition_idsr¹   Ú	use_cacher¸   rÄ   r6   c           
      óÂ   — |}| j                  |«      } | j                  d||||||dœ|¤Ž\  }}	}	||z   }|}| j                  |«      }| j                  |«      }||z   }|S )N)ro   r·   rÛ   r¹   rÜ   r¸   r+   )rÖ   r×   rØ   rÙ   )
r>   ro   r·   rÛ   r¹   rÜ   r¸   rÄ   Úresidualrv   s
             r-   rO   zJetMoeDecoderLayer.forward�  s”   € ð !ˆØ×,Ñ,¨]Ó;ˆà1˜d×1Ñ1ð 
Ø'Ø)Ø%Ø+ØØ 3ñ
ð ñ
Ñˆ�q˜!ð ! =Ñ0ˆð !ˆØ×5Ñ5°mÓDˆØŸ™ Ó/ˆØ  =Ñ0ˆØÐr,   rÏ   )NNNFN)r(   r)   r*   r$   rQ   r9   r;   rÐ   rÑ   r	   ÚboolrÒ   r   r   rO   rR   rS   s   @r-   rÔ   rÔ   x  s¿   ø„ ñ˜|ð ¸¸d¹
õ ð /3Ø04Ø(,Ø!&ØHLñà—|‘|ðð Ÿ™ tÑ+ðð ×&Ñ&¨Ñ-ð	ð
  ™ðð ˜$‘;ðð # 5§<¡<°·±Ð#=Ñ>ÀÑEðð Ð+Ñ,ðð 
�‰÷r,   rÔ   c                   ó¦   — e Zd ZU  eed¬«       eed¬«      ge eed¬«      dœZee	d<   dZ
dZd	gZd
gZdZdZdZ ej$                  «       d„ «       Zy)ÚJetMoePreTrainedModelr   )Úindexé   r#   )r“   ro   Ú
attentionsr|   ÚmodelFrÔ   r¹   Tc                 ó,  — t        j                  | |«       t        |t        «      r7t	        j
                  |j                  d| j                  j                  ¬«       yt        |t        t        z  «      r t	        j                  |j                  «       yy)zInitialize the weights.r»   )ÚmeanÚstdN)r   Ú_init_weightsÚ
isinstancer2   ÚinitÚnormal_r=   r|   Úinitializer_rangerš   r{   Úzeros_rY   )r>   Úmodules     r-   ré   z#JetMoePreTrainedModel._init_weights±  sa   € ô 	×%Ñ% d¨FÔ3Ü�fÔ3Ô4Ü�L‰L˜Ÿ™¨S°d·k±k×6SÑ6SÖTÜ˜¤	¬IÑ 5Ô6Ü�K‰K˜Ÿ™Õ$ð 7r,   N)r(   r)   r*   r   r§   rU   rÔ   Ú_can_record_outputsr$   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_can_compile_fullgraphr;   Úno_gradré   r+   r,   r-   rá   rá   ¡  s‚   … ñ )¨ÀÔBÁNÐScÐklÔDmÐnØ+Ù$ _¸AÔ>ñÐð
 ÓØÐØ&+Ð#Ø-Ð.ÐØ#4Ð"5ÐØÐØ€NØ"Ðà€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 )ÚJetMoeModelr|   c           	      óÞ  •— t         ‰| �  |«       |j                  | _        |j                  | _        t        j                  |j                  |j                  | j                  «      | _        t        j                  t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        |j                  | _        t        |j                  |j                   ¬«      | _        y c c}w )N)Úeps)r8   r9   Úpad_token_idÚpadding_idxÚ
vocab_sizer   Ú	Embeddingr   Úembed_tokensÚ
ModuleListrD   Únum_hidden_layersrÔ   ÚlayersrÁ   r&   Úrms_norm_epsÚnormr¶   s      €r-   r9   zJetMoeModel.__init__½  s´   ø€ Ü‰Ñ˜Ô Ø!×.Ñ.ˆÔØ ×+Ñ+ˆŒäŸL™L¨×):Ñ):¸F×<NÑ<NÐPT×P`ÑP`ÓaˆÔÜ—m‘mÜDIÈ&×JbÑJbÓDcÖd°yÔ ¨	Õ2Òdó
ˆŒð %+×$?Ñ$?ˆÔ!Ü! &×"4Ñ"4¸&×:MÑ:MÔNˆ�	ùò es   ÂC*NÚ	input_idsr·   rÛ   r¹   Úinputs_embedsrÜ   rÄ   r6   c           
      ó:  — |d u |d uz  rt        d«      ‚|r|€t        | j                  ¬«      }|€| 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#   )r_   )r|   r	  r·   r¹   rÛ   )r¸   r·   r¹   rÜ   rÛ   )Úlast_hidden_stater¹   )Ú
ValueErrorr
   r|   r  Úget_seq_lengthr;   Úaranger½   r_   Ú	unsqueezer   Ú
rotary_embr  r  r  r   )r>   r  r·   rÛ   r¹   r	  rÜ   rÄ   Úpast_seen_tokensÚcausal_maskro   r¸   Údecoder_layers                r-   rO   zJetMoeModel.forwardÉ  sL  € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZá˜Ð0Ü*°$·+±+Ô>ˆOàÐ Ø ×-Ñ-¨iÓ8ˆMàÐØCRÐC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<™<¨×(;Ñ(;¸AÑ(>À}×G[ÑG[Ô\Ð_oÑoˆLØ'×1Ñ1°!Ó4ˆLä(Ø—;‘;Ø'Ø)Ø+Ø%ô
ˆð &ˆð #Ÿo™o¨m¸\ÓJÐà!Ÿ[™[Ð)H¨4¯;©;×+HÑ+HÐIò 		ˆMÙ)Øðà$7Ø*Ø /Ø#Ø)ñð ñ‰Mð		ð Ÿ	™	 -Ó0ˆä%Ø+Ø+ô
ð 	
r,   )NNNNNN)r(   r)   r*   r$   r9   r   r   r   r;   rÑ   rÐ   r	   ÚFloatTensorrß   r   r   r   rO   rR   rS   s   @r-   rû   rû   »  sÏ   ø„ ð
O˜|õ 
Oð  ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ñ5
à×#Ñ# dÑ*ð5
ð Ÿ™ tÑ+ð5
ð ×&Ñ&¨Ñ-ð	5
ð
  ™ð5
ð ×(Ñ(¨4Ñ/ð5
ð ˜$‘;ð5
ð Ð+Ñ,ð5
ð 
 ò5
ó ó ó  ô5
r,   rû   c                   ó,  ‡ — e Zd ZddiZˆ 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dz  defd„«       «       Zˆ xZS )ÚJetMoeForCausalLMzlm_head.weightzmodel.embed_tokens.weightc                 óp  •— t         ‰| �  |«       t        |«      | _        |j                  | _        |j
                  | _        t        j                  |j                  |j                  d¬«      | _	        |j                  | _
        |j                  | _        |j                  | _        | j                  «        y )NFrX   )r8   r9   rû   rå   r   Úaux_loss_coefr   rZ   r   Úlm_headÚtie_word_embeddingsrƒ   r3   r†   Ú	post_initrˆ   s     €r-   r9   zJetMoeForCausalLM.__init__  s�   ø€ Ü‰Ñ˜Ô Ü  Ó(ˆŒ
Ø ×+Ñ+ˆŒØ#×1Ñ1ˆÔÜ—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒØ#)×#=Ñ#=ˆÔ Ø!×3Ñ3ˆÔØ#)×#=Ñ#=ˆÔ ð 	�‰Õr,   Nr  r·   rÛ   r¹   r	  ÚlabelsrÜ   Úlogits_to_keepÚoutput_router_logitsr6   c
                 óL  —  | j                   d|||||||	dœ|
¤Ž}|j                  }t        |t        «      rt	        | d «      n|}| j                  |d d …|d d …f   «      }d }|�* | j                  ||fd| j                  j                  i|
¤Ž}d }|	rYt        |j                  | j                  | j                  |«      }|�+|| j                  |j                  |j                  «      z  z  }t!        ||||j"                  |j$                  |j&                  |j                  ¬«      S )N)r  r·   rÛ   r¹   r	  rÜ   r  r   )ÚlossÚaux_lossrp   r¹   ro   rä   r“   r+   )rå   r  rê   rQ   Úslicer  Úloss_functionr|   r   r"   r“   r3   r†   r  Útor_   r   r¹   ro   rä   )r>   r  r·   rÛ   r¹   r	  r  rÜ   r  r  rÄ   Úoutputsro   Úslice_indicesrp   r   r!  s                    r-   rO   zJetMoeForCausalLM.forward  sQ  € ð +5¨$¯*©*ð 	+
ØØ)Ø%Ø+Ø'ØØ!5ñ	+
ð ñ	+
ˆð  ×1Ñ1ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ%ØØñð  Ÿ;™;×1Ñ1ðð ñ	ˆDð ˆÙÜ/Ø×%Ñ%Ø× Ñ Ø×(Ñ(Øó	ˆHð Ð!Ø˜×*Ñ*¨X¯[©[¸¿¹Ó-EÑEÑE�ä(ØØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø!×/Ñ/ô
ð 	
r,   )	NNNNNNNr   F)r(   r)   r*   Ú_tied_weights_keysr9   r   r   r;   rÑ   rÐ   r	   r  rß   rQ   r   rO   rR   rS   s   @r-   r  r    sù   ø„ Ø*Ð,GÐHÐôð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.Ø,1ñ9
à×#Ñ# dÑ*ð9
ð Ÿ™ tÑ+ð9
ð ×&Ñ&¨Ñ-ð	9
ð
  ™ð9
ð ×(Ñ(¨4Ñ/ð9
ð × Ñ  4Ñ'ð9
ð ˜$‘;ð9
ð ˜eŸl™lÑ*ð9
ð # T™kð9
ð 
#ò9
ó ó ô9
r,   r  c                   ó   — e Zd Zy)ÚJetMoeForSequenceClassificationNr'   r+   r,   r-   r)  r)  R  s   … r,   r)  )r  rû   rá   r)  )Er˜   Úcollections.abcr   r;   r   Útorch.nnr   rF   Ú r   rë   Úactivationsr   Úcache_utilsr	   r
   Ú
generationr   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.output_capturingr   r   Úllama.modeling_llamar   Úmixtral.modeling_mixtralr   r   r   r   r    r!   r"   Úconfiguration_jetmoer$   Ú
get_loggerr(   r«   r&   r0   ÚModuler2   rU   r{   rš   r§   rÔ   rá   rû   r  r)  Ú__all__r+   r,   r-   ú<module>r>     sU  ðñ å $ã Ý Ý $å &Ý !ß .Ý )Ý /õ÷ Rß FÝ &ß RÓ RÝ 7ß EÝ 4÷÷ ñ õ /ð 
ˆ×	Ñ	˜HÓ	%€ô	�Nô 	ô	Ð2ô 	ô*˜BŸI™Iô *ôZ.S�r—y‘yô .Sôb7�—	‘	ô 7ôtIS�—	‘	ô ISôXU8�b—i‘iô U8ôp&Ð*ô &ðR ô%Ð2ó %ó ð%ð2 ôE
�,ó E
ó ðE
ôPK
Ð-¨ô K
ô\ dÐ&FÐH]Ô cò k�r,   