Ë
    îÿæiå  ã                   ót  — d dl mZ d dl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 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)é    )Ú	dataclass)ÚAnyÚOptionalNé   )Úswiglu)ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attentionc                   óÀ   — e Zd ZU 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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d<   dZeed<   dZeed<   y)Ú	ModelArgsÚ
model_typei    Úhidden_sizeé(   Únum_hidden_layersi X  Úintermediate_sizeé@   Únum_attention_headsÚnum_key_value_headsg    €„^AÚ
rope_thetai è Ú
vocab_sizegñhãˆµøä>Úlayer_norm_epsg      °?Úlogit_scaleFÚattention_biasÚlayer_norm_biasÚuse_qk_normN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   Úintr   r   r   r   r   Úfloatr   r   r   r   Úboolr   r   © ó    úi/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/cohere.pyr   r      sƒ   … àƒOØ€K�ÓØÐ�sÓØ"Ð�sÓ"Ø!Ð˜Ó!Ø!Ð˜Ó!Ø!€J�Ó!Ø€J�ÓØ!€N�EÓ!Ø€K�ÓØ €N�DÓ Ø!€O�TÓ!Ø€K�Ôr%   r   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚLayerNorm2Dc                 óh   •— t         ‰| �  «        t        j                  ||f«      | _        || _        y ©N)ÚsuperÚ__init__ÚmxÚzerosÚweightÚeps)ÚselfÚd1Úd2r0   Ú	__class__s       €r&   r,   zLayerNorm2D.__init__    s)   ø€ Ü‰ÑÔÜ—h‘h  B˜xÓ(ˆŒØˆ�r%   c                 ót   — | j                   t        j                  j                  |d d | j                  «      z  S r*   )r/   r-   ÚfastÚ
layer_normr0   ©r1   Úxs     r&   Ú__call__zLayerNorm2D.__call__%   s*   € Ø�{‰{œRŸW™W×/Ñ/°°4¸¸t¿x¹xÓHÑHÐHr%   ©r   r   r   r,   r:   Ú__classcell__©r4   s   @r&   r(   r(      s   ø„ ôö
I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                  |j                  z  }|dz  | _        |j                  }t        j                  |||z  |¬«      | _        t        j                  |||z  |¬«      | _        t        j                  |||z  |¬«      | _        t        j                  ||z  ||¬«      | _        |j                   | _        | j                   rNt#        | j
                  ||j$                  ¬«      | _        t#        | j                  ||j$                  ¬«      | _        t        j*                  |d|j,                  ¬«      | _        y )Ng      à¿©Úbias)r0   T)ÚtraditionalÚbase)r+   r,   r@   r   r   Ún_headsr   Ú
n_kv_headsÚscaler   ÚnnÚLinearÚq_projÚk_projÚv_projÚo_projr   r(   r   Úq_normÚk_normÚRoPEr   Úrope)r1   r@   ÚdimrF   rG   Úhead_dimÚattetion_biasr4   s          €r&   r,   zAttention.__init__*   s<  ø€ Ü‰ÑÔØˆŒ	à×ÑˆØ!%×!9Ñ!9Ð9ˆŒ�wØ'+×'?Ñ'?Ð?ˆŒ˜*à×#Ñ# t×'?Ñ'?Ñ?ˆØ˜t‘^ˆŒ
à×+Ñ+ˆä—i‘i  W¨xÑ%7¸mÔLˆŒÜ—i‘i  Z°(Ñ%:ÀÔOˆŒÜ—i‘i  Z°(Ñ%:ÀÔOˆŒÜ—i‘i ¨(Ñ 2°C¸mÔLˆŒà×+Ñ+ˆÔØ×ÒÜ% d§l¡l°HÀ$×BUÑBUÔVˆDŒKÜ%Ø—‘ ¨t×/BÑ/BôˆDŒKô —G‘G˜H°$¸T¿_¹_ÔMˆ�	r%   r9   ÚmaskÚcacheÚreturnc                 ó–  — |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                  |«      }t        |||	|| j                  |¬«      }
|
j                  dddd«      j	                  ||d«      }
| j!                  |
«      S )Néÿÿÿÿr   é   r   é   )Úoffset)rW   rH   rV   )ÚshaperK   rL   rM   ÚreshaperF   rG   r   rO   rP   Ú	transposerR   r]   Úupdate_and_fetchr
   rH   rN   )r1   r9   rV   rW   ÚBÚLÚDÚqueriesÚkeysÚvaluesÚoutputs              r&   r:   zAttention.__call__E   s”  € ð —'‘'‰ˆˆ1ˆaà $§¡¨A£°·±¸A³ÀÇÁÈAÃ�v�ˆà—/‘/ ! Q¨¯©°bÓ9ˆØ�|‰|˜A˜q $§/¡/°2Ó6ˆØ×ÒØ—k‘k 'Ó*ˆGØ—;‘;˜tÓ$ˆDà×#Ñ# A q¨!¨QÓ/ˆØ�~‰~˜a  A qÓ)ˆØ—‘  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Ó?ˆØ�{‰{˜6Ó"Ð"r%   ©NN©r   r   r   r   r,   r-   Úarrayr   r   r:   r<   r=   s   @r&   r?   r?   )   sY   ø„ ðN˜Yõ Nð< $(Ø#ñ	!#à�8‰8ð!#ð �r—x‘xÑ ð!#ð ˜‰}ð	!#ð
 
