Ë
    îÿæi|  ã                   ój  — d dl mZ 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mZmZ ddl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)Úpartial)ÚAnyÚDictÚOptionalÚUnionNé   )ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attention)Ú	BitLinear)Ú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<   d	Zee   ed
<   d	Z	ee   ed<   dZ
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<   y	)Ú	ModelArgsÚ
model_typeÚhidden_sizeÚnum_hidden_layersÚintermediate_sizeÚnum_attention_headsÚnum_key_value_headsÚrms_norm_epsÚ
vocab_sizeNÚhead_dimÚmax_position_embeddingsFÚattention_biasÚmlp_biasi'  Ú
rope_thetaÚrope_traditionalÚrope_scalingTÚtie_word_embeddings)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatr   r   r   r   Úboolr   r   r   r   r   r   r    © ó    úi/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/bitnet.pyr   r      s£   … àƒOØÓØÓØÓØÓØÓØÓØƒOØ"€Hˆh�s‰mÓ"Ø-1Ð˜X c™]Ó1Ø €N�DÓ Ø€HˆdÓØ€J�ÓØ"Ð�dÓ"Ø;?€L�(˜4  U¨5°#¨:Ñ%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   dej                  fd„Z	ˆ xZ
S )	Ú	AttentionÚargsc                 ó–  •— t         ‰| �  «        |j                  }|j                  x| _        }|j
                  x| _        }|j                  xs |j                  |z  x| _        }|dz  | _        |j                  }t        |||z  |¬«      | _        t        |||z  |¬«      | _        t        |||z  |¬«      | _        t        ||z  ||¬«      | _        t        | j                  |j                   |j"                  |j$                  |j&                  «      | _        t+        j,                  |j                  |j.                  ¬«      | _        y )Ng      à¿©Úbias©Úeps)ÚsuperÚ__init__r   r   Ún_headsr   Ú
n_kv_headsr   Úscaler   r   Úq_projÚk_projÚv_projÚo_projr   r   r   r   r   ÚropeÚnnÚRMSNormr   Úattn_sub_norm)Úselfr.   Údimr6   r7   r   r   Ú	__class__s          €r+   r5   zAttention.__init__$   s  ø€ Ü‰ÑÔà×ÑˆØ!%×!9Ñ!9Ð9ˆŒ�wØ'+×'?Ñ'?Ð?ˆŒ˜*à#'§=¡=Ò#O°D×4DÑ4DÈÑ4OÐOˆŒ˜à˜t‘^ˆŒ
Ø×,Ñ,ˆä  W¨xÑ%7¸nÔMˆŒÜ  Z°(Ñ%:ÀÔPˆŒÜ  Z°(Ñ%:ÀÔPˆŒÜ ¨(Ñ 2°C¸nÔMˆŒä#Ø�M‰MØ�O‰OØ×!Ñ!Ø×ÑØ×(Ñ(ó
ˆŒ	ô  ŸZ™Z¨×(8Ñ(8¸d×>OÑ>OÔPˆÕr*   ÚxÚmaskÚcacheÚreturnc                 óX  — |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                  |
«      }
| j                  |
«      }
|
S )Néÿÿÿÿr   é   r	   é   )Úoffset)rF   r8   rE   )Úshaper9   r:   r;   Úreshaper6   Ú	transposer7   r=   rL   Úupdate_and_fetchr   r8   r@   r<   )rA   rD   rE   rF   ÚBÚLÚDÚqueriesÚkeysÚvaluesÚoutputs              r+   Ú__call__zAttention.__call__>   s}  € ð —'‘'‰ˆˆ1ˆaà $§¡¨A£°·±¸A³ÀÇÁÈAÃ�v�ˆð —/‘/ ! Q¨¯©°bÓ9×CÑCÀAÀqÈ!ÈQÓOˆØ�|‰|˜A˜q $§/¡/°2Ó6×@Ñ@ÀÀAÀqÈ!ÓLˆØ—‘  1 d§o¡o°rÓ:×DÑDÀQÈÈ1ÈaÓPˆàÐØ—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Ó?ˆØ×#Ñ# FÓ+ˆØ—‘˜VÓ$ˆàˆr*   ©NN©r!   r"   r#   r   r5   ÚmxÚarrayr   r   rX   Ú__classcell__©rC   s   @r+   r-   r-   #   sY   ø„ ðQ˜Yõ Qð: $(Ø#ñ	à�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 )ÚMLPr.   c                 óZ  •— t         ‰| �  «        |j                  }|j                  }t	        |d«      r|j
                  }nd}t        |||¬«      | _        t        |||¬«      | _        t        |||¬«      | _	        t        j                  |j                  |j                  ¬«      | _        y )Nr   Fr0   r2   )r4   r5   r   r   Úhasattrr   r   Ú	gate_projÚ	down_projÚup_projr>   r?   r   Úffn_sub_norm)rA   r.   rB   Ú
