Ë
    îÿæi$  ã                   óÐ  — 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 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 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                   óT   — 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<   y)	Ú	ModelArgsÚ
model_typeÚ
vocab_sizeÚd_modelÚ
ffn_configÚattn_configÚn_layersÚn_headsN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚdict© ó    úg/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/dbrx.pyr   r      s'   … àƒOØƒOØƒLØÓØÓØƒMØ„Lr   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                  | _        |j                  |j                  z  | _        |j                  d   | _        |j                  d   | _        |j                  d   | _	        | j
                  dz  | _
        t        j                  |j                  | j                  dz  | j                  z   | j
                  z  d¬«      | _        t        j                  |j                  |j                  d¬«      | _        t        j                  | j
                  d| j                  ¬«      | _        y )	NÚ
kv_n_headsÚclip_qkvÚ
rope_thetag      à¿é   F©Úbias)ÚtraditionalÚbase)ÚsuperÚ__init__r   Ú	num_headsr   Úhead_dimr   Únum_key_value_headsr#   r$   ÚscaleÚnnÚLinearÚWqkvÚout_projÚRoPEÚrope©Úselfr    Ú	__class__s     €r   r+   zAttention.__init__   sø   ø€ Ü‰ÑÔØŸ™ˆŒØ—|‘|ˆŒØŸ™¨¯©Ñ4ˆŒØ#'×#3Ñ#3°LÑ#AˆÔ Ø×(Ñ(¨Ñ4ˆŒØ×*Ñ*¨<Ñ8ˆŒà—]‘] DÑ(ˆŒ
ä—I‘IØ�L‰LØ×%Ñ%¨Ñ)¨D¯N©NÑ:¸d¿m¹mÑKØô
ˆŒ	ô
 Ÿ	™	 $§,¡,°·±À5ÔIˆŒÜ—G‘GØ�M‰MØØ—‘ô
ˆ�	r   ÚxÚmaskÚcacheÚreturnc                 óä  — | j                  |«      }t        j                  || j                   | j                  ¬«      }| j                  | j                  | j
                  | j                  z  z   g}t        j                  ||d¬«      \  }}}|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)Úa_minÚa_maxéÿÿÿÿ©Úaxisr   r%   r   é   )Úoffset)r;   r/   r:   )r2   ÚmxÚclipr#   r   r-   r.   ÚsplitÚshapeÚreshaper,   Ú	transposer5   rD   Úupdate_and_fetchr
   r/   r3   )r7   r9   r:   r;   ÚqkvÚsplitsÚqueriesÚkeysÚvaluesÚBÚLÚDÚoutputs                r   Ú__call__zAttention.__call__1   s·  € ð �i‰i˜‹lˆÜ�g‰g�c $§-¡- °t·}±}ÔEˆØ—,‘, §¡¨t¯}©}¸t×?WÑ?WÑ/WÑ WÐXˆÜ "§¡¨¨f¸2Ô >Ñˆ��và—'‘'‰ˆˆ1ˆað —/‘/ ! Q¨¯©¸Ó;×EÑEÀaÈÈAÈ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Ó?ˆØ�}‰}˜VÓ$Ð$r   ©NN©r   r   r   r   r+   rE   Úarrayr   r   rU   Ú__classcell__©r8   s   @r   r   r      sW   ø„ ð
