§
    ‚Štjã*  ã                   ó†  — 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j-        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j6        ¦  «        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<dS )-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 )ÚOlmoeRMSNormçñhãˆµøä>c                 óL   •— t          ¦   «                              ||¦  «         d S ©N)ÚsuperÚ__init__)ÚselfÚhidden_sizeÚepsÚ	__class__s      €úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/olmoe/modular_olmoe.pyr'   zOlmoeRMSNorm.__init__.   s#   ø€ Ý‰Œ×Ò˜ cÑ*Ô*Ð*Ð*Ð*ó    )r#   )Ú__name__Ú
__module__Ú__qualname__r'   Ú__classcell__©r+   s   @r,   r"   r"   -   s=   ø€ € € € € ð+ð +ð +ð +ð +ð +ð +ð +ð +ð +r-   r"   c                   ó   — e Zd ZdS )ÚOlmoeRotaryEmbeddingN©r.   r/   r0   © r-   r,   r4   r4   2   ó   € € € € € Ø€Dr-   r4   c                   ó   — e Zd ZdS )ÚOlmoeMLPNr5   r6   r-   r,   r9   r9   6   r7   r-   r9   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        ¬¦  «        | _        d S )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__;   sm   ø€ Ý‰Œ×Ò˜ Ñ+Ô+Ð+Ý" 6Ô#5¸6Ô;NÐOÑOÔOˆŒÝ"ØÔ 6Ô#=Ñ=ÀÔA[Ñ[ÐagÔatð
ñ 
ô 
ˆŒˆˆr-   Úhidden_statesÚposition_embeddingsÚattention_maskÚpast_key_valuesÚkwargsÚreturnc           
      ó‚  — |j         d d…         }g |¢d‘| j        ‘R }|                      |                      |¦  «        ¦  «        }|                      |                      |¦  «        ¦  «        }	|                      |¦  «        }
| j        j        �„| 	                    | j        j         | j        j        ¬¦  «         |	 	                    | j        j         | j        j        ¬¦  «         |
 	                    | j        j         | j        j        ¬¦  «          |j
        |Ž                      dd¦  «        } |	j
        |Ž                      dd¦  «        }	 |
j
        |Ž                      dd¦  «        }