�‰÷!#r%   r?   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚMLPc                 óÐ   •— t         ‰| �  «        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        y )NFrB   )r+   r,   rI   rJ   Ú	gate_projÚup_projÚ	down_proj)r1   rS   Ú
hidden_dimr4   s      €r&   r,   zMLP.__init__j   sJ   ø€ Ü‰ÑÔÜŸ™ 3¨
¸Ô?ˆŒÜ—y‘y  j°uÔ=ˆŒÜŸ™ :¨s¸Ô?ˆ�r%   c                 ót   — | j                  t        | j                  |«      | j                  |«      «      «      S r*   )rq   r   ro   rp   r8   s     r&   r:   zMLP.__call__p   s)   € Ø�~‰~œf T§^¡^°AÓ%6¸¿¹ÀQ»ÓHÓIÐIr%   r;   r=   s   @r&   rm   rm   i   s   ø„ ô@öJr%   rm   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                 óT  •— t         ‰| �  «        |j                  | _        |j                  | _        t        |«      | _        t        |j                  |j                  «      | _	        t        j                  |j                  |j                  |j                  ¬«      | _        || _        y )N©r0   rC   )r+   r,   r   r   rF   r?   Ú	self_attnrm   r   ÚmlprI   Ú	LayerNormr   r   Úinput_layernormr@   ©r1   r@   r4   s     €r&   r,   zTransformerBlock.__init__u   s�   ø€ Ü‰ÑÔØ×+Ñ+ˆÔØ×/Ñ/ˆŒä" 4›ˆŒÜ�t×'Ñ'¨×)?Ñ)?Ó@ˆŒÜ!Ÿ|™|Ø×Ñ $×"5Ñ"5¸D×<PÑ<Pô 
ˆÔð ˆ�	r%   r9   rV   rW   rX   c                 ó|   — | j                  |«      }| j                  |||«      }| j                  |«      }||z   |z   S r*   )r{   rx   ry   )r1   r9   rV   rW   ÚhÚattn_hÚff_hs          r&   r:   zTransformerBlock.__call__�   sB   € ð × Ñ  Ó#ˆØ—‘  4¨Ó/ˆØ�x‰x˜‹{ˆØ˜‰}˜qÑ Ð r%   ri   rj   r=   s   @r&   ru   ru   t   sW   ø„ ð
˜Yõ 
ð $(Ø#ñ		!à�8‰8ð	!ð �r—x‘xÑ ð	!ð ˜‰}ð		!ð
 
�‰÷	!r%   ru   c                   óH   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zˆ xZS )ÚCohereModelr@   c                 óØ  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        | j                  dkD  sJ ‚t        j                  |j                  |j                  «      | _        t        |j                  «      D �cg c]  }t        |¬«      ‘Œ c}| _        t        j                  |j                  |j                  |j                  ¬«      | _        y c c}w )Nr   )r@   rw   )r+   r,   r@   r   r   rI   Ú	Embeddingr   Úembed_tokensÚrangeru   Úlayersrz   r   r   Únorm)r1   r@   Ú_r4   s      €r&   r,   zCohereModel.__init__Ž   sº   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒØ!%×!7Ñ!7ˆÔØ�‰ Ò"Ð"Ð"ÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔä16°t×7MÑ7MÔ1Nó
Ù1N¨AÔ $Ö'Ð1Nñ
ˆŒô —L‘LØ×Ñ $×"5Ñ"5¸D×<PÑ<Pô
ˆ�	ùò
s   ÂC'Úinputsc                 óê   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Nr   )r…   Úlenr‡   r	   Úziprˆ   )r1   rŠ   rW   r~   rV   ÚlayerÚcs          r&   r:   zCohereModel.__call__œ   su   € ð
 ×Ñ˜fÓ%ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©Ó1ˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜˜qÓ!‰Að 0ð �y‰y˜‹|Ðr%   r*   )	r   r   r   r   r,   r-   rk   r:   r<   r=   s   @r&   r‚   r‚   �   s%   ø„ ð
˜Yõ 
ð" ñà—‘÷r%   r‚   c                   óX   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zed„ «       Z	ˆ xZ
S )ÚModelr@   c                 ór   •— t         ‰| �  «        |j                  | _        t        |«      | _        || _        y r*   )r+   r,   r   r‚   Úmodelr@   r|   s     €r&   r,   zModel.__init__¯   s,   ø€ Ü‰ÑÔØŸ/™/ˆŒÜ  Ó&ˆŒ
Øˆ�	r%   rŠ   c                 óº   — | j                  ||«      }| j                   j                  j                  |«      }|| j                   j                  j                  z  }|S r*   )r“   r…   Ú	as_linearr@   r   )r1   rŠ   rW   Úouts       r&   r:   zModel.__call__µ   sK   € ð
 �j‰j˜ Ó'ˆØ�j‰j×%Ñ%×/Ñ/°Ó4ˆØ�D—J‘J—O‘O×/Ñ/Ñ/ˆØˆ
r%   c                 ó.   — | j                   j                  S r*   )r“   r‡   )r1   s    r&   r‡   zModel.layers¿   s   € à�z‰z× Ñ Ð r%   r*   )r   r   r   r   r,   r-   rk   r:   Úpropertyr‡   r<   r=   s   @r&   r‘   r‘   ®   s9   ø„ ð˜Yõ ð ñà—‘óð ñ!ó ô!r%   r‘   )Údataclassesr   Útypingr   r   Úmlx.coreÚcorer-   Úmlx.nnrI   Úactivationsr   rE   r   r	   r
   r   ÚModuler(   r?   rm   ru   r‚   r‘   r$   r%   r&   Ú<module>r       s�   ðõ "ß  å Ý å ß TÑ Tð ô�ó ó ðô I�"—)‘)ô Iô=#�—	‘	ô =#ô@Jˆ"�)‰)ô Jô!�r—y‘yô !ô2�"—)‘)ô ôB!ˆB�I‰Iõ !r%   