§
    ‚Štjy}  ã                   óÔ  — d dl mZ d dlmZ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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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'm(Z( ddl)m*Z* ddl+m,Z,  G d„ dej-        ¦  «        Z.d„ Z/ ed¦  «        dBd„¦   «         Z0dej1        de2dej1        fd„Z3	 dCd ej-        d!ej1        d"ej1        d#ej1        d$ej1        dz  d%e4d&e4d'e!e#         fd(„Z5 G d)„ d*ej-        ¦  «        Z6 G d+„ d,ej-        ¦  «        Z7 G d-„ d.ej-        ¦  «        Z8 G d/„ d0ej-        ¦  «        Z9 G d1„ d2ej-        ¦  «        Z: G d3„ d4ej-        ¦  «        Z; G d5„ d6e¦  «        Z< G d7„ d8e¦  «        Z=e$ G d9„ d:e=¦  «        ¦   «         Z>	 	 	 dDd<ej1        e?ej1                 z  dz  d=e2dz  d$ej1        dz  dej1        e2z  fd>„Z@ G d?„ d@e=e¦  «        ZAg dA¢ZBdS )Eé    )ÚCallable)ÚAnyÚOptionalN)Únné   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úuse_kernel_func_from_hub)Úcreate_causal_mask)ÚGradientCheckpointingLayer)ÚMoeCausalLMOutputWithPastÚMoeModelOutputWithPast)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tuple)Úmaybe_autocastÚmerge_with_config_defaults)Úcapture_outputsé   )Ú
DbrxConfigc                   óÔ   ‡ — e Zd ZU ej        ed<   ddefˆ fd„Ze	 	 	 ddedz  de	d         de
dz  ded	ef         fd
„¦   «         Z ej        ¦   «         ed„ ¦   «         ¦   «         Zˆ xZS )ÚDbrxRotaryEmbeddingÚinv_freqNÚconfigc                 ó²  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        || _        | j        j        d         | _        | j        }| j        dk    rt          | j                 } || j        |¦  «        \  }| _
        |                      d|d¬¦  «         |                      d|                     ¦   «         d¬¦  «         d S )NÚ	rope_typeÚdefaultr!   F)Ú
persistentÚoriginal_inv_freq)ÚsuperÚ__init__Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenr"   Úrope_parametersr$   Úcompute_default_rope_parametersr   Úattention_scalingÚregister_bufferÚclone)Úselfr"   ÚdeviceÚrope_init_fnr!   Ú	__class__s        €úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/dbrx/modeling_dbrx.pyr)   zDbrxRotaryEmbedding.__init__/   sÊ   ø€ Ý‰Œ×ÒÑÔÐØ"(Ô"@ˆÔØ$*Ô$BˆÔ!àˆŒàœÔ4°[ÔAˆŒØ!%Ô!EˆØŒ>˜YÒ&Ð&Ý.¨t¬~Ô>ˆLØ+7¨<¸¼ÀVÑ+LÔ+LÑ(ˆ�$Ô(à×Ò˜Z¨¸eÐÑDÔDÐDØ×ÒÐ0°(·.².Ñ2BÔ2BÈuÐÑUÔUÐUÐUÐUó    r3   ztorch.deviceÚseq_lenÚreturnztorch.Tensorc                 óü   — | j         d         }t          | dd¦  «        p| j        | j        z  }d}d|t	          j        d|dt          j        ¬¦  «                             |t          j        ¬¦  «        |z  z  z  }||fS )	a¨  
        Computes the inverse frequencies according to the original RoPE implementation
        Args:
            config ([`~transformers.PreTrainedConfig`]):
                The model configuration.
            device (`torch.device`):
                The device to use for initialization of the inverse frequencies.
            seq_len (`int`, *optional*):
                The current sequence length. Unused for this type of RoPE.
        Returns:
            Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
            post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
        Ú
rope_thetaÚhead_dimNç      ð?r   é   ©Údtype)r3   r@   )	r-   ÚgetattrÚhidden_sizeÚnum_attention_headsÚtorchÚarangeÚint64ÚtoÚfloat)r"   r3   r8   ÚbaseÚdimÚattention_factorr!   s          r6   r.   z3DbrxRotaryEmbedding.compute_default_rope_parameters?   sŒ   € ð& Ô% lÔ3ˆÝ�f˜j¨$Ñ/Ô/Ðc°6Ô3EÈÔIcÑ3cˆàÐð Ø•U”\ ! S¨!µ5´;Ð?Ñ?Ô?×BÒBÈ&ÕX]ÔXcÐBÑdÔdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r7   c                 óN  — | j         d d d …d f                              ¦   «                              |j        d         dd¦  «                             |j        ¦  «        }|d d …d d d …f                              ¦   «         }t          |j        j        t          ¦  «        r|j        j        dk    r|j        j        nd}t          |d¬¦  «        5  |                     ¦   «         |                     ¦   «         z   
                    dd¦  «        }t          j        ||fd¬	¦  «        }|                     ¦   «         | j        z  }|                     ¦   «         | j        z  }	d d d ¦  «         n# 1 swxY w Y   |                     |j        ¬
¦  «        |	                     |j        ¬
¦  «        fS )Nr   éÿÿÿÿr   ÚmpsÚcpuF)Údevice_typeÚenabledr>   ©rJ   r?   )r!   rH   ÚexpandÚshaperG   r3   Ú
isinstanceÚtypeÚstrr   Ú	transposerD   ÚcatÚcosr/   Úsinr@   )
r2   ÚxÚposition_idsÚinv_freq_expandedÚposition_ids_expandedrP   ÚfreqsÚembrZ   r[   s
             r6   ÚforwardzDbrxRotaryEmbedding.forward]   s·  € ð !œM¨$°°°°4¨-Ô8×>Ò>Ñ@Ô@×GÒGÈÔHZÐ[\ÔH]Ð_aÐcdÑeÔe×hÒhÐijÔiqÑrÔrÐØ ,¨Q¨Q¨Q°°a°a°a¨ZÔ 8× >Ò >Ñ @Ô @Ðå'1°!´(´-ÅÑ'EÔ'EÐkÈ!Ì(Ì-Ð[`ÒJ`ÐJ`�a”h”m�mÐfkˆÝ¨¸UÐCÑCÔCð 	5ð 	5Ø&×,Ò,Ñ.Ô.Ð1F×1LÒ1LÑ1NÔ1NÑN×YÒYÐZ[Ð]^Ñ_Ô_ˆEÝ”)˜U E˜N°Ð3Ñ3Ô3ˆCØ—'’'‘)”)˜dÔ4Ñ4ˆCØ—'’'‘)”)˜dÔ4Ñ4ˆCð		5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð �vŠv˜AœGˆvÑ$Ô$ c§f¢f°1´7 fÑ&;Ô&;Ð;Ð;s   ÃBE&Å&E*Å-E*©N©NNN)Ú__name__Ú
