Ë
    ÜÓ^jb  ã                   ó¢  — d dl Z d dlmZ d dlmZ d dlZd dlmc mZ	 d dlmZ ddl
mZ ddlmZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZmZ ddlmZ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-m.Z. ddl/m0Z0 ddl1m2Z2  G d„ dejf                  «      Z4 ed«       G d„ dejj                  «      «       Z6 G d„ dejj                  «      Z7 G d„ dejj                  «      Z8dejr                  d e:d!ejr                  fd"„Z;	 d<d#ejj                  d$ejr                  d%ejr                  d&ejr                  d'ejr                  dz  d(e<d)e<d*e&e(   fd+„Z=d,„ Z> ed-«      d=d.„«       Z? G d/„ d0ejj                  «      Z@ G d1„ d2e«      ZAe) G d3„ d4e$«      «       ZBe) G d5„ d6eB«      «       ZCe) G d7„ d8eBe«      «       ZD G d9„ d:eeB«      ZEg d;¢ZFy)>é    N)ÚCallable)ÚOptional)Únné   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úuse_kernel_forward_from_hubÚuse_kernel_func_from_hub)Úcreate_causal_mask)Ú GenericForSequenceClassificationÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tuple)Úis_flash_attention_requestedÚmaybe_autocastÚmerge_with_config_defaults)Úcapture_outputsé   )ÚMiniCPM3Configc            	       óZ   ‡ — e Zd ZdZd	dedededefˆ fd„Zdej                  fˆ fd„Z	ˆ xZ
S )
ÚMiniCPM3ScaledWordEmbeddingz\
    This module overrides nn.Embeddings' forward by multiplying with embeddings scale.
    Únum_embeddingsÚembedding_dimÚpadding_idxÚembed_scalec                 ó„   •— t         ‰| �  |||«       || _        | j                  dt	        j
                  |«      d¬«       y )Nr&   F©Ú
persistent)ÚsuperÚ__init__Úscalar_embed_scaleÚregister_bufferÚtorchÚtensor)Úselfr#   r$   r%   r&   Ú	__class__s        €úy/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/minicpm3/modeling_minicpm3.pyr+   z$MiniCPM3ScaledWordEmbedding.__init__3   s;   ø€ Ü‰Ñ˜¨¸ÔDØ"-ˆÔØ×Ñ˜]¬E¯L©L¸Ó,EÐRWÐÕXó    Ú	input_idsc                 ó‚   •— t         ‰| �  |«      | j                  j                  | j                  j
                  «      z  S ©N)r*   Úforwardr&   ÚtoÚweightÚdtype)r0   r4   r1   s     €r2   r7   z#MiniCPM3ScaledWordEmbedding.forward8   s2   ø€ Ü‰w‰˜yÓ)¨D×,<Ñ,<×,?Ñ,?ÀÇÁ×@QÑ@QÓ,RÑRÐRr3   )ç      ð?)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚfloatr+   r.   ÚTensorr7   Ú__classcell__©r1   s   @r2   r"   r"   .   sG   ø„ ññY sð Y¸3ð YÈSð YÐ_dõ Yð
S §¡÷ Sñ Sr3   r"   ÚRMSNormc                   óh   ‡ — e Zd Zddeddfˆ fd„Zdej                  dej                  fd„Zd„ Zˆ xZ	S )	ÚMiniCPM3RMSNormÚepsÚreturnNc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y)z>
        MiniCPM3RMSNorm is equivalent to T5LayerNorm
        N)r*   r+   r   Ú	Parameterr.   Úonesr9   Úvariance_epsilon)r0   Úhidden_sizerH   r1   s      €r2   r+   zMiniCPM3RMSNorm.__init__>   s1   ø€ ô 	‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕr3   Úhidden_statesc                 ó"  — |j                   }|j                  t        j                  «      }|j	                  d«      j                  dd¬«      }|t        j                  || j                  z   «      z  }| j                  |j                  |«      z  S )Né   éÿÿÿÿT)Úkeepdim)	r:   r8   r.   Úfloat32ÚpowÚmeanÚrsqrtrM   r9   )r0   rO   Úinput_dtypeÚvariances       r2   r7   zMiniCPM3RMSNorm.forwardF   sy   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆØ�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r3   c                 ó^   — t        | j                  j                  «      › d| j                  › �S )Nz, eps=)Útupler9   ÚshaperM   )r0   s    r2   Ú
