Ë
    îÿæi�  ã                   ól  — d dl 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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 G d„ dej                  «      Zy)é    N)Ú	dataclassé   )Úswiglu)ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attentionc                   ó˜   — 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<   dZeed<   dZ	eed<   y)Ú	ModelArgsÚ
model_typeÚ
vocab_sizeÚhidden_sizeÚnum_attention_headsÚnum_hidden_layersÚnum_key_value_headsÚintermediate_sizeÚ
rope_thetaÚuse_qkv_biasÚpartial_rotary_factorÚlayer_norm_epsFÚuse_parallel_residualÚqk_layernormN)
Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatÚboolr   r   © ó    úk/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/stablelm.pyr
   r
      sW   … àƒOØƒOØÓØÓØÓØÓØÓØÓØÓØ Ó ØÓØ"'Ð˜4Ó'Ø€L�$Ôr!   r
   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚLayerNormPerHeadc                 ó¢   •— t         ‰| �  «        t        |«      D �cg c]  }t        j                  ||d¬«      ‘Œ c}| _        || _        y c c}w )NF)ÚepsÚbias)ÚsuperÚ__init__ÚrangeÚnnÚ	LayerNormÚnormsr&   )ÚselfÚhead_dimÚ	num_headsr&   Ú_Ú	__class__s        €r"   r)   zLayerNormPerHead.__init__    sJ   ø€ Ü‰ÑÔäAFÀyÔAQó
ÙAQ¸AŒB�L‰L˜ s°Ö7ÐAQñ
ˆŒ
ð ˆ�ùò
s   �Ac                 óØ   — t        j                  | j                  D �cg c]  }|j                  ‘Œ c}«      }|t         j                  j                  |d d | j                  «      z  S c c}w ©N)ÚmxÚstackr-   ÚweightÚfastÚ
layer_normr&   )r.   ÚxÚnÚws       r"   Ú__call__zLayerNormPerHead.__call__'   sP   € Ü�H‰H¨¯
ª
Ó3©
 1�a—h“h¨
Ñ3Ó4ˆØ”2—7‘7×%Ñ% a¨¨t°T·X±XÓ>Ñ>Ð>ùò 4s   žA')r   r   r   r)   r=   Ú__classcell__©r2   s   @r"   r$   r$      s   ø„ ôö?r!   r$   c                   ó,   ‡ — e Zd Zdefˆ fd„Zdd„Zˆ xZS )Ú	AttentionÚconfigc                 óZ  •— t         ‰| �  «        |j                  | _        |j                  | _        | j                  | j                  z  | _        |j                  | _        |j                  | _        |j                  | _        | j
                  | j                  z  | j                  k7  r&t        d| j                  › d| j                  › d�«      ‚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"                  t%        | j                  | j
                  z  «      d| j                  ¬«      | _        |j(                  | _        | j(                  rct+        | j
                  | j                  |j,                  ¬«      | _        t+        | j
                  | j                  |j,                  ¬«      | _        y y )Nz?hidden_size must be divisible by num_heads (got `hidden_size`: z and `num_heads`: z).©r'   F)ÚtraditionalÚbase©r&   )r(   r)   r   r   r0   r/   r   r   r   Ú
ValueErrorr+   ÚLinearr   Úq_projÚk_projÚv_projÚo_projÚRoPEr   Úroper   r$   r   Úq_layernormÚk_layernorm©r.   rB   r2   s     €r"   r)   zAttention.__init__-   s  ø€ Ü‰ÑÔà!×-Ñ-ˆÔØ×3Ñ3ˆŒØ×(Ñ(¨D¯N©NÑ:ˆŒØ#)×#=Ñ#=ˆÔ Ø ×+Ñ+ˆŒØ%+×%AÑ%AˆÔ"à�M‰M˜DŸN™NÑ*¨t×/?Ñ/?Ò?ÜØQÐRV×RbÑRbÐQcØ$ T§^¡^Ð$4°Bð8óð ô
 —i‘iØ×Ñ˜dŸn™n¨t¯}©}Ñ<À6×CVÑCVô
ˆŒô —i‘iØ×ÑØ×$Ñ$ t§}¡}Ñ4Ø×$Ñ$ô
ˆŒô
 —i‘iØ×ÑØ×$Ñ$ t§}¡}Ñ4Ø×$Ñ$ô
ˆŒô
 —i‘iØ�N‰N˜TŸ]™]Ñ*¨D×,<Ñ,<À5ô
