+
    TV-j:'  ã                   ó”  € ^ RI t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHtH	t	H
t
HtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHtHtHtHt / RRbRRbR	R	bR
RbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRRRRRRR R!R!R"R"R#R#R$R%R&R%R'R(/
Ct^t. R7OtR) R* ltR+ R, ltR8R- R. lltR8R/ R0 lltR9R1 R2 llt R3 R4 lt!R:R5 R6 llt"R# );é    N)ÚPath)Údedent)ÚAnyÚListÚOptionalÚTupleÚUnion)Útree_flatten)Úbase_load_modelÚget_model_classÚget_model_pathÚload_configÚ	qwen3_ttsÚoutettsÚsparkÚmarvisÚsesameÚcsmÚvoxcpmz	voxcpm1.5Úvoxcpm2Úvibevoice_streamingÚ	vibevoiceÚchatterbox_turboÚsopranoÚ	bailingmmÚkittenÚ
kitten_ttsÚecho_ttsÚfish_qwen3_omniÚirodori_ttsÚvoxtral_ttsÚ
kugelaudioÚaudioditÚlongcat_audioditÚlongcatzdramabox-ttsÚdramaboxÚ	omnivoiceÚmelottsÚmoss_tts_nanoÚmoss_tts_delayÚmoss_ttsÚmoss_tts_localÚhiggs_multimodal_qwen3Úhiggs_audio_v3c                ó:   € V ^8„  d   QhR\         \        ,          /# )é   Úreturn)r   Ústr)Úformats   "Úd/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_audio/tts/utils.pyÚ__annotate__r5   5   s   € ÷ ñ œd¤3�iñ ó    c                 ó|  € \        \        4      P                  R,          p . pV P                  4       '       d„   V P	                  4       '       dn   V P                  4        FY  pVP	                  4       '       g   K  VP                  P                  R4      '       d   K>  VP                  VP                  4       K[  	  V# )z�
Get a list of all available TTS model types by scanning the models directory.

Returns:
    List[str]: A list of available model type names
ÚmodelsÚ__)	r   Ú__file__ÚparentÚexistsÚis_dirÚiterdirÚnameÚ
startswithÚappend)Ú
models_dirÚavailable_modelsÚitems      r4   Úget_available_modelsrE   5   s‡   € ô ”h“×&Ñ&¨Õ1€JØÐà×Ñ×Ò˜z×0Ñ0×2Ò2Ø×&Ñ&Ö(ˆDØ�{‰{�}Œ} T§Y¡Y×%9Ñ%9¸$×%?Ô%?Ø ×'Ñ'¨¯	©	Ö2ñ )ð Ðr6   c                ót   € V ^8„  d   QhR\         R\        \         ,          R\        \        \         3,          /# )r0   Ú
model_typeÚ
model_namer1   )r2   r   r   r   )r3   s   "r4   r5   r5   G   s-   € ÷ ñ ¤3ð ´D¼µIð Ä%ÌÌSÈÅ/ñ r6   c                ó(   € \        V VR\        R7      # )aÐ  
Retrieve the model architecture module based on the model type and name.

This function attempts to find the appropriate model architecture by:
1. Checking if the model_type is directly in the MODEL_REMAPPING dictionary
2. Looking for partial matches in segments of the model_name

Args:
    model_type (str): The type of model to load (e.g., "outetts").
    model_name (List[str]): List of model name components that might contain
                           remapping information.

Returns:
    Tuple[module, str]: A tuple containing:
        - The imported architecture module
        - The resolved model_type string after remapping

Raises:
    ValueError: If the model type is not supported (module import fails).
Útts)rG   rH   ÚcategoryÚmodel_remapping)r   ÚMODEL_REMAPPING)rG   rH   s   &&r4   Úget_model_and_argsrN   G   s   € ô* ØØØÜ'ô	ð r6   c          
      óh   € V ^8„  d   QhR\         R\        R\        R\        R\        P                  /# ©r0   Ú
model_pathÚlazyÚstrictÚkwargsr1   )r   Úboolr   ÚnnÚModule)r3   s   "r4   r5   r5   d   s>   € ÷ ñ Üðä
ðô ðô ð	ô
 ‡Y�Yñr6   c                ó4   € \        RRV RRR\        RVRV/VB # )a  