˜Yõ 
ð4 $(Ø#ñ	!%à�8‰8ð!%ð �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 )	ÚNormAttnNormr    c                 óÚ   •— t         ‰| �  «        t        j                  |j                  d¬«      | _        t        j                  |j                  d¬«      | _        t        |«      | _        y ©NFr&   )	r*   r+   r0   Ú	LayerNormr   Únorm_1Únorm_2r   Úattnr6   s     €r   r+   zNormAttnNorm.__init__V   sE   ø€ Ü‰ÑÔÜ—l‘l 4§<¡<°eÔ<ˆŒÜ—l‘l 4§<¡<°eÔ<ˆŒÜ˜d“Oˆ�	r   r9   r:   r;   r<   c                 óx   — | j                  | j                  |«      ||¬«      }||z   }|| j                  |«      fS )N)r:   r;   )rb   r`   ra   )r7   r9   r:   r;   Úhs        r   rU   zNormAttnNorm.__call__\   s<   € ð �I‰I�d—k‘k !“n¨4°uˆIÓ=ˆØ�‰EˆØ�$—+‘+˜a“.Ð Ð r   rV   rW   rZ   s   @r   r\   r\   U   sW   ø„ ð$˜Yõ $ð $(Ø#ñ	!à�8‰8ð!ð �r—x‘xÑ ð!ð ˜‰}ð	!ð
 
�‰÷!r   r\   c                   ó`   ‡ — e Zd Zdedefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚMLPr   Úffn_dimc                 óÐ   •— t         ‰| �  «        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        y r^   )r*   r+   r0   r1   Úv1Úw1Úw2)r7   r   rg   r8   s      €r   r+   zMLP.__init__h   sJ   ø€ Ü‰ÑÔÜ—)‘)˜G W°5Ô9ˆŒÜ—)‘)˜G W°5Ô9ˆŒÜ—)‘)˜G W°5Ô9ˆ�r   r9   r<   c                 ó|   — t        | j                  |«      | j                  |«      «      }| j                  |«      }|S ©N)r   rj   ri   rk   )r7   r9   Úcurrent_hidden_statess      r   rU   zMLP.__call__n   s5   € Ü & t§w¡w¨q£z°4·7±7¸1³:Ó >ÐØ $§¡Ð(=Ó >ÐØ$Ð$r   ©	r   r   r   r   r+   rE   rX   rU   rY   rZ   s   @r   rf   rf   g   s1   ø„ ð: ð :¨cõ :ð%˜"Ÿ(™(ð % r§x¡x÷ %r   rf   c                   óH   ‡ — e Zd Zdedefˆ fd„Zdej                  fd„Zˆ xZS )ÚRouterr   Únum_expertsc                 ó\   •— t         ‰| �  «        t        j                  ||d¬«      | _        y r^   )r*   r+   r0   r1   Úlayer)r7   r   rr   r8   s      €r   r+   zRouter.__init__u   s"   ø€ Ü‰ÑÔÜ—Y‘Y˜w¨¸%Ô@ˆ�
r   r9   c                 ó$   — | j                  |«      S rm   )rt   )r7   r9   s     r   rU   zRouter.__call__y   s   € Ø�z‰z˜!‹}Ðr   ro   rZ   s   @r   rq   rq   t   s)   ø„ ðA ð A°#õ Að˜"Ÿ(™(÷ r   rq   c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚSparseMoeBlockr    c                 óœ  •— t         ‰| �  «        |j                  | _        |j                  d   | _        |j                  d   | _        |j                  d   | _        t        | j                  | j
                  «      | _        t        | j
                  «      D �cg c]"  }t        | j                  | j                  «      ‘Œ$ c}| _        y c c}w )NÚffn_hidden_sizeÚmoe_num_expertsÚ	moe_top_k)r*   r+   r   r   rg   rr   Únum_experts_per_tokrq   ÚrouterÚrangerf   Úexperts©r7   r    Ú_r8   s      €r   r+   zSparseMoeBlock.__init__~   s    ø€ Ü‰ÑÔØ—|‘|ˆŒØ—‘Ð'8Ñ9ˆŒØŸ?™?Ð+<Ñ=ˆÔØ#'§?¡?°;Ñ#?ˆÔ ä˜TŸ\™\¨4×+;Ñ+;Ó<ˆŒä5:¸4×;KÑ;KÔ5Ló
Ù5L°ŒC�—‘˜dŸl™lÕ+Ð5Lñ
ˆ�ùò 
s   Â'C	r9   r<   c           	      óZ  — | j                   }|j                  }|j                  d|j                  d   «      }| j                  |«      }t	        j
                  |j                  t        j                  «      d¬«      }t	        j                  t	        j                  | |dz
  d¬«      d d …d |…f   «      }t	        j                  ||d¬«      }|t        j                  j                  |ddd¬«      z  }|j                  |j                  «      }| j                  rât        j                   |«      }t	        j"                  |j                  d   ||j                  d   f|j                  «      }t%        | j&                  «      D ]X  \  }}	t)        t        j                   t        j*                  ||k(  «      «      \  }
}|
j,                  dk(  rŒI |	||
   «      ||
|f<   ŒZ ||d d …d d …d f   z  j/                  d¬«      }n›g }t1        |||j3                  «       «      D ]d  \  }}}t	        j4                  |D �cg c]  } | j&                  |   |«      ‘Œ c}d¬«      }||z  j/                  d¬«      }|j7                  |«       Œf t	        j4                  |d¬«      }|j                  |«      S c c}w )Nr@   rA   r   )ÚkthrB   T)ÚordrB   Úkeepdimsr   )r|   rH   rI   r}   rE   ÚsoftmaxÚastypeÚfloat32Ústop_gradientÚargpartitionÚtake_along_axisÚlinalgÚnormÚdtypeÚtrainingÚnprX   ÚzerosÚ	enumerater   ÚmapÚwhereÚsizeÚsumÚzipÚtolistÚstackÚappend)r7   r9   ÚneÚ
orig_shapeÚgatesÚindsÚscoresÚyÚeÚexpertÚidx1Úidx2ÚxtÚstÚitÚyts                   r   rU   zSparseMoeBlock.__call__Š   s'  € Ø×%Ñ%ˆØ—W‘Wˆ
Ø�I‰I�b˜!Ÿ'™' "™+Ó&ˆà—‘˜A“ˆÜ—
‘
˜5Ÿ<™<¬¯
©
Ó3¸"Ô=ˆä×Ñ¤§¡°°¸BÀ¹FÈÔ LÊQÐPSÐQSÐPSÈVÑ TÓUˆÜ×#Ñ# E¨4°bÔ9ˆØœ"Ÿ)™)Ÿ.™.¨°Q¸RÈ$˜.ÓOÑOˆØ—‘˜qŸw™wÓ'ˆà�=Š=Ü—8‘8˜D“>ˆDÜ—‘˜!Ÿ'™' !™* b¨!¯'©'°"©+Ð6¸¿¹Ó@ˆAÜ& t§|¡|Ö4‘	��6Ü ¤§¡¬2¯8©8°D¸A±IÓ+>Ó?‘
��dØ—9‘9 ’>ØÙ & q¨¡w£��$˜�*’ð	 5ð �VšAšq $˜JÑ'Ñ'×,Ñ,°!Ð,Ó4‰AàˆAÜ! ! V¨T¯[©[«]Ö;‘
��B˜Ü—X‘X¹BÓ?¹B°q˜˜tŸ|™|¨A™¨rÕ2¸BÑ?ÀbÔI�Ø˜2‘g—]‘]¨�]Ó+�Ø—‘˜•ð <ô —‘˜ Ô#ˆAà�y‰y˜Ó$Ð$ùò @s   È3J(
©	r   r   r   r   r+   rE   rX   rU   rY   rZ   s   @r   rw   rw   }   s*   ø„ ð

˜Yõ 

ð%˜"Ÿ(™(ð % r§x¡x÷ %r   rw   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 )	ÚDecoderLayerr    c                 ób   •— t         ‰| �  «        t        |«      | _        t	        |«      | _        y rm   )r*   r+   rw   Úffnr\   Únorm_attn_normr6   s     €r   r+   zDecoderLayer.__init__­   s'   ø€ Ü‰ÑÔÜ! $Ó'ˆŒÜ*¨4Ó0ˆÕr   r9   r:   r;   r<   c                 óZ   — | j                  |||«      \  }}| j                  |«      |z   }|S rm   )r®   r­   )r7   r9   r:   r;   Úrrd   Úouts          r   rU   zDecoderLayer.__call__²   s2   € ð ×"Ñ" 1 d¨EÓ2‰ˆˆ1Ø�h‰h�q‹k˜A‰oˆØˆ
r   rV   rW   rZ   s   @r   r«   r«   ¬   sW   ø„ ð1˜Yõ 1ð $(Ø#ñ	à�8‰8ðð �r—x‘xÑ ðð ˜‰}ð	ð
 
�‰÷r   r«   c                   óH   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zˆ xZS )ÚDBRXr    c                 ó\  •— t         ‰| �  «        |j                  | _        t        j                  |j                  |j
                  «      | _        t        |j                  «      D �cg c]  }t        |¬«      ‘Œ c}| _
        t        j                  |j
                  d¬«      | _        y c c}w )N)r    Fr&   )r*   r+   r   r0   Ú	Embeddingr   Úwter~   r   r«   Úblocksr_   Únorm_fr€   s      €r   r+   zDBRX.__init__¾   su   ø€ Ü‰ÑÔØŸ/™/ˆŒÜ—<‘< §¡°·±Ó>ˆŒÜ8=¸d¿m¹mÔ8LÓMÑ8L°1”|¨Ö.Ð8LÑMˆŒÜ—l‘l 4§<¡<°eÔ<ˆ�ùò Ns   Á'B)Úinputsc                 óê   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Nr   )r¶   Úlenr·   r	   r—   r¸   )r7   r¹   r;   rd   r:   rt   Úcs          r   rU   zDBRX.__call__Å   ss   € ð
 �H‰H�VÓˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©Ó1ˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜˜qÓ!‰Að 0ð �{‰{˜1‹~Ðr   rm   r©   rZ   s   @r   r³   r³   ½   s%   ø„ ð=˜Yõ =ð ñà—‘÷r   r³   c                   ó^   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zed„ «       Z	d„ Z
ˆ xZS )ÚModelr    c                 óÔ   •— t         ‰| �  «        |j                  | _        t        |«      | _        t        j                  |j                  |j                  d¬«      | _	        || _
        y r^   )r*   r+   r   r³   Útransformerr0   r1   r   r   Úlm_headr    r6   s     €r   r+   zModel.__init__Ø   sH   ø€ Ü‰ÑÔØŸ/™/ˆŒÜ ›:ˆÔÜ—y‘y §¡¨t¯©ÀUÔKˆŒØˆ�	r   r¹   c                 óH   — | j                  ||«      }| j                  |«      S rm   )rÀ   rÁ   )r7   r¹   r;   r±   s       r   rU   zModel.__call__ß   s%   € ð
 ×Ñ˜v uÓ-ˆØ�|‰|˜CÓ Ð r   c                 ó.   — | j                   j                  S rm   )rÀ   r·   )r7   s    r   ÚlayerszModel.layersç   s   € à×Ñ×&Ñ&Ð&r   c           
      ó6  — | j                   j                  d   }| j                   j                  d   }d}|j                  «       D ��ci c]  \  }}||vsŒ||“Œ }}}|j                  «       D ]—  \  }}||v sŒt        t	        j
                  ||d¬«      «      D ��	cg c]  \  }}	|j                  dd|› �«      dz   |	f‘Œ! }
}}	|j                  d	«      r |
D ��	cg c]  \  }}	||	j                  f‘Œ }
}}	|j                  |
«       Œ™ |S c c}}w c c}	}w c c}	}w )
Nrz   ry   zexperts.mlpr   rA   z.mlpÚ.z.weightrk   )
r    r   Úitemsr’   rE   rG   ÚreplaceÚendswithÚTÚupdate)r7   Úweightsrr   ÚdimÚpatternÚkÚvÚnew_weightsr¡   Úsvr   Úss               r   ÚsanitizezModel.sanitizeë   s  € à—i‘i×*Ñ*Ð+<Ñ=ˆØ�i‰i×"Ñ"Ð#4Ñ5ˆàˆØ(/¯©¬ÔL©¡  1¸7È!Ò;K�q˜!‘t¨ˆÑLØ—M‘M–O‰DˆAˆqØ˜!Š|ô "+¬2¯8©8°A°{ÈÔ+KÔ!Lôá!L™˜˜2ð —Y‘Y˜v¨¨1¨# wÓ/°)Ñ;¸RÒ@Ø!Lð ñ ð —:‘:˜dÔ#Ù6=Ô>±g©U¨Q°  2§4¡4šy°g�GÑ>Ø×"Ñ" 7Õ+ð $ð Ðùó Mùóùó
 ?s   ÁD	ÁD	Â$DÃDrm   )r   r   r   r   r+   rE   rX   rU   ÚpropertyrÄ   rÔ   rY   rZ   s   @r   r¾   r¾   ×   s>   ø„ ð˜Yõ ð ñ!à—‘ó!ð ñ'ó ð'ör   r¾   )Údataclassesr   Útypingr   r   Úmlx.coreÚcorerE   Úmlx.nnr0   Únumpyr�   Úactivationsr   r)   r   r	   r
   r   ÚModuler   r\   rf   rq   rw   r«   r³   r¾   r   r   r   Ú<module>rÞ      s¼   ðõ "ß  å Ý Û å ß TÑ Tð ô�ó ó ðô9%�—	‘	ô 9%ôx!�2—9‘9ô !ô$
%ˆ"�)‰)ô 
%ôˆR�Y‰Yô ô,%�R—Y‘Yô ,%ô^�2—9‘9ô ô"ˆ2�9‰9ô ô4$ˆB�I‰Iõ $r   