Ë
    îÿæi+  ã                   óF  — 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
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y)é    )Ú	dataclass)ÚAnyÚOptionalNé   )Ú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<   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y	)Ú	ModelArgsÚ
model_typeÚn_embdÚn_layerÚn_innerÚn_headÚn_positionsÚlayer_norm_epsilonÚ
vocab_sizeNÚnum_key_value_headsTÚmulti_queryÚattention_biasÚmlp_biasÚtie_word_embeddingsc                 ó\   — | j                   € | j                  rdn| j                  | _         y y )Nr   )r   r   r   ©Úselfs    ún/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/gpt_bigcode.pyÚ__post_init__zModelArgs.__post_init__   s)   € Ø×#Ñ#Ð+Ø,0×,<Ò,<¡qÀ$Ç+Á+ˆDÕ$ð ,ó    )Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatr   r   Úboolr   r   r   r   © r   r   r   r      sf   … àƒOØƒKØƒLØƒLØƒKØÓØÓØƒOØ#Ð˜Ó#Ø€K�ÓØ€N�DÓØ€HˆdÓØ $Ð˜Ó$óN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                  x| _        }|j                  x| _        }|j                  rdn|j                  x| _        }||z  x| _        }||z  | _	        |dz  | _
        t        |d«      r|j                  }nd}t        j                  ||d| j                  z  z   |¬«      | _        t        j                  |||¬«      | _        y )Nr   g      à¿r   Fé   ©Úbias)ÚsuperÚ__init__r   Údimr   Ún_headsr   Ú
n_kv_headsÚhead_dimÚkv_dimÚscaleÚhasattrr   ÚnnÚLinearÚc_attnÚc_proj)r   r*   r1   r2   r3   r4   r   Ú	__class__s          €r   r0   zAttention.__init__#   s¿   ø€ Ü‰ÑÔàŸ™Ð$ˆŒ�3Ø!%§¡Ð,ˆŒ�wØ,0×,<Ò,<¡qÀ$Ç+Á+ÐMˆŒ˜*à#&¨'¡>Ð1ˆŒ˜à  8Ñ+ˆŒà˜t‘^ˆŒ
ä�4Ð)Ô*Ø!×0Ñ0‰Nà"ˆNä—i‘i  S¨1¨t¯{©{©?Ñ%:ÀÔPˆŒÜ—i‘i  S¨~Ô>ˆ�r   ÚxÚmaskÚcacheÚreturnc                 ó²  — |j                   \  }}}| j                  |«      }t        j                  || j                  | j                  | j
                  z   gd¬«      \  }}	}
|j                  ||| j                  d«      j                  dddd«      }|	j                  ||| j                  d«      j                  dddd«      }	|
j                  ||| j                  d«      j                  dddd«      }
|�|j                  |	|
«      \  }	}
t        ||	|
|| j                  |¬«      }|j                  dddd«      j                  ||d«      }| j                  |«      S )Néÿÿÿÿ)Úaxisr   r,   r   é   )r?   r6   r>   )Úshaper:   ÚmxÚsplitr1   r5   Úreshaper2   Ú	transposer3   Úupdate_and_fetchr	   r6   r;   )r   r=   r>   r?   ÚBÚLÚDÚqkvÚqueriesÚkeysÚvaluesÚoutputs               r   Ú__call__zAttention.__call__8   s<  € ð —'‘'‰ˆˆ1ˆaà�k‰k˜!‹nˆÜ "§¡Ø�$—(‘(˜DŸH™H t§{¡{Ñ2Ð3¸"ô!
Ñˆ��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ˆàÐØ ×1Ñ1°$¸Ó?‰LˆD�&ä-Ø�T˜6¨°d·j±jÀtô
ˆð ×!Ñ! ! Q¨¨1Ó-×5Ñ5°a¸¸BÓ?ˆØ�{‰{˜6Ó"Ð"r   ©NN©r   r    r!   r   r0   rF   Úarrayr   r   rS   Ú__classcell__©r<   s   @r   r)   r)   "   sW   ø„ ð?˜Yõ ?ð0 $(Ø#ñ	#à�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                 óü   •— t         ‰| �  «        |j                  }|j                  }t	        |d«      r|j
                  }nd}t        j                  |||¬«      | _        t        j                  |||¬«      | _	        y )Nr   Fr-   )