extra_reprzMiniCPM3RMSNorm.extra_reprM   s*   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$×2GÑ2GÐ1HÐIÐIr3   )g�íµ ÷Æ°>)
r<   r=   r>   rA   r+   r.   rB   r7   r]   rC   rD   s   @r2   rG   rG   <   s7   ø„ ñ$¨ð $¸$õ $ð; U§\¡\ð ;°e·l±ló ;öJr3   rG   c                   óÄ   ‡ — 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 )ÚMiniCPM3RotaryEmbeddingÚinv_freqNÚconfigc                 ó®  •— t         ‰| �  «        |j                  | _        |j                  | _        || _        | j
                  j                  d   | _        | j                  }| j                  dk7  rt        | j                     } || j
                  |«      \  }| _
        | j                  d|d¬«       | j                  d|j                  «       d¬«       y )NÚ	rope_typeÚdefaultr`   Fr(   Úoriginal_inv_freq)r*   r+   Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenra   Úrope_parametersrc   Úcompute_default_rope_parametersr   Úattention_scalingr-   Úclone)r0   ra   ÚdeviceÚrope_init_fnr`   r1   s        €r2   r+   z MiniCPM3RotaryEmbedding.__init__T   s¶   ø€ Ü‰ÑÔØ"(×"@Ñ"@ˆÔØ$*×$BÑ$BˆÔ!àˆŒàŸ™×4Ñ4°[ÑAˆŒØ!%×!EÑ!EˆØ�>‰>˜YÒ&Ü.¨t¯~©~Ñ>ˆLÙ+7¸¿¹ÀVÓ+LÑ(ˆ�$Ô(à×Ñ˜Z¨¸eÐÔDØ×ÑÐ0°(·.±.Ó2BÈuÐÕUr3   rm   ztorch.deviceÚseq_lenrI   ztorch.Tensorc                 ó  — | j                   d   }t        | dd«      xs | j                  | j                  z  }d}d|t	        j
                  d|dt        j                  ¬«      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_dimNr;   r   rQ   ©r:   )rm   r:   )	ri   ÚgetattrrN   Únum_attention_headsr.   ÚarangeÚint64r8   rA   )ra   rm   ro   ÚbaseÚdimÚattention_factorr`   s          r2   rj   z7MiniCPM3RotaryEmbedding.compute_default_rope_parametersd   s�   € ð& ×%Ñ% lÑ3ˆÜ�f˜j¨$Ó/Òc°6×3EÑ3EÈ×IcÑIcÑ3cˆàÐð Ø”U—\‘\ ! S¨!´5·;±;Ô?×BÑBÈ&ÔX]×XcÑXcÐBÓdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r3   c                 óN  — | j                   d d d …d f   j                  «       j                  |j                  d   dd«      j	                  |j
                  «      }|d d …d d d …f   j                  «       }t        |j
                  j                  t        «      r/|j
                  j                  dk7  r|j
                  j                  nd}t        |d¬«      5  |j                  «       |j                  «       z  j                  dd«      }t        j                  ||fd¬	«      }|j                  «       | j                  z  }|j                  «       | j                  z  }	d d d «       j	                  |j                   ¬
«      	j	                  |j                   ¬
«      fS # 1 sw Y   ŒAxY w)Nr   rR   r   ÚmpsÚcpuF)Údevice_typeÚenabledrQ   ©ry   rs   )r`   rA   Úexpandr\   r8   rm   Ú
isinstanceÚtypeÚstrr   Ú	transposer.   ÚcatÚcosrk   Úsinr:   )
r0   ÚxÚposition_idsÚinv_freq_expandedÚposition_ids_expandedr~   ÚfreqsÚembr‡   rˆ   s
             r2   r7   zMiniCPM3RotaryEmbedding.forward‚   sR  € ð !ŸM™M¨$²°4¨-Ñ8×>Ñ>Ó@×GÑGÈ×HZÑHZÐ[\ÑH]Ð_aÐcdÓe×hÑhÐij×iqÑiqÓrÐØ ,ªQ°²a¨ZÑ 8× >Ñ >Ó @Ðä'1°!·(±(·-±-ÄÔ'EÈ!Ï(É(Ï-É-Ð[`ÒJ`�a—h‘h—m’mÐfkˆÜ¨¸UÔCñ 	5Ø&×,Ñ,Ó.Ð1F×1LÑ1LÓ1NÑN×YÑYÐZ[Ð]^Ó_ˆEÜ—)‘)˜U E˜N°Ô3ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆC÷		5ð �v‰v˜AŸG™GˆvÓ$ c§f¡f°1·7±7 fÓ&;Ð;Ð;÷	5ð 	5ús   ÃBFÆF$r6   )NNN)r<   r=   r>   r.   rB   Ú__annotations__r    r+   Ústaticmethodr   r@   r[   rA   rj   Úno_gradr   r7   rC   rD   s   @r2   r_   r_   Q   s˜   ø… Ø�l‰lÓñV˜~õ Vð  à(,Ø+/Ø"ñ*Ø Ñ%ð*à˜Ñ(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ñ	%ò	*ó ð*ð: €U‡]�]ƒ_Øñ<ó ó ô<r3   r_   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚMiniCPM3MLPc                 ó  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        t        j                  | j                  | j                  |j                  ¬«      | _        t        j                  | j                  | j                  |j                  ¬«      | _	        t        j                  | j                  | j                  |j                  ¬«      | _
        t        |j                     | _        y )N©Úbias)r*   r+   ra   rN   Úintermediate_sizer   ÚLinearÚmlp_biasÚ	gate_projÚup_projÚ	down_projr   Ú