__module__Ú__qualname__rD   ÚTensorÚ__annotations__r   r)   Ústaticmethodr   ÚintÚtuplerH   r.   Úno_gradr   rb   Ú__classcell__©r5   s   @r6   r    r    ,   sù   ø€ € € € € € ØŒlÐÐÑðVð V˜zð Vð Vð Vð Vð Vð Vð  à$(Ø+/Ø"ð*ð *Ø˜TÑ!ð*à˜Ô(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ô	%ð	*ð *ð *ñ „\ð*ð: €U„]�_„_Øð<ð <ñ Ôñ „_ð<ð <ð <ð <ð <r7   r    c                 óœ   — | dd| j         d         dz  …f         }| d| j         d         dz  d…f         }t          j        | |fd¬¦  «        S )z*Rotates half the hidden dims of the input..NrM   r>   rR   )rT   rD   rY   )r\   Úx1Úx2s      r6   Úrotate_halfrs   m   s]   € à	
ˆ3Ð"�!”'˜"”+ Ñ"Ð"Ð"Ô	#€BØ	
ˆ3�”˜”˜qÑ Ð"Ð"Ð"Ô	#€BÝŒ9�r�c˜2�Y BÐ'Ñ'Ô'Ð'r7   Úrotary_pos_embc                 ó¾   — |                      |¦  «        }|                      |¦  «        }| |z  t          | ¦  «        |z  z   }||z  t          |¦  «        |z  z   }||fS )a…  Applies Rotary Position Embedding to the query and key tensors.

    Args:
        q (`torch.Tensor`): The query tensor.
        k (`torch.Tensor`): The key tensor.
        cos (`torch.Tensor`): The cosine part of the rotary embedding.
        sin (`torch.Tensor`): The sine part of the rotary embedding.
        unsqueeze_dim (`int`, *optional*, defaults to 1):
            The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and
            sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note
            that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and
            k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes
            cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have
            the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.
    Returns:
        `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
    )Ú	unsqueezers   )ÚqÚkrZ   r[   Úunsqueeze_dimÚq_embedÚk_embeds          r6   Úapply_rotary_pos_embr|   t   sc   € ð& �-Š-˜Ñ
&Ô
&€CØ
�-Š-˜Ñ
&Ô
&€CØ�3‰w�; q™>œ>¨CÑ/Ñ0€GØ�3‰w�; q™>œ>¨CÑ/Ñ0€GØ�GÐÐr7   Úhidden_statesÚn_repr9   c                 ó¸   — | j         \  }}}}|dk    r| S | dd…dd…ddd…dd…f                              |||||¦  «        } |                      |||z  ||¦  «        S )zÔ
    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
    r   N)rT   rS   Úreshape)r}   r~   ÚbatchÚnum_key_value_headsÚslenr<   s         r6   Ú	repeat_kvr„   Ž   s„   € ð
 2?Ô1DÑ.€EÐ  hØ�‚z€zØÐØ! ! ! ! Q Q Q¨¨a¨a¨a°°°Ð"2Ô3×:Ò:¸5ÐBUÐW\Ð^bÐdlÑmÔm€MØ× Ò  Ð(;¸eÑ(CÀTÈ8ÑTÔTÐTr7   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó  — t          || j        ¦  «        }t          || j        ¦  «        }	t          j        ||                     dd¦  «        ¦  «        |z  }
|�|
|z   }
t
          j                             |
dt          j        ¬¦  «         	                    |j
        ¦  «        }
t
          j                             |
|| j        ¬¦  «        }
t          j        |
|	¦  «        }|                     dd¦  «                             ¦   «         }||
fS )Nr>   r   rM   ©rJ   r@   ©ÚpÚtrainingr   )r„   Únum_key_value_groupsrD   ÚmatmulrX   r   Ú
functionalÚsoftmaxÚfloat32rG   r@   rŒ   r’   Ú
contiguous)r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r6   Úeager_attention_forwardr�   š   sé   € õ ˜3 Ô ;Ñ<Ô<€JÝ˜U FÔ$?Ñ@Ô@€Lå”<  z×';Ò';¸A¸qÑ'AÔ'AÑBÔBÀWÑL€LØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€LÝ”,˜|¨\Ñ:Ô:€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r7   c                   óª   ‡ — e Zd ZdZ	 d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        f         f
d
„Zˆ xZS )ÚDbrxAttentionzYModular DBRX attention component that can be reused across different model architectures.NÚ	layer_idxc                 óT  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        | j        | j        z  | _        |j        | _	        || _
        |j        }|j        | _        |j        | _        |j        | _        | j        | j        z  | _        | j        dz  | _        |j        | _        d| _        t+          j        | j        | j        d| j        z  | j        z  z   d¬¦  «        | _        t+          j        | j        | j        d¬¦  «        | _        d S )Ng      à¿Tr>   F©Úbias)r(   r)   r"   Úd_modelrB   Ún_headsÚ	num_headsr<   Úmax_seq_lenr*   r    Úattn_configÚ
attn_pdropÚattention_dropoutÚclip_qkvÚ
kv_n_headsr‚   r“   r‹   r;   Ú	is_causalr   ÚLinearÚWqkvÚout_proj)r2   r"   r    r�   r¨   r5   s        €r6   r)   zDbrxAttention.__init__¶   s  ø€ õ 	‰Œ×ÒÑÔÐØˆŒØ!œ>ˆÔØœˆŒØÔ(¨D¬NÑ:ˆŒØ'-Ô'9ˆÔ$Ø"ˆŒàÔ(ˆØ!,Ô!7ˆÔØ#Ô,ˆŒØ#.Ô#9ˆÔ Ø$(¤N°dÔ6NÑ$NˆÔ!Ø”} dÑ*ˆŒØ%Ô0ˆŒØˆŒå”IØÔ˜dÔ.°°TÔ5MÑ1MÐPTÔP]Ñ1]Ñ]Ðdið
ñ 
ô 
ˆŒ	õ œ	 $Ô"2°DÔ4DÈ5ÐQÑQÔQˆŒˆˆr7   r}   rŠ   Úposition_embeddingsÚpast_key_valuesr9   c                 ó®  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «        }| j        �| j         nd }	|                     |	| j        ¬¦  «        }|                     | j        | j        | j        z  | j        | j        z  gd¬¦  «        \  }
}}|
                     |¦  «         	                    dd¦  «        }
|                     |¦  «         	                    dd¦  «        }|                     |¦  «         	                    dd¦  «        }|\  }}t          |
|||¦  «        \  }
}|�|                     ||| j        ¦  «        \  }}t          j        | j        j        t"          ¦  «        } || |
|||f| j        sdn| j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )NrM   )ÚminÚmaxr>   rR   r   r…   )rŒ   r‹   )rT   r<   r¯   r«   ÚclampÚsplitrB   r‚   ÚviewrX   r|   Úupdater    r   Úget_interfacer"   Ú_attn_implementationr�   r’   rª   r‹   r€   r˜   r°   )r2   r}   rŠ   r±   r²   r�   Úinput_shapeÚhidden_shapeÚ
qkv_statesÚmin_valÚquery_statesr™   rš   rZ   r[   Úattention_interfacerœ   r›   s                     r6   rb   zDbrxAttention.forwardÒ   s$  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà—Y’Y˜}Ñ-Ô-ˆ
Ø$(¤MÐ$=�4”=�.�.À4ˆØ×%Ò%¨'°t´}Ð%ÑEÔEˆ
à1;×1AÒ1AàÔ ØÔ(¨4¬=Ñ8ØÔ(¨4¬=Ñ8ðð
 ð 2Bñ 2
ô 2
Ñ.ˆ�j ,ð $×(Ò(¨Ñ6Ô6×@Ò@ÀÀAÑFÔFˆØ—_’_ \Ñ2Ô2×<Ò<¸QÀÑBÔBˆ
Ø#×(Ò(¨Ñ6Ô6×@Ò@ÀÀAÑFÔFˆà&‰ˆˆSÝ#7¸ÀjÐRUÐWZÑ#[Ô#[Ñ ˆ�jàÐ&Ø'6×'=Ò'=¸jÈ,ÐX\ÔXfÑ'gÔ'gÑ$ˆJ˜å(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—m’m KÑ0Ô0ˆØ˜LÐ(Ð(r7   rc   rd   )re   rf   rg   Ú__doc__rk   r)   rD   rh   Ú
LongTensorr
   rl   rb   rn   ro   s   @r6   rŸ   rŸ   ³   sÚ   ø€ € € € € ØcÐcð
 !%ðRð Rð ˜‘:ðRð Rð Rð Rð Rð Rð> /3Ø7;Ø(,ð3)ð 3)à”|ð3)ð œ tÑ+ð3)ð #Ô-°Ñ4ð	3)ð
  ™ð3)ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð3)ð 3)ð 3)ð 3)ð 3)ð 3)ð 3)ð 3)r7   rŸ   c            
       ól   ‡ — e Zd Zˆ fd„Zdej        dej        dej        dej        dej        f
d„Zˆ xZS )ÚDbrxExpertGLUc                 ó^  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | _        t          j        t          j        | j        | j        z  | j        ¦  «        ¦  «        | _	        t          j        t          j        | j        | j        z  | j        ¦  «        ¦  «        | _
        t          j        t          j        | j        | j        z  | j        ¦  «        ¦  «        | _        |j                             dd¦  «        }t          |         | _        d S )NÚnameÚsilu)r(   r)   rB   Úffn_hidden_sizeÚmoe_num_expertsr   Ú	ParameterrD   ÚemptyÚw1Úv1Úw2Ú
ffn_act_fnÚgetr	   Úactivation_fn)r2   r"   Úact_fn_namer5   s      €r6   r)   zDbrxExpertGLU.__init__	  sé   ø€ Ý‰Œ×ÒÑÔÐØ!Ô-ˆÔØ%Ô5ˆÔØ%Ô5ˆÔå”,�uœ{¨4Ô+?À$ÔBVÑ+VÐX\ÔXhÑiÔiÑjÔjˆŒÝ”,�uœ{¨4Ô+?À$ÔBVÑ+VÐX\ÔXhÑiÔiÑjÔjˆŒÝ”,�uœ{¨4Ô+?À$ÔBVÑ+VÐX\ÔXhÑiÔiÑjÔjˆŒàÔ'×+Ò+¨F°FÑ;Ô;ˆÝ# KÔ0ˆÔÐÐr7   r\   Ú	expert_w1Ú	expert_v1Ú	expert_w2r9   c                 óÜ   — |                      |¦  «        }|                      |¦  «        }|                      |¦  «        }||z  }|                      |                     ¦   «         ¦  «        }|S rc   )r”   rÒ   Út)	r2   r\   rÔ   rÕ   rÖ   Ú	gate_projÚup_projÚintermediate_statesÚ	down_projs	            r6   rb   zDbrxExpertGLU.forward  se   € ð —H’H˜YÑ'Ô'ˆ	Ø—(’(˜9Ñ%Ô%ˆØ×&Ò& yÑ1Ô1ˆ	Ø'¨'Ñ1ÐØ'×.Ò.¨y¯{ª{©}¬}Ñ=Ô=ˆ	ØÐr7   ©re   rf   rg   r)   rD   rh   rb   rn   ro   s   @r6   rÅ   rÅ     s   ø€ € € € € ð1ð 1ð 1ð 1ð 1ðØ”ðØ*/¬,ðØCHÄ<ðØ\aÔ\hðà	Œðð ð ð ð ð ð ð r7   rÅ   c                   ó^   ‡ — e Zd Zˆ fd„Zdej        dej        dej        dej        fd„Zˆ xZS )ÚDbrxExpertsc                 ó¸   •— t          ¦   «                              ¦   «          t          |¦  «        | _        |j        | _        |j        | _        |j        | _        d S rc   )r(   r)   rÅ   ÚmlprB   rÉ   rÊ   Únum_experts©r2   r"   r5   s     €r6   r)   zDbrxExperts.__init__"  sO   ø€ Ý‰Œ×ÒÑÔÐÝ  Ñ(Ô(ˆŒØ!Ô-ˆÔØ%Ô5ˆÔØ!Ô1ˆÔÐÐr7   r}   Útop_k_indexÚtop_k_weightsr9   c                 ó‚  — |j         d         }|                     d| j        ¦  «        }t          j        ||j        |j        ¬¦  «        }t          j        ¦   «         5  t          j        j	         
                    || j        ¬¦  «        }|                     ddd¦  «        }t          j        |                     d¬¦  «        d¦  «                             ¦   «         }d d d ¦  «         n# 1 swxY w Y   d| j        | j        f}|D �]}	|	d         }	t          j        ¦   «         5  t          j        ||	         ¦  «        \  }
}d d d ¦  «         n# 1 swxY w Y   | j        j                             |¦  «        |	         }| j        j                             |¦  «        |	         }| j        j                             |¦  «        |	         }|                      ||         |||¦  «        }|                     d| j        ¦  «        |||
d f         z  }|                     d||¦  «         �Œ |                     |d| j        ¦  «        }|S )	Nr   rM   )r@   r3   )Únum_classesr>   r   )rM   éþÿÿÿrR   )rT   r€   rÉ   rD   Ú
zeros_liker@   r3   rm   r   r•   Úone_hotrâ   ÚpermuteÚgreaterÚsumÚnonzerorB   Úwhererá   rÎ   r¸   rÍ   rÏ   Ú
index_add_)r2   r}   rä   rå   Ú
batch_sizeÚnext_statesÚexpert_maskÚ
expert_hitÚsplit_expert_shapeÚ
expert_idxÚidxÚ	token_idxrÎ   rÍ   rÏ   Ústatess                   r6   rb   zDbrxExperts.forward)  s©  € ð #Ô(¨Ô+ˆ
Ø%×-Ò-¨b°$Ô2FÑGÔGˆåÔ& }¸MÔ<OÐXeÔXlÐmÑmÔmˆÝŒ]‰_Œ_ð 	Sð 	SÝœ(Ô-×5Ò5°kÈtÔO_Ð5Ñ`Ô`ˆKØ%×-Ò-¨a°°AÑ6Ô6ˆKÝœ {§¢¸8 Ñ'DÔ'DÀaÑHÔH×PÒPÑRÔRˆJð	Sð 	Sð 	Sñ 	Sô 	Sð 	Sð 	Sð 	Sð 	Sð 	Sð 	Søøøð 	Sð 	Sð 	Sð 	Sð
 ! $Ô"6¸Ô8HÐIÐØ$ð 		9ñ 		9ˆJØ# AœˆJÝ”‘”ð Fð FÝ!&¤¨[¸Ô-DÑ!EÔ!E‘��YðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Fà””×!Ò!Ð"4Ñ5Ô5°jÔAˆBØ””×!Ò!Ð"4Ñ5Ô5°jÔAˆBØ””×!Ò!Ð"4Ñ5Ô5°jÔAˆBØ—X’X˜m¨IÔ6¸¸BÀÑCÔCˆFØ—[’[  TÔ%9Ñ:Ô:¸]È9ÐVYÐ[_ÐK_Ô=`Ñ`ˆFØ×"Ò" 1 i°Ñ8Ô8Ð8Ñ8à!×&Ò& z°2°tÔ7KÑLÔLˆØÐs%   ÁA>C'Ã'C+Ã.C+Ä!EÅE	ÅE	rÝ   ro   s   @r6   rß   rß   !  sz   ø€ € € € € ð2ð 2ð 2ð 2ð 2ðà”|ðð ”\ðð ”|ð	ð
 
Œðð ð ð ð ð ð ð r7   rß   c                   óh   ‡ — e Zd Zˆ fd„Zdej        deej        ej        ej        f         fd„Zˆ xZ	S )Ú
DbrxRouterc                 óÄ   •— t          ¦   «                              ¦   «          |j        | _        |j        | _        t          j        | j        |j        d¬¦  «        | _        d S ©NFr¢   )	r(   r)   rÉ   rB   Úmoe_jitter_epsr   r®   rÊ   Úlayerrã   s     €r6   r)   zDbrxRouter.__init__I  sQ   ø€ Ý‰Œ×ÒÑÔÐØ!Ô1ˆÔØ$Ô3ˆÔÝ”Y˜tÔ/°Ô1GÈeÐTÑTÔTˆŒ
ˆ
ˆ
r7   r}   r9   c                 ó  — | j         rB| j        �;|t          j        |¦  «                             d| j        z
  d| j        z   ¦  «        z  }|                     d|j        d         ¦  «        }|                      |¦  «        }|S )Nr=   rM   )r’   rþ   rD   Ú
empty_likeÚuniform_r¸   rT   rÿ   )r2   r}   Úrouter_logitss      r6   rb   zDbrxRouter.forwardO  s†   € ØŒ=ð 	˜TÔ0Ð<Ø�UÔ-¨mÑ<Ô<×EÒEØ�dÔ)Ñ)¨3°Ô1DÑ+Dñô ñ ˆMð &×*Ò*¨2¨}Ô/BÀ2Ô/FÑGÔGˆØŸ
š
 =Ñ1Ô1ˆØÐr7   )
re   rf   rg   r)   rD   rh   rl   rÃ   rb   rn   ro   s   @r6   rû   rû   H  su   ø€ € € € € ðUð Uð Uð Uð Uð U¤\ð °e¸E¼LÈ%Ì,ÐX]ÔXhÐ<hÔ6ið ð ð ð ð ð ð ð r7   rû   c                   óf   ‡ — e Zd ZdZˆ fd„Zd„ Zdej        deej        ej        f         fd„Z	ˆ xZ
S )ÚDbrxFFNz0Modular DBRX MLP/FFN component with MoE support.c                 óð   •— t          ¦   «                              ¦   «          t          |j        ¦  «        | _        t          |j        ¦  «        | _        |j        j        | _        |j        j        | _	        d S rc   )
r(   r)   rû   Ú
ffn_configÚrouterrß   ÚexpertsÚmoe_normalize_expert_weightsÚ	moe_top_kÚtop_k)r2   r"   r�   r5   s      €r6   r)   zDbrxFFN.__init__\  s\   ø€ Ý‰Œ×ÒÑÔÐÝ  Ô!2Ñ3Ô3ˆŒÝ" 6Ô#4Ñ5Ô5ˆŒà,2Ô,=Ô,ZˆÔ)ØÔ&Ô0ˆŒ
ˆ
ˆ
r7   c                 óî   — t           j        j                             |d|j        ¬¦  «        }t          j        || j        d¬¦  «        \  }}| j        � |t          j        || j        dd¬¦  «        z  }||fS )Nr   r�   rM   rR   T)r‘   rJ   Úkeepdim)	rD   r   r•   r–   r@   Útopkr  r
  Únorm)r2   r  Úrouter_top_valueÚrouter_indicess       r6   Úroute_tokens_to_expertszDbrxFFN.route_tokens_to_expertsd  s…   € ÝœÔ+×3Ò3°MÀqÐP]ÔPcÐ3ÑdÔdˆÝ+0¬:°mÀTÄZÐUWÐ+XÑ+XÔ+XÑ(Ð˜.ØÔ,Ð8Ø/µ%´*Ø  DÔ$EÈ2ÐW[ð3ñ 3ô 3ñ  Ðð   Ð/Ð/r7   r}   r9   c                 óŽ   — |                       |¦  «        }|                      |¦  «        \  }}|                      |||¦  «        }|S rc   )r  r  r	  )r2   r}   r  rå   rä   Úoutputs         r6   rb   zDbrxFFN.forwardm  sE   € ØŸš MÑ2Ô2ˆØ%)×%AÒ%AÀ-Ñ%PÔ%PÑ"ˆ�{Ø—’˜m¨[¸-ÑHÔHˆØˆr7   )re   rf   rg   rÂ   r)   r  rD   rh   rl   rb   rn   ro   s   @r6   r  r  Y  s   ø€ € € € € Ø:Ð:ð1ð 1ð 1ð 1ð 1ð0ð 0ð 0ð U¤\ð °e¸E¼LÈ%Ì,Ð<VÔ6Wð ð ð ð ð ð ð ð r7   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ej        dz  de	dz  d	e
d
eej        ej        f         fd„Zˆ xZS )ÚDbrxNormAttentionNormNr"   r    c                 ó  •— t          ¦   «                              ¦   «          || _        |j        | _        t	          j        |j        d¬¦  «        | _        t          ||¬¦  «        | _	        t	          j        |j        d¬¦  «        | _
        d S )NFr¢   ©r"   r    )r(   r)   r    Úresid_pdropr   Ú	LayerNormr¤   Únorm_1rŸ   ÚattnÚnorm_2©r2   r"   r    r5   s      €r6   r)   zDbrxNormAttentionNorm.__init__u  s}   ø€ Ý‰Œ×ÒÑÔÐØ"ˆŒØ!Ô-ˆÔÝ”l 6¤>¸Ð>Ñ>Ô>ˆŒÝ!ØØð
ñ 
ô 
ˆŒ	õ ”l 6¤>¸Ð>Ñ>Ô>ˆŒˆˆr7   r}   r±   rŠ   r²   r�   r9   c                 óR  — |}|                       |¦  «                             |j        ¦  «        } | j        d||||dœ|¤Ž\  }}t          j                             || j        | j        ¬¦  «        }||z   }|}|  	                    |¦  «                             |j        ¦  «        }||fS ©N)r}   rŠ   r±   r²   r�   © )
r  rG   r@   r  r   r•   rŒ   r  r’   r  )r2   r}   r±   rŠ   r²   r�   Úresidual_statesÚ_s           r6   rb   zDbrxNormAttentionNorm.forward€  sÄ   € ð (ˆØŸš MÑ2Ô2×5Ò5°mÔ6IÑJÔJˆà$˜4œ9ð 
Ø'Ø)Ø 3Ø+ð	
ð 
ð
 ð
ð 
Ñˆ�qõ œ×-Ò-¨m¸tÔ?OÐZ^ÔZgÐ-ÑhÔhˆØ%¨Ñ7ˆà'ˆØŸš MÑ2Ô2×5Ò5°mÔ6IÑJÔJˆà Ð-Ð-r7   rc   )NN)re   rf   rg   r   rk   r)   rD   rh   rÃ   r
   r   rl   rb   rn   ro   s   @r6   r  r  t  sÍ   ø€ € € € € ð	?ð 	?˜zð 	?°c¸D±jð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð /3Ø(,ð.ð .à”|ð.ð #Ô-ð.ð œ tÑ+ð	.ð
  ™ð.ð ð.ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð.ð .ð .ð .ð .ð .ð .ð .r7   r  c                   ó|   ‡ — e Zd Zdedefˆ fd„Z	 	 	 ddej        dej        dz  dej        dz  de	dz  d	e
f
d
„Zˆ xZS )Ú	DbrxBlockr"   r    c                 óÜ   •— t          ¦   «                              ¦   «          |j        | _        |j        | _        || _        t          ||¬¦  «        | _        t          |¬¦  «        | _	        d S )Nr  ©r"   )
r(   r)   r¤   rB   r  r    r  Únorm_attn_normr  Úffnr  s      €r6   r)   zDbrxBlock.__init__�  sj   ø€ Ý‰Œ×ÒÑÔÐØ!œ>ˆÔØ!Ô-ˆÔØ"ˆŒÝ3ØØð
ñ 
ô 
ˆÔõ  &Ð)Ñ)Ô)ˆŒˆˆr7   Nr}   rŠ   r±   r²   r�   c                 ó¼   —  | j         d||||dœ|¤Ž\  }}|                      |¦  «        }t          j                             || j        | j        ¬¦  «        }||z   }|S r!  )r)  r*  r   r•   rŒ   r  r’   )r2   r}   rŠ   r±   r²   r�   Úresid_statess          r6   rb   zDbrxBlock.forward¨  sƒ   € ð ': dÔ&9ð '
Ø'Ø)Ø 3Ø+ð	'
ð '
ð
 ð'
ð '
Ñ#ˆ�mð Ÿš Ñ/Ô/ˆÝœ×-Ò-¨m¸tÔ?OÐZ^ÔZgÐ-ÑhÔhˆØ$ }Ñ4ˆØÐr7   rd   )re   rf   rg   r   rk   r)   rD   rh   rÃ   r
   r   rb   rn   ro   s   @r6   r&  r&  œ  s´   ø€ € € € € ð	*˜zð 	*°cð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð /3Ø7;Ø(,ðð à”|ðð œ tÑ+ðð #Ô-°Ñ4ð	ð
  ™ðð ðð ð ð ð ð ð ð r7   r&  c                   ó–   ‡ — e Zd ZU eed<   dZdZdgZdgZdZ	dZ
dZdZdZeedœZ ej        ¦   «         dej        fˆ fd	„¦   «         Zˆ xZS )
ÚDbrxPreTrainedModelr"   ÚtransformerTr&  r²   F)r}   Ú
attentionsr†   c                 ó8  •— t          ¦   «                              |¦  «         | j        j        }t	          |t
          ¦  «        rVt          j        |j        d|¬¦  «         t          j        |j	        d|¬¦  «         t          j        |j
        d|¬¦  «         d S d S )Nr…   )ÚmeanÚstd)r(   Ú_init_weightsr"   Úinitializer_rangerU   rÅ   ÚinitÚnormal_rÍ   rÎ   rÏ   )r2   r†   r3  r5   s      €r6   r4  z!DbrxPreTrainedModel._init_weightsÎ  s’   ø€ å‰Œ×Ò˜fÑ%Ô%Ð%ØŒkÔ+ˆÝ�f�mÑ,Ô,ð 	7ÝŒL˜œ¨°#Ð6Ñ6Ô6Ð6ÝŒL˜œ¨°#Ð6Ñ6Ô6Ð6ÝŒL˜œ¨°#Ð6Ñ6Ô6Ð6Ð6Ð6ð	7ð 	7r7   )re   rf   rg   r   ri   Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flex_attnÚ_supports_attention_backendÚ_supports_flash_attnÚ_supports_sdpaÚ_can_compile_fullgraphr&  rŸ   Ú_can_record_outputsrD   rm   r   ÚModuler4  rn   ro   s   @r6   r.  r.  ¾  sµ   ø€ € € € € € ØÐÐÑØ%ÐØ&*Ð#Ø$˜ÐØ#4Ð"5ÐØÐØ"&ÐØÐØ€NØ"Ðà"Ø#ðð Ðð
 €U„]�_„_ð7 B¤Ið 7ð 7ð 7ð 7ð 7ñ „_ð7ð 7ð 7ð 7ð 7r7   r.  c                   ó  ‡ — e Zd ZdZdefˆ fd„Zdej        fd„Zdej        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 )Ú	DbrxModela©  Transformer decoder consisting of *config.num_hidden_layers*. Each layer is a [`DbrxBlock`] layer.

    Args:
        config ([`DbrxConfig`]): Model configuration class with all parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
    r"   c                 óô  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        ‰j        | _        t          ‰¦  «        | _        t          j	        ‰j        ‰j
        | j        ¦  «        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          j        ‰j
        d¬¦  «        | _        d| _        |                      ¦   «          d S )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r"  )r&  )Ú.0r    r"   s     €r6   ú
<listcomp>z&DbrxModel.__init__.<locals>.<listcomp>é  s#   ø€ Ð$jÐ$jÐ$jÀi¥Y¨v°yÑ%AÔ%AÐ$jÐ$jÐ$jr7   Fr¢   )r(   r)   Úpad_token_idÚpadding_idxÚ
vocab_sizeÚ	emb_pdropr    Ú
rotary_embr   Ú	Embeddingr¤   ÚwteÚ
ModuleListÚrangeÚn_layersÚblocksr  Únorm_fÚgradient_checkpointingÚ	post_initrã   s    `€r6   r)   zDbrxModel.__init__â  sÒ   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø!Ô.ˆÔØ Ô+ˆŒØÔ)ˆŒÝ-¨fÑ5Ô5ˆŒÝ”< Ô 1°6´>À4ÔCSÑTÔTˆŒÝ”mÐ$jÐ$jÐ$jÐ$jÕSXÐY_ÔYhÑSiÔSiÐ$jÑ$jÔ$jÑkÔkˆŒÝ”l 6¤>¸Ð>Ñ>Ô>ˆŒØ&+ˆÔ#ð 	�ŠÑÔÐÐÐr7   r9   c                 ó   — | j         S rc   ©rO  ©r2   s    r6   Úget_input_embeddingszDbrxModel.get_input_embeddingsð  s	   € ØŒxˆr7   r‰   c                 ó   — || _         d S rc   rX  ©r2   r‰   s     r6   Úset_input_embeddingszDbrxModel.set_input_embeddingsó  s   € ØˆŒˆˆr7   NÚ	input_idsrŠ   r]   r²   Úinputs_embedsÚ	use_cacher�   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   )r3   )r"   r_  rŠ   r²   r]   )r±   rŠ   r]   r²   r`  )Úlast_hidden_stater²   )Ú
ValueErrorr   r"   rO  Úget_seq_lengthrD   rE   rT   r3   rv   r   rM  rS  Únum_hidden_layersrT  r   )r2   r^  rŠ   r]   r²   r_  r`  r�   Úpast_seen_tokensÚcausal_maskr}   r±   Údecoder_layers                r6   rb   zDbrxModel.forwardö  sˆ  € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàð 	?˜Ð0Ý*°$´+Ð>Ñ>Ô>ˆOàÐ Ø ŸHšH YÑ/Ô/ˆ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ð Ÿš MÑ2Ô2ˆå%Ø+Ø+ð
ñ 
ô 
ð 	
r7   )NNNNNN)re   rf   rg   rÂ   r   r)   r   rN  rZ  r]  r   r   r   rD   rÃ   rh   r
   ÚFloatTensorÚboolr   r   r   rb   rn   ro   s   @r6   rD  rD  Ø  sQ  ø€ € € € € ðð ð˜zð ð ð ð ð ð ð b¤lð ð ð ð ð¨"¬,ð ð ð ð ð  ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ð5
