
    )j                     X   d dl mZ d dlmZmZmZmZ d dlmZ	 d dl
mZ ddlmZ ddlmZmZmZ ddlmZ e G d d	e                      Z G d
 dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  ZdS )    )	dataclass)AnyDictOptionalUnionN   )swiglu)BaseModelArgscreate_attention_maskscaled_dot_product_attention)SuScaledRoPEc                   "   e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed	<   eed
<   eed<   eed<   eed<   eed<   eed<   eed<   dZeed<   dZ	eed<   dZ
eed<   dZeeeeeef         f                  ed<   dZeed<   dS )	ModelArgs
model_typehidden_sizedim_model_basenum_hidden_layersintermediate_sizenum_attention_headsrms_norm_eps
vocab_sizenum_key_value_headsq_lora_rankqk_nope_head_dimqk_rope_head_dimkv_lora_rankscale_depth	scale_embmax_position_embeddingsFattention_biasg    .A
rope_thetarope_traditionalNrope_scalingtie_word_embeddings)__name__
__module____qualname__str__annotations__intfloatr    boolr!   r"   r#   r   r   r   r$        `/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/mlx_lm/models/minicpm3.pyr   r      s6        OOOOOO     ND   !J!!!"d""";?L(4U3:%6 678??? %%%%%%r.   r   c            
            e Zd Zdef fdZ	 	 ddej        deej                 deee	ej        f                  fdZ
 xZS )		Attentionargsc                    t                                                       || _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j	        | _	        | j        j
        | _
        | j
        | j        j        z  | _        | j        | j        z   | _        | j        dz  | _        t          j        | j
        | j	        | j                  | _        t          j        | j	                  | _        t          j        | j	        | j        | j        z  d          | _        t          j        | j
        | j        | j        z   | j                  | _        t          j        | j                  | _        t          j        | j        | j        | j        | j        z
  | j        z   z  d          | _        t          j        | j        | j        z  | j
        | j                  | _        t1          |j        |j        |j        |j                            dd          |j                            dd          |j                            dd          	          | _        d S )
Ng      ࿩biasF original_max_position_embeddingsi   short_factorg      ?long_factor)dimsbaser   r6   r7   r8   )super__init__r2   r   r   r    r   r   	num_headsr   r   
v_head_dim
q_head_dimsoftmax_scalennLinearq_a_projRMSNormq_a_layernormq_b_projkv_a_proj_with_mqakv_a_layernorm	kv_b_projo_projr   r!   r   r#   getropeselfr2   	__class__s     r/   r<   zAttention.__init__(   sM   	 $	 : $	 :"i6 I269090*di.KK/$2GG!_6	d.T5H
 
 
  Z(899	dnt>U
 
 
 #%) 55$#
 #
 #
 !j):;;N!66HJ	
 
 
 iNT_,$
 
 
 !&$($@-1->-B-B2D. . *..~sCC)--mSAA	
 	
 	
			r.   Nxmaskcachec                 X   |j         \  }}}|                     |                     |                     |                              }|                    ||| j        d                              dddd          }t          j        || j	        gd          \  }}	| 
                    |          }
t          j        |
| j        gd          \  }
}|                    ||d| j                                      dddd          }|                     |                     |
                    }|                    ||| j        d                              dddd          }t          j        || j	        gd          \  }}|9|                     |	|j                  }	|                     ||j                  }n*|                     |	          }	|                     |          }t          j        ||| j        || j        f          }t          j        ||	gd          }t          j        ||gd          }||                    ||          \  }}t)          ||||| j        |          }|                    dddd                              ||d          }|                     |          S )	Nr      r      )axis)offset)rR   scalerQ   )shaperF   rE   rC   reshaper=   	transposemxsplitr   rG   r   r   rI   rH   rL   rX   broadcast_toconcatenateupdate_and_fetchr   r@   rJ   )rN   rP   rQ   rR   BL_qq_nopeq_pecompressed_kvk_pekvk_nopevaluesk_pe_broadcastedquerieskeysoutputs                      r/   __call__zAttention.__call__a   s    '1a MM$,,T]]1-=-=>>??IIaDNB//99!Q1EExD$9#:DDD //22 h}t7H6IPRSSSt||Aq!T%:;;EEaAqQQ^^D//>>??ZZ1dnb11;;Aq!QGG"t'<&=BGGG 99T%,977D99T%,977DD99T??D99T??D ?1dna)>?
 

 .&$b999 ~v'78rBBB  11$??LD& .T6d6Ht
 
 
 !!!Q1--55aB??{{6"""r.   NN)r%   r&   r'   r   r<   r]   arrayr   r   r(   rq   __classcell__rO   s   @r/   r1   r1   '   s        7
Y 7
 7
 7
 7
 7
 7
