Ë
    ÜÓ^jã*  ã                   óD  — 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	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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#m$Z$ ddl%m&Z&m'Z'm(Z( ddl)m*Z* ddl+m,Z,  ejZ                  e.«      Z/ G d„ de!«      Z0 G d„ de"«      Z1 G d„ de«      Z2 G d„ de«      Z3 G d„ de&«      Z4 G d „ d!e*«      Z5 G d"„ d#ejl                  «      Z7 G d$„ d%e «      Z8e G d&„ d'e«      «       Z9e G d(„ d)e(«      «       Z: G d*„ d+e'e«      Z;g d,¢Z<y)-zPyTorch OLMoE model.é    )ÚCallableN)Únné   )Úinitialization)ÚCacheÚDynamicCache)ÚGenerationMixin)Úcreate_causal_mask)ÚMoeModelOutputWithPast)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚlogging)ÚOutputRecorderé   )ÚGemmaMLP)ÚLlamaAttentionÚLlamaDecoderLayerÚLlamaRMSNormÚLlamaRotaryEmbeddingÚapply_rotary_pos_embÚeager_attention_forward)ÚMixtralExpertsÚMixtralForCausalLMÚMixtralModel)ÚQwen2MoeTopKRouteré   )ÚOlmoeConfigc                   ó    ‡ — e Zd Zdˆ fd„	Zˆ xZS )ÚOlmoeRMSNormc                 ó&   •— t         ‰| �  ||«       y ©N)ÚsuperÚ__init__)ÚselfÚhidden_sizeÚepsÚ	__class__s      €úr/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/olmoe/modular_olmoe.pyr&   zOlmoeRMSNorm.__init__.   s   ø€ Ü‰Ñ˜ cÕ*ó    )gñhãˆµøä>)Ú__name__Ú
__module__Ú__qualname__r&   Ú__classcell__©r*   s   @r+   r"   r"   -   s   ø„ ÷+ñ +r,   r"   c                   ó   — e Zd Zy)ÚOlmoeRotaryEmbeddingN©r-   r.   r/   © r,   r+   r3   r3   2   ó   „ Ør,   r3   c                   ó   — e Zd Zy)ÚOlmoeMLPNr4   r5   r,   r+   r8   r8   6   r6   r,   r8   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ej                  dz  de	dz  d	e
e   d
eej                  ej                  dz  eej                     dz  f   fd„Zˆ xZS )ÚOlmoeAttentionNÚconfigÚ	layer_idxc                 óò   •— t         ‰| �  ||«       t        |j                  |j                  ¬«      | _        t        |j                  |j                  z  |j                  z  |j                  ¬«      | _        y )N©r)   )	r%   r&   r"   r(   Úrms_norm_epsÚq_normÚnum_attention_headsÚnum_key_value_headsÚk_norm©r'   r;   r<   r*   s      €r+   r&   zOlmoeAttention.__init__;   s`   ø€ Ü‰Ñ˜ Ô+Ü" 6×#5Ñ#5¸6×;NÑ;NÔOˆŒÜ"Ø×Ñ 6×#=Ñ#=Ñ=À×A[ÑA[Ñ[Ðag×atÑatô
ˆ�r,   Úhidden_statesÚposition_embeddingsÚattention_maskÚpast_key_valuesÚkwargsÚreturnc           
      ó  — |j                   d d }g |¢d‘| j                  ‘­}| j                  | j                  |«      «      }| j	                  | j                  |«      «      }	| j                  |«      }