r/   r0   r   r   r7   r   r8   r9   Úc_fcr;   )r   r*   r1   Ú
hidden_dimr   r<   s        €r   r0   zMLP.__init__U   s`   ø€ Ü‰ÑÔà�k‰kˆØ—\‘\ˆ
Ü�4˜Ô$Ø—}‘}‰HàˆHä—I‘I˜c :°HÔ=ˆŒ	Ü—i‘i 
¨C°hÔ?ˆ�r   r@   c                 óh   — | j                  t        j                  | j                  |«      «      «      S ©N)r;   r8   Úgelur\   )r   r=   s     r   rS   zMLP.__call__b   s"   € Ø�{‰{œ2Ÿ7™7 4§9¡9¨Q£<Ó0Ó1Ð1r   ©	r   r    r!   r   r0   rF   rV   rS   rW   rX   s   @r   rZ   rZ   T   s!   ø„ ð@˜Yõ @ð2˜RŸX™X÷ 2r   rZ   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        |«      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  |j                  ¬«      | _        || _        y )N©Úeps)r/   r0   r   r   r)   ÚattnrZ   Úmlpr8   Ú	LayerNormr   Úln_1Úln_2r*   ©r   r*   r<   s     €r   r0   zTransformerBlock.__init__g   sy   ø€ Ü‰ÑÔØ—k‘kˆŒØ—k‘kˆŒÜ˜d“OˆŒ	Ü�t“9ˆŒÜ—L‘L §¡°$×2IÑ2IÔJˆŒ	Ü—L‘L §¡°$×2IÑ2IÔJˆŒ	Øˆ�	r   r=   r>   r?   r@   c                 óž   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   }|S r_   )rg   rj   rh   rk   )r   r=   r>   r?   ÚrÚhÚouts          r   rS   zTransformerBlock.__call__q   sK   € ð �I‰I�d—i‘i “l D¨%Ó0ˆØ�‰EˆØ�H‰H�T—Y‘Y˜q“\Ó"ˆØ�!‰eˆØˆ
r   rT   rU   rX   s   @r   rc   rc   f   sW   ø„ ð˜Yõ ð $(Ø#ñ	
à�8‰8ð
ð �r—x‘xÑ ð
ð ˜‰}ð	
ð
 
�‰÷
r   rc   c                   óH   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zˆ xZS )ÚGPTBigCodeModelr*   c                 óþ  •— t         ‰| �  «        || _        |j                  | _        | j                  dkD  sJ ‚t	        j
                  |j                  |j                  «      | _        t	        j
                  |j                  |j                  «      | _	        t        |j                  «      D �cg c]  }t        |¬«      ‘Œ c}| _        t	        j                  |j                  |j                  ¬«      | _        y c c}w )Nr   )r*   re   )r/   r0   r*   r   r8   Ú	Embeddingr   Úwter   ÚwpeÚranger   rc   ro   ri   r   Úln_f)r   r*   Ú_r<   s      €r   r0   zGPTBigCodeModel.__init__   s±   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒØ�‰ Ò"Ð"Ð"Ü—<‘< §¡°·±Ó=ˆŒÜ—<‘< × 0Ñ 0°$·+±+Ó>ˆŒÜ7<¸T¿\¹\Ô7JÓKÑ7J°!Ô"¨Ö-Ð7JÑKˆŒÜ—L‘L §¡°$×2IÑ2IÔJˆ�	ùò Ls   Â.C:Úinputsc                 ó  — |j                   \  }}| j                  |«      }|€Bd gt        | j                  «      z  }t	        j
                  t        j                  |«      «      }nFt	        j
                  t        j                  |d   j                  |d   j                  |z   «      «      }t        ||d   «      }|| j                  |«      z  }t        | j                  |«      D ]  \  }}	 ||||	¬«      }Œ | j                  |«      S )Nr   )r?   )rE   ru   Úlenro   rF   rV   ÚnpÚarangeÚoffsetr   rv   Úziprx   )
r   rz   r?   rK   rL   Úhidden_statesÚposition_idsr>   ÚlayerÚcs
             r   rS   zGPTBigCodeModel.__call__‰   sØ   € ð
 �|‰|‰ˆˆ1àŸ™ Ó(ˆàˆ=Ø�FœS §¡›[Ñ(ˆEÜŸ8™8¤B§I¡I¨a£LÓ1‰LäŸ8™8¤B§I¡I¨e°A©h¯o©o¸uÀQ¹x¿¹ÐQRÑ?RÓ$SÓTˆLä$ ]°E¸!±HÓ=ˆà˜Ÿ™ ,Ó/Ñ/ˆä˜DŸF™F EÖ*‰HˆE�1Ù! -°¸QÔ?‰Mð +ð �y‰y˜Ó'Ð'r   r_   ra   rX   s   @r   rr   rr   ~   s'   ø„ ðK˜Yõ Kð ñ(à—‘÷(r   rr   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                 óî   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        |j                  s2t        j                  |j                  |j                  d¬«      | _        y y )NFr-   )r/   r0   r*   r   rr   Útransformerr   r8   r9   r   r   Úlm_headrl   s     €r   r0   zModel.__init__£   sW   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ*¨4Ó0ˆÔØ×'Ò'ÜŸ9™9 T§[¡[°$·/±/ÈÔNˆD�Lð (r   rz   c                 óÆ   — | j                  ||«      }| j                  j                  r'| j                   j                  j	                  |«      }|S | j                  |«      }|S r_   )rˆ   r*   r   ru   Ú	as_linearr‰   )r   rz   r?   rp   s       r   rS   zModel.__call__«   s[   € ð
 ×Ñ˜v uÓ-ˆØ�9‰9×(Ò(Ø×"Ñ"×&Ñ&×0Ñ0°Ó5ˆCð ˆ
ð —,‘,˜sÓ#ˆCØˆ
r   c                 ó.   — | j                   j                  S r_   )rˆ   ro   r   s    r   ÚlayerszModel.layers·   s   € à×Ñ×!Ñ!Ð!r   r_   )r   r    r!   r   r0   rF   rV   rS   Úpropertyr�   rW   rX   s   @r   r†   r†   ¢   s;   ø„ ðO˜Yõ Oð ñ
à—‘ó
ð ñ"ó ô"r   r†   )Údataclassesr   Útypingr   r   Úmlx.coreÚcorerF   Úmlx.nnr8   Únumpyr}   Úbaser   r   r	   r   ÚModuler)   rZ   rc   rr   r†   r'   r   r   Ú<module>r—      sŒ   ðõ "ß  å Ý Û ç TÑ Tð ôN�ó Nó ðNô(/#�—	‘	ô /#ôd2ˆ"�)‰)ô 2ô$�r—y‘yô ô0!(�b—i‘iô !(ôH"ˆB�I‰Iõ "r   