hidden_actÚact_fn©r0   ra   r1   s     €r2   r+   zMiniCPM3MLP.__init__“   s¸   ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔØ!'×!9Ñ!9ˆÔÜŸ™ 4×#3Ñ#3°T×5KÑ5KÐRX×RaÑRaÔbˆŒÜ—y‘y ×!1Ñ!1°4×3IÑ3IÐPV×P_ÑP_Ô`ˆŒÜŸ™ 4×#9Ñ#9¸4×;KÑ;KÐRX×RaÑRaÔbˆŒÜ˜V×.Ñ.Ñ/ˆ�r3   c                 óˆ   — | j                  | j                  | j                  |«      «      | j                  |«      z  «      }|S r6   )rœ   rž   rš   r›   )r0   r‰   rœ   s      r2   r7   zMiniCPM3MLP.forward�   s6   € Ø—N‘N 4§;¡;¨t¯~©~¸aÓ/@Ó#AÀDÇLÁLÐQRÃOÑ#SÓTˆ	ØÐr3   )r<   r=   r>   r+   r7   rC   rD   s   @r2   r“   r“   ’   s   ø„ ô0ör3   r“   rO   Ún_reprI   c                 óª   — | j                   \  }}}}|dk(  r| S | dd…dd…ddd…dd…f   j                  |||||«      } | j                  |||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)r\   r�   Úreshape)rO   r¡   ÚbatchÚnum_key_value_headsÚslenrr   s         r2   Ú	repeat_kvr§   ¢   so   € ð
 2?×1DÑ1DÑ.€EÐ  hØ�‚zØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐBUÐW\Ð^bÐdlÓm€MØ× Ñ  Ð(;¸eÑ(CÀTÈ8ÓTÐTr3   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó  — t        || j                  «      }t        || j                  «      }	t        j                  ||j	                  dd«      «      |z  }
|�|
|z   }
t
        j                  j                  |
dt        j                  ¬«      j                  |j                  «      }
t
        j                  j                  |
|| j                  ¬«      }
t        j                  |
|	«      }|j	                  dd«      j                  «       }||
fS )NrQ   r   rR   )ry   r:   )ÚpÚtrainingr   )r§   Únum_key_value_groupsr.   Úmatmulr…   r   Ú
functionalÚsoftmaxrT   r8   r:   r®   r²   Ú
contiguous)r¨   r©   rª   r«   r¬   r­   r®   r¯   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r2   Úeager_attention_forwardr¼   ®   sà   € ô ˜3 × ;Ñ ;Ó<€JÜ˜U F×$?Ñ$?Ó@€Lä—<‘<  z×';Ñ';¸A¸qÓ'AÓBÀWÑL€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€LÜ—,‘,˜|¨\Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r3   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..NrR   rQ   r€   )r\   r.   r†   )r‰   Úx1Úx2s      r2   Úrotate_halfrÀ   Ç   sZ   € à	
ˆ3Ð"�!—'‘'˜"‘+ Ñ"Ð"Ð"Ñ	#€BØ	
ˆ3�—‘˜‘˜qÑ Ñ"Ð"Ñ	#€BÜ�9‰9�r�c˜2�Y BÔ'Ð'r3   Úrotary_pos_embc                 óž   — |j                  |«      }|j                  |«      }| |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.
    )Ú	unsqueezerÀ   )ÚqÚkr‡   rˆ   Úunsqueeze_dimÚq_embedÚk_embeds          r2   Úapply_rotary_pos_embrÉ   Î   sY   € ð& �-‰-˜Ó