Load and initialize the model from a given path.

Args:
    model_path (Path): The path to load the model from.
    lazy (bool): If False eval the model parameters to make sure they are
        loaded in memory before returning, otherwise they will be loaded
        when needed. Default: ``False``

Returns:
    nn.Module: The loaded and initialized model.

Raises:
    FileNotFoundError: If the weight files (.safetensors) are not found.
    ValueError: If the model class or args class are not found or cannot be instantiated.
rQ   rK   rJ   rL   rR   rS   © )r   rM   ©rQ   rR   rS   rT   s   &&&,r4   Ú
load_modelr[   d   sI   € ô, ñ Øðàðô (ðð ð	ð
 ðð ñð r6   c          
      óŠ   € V ^8„  d   QhR\         \        \        3,          R\        R\        R\        R\
        P                  /# rP   )r	   r2   r   rU   r   rV   rW   )r3   s   "r4   r5   r5   „   sN   € ÷ Fñ FÜ”cœ4�iÕ ðFä
ðFô ðFô ð	Fô
 ‡Y�YñFr6   c                ó"   € \        V 3RVRV/VB # )a3  
Load a text-to-speech model from a local path or HuggingFace repository.

This is the main entry point for loading TTS models. It automatically
detects the model type and initializes the appropriate model class.

Args:
    model_path: The local path or HuggingFace repo ID to load from.
    lazy: If False, evaluate model parameters immediately.
    strict: If True, raise an error if any weights are missing.
    **kwargs: Additional keyword arguments such as `revision` and
        `force_download`.

Returns:
    nn.Module: The loaded and initialized model.

rR   rS   )r[   rZ   s   &&&,r4   Úloadr^   „   s   € ô. �jÑE tÐE°FÐE¸fÑEÐEr6   c          
      ó~   € V ^8„  d   QhR\         R\        R\        R\        \        P
                  \        3,          /# )r0   rQ   rR   rT   r1   )r   rU   r   r   rV   rW   Údict)r3   s   "r4   r5   r5   ž   s9   € ÷ ñ ÜðÜ ðÜ47ðä
Œ2�9‰9”dˆ?Õñr6   c                 ó8   € \        W3/ VB p\        V 3/ VB pW43# ©N)r[   r   )rQ   rR   rT   ÚmodelÚconfigs   &&,  r4   Úfetch_from_hubre   ž   s*   € ô �zÑ2¨6Ñ2€EÜ˜Ñ. vÑ.€FØˆ=Ðr6   c                ó<   € V ^8„  d   QhR\         R\         R\         /# )r0   ÚpathÚupload_repoÚhf_path)r2   )r3   s   "r4   r5   r5   ¦   s&   € ÷ ,Yñ ,Yœð ,Y¬#ð ,Y¼ñ ,Yr6   c                ó  € ^ RI p^ RIHpHpHp ^RIHp VP                  V4      pVP                  P                  f   R.MVP                  P                  R.,           VP                  n	        \        RV RV RV RV R	V R
V R24      Vn        VP                  VP                  P                  V R4      4       VP                  ! 4        V! 4       p	V	P!                  VRR7       V	P#                  V VRR7       \%        RV R24       R# )zÍ
Uploads the model to Hugging Face hub.

Args:
    path (str): Local path to the model.
    upload_repo (str): Name of the HF repo to upload to.
    hf_path (str): Path to the original Hugging Face model.
N)ÚHfApiÚ	ModelCardÚlogging)Ú__version__Úmlxz
        # z7
        This model was converted to MLX format from [`z`](https://huggingface.co/z) using mlx-audio version **zF**.
        Refer to the [original model card](https://huggingface.co/z¹) for more details on the model.
        ## Use with mlx

        ```bash
        pip install -U mlx-audio
        ```

        ```bash
        python -m mlx_audio.tts.generate --model z3 --text "Describe this image."
        ```
        z	README.mdT)Úrepo_idÚexist_okrc   )Úfolder_pathrp   Ú	repo_typez0Upload successful, go to https://huggingface.co/z for details.)ÚosÚhuggingface_hubrk   rl   rm   Úversionrn   r^   ÚdataÚtagsr   ÚtextÚsaverg   ÚjoinÚset_verbosity_infoÚcreate_repoÚupload_folderÚprint)
