Ë
    îÿæi¢  ã                   ó^  — 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y)é    )Ú	dataclass)ÚAnyÚDictÚOptionalÚUnionNé   )Úswiglu)ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attention)Úinitialize_ropec                   ó¦   — 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	<   d
Zee   ed<   dZ	e
ed<   dZeed<   dZe
ed<   y
)Ú	ModelArgsÚ
model_typeÚhidden_sizeÚnum_hidden_layersÚintermediate_sizeÚnum_attention_headsÚrms_norm_epsÚ
vocab_sizeÚhead_dimÚnum_key_value_headsNÚmax_position_embeddingsFÚattention_biasi'  Ú
rope_thetaTÚtie_word_embeddings)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatr   r   r   Úboolr   r   © ó    úf/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/glm.pyr   r      sc   … àƒOØÓØÓØÓØÓØÓØƒOØƒMØÓØ-1Ð˜X c™]Ó1Ø €N�DÓ Ø€J�ÓØ $Ð˜Ô$r&   r   c            	       óŠ   ‡ — 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 )	ÚGLMAttentionÚargsc                 ó–  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        |j
                  xs |j                  | j                  z  | _        | j
                  dz  | _        t        j                  | j                  | j                  | j
                  z  |j                  ¬«      | _
        t        j                  | j                  | j                  | j
                  z  |j                  ¬«      | _        t        j                  | j                  | j                  | j
                  z  |j                  ¬«      | _        t        j                  | j                  | j
                  z  | j                  d¬«      | _        t        j                  | j
                  d|j                  ¬«      | _        y )Ng      à¿©ÚbiasFT)ÚdimsÚtraditionalÚbase)ÚsuperÚ__init__r   r   r   r   ÚscaleÚnnÚLinearr   Úq_projÚk_projÚv_projÚo_projÚRoPEr   Úrope©Úselfr*   Ú	__class__s     €r'   r2   zGLMAttention.__init__    sU  ø€ Ü‰ÑÔØ×+Ñ+ˆÔØ#'×#;Ñ#;ˆÔ Ø#'×#;Ñ#;ˆÔ ØŸ™ÒU¨×)9Ñ)9¸T×=UÑ=UÑ)UˆŒØ—]‘] DÑ(ˆŒ
ä—i‘iØ×ÑØ×$Ñ$ t§}¡}Ñ4Ø×$Ñ$ô
ˆŒô
 —i‘iØ×ÑØ×$Ñ$ t§}¡}Ñ4Ø×$Ñ$ô
ˆŒô
 —i‘iØ×ÑØ×$Ñ$ t§}¡}Ñ4Ø×$Ñ$ô
ˆŒô
 —i‘iØ×$Ñ$ t§}¡}Ñ4°d×6FÑ6FÈUô
ˆŒô —G‘G §¡¸DÀtÇÁÔWˆ�	r&   ÚxÚmaskÚcacheÚreturnc                 ó2  — |j                   \  }}}| j                  |«      | j                  |«      | j                  |«      }	}}|j	                  ||| j
                  d«      j                  dddd«      }|j	                  ||| j                  d«      j                  dddd«      }|	j	                  ||| j                  d«      j                  dddd«      }	|�P| j                  ||j                  ¬«      }| j                  ||j                  ¬«      }|j                  ||	«      \  }}	n"| j                  |«      }| j                  |«      }t        |||	|| j                  |¬«      }