&€CØ
�-‰-˜Ó
&€CØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�GÐÐr3   c                   óô   ‡ — e Zd ZdZddededz  fˆ fd„Z	 	 ddej                  de	ej                  ej                  f   dej                  dz  d	e
dz  d
e	ej                  ej                  dz  f   f
d„Zˆ xZS )ÚMiniCPM3AttentionaE  
    Multi-head Latent Attention (MLA), structurally identical to `DeepseekV2Attention`.
    The only difference is the rotary convention: MiniCPM3 keeps the original cos/sin RoPE
    (`apply_rotary_pos_emb`) instead of DeepSeek-V2's complex rotary, so we inherit the
    module construction and override only `forward`.
    Nra   Ú	layer_idxc                 ó   •— t         ‰| �  «        || _        || _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _	        |j                  | _
        |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  |j                  z   | _        |j                  |j                   z  | _        d| _        | j                  €?t'        j(                  | j
                  | j                  | j                  z  d¬«      | _        n“t'        j(                  | j
                  |j                  |j,                  ¬«      | _        t1        |j                  «      | _        t'        j(                  |j                  | j                  | j                  z  d¬«      | _        t'        j(                  | j
                  |j                  |j                  z   |j,                  ¬«      | _        t1        |j                  «      | _        t'        j(                  |j                  | j                  | j                  | j                  z
  | j                  z   z  d¬«      | _        t'        j(                  | j                  | j                  z  | j
                  |j,                  ¬«      | _        | j                  dz  | _        y )NTFr•   g      à¿) r*   r+   ra   rÌ   Úattention_dropoutrN   ru   Ú	num_headsrr   rf   Úq_lora_rankÚqk_rope_head_dimÚkv_lora_rankÚ
v_head_dimÚqk_nope_head_dimÚqk_head_dimr¥   r³   Ú	is_causalr   r˜   Úq_projÚattention_biasÚq_a_projrG   Úq_a_layernormÚq_b_projÚkv_a_proj_with_mqaÚkv_a_layernormÚ	kv_b_projÚo_projr­   ©r0   ra   rÌ   r1   s      €r2   r+   zMiniCPM3Attention.__init__ð   sL  ø€ Ü‰ÑÔØˆŒØ"ˆŒØ!'×!9Ñ!9ˆÔØ!×-Ñ-ˆÔØ×3Ñ3ˆŒØŸ™ˆŒØ'-×'EÑ'EˆÔ$à!×-Ñ-ˆÔØ &× 7Ñ 7ˆÔØ"×/Ñ/ˆÔØ ×+Ñ+ˆŒØ &× 7Ñ 7ˆÔØ!×2Ñ2°V×5LÑ5LÑLˆÔØ$*×$>Ñ$>À&×B\ÑB\Ñ$\ˆÔ!àˆŒà×ÑÐ#ÜŸ)™) D×$4Ñ$4°d·n±nÀt×GWÑGWÑ6WÐ^cÔdˆD�KäŸI™I d×&6Ñ&6¸×8JÑ8JÐQW×QfÑQfÔgˆDŒMÜ!0°×1CÑ1CÓ!DˆDÔÜŸI™I f×&8Ñ&8¸$¿.¹.È4×K[ÑK[Ñ:[ÐbgÔhˆDŒMä"$§)¡)Ø×ÑØ×Ñ &×"9Ñ"9Ñ9Ø×&Ñ&ô#
ˆÔô
 .¨f×.AÑ.AÓBˆÔÜŸ™Ø×ÑØ�N‰N˜d×.Ñ.°×1FÑ1FÑFÈÏÉÑXÑYØô