ð 5
àÔ# dÑ*ð5
ð œ tÑ+ð5
ð Ô&¨Ñ-ð	5
ð
  ™ð5
ð Ô(¨4Ñ/ð5
ð ˜$‘;ð5
ð Ð+Ô,ð5
ð 
 ð5
ð 5
ð 5
ñ „^ñ „_ñ  Ôð5
ð 5
ð 5
ð 5
ð 5
r7   rD  r>   Úgate_logitsrâ   c                 óÆ  ‡— | �t          | t          ¦  «        sdS t          | t          ¦  «        r/| d         j        Št          j        ˆfd„| D ¦   «         d¬¦  «        }t          j        j                             |d¬¦  «        }t          j        ||d¬¦  «        \  }}t          j        j         	                    ||¦  «        }|€@t          j
        |                     ¦   «         d¬¦  «        }	t          j
        |d¬¦  «        }
�n.|j        \  }}|j        d         ||z  z  }|ddd…dd…ddf                              |||||f¦  «                             d||¦  «                             ‰¦  «        }t          j        |                     ¦   «         |z  d¬¦  «        t          j        |d¬¦  «        z  }	|ddd…dd…df                              ||||f¦  «                             d|¦  «                             ‰¦  «        }t          j        ||z  d¬¦  «        t          j        |d¬¦  «        z  }
t          j        |	|
                     d¦  «        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 `gate`, should be a tuple of model.config.num_hidden_layers tensors of
            shape [batch_size X sequence_length, num_experts].
        num_experts:
            Number of experts
        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   c                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS r"  )rG   )rG  Ú