ˆŒô —G‘GÜ�×*Ñ*¨T¯]©]Ñ:Ó;ØØ—‘ô
ˆŒ	ð #×/Ñ/ˆÔØ×ÒÜ/Ø—‘˜tŸ~™~°6×3HÑ3Hô ˆDÔô  0Ø—‘˜t×7Ñ7¸V×=RÑ=Rô ˆDÕð	 r!   c                 óz  — | j                  |«      | j                  |«      | j                  |«      }}}|j                  \  }}}	|j	                  ||| j
                  d«      }|j	                  ||| j                  d«      }| j                  r"| j                  |«      }| j                  |«      }|j                  dddd«      }|j                  dddd«      }|j	                  ||| j                  d«      j                  dddd«      }|�P| j                  ||j                  ¬«      }| j                  ||j                  ¬«      }|j                  ||«      \  }}n"| j                  |«      }| j                  |«      }|j                  t        j                   «      }|j                  t        j                   «      }t#        j$                  d|j                  d   z  «      }
t'        |||||
|¬«      j                  |j(                  «      }|j                  dddd«      j	                  ||d«      }| j+                  |«      S )Néÿÿÿÿr   é   r   é   )Úoffset)ÚcacheÚscaleÚmask)rJ   rK   rL   ÚshapeÚreshaper0   r   r   rP   rQ   Ú	transposerO   rW   Úupdate_and_fetchÚastyper5   Úfloat32ÚmathÚsqrtr   ÚdtyperM   )r.   r:   rZ   rX   ÚqueriesÚkeysÚvaluesÚBÚLÚDrY   Úoutputs               r"   r=   zAttention.__call__]   sð  € Ø $§¡¨A£°·±¸A³ÀÇÁÈAÃ�v�ˆð —-‘-‰ˆˆ1ˆaà—/‘/ ! Q¨¯©¸Ó;ˆØ�|‰|˜A˜q $×":Ñ":¸BÓ?ˆØ×ÒØ×&Ñ& wÓ/ˆGØ×#Ñ# DÓ)ˆDØ×#Ñ# A q¨!¨QÓ/ˆØ�~‰~˜a  A qÓ)ˆØ—‘  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à—.‘.¤§¡Ó,ˆØ�{‰{œ2Ÿ:™:Ó&ˆô —	‘	˜!˜gŸm™m¨BÑ/Ñ/Ó0ˆÜ-Ø�T˜6¨°eÀ$ô
ç
‰&�—‘Ó
ð 	ð ×!Ñ! ! Q¨¨1Ó-×5Ñ5°a¸¸BÓ?ˆØ�{‰{˜6Ó"Ð"r!   )NN©r   r   r   r
   r)   r=   r>   r?   s   @r"   rA   rA   ,   s   ø„ ð.˜yõ .÷`##r!   rA   c                   ó>   ‡ — e Zd Zˆ fd„Zdej
                  fd„Zˆ xZS )ÚMLPc                 óÐ   •— t         ‰| �  «        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        y ©NFrD   )r(   r)   r+   rI   Ú	gate_projÚ	down_projÚup_proj)r.   ÚdimÚ
hidden_dimr2   s      €r"   r)   zMLP.__init__„   sJ   ø€ Ü‰ÑÔÜŸ™ 3¨
¸Ô?ˆŒÜŸ™ :¨s¸Ô?ˆŒÜ—y‘y  j°uÔ=ˆ�r!   Úreturnc                 ót   — | j                  t        | j                  |«      | j                  |«      «      «      S r4   )rq   r   rp   rr   )r.   r:   s     r"   r=   zMLP.__call__Š   s)   € Ø�~‰~œf T§^¡^°AÓ%6¸¿¹ÀQ»ÓHÓIÐIr!   )r   r   r   r)   r5   Úarrayr=   r>   r?   s   @r"   rm   rm   ƒ   s   ø„ ô>ðJ˜RŸX™X÷ Jr!   rm   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚDecoderLayerrB   c                 óŠ  •— t         ‰| �  «        t        |¬«      | _        t	        |j
                  |j                  «      | _        t        j                  |j
                  |j                  ¬«      | _        |j                  | _        | j                  s1t        j                  |j
                  |j                  ¬«      | _        y y )N)rB   rG   )r(   r)   rA   Ú	self_attnrm   r   r   Úmlpr+   r,   r   Úinput_layernormr   Úpost_attention_layernormrR   s     €r"   r)   zDecoderLayer.__init__�   s˜   ø€ Ü‰ÑÔÜ"¨&Ô1ˆŒÜ�v×)Ñ)¨6×+CÑ+CÓDˆŒÜ!Ÿ|™|Ø×ÑØ×%Ñ%ô 