hidden_dimr   rC   s        €r+   r5   zMLP.__init__a   s‹   ø€ Ü‰ÑÔà×ÑˆØ×+Ñ+ˆ
Ü�4˜Ô$Ø—}‘}‰HàˆHä" 3¨
¸ÔBˆŒÜ" :¨s¸ÔBˆŒÜ   j°xÔ@ˆŒäŸJ™J t×'=Ñ'=À4×CTÑCTÔUˆÕr*   rG   c                 ó¶   — t        j                  | j                  |«      «      | j                  |«      z  }| j	                  |«      }| j                  |«      }|S ©N)r>   Úrelu2rc   re   rf   rd   )rA   rD   s     r+   rX   zMLP.__call__q   sI   € Ü�H‰H�T—^‘^ AÓ&Ó'¨$¯,©,°q«/Ñ9ˆØ×Ñ˜aÓ ˆØ�N‰N˜1ÓˆØˆr*   ©	r!   r"   r#   r   r5   r[   r\   rX   r]   r^   s   @r+   r`   r`   `   s!   ø„ ðV˜Yõ Vð ˜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 )	ÚTransformerBlockr.   c                 óf  •— t         ‰| �  «        |j                  | _        |j                  | _        t	        |«      | _        t        |«      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  |j                  ¬«      | _        y )Nr2   )r4   r5   r   r   r-   Ú	self_attnr`   Úmlpr>   r?   r   Úinput_layernormÚpost_attention_layernorm©rA   r.   rC   s     €r+   r5   zTransformerBlock.__init__y   s�   ø€ Ü‰ÑÔØ#'×#;Ñ#;ˆÔ Ø×+Ñ+ˆÔÜ" 4›ˆŒÜ�t“9ˆŒÜ!Ÿz™z¨$×*:Ñ*:À×@QÑ@QÔRˆÔÜ(*¯
©
Ø×Ñ $×"3Ñ"3ô)
ˆÕ%r*   rD   rE   rF   rG   c                 óž   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   }|S ri   )ro   rq   rp   rr   )rA   rD   rE   rF   ÚrÚhÚouts          r+   rX   zTransformerBlock.__call__„   sQ   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�!‰eˆØˆ
r*   rY   rZ   r^   s   @r+   rm   rm   x   sW   ø„ ð	
˜Yõ 	
ð $(Ø#ñ	à�8‰8ðð �r—x‘xÑ ðð ˜‰}ð	ð
 
�‰÷r*   rm   c                   óH   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zˆ xZS )Ú
LlamaModelr.   c                 ó   •— t         ‰| �  «        || _        |j                  | _        |j                  | _        t        j                  |j                  |j                  «      | _        t        |j                  «      D �cg c]  }t        |¬«      ‘Œ c}| _        t        j                  |j                  |j                  ¬«      | _        y c c}w )N)r.   r2   )r4   r5   r.   r   r   r>   Ú	Embeddingr   Úembed_tokensÚrangerm   Úlayersr?   r   Únorm)rA   r.   Ú_rC   s      €r+   r5   zLlamaModel.__init__“   s�   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒØ!%×!7Ñ!7ˆÔÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔä16°t×7MÑ7MÔ1Nó
Ù1N¨AÔ $Ö'Ð1Nñ
ˆŒô —J‘J˜t×/Ñ/°T×5FÑ5FÔGˆ�	ùò
s   Á?CÚinputsc                 óì   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||¬«      }Œ | j                  |«      S )Nr   )rF   )r|   Úlenr~   r   Úzipr   )rA   r�   rF   rv   rE   ÚlayerÚcs          r+   rX   zLlamaModel.__call__ž   su   € ð
 ×Ñ˜fÓ%ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©Ó1ˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜ QÔ'‰Að 0ð �y‰y˜‹|Ðr*   ri   rk   r^   s   @r+   ry   ry   ’   s'   ø„ ð	H˜Yõ 	Hð ñà—‘÷r*   ry   c                   ó^   ‡ — e Zd Zdefˆ fd„Z	 d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 )NFr0   )r4   r5   r.   r   ry   Úmodelr    r>   ÚLinearr   r   Úlm_headrs   s     €r+   r5   zModel.__init__±   sX   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ Ó%ˆŒ
Ø×'Ò'ÜŸ9™9 T×%5Ñ%5°t·±ÈUÔSˆD�Lð (r*   r�   c                 óÆ   — | j                  ||«      }| j                  j                  r'| j                   j                  j	                  |«      }|S | j                  |«      }|S ri   )rŠ   r.   r    r|   Ú	as_linearrŒ   )rA   r�   rF   rw   s       r+   rX   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)rA   Ú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 ri   )rŠ   r~   )rA   s    r+   r~   zModel.layersÎ   s   € à�z‰z× Ñ Ð r*   ri   )r!   r"   r#   r   r5   r[   r\   rX   r•   Úpropertyr~   r]   r^   s   @r+   rˆ   rˆ   °   s@   ø„ ðT˜Yõ Tð ñ
à—‘ó
òð ñ!ó ô!r*   rˆ   )Údataclassesr   Ú	functoolsr   Útypingr   r   r   r   Úmlx.coreÚcorer[   Úmlx.nnr>   Úbaser
   r   r   Úbitlinear_layersr   Ú
rope_utilsr   r   ÚModuler-   r`   rm   ry   rˆ   r)   r*   r+   Ú<module>r¢      s‘   ðõ "Ý ß -Ó -å Ý ç TÑ TÝ 'Ý 'ð ô%�ó %ó ð%ô&:�—	‘	ô :ôzˆ"�)‰)ô ô0�r—y‘yô ô4�—‘ô ô< !ˆB�I‰Iõ  !r*   