rg   rh   ri   rt   rk   rl   rm   rn   ÚcardÚapis
   &&&       r4   Úupload_to_hubr‚   ¦   s  € ó ç9Ñ9å%à�>‰>˜'Ó"€DØ $§	¡	§¡Ò 6�e‘W¸D¿I¹I¿N¹NÈeÈWÕ<T€D‡I�I„NÜðØˆ-ð 7Ø7>°iÐ?YÐZaÐYbÐb~ð  @Kð  Lð LCØCJÀ)ð L2ð 3>°ð ?	ð	ó€D„Ið  	‡I�Iˆb�g‰g�l‰l˜4 Ó-Ô.à×ÒÔ á
‹'€CØ‡O�O˜K°$€OÔ7Ø×ÑØØØð ô ô
 
Ð<¸[¸MÈÐ
WÖXr6   c                ó   € V ^8„  d   QhR\         R\         R\        R\        \        ,          R\        \        ,          R\         R\         R\        \         ,          R	\        R
\        R\        \         ,          R\         /# )r0   ri   Úmlx_pathÚquantizeÚq_group_sizeÚq_bitsÚdtyperh   ÚrevisionÚ
dequantizeÚtrust_remote_codeÚquant_predicateÚq_mode)r2   rU   r   Úint)r3   s   "r4   r5   r5   Õ   sž   € ÷ o6ñ o6Üðo6äðo6ô ðo6ô œ3•-ð	o6ô
 ”S�Mðo6ô ðo6ô ðo6ô ”s�mðo6ô ðo6ô ðo6ô œc•]ðo6ô ño6r6   c           	      ó   aaa€ ^ RI Hp ^ RIHpHpHpHp \        R4       \        WR7      p\        VRV	R7      w  pp\        V
\        4      '       d
   V! V