x $(/3	4# 4#84# rx 4# S"(]+,	4# 4# 4# 4# 4# 4# 4# 4#r.   r1   c                   $     e Zd Z fdZd Z xZS )MLPc                 ,   t                                                       t          j        |j        |j        d          | _        t          j        |j        |j        d          | _        t          j        |j        |j        d          | _        d S NFr4   )	r;   r<   rA   rB   r   r   	gate_projup_proj	down_projrM   s     r/   r<   zMLP.__init__   sz    4#3T5KRWXXXy!143IPUVVV4#94;KRWXXXr.   c                     |                      t          |                     |          |                     |                              S N)r|   r	   rz   r{   )rN   rP   s     r/   rq   zMLP.__call__   s4    ~~fT^^A%6%6QHHIIIr.   )r%   r&   r'   r<   rq   rt   ru   s   @r/   rw   rw      sS        Y Y Y Y YJ J J J J J Jr.   rw   c            	       x     e Zd Zdef fdZ	 	 d	dej        deej                 dee         dej        fdZ	 xZ
S )
DecoderLayerr2   c                    t                                                       || _        |j        | _        |j        | _        t          |          | _        t          |          | _        t          j
        |j        |j                  | _        t          j
        |j        |j                  | _        |j        | _        |j        | _        d S )Neps)r;   r<   r2   r   r   r1   	self_attnrw   mlprA   rD   r   input_layernormpost_attention_layernormr   rM   s     r/   r<   zDecoderLayer.__init__   s    	+!%!7"4t99!z$*:@QRRR(*
$"3)
 )
 )
%  +!%!7r.   NrP   rQ   rR   returnc                 
   |                      |                     |          ||          }||| j        | j        dz  z  z  z   }|                     |                     |                    }||| j        | j        dz  z  z  z   }|S )Ng      ?)r   r   r   r   r   r   )rN   rP   rQ   rR   rhouts          r/   rq   zDecoderLayer.__call__   s     NN4//22D%@@T%)?)DEFFHHT2215566!t'4+A3+FGHH
r.   rr   )r%   r&   r'   r   r<   r]   rs   r   r   rq   rt   ru   s   @r/   r   r      s        8Y 8 8 8 8 8 8& $(#	
 
8
 rx 
 }	

 

 
 
 
 
 
 
 
r.   r   c                   N     e Zd Zdef fdZ	 	 ddej        dej        fdZ xZS )MiniCPM3Modelr2   c                 f   t                                                       | _        j        | _        | j        dk    sJ t	          j        j        j                  | _        fdt          j	                  D             | _
        t	          j        j        j                  | _        d S )Nr   c                 .    g | ]}t                    S r-   )r   ).0rd   r2   s     r/   
<listcomp>z*MiniCPM3Model.__init__.<locals>.<listcomp>   s!    QQQa|D))QQQr.   r   )r;   r<   r2   r   rA   	Embeddingr   embed_tokensranger   layersrD   r   normrM   s    `r/   r<   zMiniCPM3Model.__init__   s    	/""""L$:JKKQQQQ59O3P3PQQQJt/T5FGGG			r.   NinputsrQ   c                    |                      |          | j        j        z  }|t          ||          }|d gt	          | j                  z  }t          | j        |          D ]\  }} ||||          }|                     |          S r~   )r   r2   r   r   lenr   zipr   )rN   r   rQ   rR   r   layercs          r/   rq   zMiniCPM3Model.__call__   s     f%%	(;;<(E22D=FS---EDK// 	" 	"HE1aq!!AAyy||r.   rr   )	r%   r&   r'   r   r<   r]   rs   rq   rt   ru   s   @r/   r   r      s        HY H H H H H H 	  h       r.   r   c                   d     e Zd Zdef fdZ	 	 ddej        dej        fdZed             Z	 xZ
S )	Modelr2   c                     t                                                       || _        |j        | _        t	          |          | _        | j        j        s(t          j        |j	        |j
        d          | _        d S d S ry   )r;   r<   r2   r   r   modelr$   rA   rB   r   r   lm_headrM   s     r/   r<   zModel.__init__   ss    	/"4((
y, 	T9T%5tUSSSDLLL	T 	Tr.   Nr   rQ   c                     |                      |||          }| j        j        s0|                     || j        j        | j        j        z  z            }n| j         j                            |          }|S r~   )r   r2   r$   r   r   r   r   	as_linear)rN   r   rQ   rR   r   s        r/   rq   zModel.__call__   sj     jju--y, 	9,,sdi&;di>V&VWXXCC*)33C88C
r.   c                     | j         j        S r~   )r   r   )rN   s    r/   r   zModel.layers   s    z  r.   rr   )r%   r&   r'   r   r<   r]   rs   rq   propertyr   rt   ru   s   @r/   r   r      s        TY T T T T T T 	  h    ! ! X! ! ! ! !r.   r   )dataclassesr   typingr   r   r   r   mlx.corecorer]   mlx.nnrA   activationsr	   r:   r
   r   r   
rope_utilsr   r   Moduler1   rw   r   r   r   r-   r.   r/   <module>r      s   " ! ! ! ! ! - - - - - - - - - - - -                   T T T T T T T T T T $ $ $ $ $ $ & & & & & & & &0n# n# n# n# n#	 n# n# n#bJ J J J J") J J J    29   <    BI   >! ! ! ! !BI ! ! ! ! !r.   