layer_gateÚcompute_devices     €r6   rH  z,load_balancing_loss_func.<locals>.<listcomp>S  s&   ø€ Ð-jÐ-jÐ-jÐPZ¨j¯mªm¸NÑ.KÔ.KÐ-jÐ-jÐ-jr7   rR   rM   )rU   rl   r3   rD   rY   r   r•   r–   r  rê   r2  rH   rT   rS   r€   rG   rí   rv   )rk  râ   r  rŠ   Úconcatenated_gate_logitsÚrouting_weightsr$  Úselected_expertsró   Útokens_per_expertÚrouter_prob_per_expertrñ   Úsequence_lengthre  Úexpert_attention_maskÚ router_per_expert_attention_maskÚoverall_lossro  s                    @r6   Úload_balancing_loss_funcry  1  s�  ø€ ð: Ð¥*¨[½%Ñ"@Ô"@ÐØˆqå�+�uÑ%Ô%ð sØ$ QœÔ.ˆÝ#(¤9Ð-jÐ-jÐ-jÐ-jÐ^iÐ-jÑ-jÔ-jÐpqÐ#rÑ#rÔ#rÐ å”hÔ)×1Ò1Ð2JÐPRÐ1ÑSÔS€Oåœ* _°eÀÐDÑDÔDÑ€AÐå”(Ô%×-Ò-Ð.>ÀÑLÔL€KàÐå!œJ {×'8Ò'8Ñ':Ô':ÀÐBÑBÔBÐõ "'¤¨OÀÐ!CÑ!CÔ!CÐÑà&4Ô&:Ñ#ˆ
�OØ4Ô:¸1Ô=À*ÈÑB^Ñ_Ðð ˜4    A A A t¨TÐ1Ô2ßŠVÐ&¨
°OÀUÈKÐXÑYÔYßŠW�R˜ Ñ,Ô,ßŠR�ÑÔð	 	õ "œI k×&7Ò&7Ñ&9Ô&9Ð<QÑ&QÐWXÐYÑYÔYÕ\aÔ\eØ! qð]
ñ ]
ô ]
ñ 
Ðð ˜4    A A A tÐ+Ô,ßŠVÐ&¨
°OÀ[ÐQÑRÔRßŠW�R˜Ñ%Ô%ßŠR�ÑÔð	 	)õ "'¤¨?Ð=]Ñ+]ÐcdÐ!eÑ!eÔ!eÕhmÔhqØ,°!ði
ñ i
ô i
ñ "
Ðõ ”9Ð.Ð1G×1QÒ1QÐRSÑ1TÔ1TÑTÑUÔU€LØ˜+Ñ%Ð%r7   c                   óš  ‡ — e Zd ZddiZddiZddgdgfiZdefˆ fd„Zd	ej	        fd
„Z
dej	        fd„Zd	ej        fd„Zdej        fd„Zdefd„Zd	e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dz  deej        z  dee         d	efd„¦   «         ¦   «         Zˆ xZS )!ÚDbrxForCausalLMzlm_head.weightztransformer.wte.weightÚlm_headÚcolwise_gather_outputr}   Úlogitsr"   c                 ód  •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        | _        t          j        |j        |j        d¬¦  «        | _        |j	        j
        | _        |j	        j        | _        |j	        j        | _        |                      ¦   «          d S rý   )r(   r)   rD  r/  rK  r   r®   rB   r|  r  Úmoe_loss_weightÚrouter_aux_loss_coefrÊ   râ   r  Únum_experts_per_tokrV  rã   s     €r6   r)   zDbrxForCausalLM.__init__ˆ  s“   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý$ VÑ,Ô,ˆÔØ Ô+ˆŒÝ”y Ô!3°VÔ5FÈUÐSÑSÔSˆŒØ$*Ô$5Ô$EˆÔ!Ø!Ô,Ô<ˆÔØ#)Ô#4Ô#>ˆÔ Ø�ŠÑÔÐÐÐr7   r9   c                 ó4   — | j                              ¦   «         S rc   )r/  rZ  rY  s    r6   rZ  z$DbrxForCausalLM.get_input_embeddings’  s   € ØÔ×4Ò4Ñ6Ô6Ð6r7   r‰   c                 ó:   — | j                              |¦  «         d S rc   )r/  r]  r\  s     r6   r]  z$DbrxForCausalLM.set_input_embeddings•  s   € ØÔ×-Ò-¨eÑ4Ô4Ð4Ð4Ð4r7   c                 ó   — | j         S rc   ©r|  rY  s    r6   Úget_output_embeddingsz%DbrxForCausalLM.get_output_embeddings˜  s
   € ØŒ|Ðr7   Únew_embeddingsc                 ó   — || _         d S rc   r†  )r2   rˆ  s     r6   Úset_output_embeddingsz%DbrxForCausalLM.set_output_embeddings›  s   € Ø%ˆŒˆˆr7   Údecoderc                 ó   — || _         d S rc   ©r/  )r2   r‹  s     r6   Úset_decoderzDbrxForCausalLM.set_decoderž  s   € Ø"ˆÔÐÐr7   c                 ó   — | j         S rc   r�  rY  s    r6   Úget_decoderzDbrxForCausalLM.get_decoder¡  s   € ØÔÐr7   Nr   r^  rŠ   r]   r²   r_  Úlabelsr`  Úoutput_router_logitsÚlogits_to_keepr�   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}|rHt          |j        | j        | j        |¦  «        }|�%|| j        |                     |j        ¦  «        z  z  }t#          ||||j        |j        |j        |j        ¬¦  «        S )a‹  
        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, DbrxForCausalLM

        >> model = DbrxForCausalLM.from_pretrained("transformers-community/dbrx-instruct")
        >> tokenizer = AutoTokenizer.from_pretrained("transformers-community/dbrx-instruct")

        >> 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^  rŠ   r]   r²   r_  r`  r’  )ÚlossÚaux_lossr~  r²   r}   r0  r  r"  )r"   r’  r/  rb  rU   rk   Úslicer|  Úloss_functionrK  ry  r  râ   r‚  r�  rG   r3   r   r²   r}   r0  )r2   r^  rŠ   r]   r²   r_  r‘  r`  r’  r“  r�   Úoutputsr}   Úslice_indicesr~  r•  r–  s                    r6   rb   zDbrxForCausalLM.forward¤  so  € ðN %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Ý/ØÔ%ØÔ ØÔ(Øñ	ô ˆHð Ð!Ø˜Ô1°H·K²KÀÄÑ4LÔ4LÑLÑL�å(ØØØØ#Ô3Ø!Ô/ØÔ)Ø!Ô/ð
ñ 
ô 
ð 	
r7   )	NNNNNNNNr   ) re   rf   rg   Ú_tied_weights_keysÚ_tp_planÚ_pp_planr   r)   r   rN  rZ  r]  r®   r‡  rŠ  rD  rŽ  r�  r   r   rD   rÃ   rh   r
   ri  rj  rk   r   r   r   rb   rn   ro   s   @r6   r{  r{  ƒ  s&  ø€ € € € € Ø*Ð,DÐEÐØÐ2Ð3€HØ˜_Ð-°¨zÐ:Ð;€Hð˜zð ð ð ð ð ð ð7 b¤lð 7ð 7ð 7ð 7ð5¨"¬,ð 5ð 5ð 5ð 5ð r¤yð ð ð ð ð&°B´Ið &ð &ð &ð &ð# 9ð #ð #ð #ð #ð ˜Yð  ð  ð  ð  ð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø,0Ø-.ðP
ð P
àÔ# dÑ*ðP
ð œ tÑ+ðP
ð Ô&¨Ñ-ð	P
ð
  ™ðP
ð Ô(¨4Ñ/ðP
ð Ô  4Ñ'ðP
ð ˜$‘;ðP
ð # T™kðP
ð ˜eœlÑ*ðP
ð Ð+Ô,ðP
ð 
#ðP
ð P
ð P
ñ „^ñ ÔðP
ð P
ð P
ð P
ð P
r7   r{  )r{  rD  r.  )r   )r…   )Nr>   N)CÚcollections.abcr   Útypingr   r   rD   r   Ú r   r6  Úactivationsr	   Úcache_utilsr
   r   Ú