ˆŒô —i‘iØ�N‰N˜TŸ_™_Ñ,Ø×ÑØ×&Ñ&ô
ˆŒð ×'Ñ'¨DÑ1ˆ�r3   rO   Úposition_embeddingsr¬   Úpast_key_valuesrI   c                 óò  — |j                   d d \  }}||d| j                  f}||d| j                  | j                  z   f}	| j                  €| j                  |«      }
n/| j                  | j                  | j                  |«      «      «      }
|
j                  |«      j                  dd«      }
t        j                  |
| j                  | j                  gd¬«      \  }}| j                  |«      }t        j                  || j                  | j                  gd¬«      \  }}| j!                  | j#                  |«      «      j                  |	«      j                  dd«      }t        j                  || j                  | j                  gd¬«      \  }}|j                  |d|| j                  «      }|\  }}t%        ||||«      \  }} |j&                  g |j                   d d ¢d‘­Ž }t        j(                  ||fd¬«      }t        j(                  ||fd¬«      }|� |j+                  ||| j,                  «      \  }}t/        | j0                  «      rH| j                  | j                  k7  r/t3        j4                  |d| j                  | j                  z
  g«      }t7        j8                  | j0                  j:                  t<        «      } || ||||f| j>                  sdn| j@                  | jB                  dœ|¤Ž\  }}t/        | j0                  «      r4| j                  | j                  k7  r|d d …d d …d d …d | j                  …f   }|jE                  ||d«      jG                  «       }| jI                  |«      }||fS )NrR   r   rQ   r€   r   ç        )r®   r­   )%r\   rÕ   rÔ   rÓ   rÐ   r×   rÛ   rÚ   rÙ   Úviewr…   r.   ÚsplitrÑ   rÜ   rÒ   rÞ   rÝ   rÉ   r�   r†   ÚupdaterÌ   r   ra   ÚFÚpadr   Úget_interfaceÚ_attn_implementationr¼   r²   rÎ   r­   r£   r·   rß   )r0   rO   rá   r¬   râ   r¯   Ú
batch_sizeÚ
seq_lengthÚquery_shapeÚ	key_shapeÚq_statesÚq_passÚq_rotÚcompressed_kvÚk_passÚk_rotr¹   r‡   rˆ   Úquery_statesr¸   Úattention_interfacer»   rº   s                           r2   r7   zMiniCPM3Attention.forward  s$  € ð "/×!4Ñ!4°S°bÐ!9Ñˆ
�JØ! :¨r°4×3CÑ3CÐDˆØ ¨R°×1FÑ1FÈÏÉÑ1XÐYˆ	à×ÑÐ#Ø—{‘{ =Ó1‰Hà—}‘} T×%7Ñ%7¸¿¹ÀmÓ8TÓ%UÓVˆHØ—=‘= Ó-×7Ñ7¸¸1Ó=ˆÜŸ™ H¨t×/DÑ/DÀd×F[ÑF[Ð.\ÐbdÔe‰ˆ�à×/Ñ/°Ó>ˆÜŸ™ M°D×4EÑ4EÀt×G\ÑG\Ð3]ÐceÔf‰ˆ�à—‘ × 3Ñ 3°FÓ ;Ó<×AÑAÀ)ÓL×VÑVÐWXÐZ[Ó\ˆÜ$Ÿ{™{¨6°D×4IÑ4IÈ4Ï?É?Ð3[ÐacÔdÑˆ�à—
‘
˜: q¨*°d×6KÑ6KÓLˆà&‰ˆˆSô ,¨E°5¸#¸sÓC‰ˆˆuØ�—‘Ð4˜fŸl™l¨3¨BÐ/Ð4°Ò4ˆä—y‘y &¨% °bÔ9ˆÜ—Y‘Y ¨˜°BÔ7ˆ
àÐ&Ø'6×'=Ñ'=¸jÈ,ÐX\×XfÑXfÓ'gÑ$ˆJ˜ä'¨¯©Ô4¸×9IÑ9IÈTÏ_É_Ò9\ÜŸ5™5 °°4×3CÑ3CÀdÇoÁoÑ3UÐ/VÓWˆLä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ô (¨¯©Ô4¸×9IÑ9IÈTÏ_É_Ò9\Ø%¢aªªAÐ/@°·±Ð/@Ð&@ÑAˆKà!×)Ñ)¨*°jÀ"ÓE×PÑPÓRˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(r3   r6   )NN)r<   r=   r>   r?   r    r@   r+   r.   rB   r[   r	   r7   rC   rD   s   @r2   rË   rË   è   s—   ø„ ññ-2˜~ð -2¸#À¹*õ -2ðf /3Ø(,ñ>)à—|‘|ð>)ð # 5§<¡<°·±Ð#=Ñ>ð>)ð Ÿ™ tÑ+ð	>)ð
  ™ð>)ð 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷>)r3   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