ˆÔð &,×%AÑ%AˆÔ"Ø×)Ò)Ü,.¯L©LØ×"Ñ"Ø×)Ñ)ô-ˆDÕ)ð *r!   c                 óì   — | j                  |«      }| j                  |||«      }| j                  r||z   | j                  |«      z   }|S ||z   }| j                  | j	                  |«      «      }||z   }|S r4   )r}   r{   r   r|   r~   )r.   r:   rZ   rX   ÚhÚrÚouts          r"   r=   zDecoderLayer.__call__ž   s|   € Ø× Ñ  Ó#ˆØ�N‰N˜1˜d EÓ*ˆà×%Ò%Ø�a‘%˜$Ÿ(™( 1›+Ñ%ˆCð
 ˆ
ð �A‘ˆAØ—‘˜×6Ñ6°qÓ9Ó:ˆAØ�a‘%ˆCØˆ
r!   rk   r?   s   @r"   ry   ry   Ž   s   ø„ ð˜yõ ö
r!   ry   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚStableLMrB   c                 óL  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  «      D �cg c]  }t        |«      ‘Œ c}| _
        t        j                  |j
                  |j                  ¬«      | _        y c c}w )NrG   )r(   r)   r+   Ú	Embeddingr   r   Úembed_tokensr*   r   ry   Úlayersr,   r   Únorm)r.   rB   Úir2   s      €r"   r)   zStableLM.__init__¬   sy   ø€ Ü‰ÑÔÜŸL™L¨×):Ñ):¸F×<NÑ<NÓOˆÔÜ5:¸6×;SÑ;SÔ5TÓUÑ5T°”| FÕ+Ð5TÑUˆŒÜ—L‘L ×!3Ñ!3¸×9NÑ9NÔOˆ�	ùò Vs   ÁB!c                 óì   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||¬«      }Œ | j                  |«      S )Nr   )rX   )r‡   Úlenrˆ   r   Úzipr‰   )r.   r:   rX   rZ   ÚlayerÚcs         r"   r=   zStableLM.__call__²   ss   € Ø×Ñ˜aÓ ˆØˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©Ó1ˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜ QÔ'‰Að 0ð �y‰y˜‹|Ðr!   rk   r?   s   @r"   r„   r„   «   s   ø„ ðP˜yõ Pö
r!   r„   c                   óp   ‡ — 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 )ÚModelrB   c                 óÔ   •— t         ‰| �  «        |j                  | _        t        |«      | _        t        j                  |j                  |j                  d¬«      | _	        || _
        y ro   )r(   r)   r   r„   Úmodelr+   rI   r   r   Úlm_headÚargsrR   s     €r"   r)   zModel.__init__À   sN   ø€ Ü‰ÑÔØ ×+Ñ+ˆŒÜ˜fÓ%ˆŒ
Ü—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒØˆ�	r!   r:   ru   c                 óH   — | j                  ||«      }| j                  |«      S r4   )r“   r”   )r.   r:   rX   Úys       r"   r=   zModel.__call__Ç   s"   € ð
 �J‰J�q˜%Ó ˆØ�|‰|˜A‹Ðr!   c                 ó.   — | j                   j                  S r4   )r“   rˆ   )r.   s    r"   rˆ   zModel.layersÏ   s   € à�z‰z× Ñ Ð r!   r4   )r   r   r   r
   r)   r5   rw   r=   Úpropertyrˆ   r>   r?   s   @r"   r‘   r‘   ¿   sG   ø„ ð˜yõ ð ñà�8‰8ðð 
�‰ó	ð ñ!ó ô!r!   r‘   )ra   Údataclassesr   Úmlx.coreÚcorer5   Úmlx.nnr+   Úactivationsr   rF   r   r   r   r
   ÚModuler$   rA   rm   ry   r„   r‘   r    r!   r"   Ú<module>r       sœ   ðó Ý !å Ý å ß TÑ Tð ô�ó ó ðô ?�r—y‘yô ?ôT#�—	‘	ô T#ônJˆ"�)‰)ô Jô�2—9‘9ô ô:ˆr�y‰yô ô(!ˆB�I‰Iõ !r!   