|
j                  dddd«      j	                  ||d«      }
| j                  |
«      S )Néÿÿÿÿr   é   r   é   )Úoffset)rA   r3   r@   )Úshaper6   r7   r8   Úreshaper   Ú	transposer   r;   rG   Úupdate_and_fetchr   r3   r9   )r=   r?   r@   rA   ÚBÚLÚDÚqueriesÚkeysÚvaluesÚoutputs              r'   Ú__call__zGLMAttention.__call__=   sy  € ð —'‘'‰ˆˆ1ˆaà $§¡¨A£°·±¸A³ÀÇÁÈAÃ�v�ˆà—/‘/ ! Q¨×(@Ñ(@À"ÓE×OÑOØˆq�!�Qó
ˆð �|‰|˜A˜q $×":Ñ":¸BÓ?×IÑIÈ!ÈQÐPQÐSTÓUˆØ—‘  1 d×&>Ñ&>ÀÓC×MÑMØˆq�!�Qó
ˆð ÐØ—i‘i °·±�iÓ=ˆGØ—9‘9˜T¨%¯,©,�9Ó7ˆDØ ×1Ñ1°$¸Ó?‰LˆD‘&à—i‘i Ó(ˆGØ—9‘9˜T“?ˆDä-Ø�T˜6¨°d·j±jÀtô
ˆð ×!Ñ! ! Q¨¨1Ó-×5Ñ5°a¸¸BÓ?ˆØ�{‰{˜6Ó"Ð"r&   ©NN©r   r   r   r   r2   ÚmxÚarrayr   r   rS   Ú__classcell__©r>   s   @r'   r)   r)      sZ   ø„ ðX˜Yõ Xð@ $(Ø#ñ	#à�8‰8ð#ð �r—x‘xÑ ð#ð ˜‰}ð	#ð
 
�‰÷#r&   r)   c                   óD   ‡ — e Zd Zdefˆ fd„Zdej                  fd„Zˆ xZS )ÚGLMMLPr*   c                 óì   •— t         ‰| �  «        t        j                  |j                  d|j
                  z  d¬«      | _        t        j                  |j
                  |j                  d¬«      | _        y )NrE   Fr,   )r1   r2   r4   r5   r   r   Úgate_up_projÚ	down_projr<   s     €r'   r2   zGLMMLP.__init__`   sZ   ø€ Ü‰ÑÔÜŸI™IØ×Ñ˜a $×"8Ñ"8Ñ8¸uô
ˆÔô Ÿ™ 4×#9Ñ#9¸4×;KÑ;KÐRWÔXˆ�r&   rB   c                 ó�   — | j                  |«      }t        j                  |dd¬«      \  }}| j                  t	        ||«      «      S )NrE   rD   )Úaxis)r]   rV   Úsplitr^   r	   )r=   r?   Úgates      r'   rS   zGLMMLP.__call__g   s=   € Ø×Ñ˜aÓ ˆÜ—(‘(˜1˜a bÔ)‰ˆˆaØ�~‰~œf T¨1›oÓ.Ð.r&   )	r   r   r   r   r2   rV   rW   rS   rX   rY   s   @r'   r[   r[   _   s!   ø„ ðY˜Yõ Yð/˜RŸX™X÷ /r&   r[   c            	       óŠ   ‡ — 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 )	ÚGLMBlockr*   c                 ó"  •— t         ‰| �  «        t        |«      | _        t	        |«      | _        t        j                  |j                  |j                  ¬«      | _
        t        j                  |j                  |j                  ¬«      | _        y )N©Úeps)r1   r2   r)   Ú	self_attnr[   Úmlpr4   ÚRMSNormr   r   Úinput_layernormÚpost_attention_layernormr<   s     €r'   r2   zGLMBlock.__init__n   sf   ø€ Ü‰ÑÔÜ% dÓ+ˆŒÜ˜$“<ˆŒÜ!Ÿz™z¨$×*:Ñ*:À×@QÑ@QÔRˆÔÜ(*¯
©
Ø×Ñ $×"3Ñ"3ô)
ˆÕ%r&   r?   r@   rA   rB   c                 óž   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   }|S ©N)rh   rk   ri   rl   )r=   r?   r@   rA   ÚrÚhÚouts          r'   rS   zGLMBlock.__call__w   sQ   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�!‰eˆØˆ
r&   rT   rU   rY   s   @r'   rd   rd   m   sW   ø„ ð
˜Yõ 
ð $(Ø#ñ	
à�8‰8ð
ð �r—x‘xÑ ð
ð ˜‰}ð	
ð
 