| j                  j                  �´|j                  | j                  j                   | j                  j                  ¬«       |	j                  | j                  j                   | j                  j                  ¬«       |
j                  | j                  j                   | j                  j                  ¬«        |j                  |Ž j                  dd«      } |	j                  |Ž j                  dd«      }	 |
j                  |Ž j                  dd«      }
|\  }}t        ||	||«      \  }}	|� |j                  |	|
| j                  «      \  }	}
t        j                   | j                  j"                  t$        «      } || ||	|
|f| j&                  sdn| j(                  | j*                  t-        | j                  dd «      dœ|¤Ž\  }} |j.                  g |¢d‘­Ž j1                  «       }| j3                  |«      }||fS )Néÿÿÿÿ)ÚminÚmaxr   r   ç        Úsliding_window)ÚdropoutÚscalingrP   )ÚshapeÚhead_dimr@   Úq_projrC   Úk_projÚv_projr;   Úclip_qkvÚclamp_ÚviewÚ	transposer   Úupdater<   r   Úget_interfaceÚ_attn_implementationr   ÚtrainingÚattention_dropoutrR   ÚgetattrÚreshapeÚ
contiguousÚo_proj)r'   rE   rF   rG   rH   rI   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚcosÚsinÚattention_interfaceÚattn_outputÚattn_weightss                   r+   ÚforwardzOlmoeAttention.forwardB   sR  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ 4§;¡;¨}Ó#=Ó>ˆØ—[‘[ §¡¨]Ó!;Ó<ˆ
Ø—{‘{ =Ó1ˆà�;‰;×ÑÐ+Ø×Ñ T§[¡[×%9Ñ%9Ð$9¸t¿{¹{×?SÑ?SÐÔTØ×Ñ 4§;¡;×#7Ñ#7Ð"7¸T¿[¹[×=QÑ=QÐÔRØ×Ñ T§[¡[×%9Ñ%9Ð$9¸t¿{¹{×?SÑ?SÐÔTà(�|×(Ñ(¨,Ð7×AÑAÀ!ÀQÓGˆØ$�Z—_‘_ lÐ3×=Ñ=¸aÀÓCˆ
Ø(�|×(Ñ(¨,Ð7×AÑAÀ!ÀQÓGˆØ&‰ˆˆSÜ#7¸ÀjÐRUÐWZÓ#[Ñ ˆ�jàÐ&Ø'6×'=Ñ'=¸jÈ,ÐX\×XfÑXfÓ'gÑ$ˆJ˜ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð
%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘LÜ" 4§;¡;Ð0@À$ÓGñ
%
ð ñ
%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(r,   r$   )r-   r.   r/   r    Úintr&   ÚtorchÚTensorÚtupler   r   r   ro   r0   r1   s   @r+   r:   r:   :   s®   ø„ ñ
˜{ð 
°s¸T±zõ 
ð )-ñ/)à—|‘|ð/)ð # 5§<¡<°·±Ð#=Ñ>ð/)ð Ÿ™ tÑ+ð	/)ð
  ™ð/)ð Ð+Ñ,ð/)ð 
ˆu�|‰|˜UŸ\™\¨DÑ0°%¸¿¹Ñ2EÈÑ2LÐLÑ	M÷/)r,   r:   c                   ó   — e Zd Zy)ÚOlmoeExpertsNr4   r5   r,   r+   ru   ru   t   r6   r,   ru   c                   ó   — e Zd Zy)ÚOlmoeTopKRouterNr4   r5   r,   r+   rw   rw   x   r6   r,   rw   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚOlmoeSparseMoeBlockc                 ób   •— t         ‰| �  «        t        |«      | _        t	        |«      | _        y r$   )r%   r&   rw   Úgateru   Úexperts©r'   r;   r*   s     €r+   r&   zOlmoeSparseMoeBlock.__init__}   s&   ø€ Ü‰ÑÔÜ# FÓ+ˆŒ	Ü# FÓ+ˆ�r,   rE   rJ   c                 ó¼   — |j                   \  }}}|j                  d|«      }| j                  |«      \  }}}| j                  |||«      j	                  |||«      }|S )NrL   )rS   rZ   r{   r|   rb   )	r'   rE   Ú
batch_sizeÚsequence_lengthÚ
hidden_dimÚ_Útop_k_weightsÚtop_k_indexÚfinal_hidden_statess	            r+   ro   zOlmoeSparseMoeBlock.forward‚   sh   € Ø2?×2EÑ2EÑ/ˆ
�O ZØ%×*Ñ*¨2¨zÓ:ˆØ(,¯	©	°-Ó(@Ñ%ˆˆ=˜+Ø"Ÿl™l¨=¸+À}ÓU×]Ñ]Ø˜¨ó
Ðð #Ð"r,   )r-   r.   r/   r&   rq   rr   ro   r0   r1   s   @r+   ry   ry   |   s#   ø„ ô,ð
# U§\¡\ð #°e·l±l÷ #r,   ry   c                   ó(   ‡ — e Zd Zdedefˆ fd„Zˆ xZS )ÚOlmoeDecoderLayerr;   r<   c                 ó$  •— t         ‰| �  ||«       |j                  | _        t        ||¬«      | _        t        |«      | _        t        |j                  |j                  ¬«      | _	        t        |j                  |j                  ¬«      | _
        y )N)r;   r<   r>   )r%   r&   r(   r:   Ú	self_attnry   Úmlpr"   r?   Úinput_layernormÚpost_attention_layernormrD   s      €r+   r&   zOlmoeDecoderLayer.__init__�   sp   ø€ Ü‰Ñ˜ Ô+Ø!×-Ñ-ˆÔÜ'¨vÀÔKˆŒÜ& vÓ.ˆŒÜ+¨F×,>Ñ,>ÀF×DWÑDWÔXˆÔÜ(4°V×5GÑ5GÈV×M`ÑM`Ô(aˆÕ%r,   )r-   r.   r/   r    rp   r&   r0   r1   s   @r+   r‡   r‡   Œ   s   ø„ ðb˜{ð b°s÷ bñ br,   r‡   c                   ó‚   — e Zd ZU eed<   dZdZdgZdgZdZ	dZ
 eed¬«      eedœZdZ ej$                  «       d	„ «       Zy
)ÚOlmoePreTrainedModelr;   ÚmodelTr‡   rH   r   )Úindex)Úrouter_logitsrE   Ú
attentionsc                 ó¸  — t        j                  | |«       t        |t        «      rmt	        j
                  |j                  d| j                  j                  ¬«       t	        j
                  |j                  d| j                  j                  ¬«       y t        |t        «      r7t	        j
                  |j                  d| j                  j                  ¬«       y y )NrO   )ÚmeanÚstd)r   Ú_init_weightsÚ