|\  }}t          ||	||¦  «        \  }}	|�|                     |	|
| j        ¦  «        \  }	}
t          j        | j        j        t$          ¦  «        } || ||	|
|f| j        sdn| j        | j        t-          | j        dd ¦  «        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )Néÿÿÿÿ)ÚminÚmaxr   r   ç        Úsliding_window)ÚdropoutÚscalingrQ   )ÚshapeÚhead_dimrA   Úq_projrD   Úk_projÚv_projr<   Úclip_qkvÚclamp_ÚviewÚ	transposer   Úupdater=   r   Úget_interfaceÚ_attn_implementationr   ÚtrainingÚattention_dropoutrS   ÚgetattrÚreshapeÚ
contiguousÚo_proj)r(   rF   rG   rH   rI   rJ   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚcosÚsinÚattention_interfaceÚattn_outputÚattn_weightss                   r,   ÚforwardzOlmoeAttention.forwardB   sf  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà—{’{ 4§;¢;¨}Ñ#=Ô#=Ñ>Ô>ˆØ—[’[ §¢¨]Ñ!;Ô!;Ñ<Ô<ˆ
Ø—{’{ =Ñ1Ô1ˆàŒ;ÔÐ+Ø×Ò T¤[Ô%9Ð$9¸t¼{Ô?SÐÑTÔTÐTØ×Ò 4¤;Ô#7Ð"7¸T¼[Ô=QÐÑRÔRÐRØ×Ò T¤[Ô%9Ð$9¸t¼{Ô?SÐÑTÔTÐTà(�|Ô(¨,Ð7×AÒAÀ!ÀQÑGÔGˆØ$�Z”_ lÐ3×=Ò=¸aÀÑCÔCˆ
Ø(�|Ô(¨,Ð7×AÒAÀ!ÀQÑGÔGˆØ&‰ˆˆSÝ#7¸ÀjÐRUÐWZÑ#[Ô#[Ñ ˆ�jàÐ&Ø'6×'=Ò'=¸jÈ,ÐX\ÔXfÑ'gÔ'gÑ$ˆJ˜å(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð
%
ð  $œ}ÐH�C�C°$Ô2HØ”LÝ" 4¤;Ð0@À$ÑGÔGð
%
ð 
%
ð ð
%
ð 
%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(r-   r%   )r.   r/   r0   r    Úintr'   ÚtorchÚTensorÚtupler   r   r   rp   r1   r2   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dS )ÚOlmoeExpertsNr5   r6   r-   r,   rv   rv   t   r7   r-   rv   c                   ó   — e Zd ZdS )ÚOlmoeTopKRouterNr5   r6   r-   r,   rx   rx   x   r7   r-   rx   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚOlmoeSparseMoeBlockc                 ó˜   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          |¦  «        | _        d S r%   )r&   r'   rx   Úgaterv   Úexperts©r(   r<   r+   s     €r,   r'   zOlmoeSparseMoeBlock.__init__}   s;   ø€ Ý‰Œ×ÒÑÔÐÝ# FÑ+Ô+ˆŒ	Ý# FÑ+Ô+ˆŒˆˆr-   rF   rK   c                 óÒ   — |j         \  }}}|                     d|¦  «        }|                      |¦  «        \  }}}|                      |||¦  «                             |||¦  «        }|S )NrM   )rT   r[   r|   r}   rc   )	r(   rF   Ú
batch_sizeÚsequence_lengthÚ
hidden_dimÚ_Útop_k_weightsÚtop_k_indexÚfinal_hidden_statess	            r,   rp   zOlmoeSparseMoeBlock.forward‚   ss   € Ø2?Ô2EÑ/ˆ
�O ZØ%×*Ò*¨2¨zÑ:Ô:ˆØ(,¯	ª	°-Ñ(@Ô(@Ñ%ˆˆ=˜+Ø"Ÿlšl¨=¸+À}ÑUÔU×]Ò]Ø˜¨ñ
ô 
Ðð #Ð"r-   )r.   r/   r0   r'   rr   rs   rp   r1   r2   s   @r,   rz   rz   |   s^   ø€ € € € € ð,ð ,ð ,ð ,ð ,ð
# U¤\ð #°e´lð #ð #ð #ð #ð #ð #ð #ð #r-   rz   c                   ó(   ‡ — e Zd Zdedefˆ fd„Zˆ xZS )ÚOlmoeDecoderLayerr<   r=   c                 ó8  •— t          ¦   «                              ||¦  «         |j        | _        t          ||¬¦  «        | _        t          |¦  «        | _        t          |j        |j        ¬¦  «        | _	        t          |j        |j        ¬¦  «        | _
        d S )N)r<   r=   r?   )r&   r'   r)   r;   Ú	self_attnrz   Úmlpr"   r@   Úinput_layernormÚpost_attention_layernormrE   s      €r,   r'   zOlmoeDecoderLayer.__init__�   s‡   ø€ Ý‰Œ×Ò˜ Ñ+Ô+Ð+Ø!Ô-ˆÔÝ'¨vÀÐKÑKÔKˆŒÝ& vÑ.Ô.ˆŒÝ+¨FÔ,>ÀFÔDWÐXÑXÔXˆÔÝ(4°VÔ5GÈVÔM`Ð(aÑ(aÔ(aˆÔ%Ð%Ð%r-   )r.   r/   r0   r    rq   r'   r1   r2   s   @r,   rˆ   rˆ   Œ   sW   ø€ € € € € ðb˜{ð b°sð bð bð bð bð bð bð bð bð 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d
S )ÚOlmoePreTrainedModelr<   ÚmodelTrˆ   rI   r   )Úindex)Úrouter_logitsrF   Ú
attentionsc                 ó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 )NrP   )ÚmeanÚstd)r   Ú_init_weightsÚ
isinstancerv   ÚinitÚnormal_Úgate_up_projr<   Úinitializer_rangeÚ	down_projrx   Úweight)r(   Úmodules     r,   r—   z"OlmoePreTrainedModel._init_weights§   s¯   € åÔ% d¨FÑ3Ô3Ð3Ý�f�lÑ+Ô+ð 	UÝŒL˜Ô,°3¸D¼KÔ<YÐZÑZÔZÐZÝŒL˜Ô)°¸¼Ô9VÐWÑWÔWÐWÐWÐWÝ˜¥Ñ0Ô0ð 	UÝŒL˜œ¨S°d´kÔ6SÐTÑTÔTÐTÐTÐTð	Uð 	Ur-   N)r.   r/   r0   r    Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpar   rx   rˆ   r;   Ú_can_record_outputsÚ_supports_attention_backendrr   Úno_gradr—   r6   r-   r,   r�   r�   –   sž   € € € € € € àÐÐÑØÐØ&*Ð#Ø,Ð-ÐØ#4Ð"5ÐØÐØ€Nà'˜¨¸qÐAÑAÔAØ*Ø$ðð Ðð #'Ðà€U„]�_„_ðUð Uñ „_ð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                 óx  •‡— t          ¦   «                              ‰¦  «         t          j        ‰j        ‰j        | j        ¦  «        | _        t          j        ˆfd„t          ‰j
        ¦  «        D ¦   «         ¦  «        | _        t          ‰j        ‰j        ¬¦  «        | _        t          ‰¬¦  «        | _        d S )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r6   )rˆ   )Ú.0r=   r<   s     €r,   ú