generationr   Úintegrationsr   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_dbrxr   rB  r    rs   r|   rh   rk   r„   rH   r�   rŸ   rÅ   rß   rû   r  r  r&  r.  rD  rl   ry  r{  Ú__all__r"  r7   r6   ú<module>r°     s  ðð* %Ð $Ð $Ð $Ð $Ð $Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø /Ð /Ð /Ð /Ð /Ð /Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø *Ð *Ð *Ð *Ð *Ð *ð><ð ><ð ><ð ><ð ><˜"œ)ñ ><ô ><ð ><ðB(ð (ð (ð ÐÐ*Ñ+Ô+ðð ð ñ ,Ô+ðð2	U˜Uœ\ð 	U°#ð 	U¸%¼,ð 	Uð 	Uð 	Uð 	Uð& ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð2R)ð R)ð R)ð R)ð R)�B”Iñ R)ô R)ð R)ðjð ð ð ð �B”Iñ ô ð ð2$ð $ð $ð $ð $�"”)ñ $ô $ð $ðNð ð ð ð �”ñ ô ð ð"ð ð ð ð ˆbŒiñ ô ð ð6%.ð %.ð %.ð %.ð %.˜BœIñ %.ô %.ð %.ðPð ð ð ð Ð*ñ ô ð ðD7ð 7ð 7ð 7ð 7˜/ñ 7ô 7ð 7ð4 ðU
ð U
ð U
ð U
ð U
Ð#ñ U
ô U
ñ „ðU
ðt #Ø
Ø*.ð	O&ð O&Ø”  e¤lÔ 3Ñ3°dÑ:ðO&à�t‘ðO&ð ”L 4Ñ'ð	O&ð
 „\�CÑðO&ð O&ð O&ð O&ðds
ð s
ð s
ð s
ð s
Ð)¨?ñ s
ô s
ð s
ðl BÐ
AÐ
A€€€r7   