isinstanceru   ÚinitÚnormal_Úgate_up_projr;   Úinitializer_rangeÚ	down_projrw   Úweight)r'   Úmodules     r+   r–   z"OlmoePreTrainedModel._init_weights§   s‰   € ä×%Ñ% d¨FÔ3Ü�fœlÔ+Ü�L‰L˜×,Ñ,°3¸D¿K¹K×<YÑ<YÕZÜ�L‰L˜×)Ñ)°¸¿¹×9VÑ9VÖWÜ˜¤Ô0Ü�L‰L˜Ÿ™¨S°d·k±k×6SÑ6SÖTð 1r,   N)r-   r.   r/   r    Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpar   rw   r‡   r:   Ú_can_record_outputsÚ_supports_attention_backendrq   Úno_gradr–   r5   r,   r+   rŽ   rŽ   –   sm   … àÓØÐØ&*Ð#Ø,Ð-ÐØ#4Ð"5ÐØÐØ€Ná'¨¸qÔAØ*Ø$ñÐð #'Ðà€U‡]�]ƒ_ñUó ñUr,   rŽ   c                   óÔ   ‡ — e Zd Zdefˆ 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
dz  d
ee   defd„Zˆ xZS )Ú
OlmoeModelr;   c           	      óš  •— t         ‰| �  |«       t        j                  |j                  |j
                  | j                  «      | _        t        j                  t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        t        |j
                  |j                  ¬«      | _        t!        |¬«      | _        y c c}w )Nr>   ©r;   )r%   r&   r   Ú	EmbeddingÚ