�‰÷
r&   rd   c                   ój   ‡ — e Zd Zdefˆ fd„Z	 ddej                  dee   dej                  fd„Z	ˆ xZ
S )ÚGLMModelr*   c                 óN  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  «      D �cg c]  }t        |¬«      ‘Œ c}| _
        t        j                  |j
                  |j                  ¬«      | _        y c c}w )N)r*   rf   )r1   r2   r4   Ú	Embeddingr   r   Úembed_tokensÚranger   rd   Úlayersrj   r   Únorm)r=   r*   Ú_r>   s      €r'   r2   zGLMModel.__init__…   sw   ø€ Ü‰ÑÔÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔÜ49¸$×:PÑ:PÔ4QÓRÑ4Q¨q”x TÖ*Ð4QÑRˆŒÜ—J‘J˜t×/Ñ/°T×5FÑ5FÔGˆ�	ùò Ss   ÁB"ÚinputsrA   rB   c                 óê   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Nr   )rv   Úlenrx   r   Úzipry   )r=   r{   rA   rp   r@   ÚlayerÚcs          r'   rS   zGLMModel.__call__‹   su   € ð
 ×Ñ˜fÓ%ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©Ó1ˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜˜qÓ!‰Að 0ð �y‰y˜‹|Ðr&   rn   rU   rY   s   @r'   rs   rs   „   sC   ø„ ðH˜Yõ Hð  $ñà—‘ðð ˜‰}ðð 
�‰÷	r&   rs   c                   ó€   ‡ — e Zd Zdefˆ fd„Z	 d	dej                  dee   dej                  fd„Z	d„ Z
ed„ «       Zˆ xZS )
ÚModelr*   c                 óî   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        |j                  s2t        j                  |j                  |j                  d¬«      | _        y y )NFr,   )r1   r2   r*   r   rs   Úmodelr   r4   r5   r   r   Úlm_headr<   s     €r'   r2   zModel.__init__ž   sW   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ˜d“^ˆŒ
Ø×'Ò'ÜŸ9™9 T×%5Ñ%5°t·±ÈUÔSˆD�Lð (r&   r{   rA   rB   c                 óÆ   — | j                  ||«      }| j                  j                  r'| j                   j                  j	                  |«      }|S | j                  |«      }|S rn   )r„   r*   r   rv   Ú	as_linearr…   )r=   r{   rA   rq   s       r'   rS   zModel.__call__¦   sW   € ð
 �j‰j˜ Ó'ˆØ�9‰9×(Ò(Ø—*‘*×)Ñ)×3Ñ3°CÓ8ˆCð ˆ
ð —,‘,˜sÓ#ˆCØˆ
r&   c                 ó²   — |j                  «       D ��ci c]  \  }}d|vsŒ||“Œ }}}| j                  j                  r|j                  dd «       |S c c}}w )Nzself_attn.rotary_emb.inv_freqzlm_head.weight)Úitemsr*   r   Úpop)r=   ÚweightsÚkÚvs       r'   ÚsanitizezModel.sanitize²   s]   € à$Ÿ]™]œ_ô
Ù,‘T�Q˜Ð0OÐWXÒ0XˆAˆq‰D˜_ð 	ñ 
ð �9‰9×(Ò(Ø�K‰KÐ(¨$Ô/Øˆùó
s
   ”A¡Ac                 ó.   — | j                   j                  S rn   )r„   rx   )r=   s    r'   rx   zModel.layersº   s   € à�z‰z× Ñ Ð r&   rn   )r   r   r   r   r2   rV   rW   r   r   rS   rŽ   Úpropertyrx   rX   rY   s   @r'   r‚   r‚   �   s\   ø„ ðT˜Yõ Tð  $ñ
à—‘ð
ð ˜‰}ð
ð 
�‰ó	
òð ñ!ó ô!r&   r‚   )Údataclassesr   Útypingr   r   r   r   Úmlx.coreÚcorerV   Úmlx.nnr4   Úactivationsr	   r0   r
   r   r   Ú
rope_utilsr   r   ÚModuler)   r[   rd   rs   r‚   r%   r&   r'   Ú<module>r™      sŽ   ðõ "ß -Ó -å Ý å ß TÑ TÝ 'ð ô%�ó %ó ð%ô =#�2—9‘9ô =#ô@/ˆR�Y‰Yô /ôˆr�y‰yô ô.ˆr�y‰yô ô2!ˆB�I‰Iõ !r&   