dz  d
eej                  ej                  f   dz  dee   dej                  fd„Zˆ xZS )ÚMiniCPM3DecoderLayerra   rÌ   c                 ó‚  •— t         ‰| �  «        |j                  | _        t        ||¬«      | _        t        |«      | _        t        |j                  |j                  ¬«      | _	        t        |j                  |j                  ¬«      | _
        |j                  t        j                  |j                  «      z  | _        y )N)ra   rÌ   ©rH   )r*   r+   rN   rË   Ú	self_attnr“   ÚmlprG   Úrms_norm_epsÚinput_layernormÚpost_attention_layernormÚscale_depthÚmathÚsqrtÚnum_hidden_layersÚresidual_scalerà   s      €r2   r+   zMiniCPM3DecoderLayer.__init__a  s‘   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔä*°&ÀIÔNˆŒä˜vÓ&ˆŒÜ.¨v×/AÑ/AÀv×GZÑGZÔ[ˆÔÜ(7¸×8JÑ8JÐPV×PcÑPcÔ(dˆÔ%ð %×0Ñ0´4·9±9¸V×=UÑ=UÓ3VÑVˆÕr3   NrO   r¬   rŠ   râ   Ú	use_cacherá   r¯   rI   c           
      óô   — |}| j                  |«      } | j                  d||||||dœ|¤Ž\  }}	||| j                  z  z   }|}| j                  |«      }| j	                  |«      }||| j                  z  z   }|S )N)rO   r¬   rŠ   râ   r  rá   © )rÿ   rü   r  r   rý   )
r0   rO   r¬   rŠ   râ   r  rá   r¯   ÚresidualÚ_s
             r2   r7   zMiniCPM3DecoderLayer.forwardn  s¤   € ð !ˆØ×,Ñ,¨]Ó;ˆØ)˜4Ÿ>™>ð 