V4      p
\        VRR 4      oV3R	 loV
f   Sp
M	V
oVV3R lp
\        \        VP                  4       4      4      pVf   VP!                  RR
4      pV\"        9   dQ   \        RV4       \        \$        V4      pVP'                  4        UUu/ uF  w  ppVVP)                  V4      bK  	  pppV'       d   V'       d   \+        R4      hV'       dE   \        R4       VP-                  \/        VP'                  4       4      4       V! VVVVVV
R7      w  ppV'       d6   \        R4       V! V4      p\        \        VP                  4       4      4      p\        V\        4      '       d   \1        V4      pVP3                  RRR7       R FØ  p\4        P4                  ! \        VV,          4      4      pV F  p\6        P8                  ! VV4       K  	  \4        P4                  ! \        VR,          V,          4      RR7      pV FZ  p\1        V4      P;                  V4      pVVP<                  ,          pVP3                  RRR7       \6        P8                  ! VV4       K\  	  KÚ  	  V! VVRR7       V! VVR,          R7       Ve   \?        WV 4       R
# R
# u uppi )r   )Úmixed_quant_predicate_builder)Údequantize_modelÚquantize_modelÚsave_configÚ
save_modelz[INFO] Loading)r‰   T)rR   r‹   Úmodel_quant_predicatec                 ó   € R # )TrY   )ÚpÚms   &&r4   Ú<lambda>Úconvert.<locals>.<lambda>ð   s   € ÑQUr6   c                 óÂ   <€ \        VR 4      ;'       dL    VP                  P                  R,          ^@,          ^ 8H  ;'       d    \        VR4      ;'       d	    S! W4      # )ÚweightÚto_quantizedéÿÿÿÿ)Úhasattrrœ   Úshape)r—   r˜   r•   s   &&€r4   Úbase_quant_requirementsÚ(convert.<locals>.base_quant_requirementsó   s^   ø€ ä�A�xÓ ÷ ,ð ,Ø—‘—‘˜rÕ" RÕ'¨1Ñ,÷,ð ,ä˜˜>Ó*÷,ð ,ñ & aÓ+ð		
r6   Nc                 ó4   <€ S! W4      ;'       d	    S! W4      # rb   rY   )r—   r˜   r¡   Úoriginal_predicates   &&€€r4   r™   rš      s   ø€ Ù# AÓ)×FÐFÑ.@ÀÓ.FÐFr6   Útorch_dtypez[INFO] Using dtype:z/Choose either quantize or dequantize, not both.z[INFO] Quantizing)ÚmoderŒ   z[INFO] Dequantizing)Úparentsrq   z**)Ú	recursive)Údonate_modelzconfig.json)Úconfig_path)z*.pyz*.jsonz*.wavz*.ptz*.safetensorsz*.yamlz*.txtz*.jinja) Úmlx_lm.convertr�   Úmlx_lm.utilsr‘   r’   r“   r”   r   r   re   Ú
isinstancer2   Úgetattrr`   r
   Ú
parametersÚgetÚMODEL_CONVERSION_DTYPESÚmxÚitemsÚastypeÚ
ValueErrorÚload_weightsÚlistr   ÚmkdirÚglobÚshutilÚcopyÚrelative_tor;   r‚   ) ri   r„   r…   r†   r‡   rˆ   rh   r‰   rŠ   r‹   rŒ   r�   r�   r‘   r’   r“   r”   rQ   rc   rd   ÚweightsÚkÚvÚpatternÚfilesÚfileÚsubdir_filesÚrel_pathÚdest_dirr¡   r•   r¤   s    &&&&&&&&&&&&                 @@@r4   ÚconvertrÆ   Õ   sŽ  ú€ õ =ßVÓVä	Ð
ÔÜ Ô;€JÜ"Ø˜Ð1Bô�M€Eˆ6ô �/¤3×'Ò'Ù7¸ÈÓOˆô $ EÐ+BÑDUÓVÐõ
ð ÒØ1‰à,Ðõ
ˆô ”< × 0Ñ 0Ó 2Ó3Ó4€Gà‚}Ø—
‘
˜=¨$Ó/ˆØÔ'Ô'ÜÐ# UÔ+Üœ˜EÓ"ˆØ29·-±-´/ÔB±/©$¨!¨Q�1�a—h‘h˜u“oÒ%±/ˆÑBç—JÜÐJÓKÐKçÜÐ!Ô"Ø×Ñœ4 §¡£Ó0Ô1Ù(ØØØØØØ+ô
‰ˆ�÷ ÜÐ#Ô$Ù  Ó'ˆÜ”| E×$4Ñ$4Ó$6Ó7Ó8ˆä�(œC× Ò Ü˜“>ˆð ‡N�N˜4¨$€NÔ/ó	ˆô —	’	œ#˜j¨7Õ2Ó3Ó4ˆÛˆDÜ�KŠK˜˜hÖ'ñ ô —y’y¤ Z°$Õ%6¸Õ%@Ó!AÈTÔRˆÛ ˆDÜ˜D“z×-Ñ-¨jÓ9ˆHà (§/¡/Õ1ˆHØ�N‰N 4°$ˆNÔ7Ü�KŠK˜˜hÖ'ó !ñ!	ñ. ˆx˜¨TÕ2á� H¨}Õ$<Õ=àÒÜ�h¨WÖ5ñ ùóq Cs   Ã3K:)Úfloat16Úbfloat16Úfloat32)FT)F)Ú	mlx_modelFNNNNNFTNÚaffine)#r¹   rm   rº   Úpathlibr   Útextwrapr   Útypingr   r   r   r   r	   Úmlx.coreÚcorer²   Úmlx.nnrV   Ú	mlx.utilsr
   Úmlx_audio.utilsr   r   r   r   rM   ÚMAX_FILE_SIZE_GBr±   rE   rN   r[   r^   re   r‚   rÆ   rY   r6   r4   Ú<module>rÕ      sv  ðÛ Û Û Ý Ý ß 4Õ 4å Ý Ý "÷ó ðØ�ðàˆyðð ˆWðð ˆhð	ð
 
ˆ8ðð ˆhðð �ðð ˆyðð ˜;ðð Ð*ðð ˆyðð �ðð ˆlðð �
ðð Ð(ðð  �=ð!ð" �=ð#ð$ �,ØÐ"ØÐ!Ø�JØ�ØˆyØ�_Ø�jØ�jØÐ.ñ7€ð: Ð Ú<Ð õõ$÷:÷@F÷4õ,Y÷^o6ñ o6r6   