<listcomp>z'OlmoeModel.__init__.<locals>.<listcomp>·   s$   ø€ ÐcÐcÐc°iÕ˜v yÑ1Ô1ÐcÐcÐcr-   r?   ©r<   )r&   r'   r   Ú	EmbeddingÚ
vocab_sizer)   Úpadding_idxÚembed_tokensÚ
ModuleListÚrangeÚnum_hidden_layersÚlayersr"   r@   Únormr4   Ú
rotary_embr~   s    `€r,   r'   zOlmoeModel.__init__³   s£   øø€ Ý‰Œ×Ò˜Ñ Ô Ð ÝœL¨Ô):¸FÔ<NÐPTÔP`ÑaÔaˆÔÝ”mØcÐcÐcÐcÅ5ÈÔIaÑCbÔCbÐcÑcÔcñ
ô 
ˆŒõ ! Ô!3¸Ô9LÐMÑMÔMˆŒ	Ý.°fÐ=Ñ=Ô=ˆŒˆˆr-   NÚ	input_idsrH   Úposition_idsrI   Úinputs_embedsÚ	use_cacherJ   rK   c           
      óF  — |d u |d uz  rt          d¦  «        ‚|r|€t          | j        ¬¦  «        }|€|                      |¦  «        }|€V|�|                     ¦   «         nd}t          j        |j        d         |j        ¬¦  «        |z   }| 	                    d¦  «        }t          | j        ||||¬¦  «        }	|}
|                      |
|¦  «        }| j        d | j        j        …         D ]} ||
f||	|||dœ|¤Ž}
Œ|                      |
¦  «        }
t          |
|¬¦  «        S )	Nz:You must specify exactly one of input_ids or inputs_embedsr°   r   r   )Údevice)r<   r½   rH   rI   r¼   )rG   rH   r¼   rI   r¾   )Úlast_hidden_staterI   )Ú
ValueErrorr   r<   r´   Úget_seq_lengthrr   ÚarangerT   rÀ   Ú	unsqueezer
   rº   r¸   r·   r¹   r   )r(   r»   rH   r¼   rI   r½   r¾   rJ   Úpast_seen_tokensÚcausal_maskrF   rG   Údecoder_layers                r,   rp   zOlmoeModel.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å(Ø”;Ø'Ø)Ø+Ø%ð
ñ 
ô 
ˆð &ˆð #Ÿošo¨m¸\ÑJÔJÐà!œ[Ð)H¨4¬;Ô+HÐ)HÔIð 		ð 		ˆMØ)˜MØðà$7Ø*Ø)Ø /Ø#ðð ð ðð ˆMˆMð Ÿ	š	 -Ñ0Ô0ˆå%Ø+Ø+ð
ñ 
ô 
ð 	
r-   )NNNNNN)r.   r/   r0   r    r'   rr   Ú
LongTensorrs   r   ÚFloatTensorÚboolr   r   r   rp   r1   r2   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                   ó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                 óŠ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        | _        d S r%   )r&   r'   r«   r�   Únum_expertsr~   s     €r,   r'   zOlmoeForCausalLM.__init__÷   s;   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý Ñ'Ô'ˆŒ
Ø!Ô-ˆÔÐÐr-   c                 ó6   •—  t          ¦   «         j        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'
        ```
        r6   )r&   rp   )r(   Úsuper_kwargsr+   s     €r,   rp   zOlmoeForCausalLM.forwardü   s!   ø€ ð0 �u‰wŒwŒÐ.Ð. Ð.Ð.Ð.r-   )r.   r/   r0   Ú_tied_weights_keysr'   rp   r1   r2   s   @r,   rÍ   rÍ   ô   s]   ø€ € € € € Ø*Ð,GÐHÐð.ð .ð .ð .ð .ð
/ð /ð /ð /ð /ð /ð /ð /ð /r-   rÍ   )rÍ   r«   r�   )=Ú__doc__Úcollections.abcr   rr   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"   r4   r9   r;   rv   rx   ÚModulerz   rˆ   r�   r«   rÍ   Ú__all__r6   r-   r,   ú<module>rç      sÂ  ðð Ð à $Ð $Ð $Ð $Ð $Ð $à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ø /Ð /Ð /Ð /Ð /Ð /Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø +Ð +Ð +Ð +Ð +Ð +ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð XÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ =Ð =Ð =Ð =Ð =Ð =Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ð 
ˆÔ	˜HÑ	%Ô	%€ð+ð +ð +ð +ð +�<ñ +ô +ð +ð
	ð 	ð 	ð 	ð 	Ð/ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	ˆxñ 	ô 	ð 	ð7)ð 7)ð 7)ð 7)ð 7)�^ñ 7)ô 7)ð 7)ðt	ð 	ð 	ð 	ð 	�>ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð(ñ 	ô 	ð 	ð#ð #ð #ð #ð #˜"œ)ñ #ô #ð #ð bð bð bð bð bÐ)ñ bô bð bð ðUð Uð Uð Uð U˜?ñ Uô Uñ „ðUð4 ð?
ð ?
ð ?
ð ?
ð ?
�ñ ?
ô ?
ñ „ð?
ðD /ð  /ð  /ð  /ð  /Ð)¨?ñ  /ô  /ð  /ðF EÐ
DÐ
D€€€r-   