Ø'Ø)Ø%Ø+ØØ 3ñ
ð ñ
Ñˆ�qð ! =°4×3FÑ3FÑ#FÑFˆà ˆØ×5Ñ5°mÓDˆØŸ™ Ó/ˆØ  =°4×3FÑ3FÑ#FÑFˆØÐr3   )NNNFN)r<   r=   r>   r    r@   r+   r.   rB   Ú
LongTensorr	   Úboolr[   r   r   r7   rC   rD   s   @r2   rù   rù   `  s¾   ø„ ðW˜~ð W¸#õ Wð  /3Ø04Ø(,Ø!&ØHLñà—|‘|ðð Ÿ™ tÑ+ðð ×&Ñ&¨Ñ-ð	ð
  ™ðð ˜$‘;ðð # 5§<¡<°·±Ð#=Ñ>ÀÑEðð Ð+Ñ,ðð 
�‰÷r3   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$                  «       ˆ fd„«       Zˆ xZS )ÚMiniCPM3PreTrainedModelra   ÚmodelTrù   râ   )rO   Ú
attentionsc                 óš   •— t         ‰| �  |«       t        |t        «      r+t	        j
                  |j                  |j                  «       y y r6   )r*   Ú_init_weightsr‚   r"   ÚinitÚ	constant_r&   r,   )r0   r¨   r1   s     €r2   r  z%MiniCPM3PreTrainedModel._init_weightsž  s:   ø€ ä‰Ñ˜fÔ%Ü�fÔ9Ô:Ü�N‰N˜6×-Ñ-¨v×/HÑ/HÕIð ;r3   )r<   r=   r>   r    r�   Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_can_compile_fullgraphÚ_supports_attention_backendrù   rË   Ú_can_record_outputsr.   r‘   r  rC   rD   s   @r2   r  r  Œ  sp   ø… àÓØÐØ&*Ð#Ø/Ð0ÐØ#4Ð"5ÐØÐØ€NØÐà!ÐØ"&Ðà-Ø'ñÐð
 €U‡]�]ƒ_óJó ôJr3   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 )ÚMiniCPM3Modelra   c           	      ó  •— t         ‰| �  |«       |j                  | _        |j                  | _        t        |j                  |j                  | j                  |j                  ¬«      | _        t        j                  t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        t        |j                  |j                   ¬«      | _        t%        |¬«      | _        d| _        | j+                  «        y c c}w )N)r&   rû   ©ra   F)r*   r+   Úpad_token_idr%   Ú
vocab_sizer"   rN   Ú	scale_embÚembed_tokensr   Ú
ModuleListÚranger  rù   ÚlayersrG   rþ   Únormr_   Ú
rotary_embÚgradient_checkpointingÚ	post_initrà   s      €r2   r+   zMiniCPM3Model.__init__§  sÏ   ø€ Ü‰Ñ˜Ô Ø!×.Ñ.ˆÔØ ×+Ñ+ˆŒä7Ø×Ñ˜v×1Ñ1°4×3CÑ3CÐQW×QaÑQaô
ˆÔô —m‘mÜFKÈF×LdÑLdÓFeÖf¸Ô! &¨)Õ4Òfó
ˆŒô $ F×$6Ñ$6¸F×<OÑ<OÔPˆŒ	Ü1¸Ô@ˆŒØ&+ˆÔ#ð 	�‰Õùò gs   ÂDNr4   r¬   rŠ   râ   Úinputs_embedsr  r¯   rI   c           
      ó<  — |d u |d uz  rt        d«      ‚|€| j                  |«      }|r|€t        | 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   )rm   )ra   r.  r¬   râ   rŠ   )rŠ   )r¬   rá   rŠ   râ   r  )Úlast_hidden_staterâ   )Ú
ValueErrorr&  r
   ra   Úget_seq_lengthr.   rv   r\   rm   rÃ   r   r+  r)  r  r*  r   )r0   r4   r¬   rŠ   râ   r.  r  r¯   Úpast_seen_tokensÚcausal_maskrO   rá   Údecoder_layers                r2   r7   zMiniCPM3Model.forward¹  sL  € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø*.×*;Ñ*;¸IÓ*FˆMá˜Ð0Ü*°$·+±+Ô>ˆOàÐØCRÐC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<™<¨×(;Ñ(;¸AÑ(>À}×G[ÑG[Ô\Ð_oÑoˆLØ'×1Ñ1°!Ó4ˆLä(Ø—;‘;Ø'Ø)Ø+Ø%ô
ˆð &ˆØ"Ÿo™o¨mÈ,˜oÓWÐà!Ÿ[™[Ð)H¨4¯;©;×+HÑ+HÐIò 		ˆMÙ)Øðà*Ø$7Ø)Ø /Ø#ñð ñ‰Mð		ð Ÿ	™	 -Ó0ˆÜ&Ø+Ø+ô
ð 	
r3   )NNNNNN)r<   r=   r>   r    r+   r   r   r   r.   r  rB   r	   ÚFloatTensorr  r   r   r   r7   rC   rD   s   @r2   r   r   ¥  sÍ   ø„ ð˜~õ ð$  ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ñ2
à×#Ñ# dÑ*ð2
ð Ÿ™ tÑ+ð2
ð ×&Ñ&¨Ñ-ð	2
ð
  ™ð2
ð ×(Ñ(¨4Ñ/ð2
ð ˜$‘;ð2
ð Ð+Ñ,ð2
ð 
!ò2
ó ó ó  ô2
r3   r   c                   óB  ‡ — e Zd ZddiZddiZddgdgf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e   defd„«       «       Zˆ xZS )ÚMiniCPM3ForCausalLMzlm_head.weightzmodel.embed_tokens.weightÚlm_headÚcolwise_gather_outputrO   Úlogitsc                 óè   •— t         ‰| �  |«       t        |«      | _        |j                  | _        t        j                  |j                  |j                  d¬«      | _        | j                  «        y )NFr•   )
r*   r+   r   r  r$  r   r˜   rN   r9  r-  rŸ   s     €r2   r+   zMiniCPM3ForCausalLM.__init__÷  sU   ø€ Ü‰Ñ˜Ô Ü" 6Ó*ˆŒ
Ø ×+Ñ+ˆŒÜ—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒð 	�‰Õr3   Nr4   r¬   rŠ   râ   r.  Úlabelsr  Úlogits_to_keepr¯   rI   c	           
      óª  —  | j                   d||||||dœ|	¤Ž}
|
j                  }|| j                  j                  z  }t	        |t
        «      rt        | d«      n|}| j                  |dd…|dd…f   «      }d}|�* | j                  d||| j                  j                  dœ|	¤Ž}t        |||
j                  |
j                  |
j                  ¬«      S )a´  
        Example:

        ```python
        >>> from transformers import AutoTokenizer, MiniCPM3ForCausalLM

        >>> model = MiniCPM3ForCausalLM.from_pretrained("openbmb/MiniCPM3-4B")
        >>> tokenizer = AutoTokenizer.from_pretrained("openbmb/MiniCPM3-4B")

        >>> prompt = "Hey, are you conscious? Can you talk to me?"
        >>> inputs = tokenizer(prompt, return_tensors="pt")

        >>> 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."
        ```)r4   r¬   rŠ   râ   r.  r  N)r;  r=  r$  )Úlossr;  râ   rO   r  r  )r  r0  ra   Úlogits_scalingr‚   r@   Úslicer9  Úloss_functionr$  r   râ   rO   r  )r0   r4   r¬   rŠ   râ   r.  r=  r  r>  r¯   ÚoutputsrO   Úslice_indicesr;  r@  s                  r2   r7   zMiniCPM3ForCausalLM.forward   sí   € ð< ,6¨4¯:©:ð ,
ØØ)Ø%Ø+Ø'Øñ,
ð ñ,
ˆð  ×1Ñ1ˆà%¨¯©×(BÑ(BÑBˆÜ8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ%Ðp¨V¸FÈtÏ{É{×OeÑOeÑpÐioÑpˆDä%ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r3   )NNNNNNNr   )r<   r=   r>   Ú_tied_weights_keysÚ_tp_planÚ_pp_planr+   r   r   r.   r  rB   r	   r6  r  r@   r   r   r   r7   rC   rD   s   @r2   r8  r8  ñ  s  ø„ à*Ð,GÐHÐØÐ2Ð3€HØ˜_Ð-°¨zÐ:Ð;€Hôð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñ6
à×#Ñ# dÑ*ð6
ð Ÿ™ tÑ+ð6
ð ×&Ñ&¨Ñ-ð	6
ð
  ™ð6
ð ×(Ñ(¨4Ñ/ð6
ð × Ñ  4Ñ'ð6
ð ˜$‘;ð6
ð ˜eŸl™lÑ*ð6
ð Ð+Ñ,ð6
ð 
 ò6
ó ó ô6
r3   r8  c                   ó   — e Zd Zy)Ú!MiniCPM3ForSequenceClassificationN)r<   r=   r>   r  r3   r2   rJ  rJ  ;  s   „ Ør3   rJ  )r  r   r8  rJ  )rä   )r   )Gr  Úcollections.abcr   Útypingr   r.   Útorch.nn.functionalr   rµ   rè   Ú r   r  Úactivationsr   Úcache_utilsr	   r
   Ú
generationr   Úintegrationsr   r   Úmasking_utilsr   Úmodeling_layersr   r   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   r   r   Úutils.output_capturingr   Úconfiguration_minicpm3r    Ú	Embeddingr"   ÚModulerG   r_   r“   rB   r@   r§   rA   r¼   rÀ   rÉ   rË   rù   r  r   r8  rJ  Ú__all__r  r3   r2   ú<module>r`     sü  ðó* Ý $Ý ã ß Ð Ý å &Ý !ß .Ý )ß QÝ /ß [ß Oß Kß FÝ &ß IÑ Iß eÑ eÝ 5Ý 2ôS "§,¡,ô Sñ ˜YÓ'ôJ�b—i‘ió Jó (ðJô(><˜bŸi™iô ><ôB�"—)‘)ô ð 	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ó 	Uð& ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ð%ð Ð'Ñ(ó%ò2(ñ Ð*Ó+òó ,ðô2u)˜Ÿ	™	ô u)ôp)Ð5ô )ðX ôJ˜oó Jó ðJð0 ôH
Ð+ó H
ó ðH
ðV ôF
Ð1°?ó F
ó ðF
ôR	Ð(HÐJaô 	ò s�r3   