vocab_sizer(   Úpadding_idxÚembed_tokensÚ
ModuleListÚrangeÚnum_hidden_layersr‡   Úlayersr"   r?   Únormr3   Ú
rotary_embrD   s      €r+   r&   zOlmoeModel.__init__³   s—   ø€ Ü‰Ñ˜Ô ÜŸL™L¨×):Ñ):¸F×<NÑ<NÐPT×P`ÑP`ÓaˆÔÜ—m‘mÜCHÈ×IaÑIaÓCbÖc°iÔ˜v yÕ1Òcó
ˆŒô ! ×!3Ñ!3¸×9LÑ9LÔMˆŒ	Ü.°fÔ=ˆ�ùò ds   Á1CNÚ	input_idsrG   Úposition_idsrH   Úinputs_embedsÚ	use_cacherI   rJ   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_embedsr¬   r   r   )Údevice)r;   r¹   rG   rH   r¸   )rF   rG   r¸   rH   rº   )Úlast_hidden_staterH   )Ú
ValueErrorr   r;   r°   Úget_seq_lengthrq   ÚarangerS   r¼   Ú	unsqueezer
   r¶   r´   r³   rµ   r   )r'   r·   rG   r¸   rH   r¹   rº   rI   Úpast_seen_tokensÚcausal_maskrE   rF   Údecoder_layers                r+   ro   zOlmoeModel.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    r&   rq   Ú
LongTensorrr   r   ÚFloatTensorÚboolr   r   r   ro   r0   r1   s   @r+   rª   rª   ±   s®   ø„ ð>˜{õ >ð .2Ø.2Ø04Ø(,Ø26Ø!%ñ5
à×#Ñ# dÑ*ð5
ð Ÿ™ tÑ+ð5
ð ×&Ñ&¨Ñ-ð	5
ð
  ™ð5
ð ×(Ñ(¨4Ñ/ð5
ð ˜$‘;ð5
ð Ð+Ñ,ð5
ð 
 ÷5
r,   rª   c                   ó0   ‡ — e Zd ZddiZˆ fd„Zˆ fd„Zˆ xZS )ÚOlmoeForCausalLMzlm_head.weightzmodel.embed_tokens.weightc                 óf   •— t         ‰| �  |«       t        |«      | _        |j                  | _        y r$   )r%   r&   rª   r�   Únum_expertsr}   s     €r+   r&   zOlmoeForCausalLM.__init__÷   s*   ø€ Ü‰Ñ˜Ô Ü Ó'ˆŒ
Ø!×-Ñ-ˆÕr,   c                 ó"   •— t        ‰| �  di |¤ŽS )u‹  
        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, OlmoeForCausalLM

        >>> model = OlmoeForCausalLM.from_pretrained("allenai/OLMoE-1B-7B-0924")
        >>> tokenizer = AutoTokenizer.from_pretrained("allenai/OLMoE-1B-7B-0924")

        >>> 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 sure if youâ€™re conscious of this, but Iâ€™m'
        ```
        r5   )r%   ro   )r'   Úsuper_kwargsr*   s     €r+   ro   zOlmoeForCausalLM.forwardü   s   ø€ ô0 ‰w‰Ñ. Ñ.Ð.r,   )r-   r.   r/   Ú_tied_weights_keysr&   ro   r0   r1   s   @r+   rÉ   rÉ   ô   s   ø„ Ø*Ð,GÐHÐô.÷
/ð /r,   rÉ   )rÉ   rª   rŽ   )=Ú__doc__Úcollections.abcr   rq   r   Ú r   r˜   Úcache_utilsr   r   Ú
generationr	   Úmasking_utilsr
   Úmodeling_outputsr   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   Úutils.output_capturingr   Úgemma.modeling_gemmar   Úllama.modeling_llamar   r   r   r   r   r   Úmixtral.modeling_mixtralr   r   r   Úqwen2_moe.modeling_qwen2_moer   Úconfiguration_olmoer    Ú
get_loggerr-   Úloggerr"   r3   r8   r:   ru   rw   ÚModulery   r‡   rŽ   rª   rÉ   Ú__all__r5   r,   r+   ú<module>rã      s  ðñ å $ã Ý å &ß .Ý )Ý /Ý 6ß FÝ &ß @Ñ @Ý 4Ý +÷÷ ÷ XÑ WÝ =Ý ,ð 
ˆ×	Ñ	˜HÓ	%€ô+�<ô +ô
	Ð/ô 	ô	ˆxô 	ô7)�^ô 7)ôt	�>ô 	ô	Ð(ô 	ô#˜"Ÿ)™)ô #ô bÐ)ô bð ôU˜?ó Uó ðUð4 ô?
�ó ?
ó ð?
ôD /Ð)¨?ô  /òF E�r,   