
    (HJj                     J   d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	m
Z
mZ ddddddddddd	d	d
Zdedee   fdZdeeef   dee   fdZdeeef   defdZdeeef   dee   fdZ	 	 ddeeef   dededej*                  fdZ	 	 ddeeef   dededej*                  fdZy)    )Path)OptionalUnionN)base_load_modelget_model_name_partsget_model_pathload_configdeepfilternet	lfm_audiomoshimossformer2_se	sam_audio)
deepfilterr
   deepfilternet3r   
lfm2_audiozlfm2.5r   moshikomossformer2r   r   samaudioconfigreturnc                 ,   | sy | j                  dd       }|| j                  dd       }|t        j                  ||      S t        | j                  dd            j                  d      ryh dj	                  |       ryh d	j	                  |       ry
y )N
model_typearchitecturemodel_version DeepFilterNetr
   >   audio_codectransformertext_encoderr   >   win_incwin_lennum_melsout_channels_finalr   )getMODEL_REMAPPINGstr
startswithissubset)r   r   s     ]/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/mlx_audio/sts/utils.pyinfer_model_type_from_configr*      s    L$/JZZ5
"":z::
6::or*+66G hv	
 
 hv      
model_pathc                     	 t        | fi |}t        |      }|t        j	                  ||      S t        |       D ]/  }|t        v rt        |   c S |t        j                         v s-|c S  y # t        $ r i }Y nw xY w)N)r	   FileNotFoundErrorr*   r%   r$   r   values)r,   kwargsr   r   hints        r)   _resolve_model_typer2   =   s    Z262 .f5J"":z::$Z0?""4((?))++K	 1   s   A/ /A=<A=c                     t        | t              r| j                         nt        t	        |       fi |}|dz  j                         r|S |dz  }|dz  j                         r|S t        d| d|       )Nzconfig.jsonv3z(Could not find DeepFilterNet weights in z or )
isinstancer   
expanduserr   r&   existsr.   )r,   r0   	model_dirdefault_subfolders       r)   !_resolve_deepfilternet_model_pathr:   P   s     j$' 	C
O6v6  	M!))+!D(M)113  

29+TBSATU r+   c                 <    t        |       D ]  }|dv r y|dv s y y )N>   q44bit   >   q88bit   )r   )r,   r1   s     r)   _infer_moshi_quantizationrB   f   s,    $Z0>!>!	 1 r+   lazystrictc           	      P   t        | fi |}|dk(  rLddlm} |j                  t	        |       t        |       |j                  d      |j                  dd            S |dv r7| }|d	k(  rt        | fi |}|d
t        |t        |       ||d|}t        di |S t        d| d      )a   Load an STS model from a local path or HuggingFace repository.

    This loader supports STS models that can be expressed through the shared
    MLX Audio loading contract with sensible defaults. Model-specific
    ``from_pretrained(...)`` paths remain available for custom behavior.
    r   r   )MoshiSTSModelrevisionforce_downloadF)	quantizedrG   rH   >   r   r   r
   r   r
   sts)r,   categorymodel_remappingr   model_name_partsrC   rD   zSTS model type 'z' is not supported by the generic STS loader yet. Use the model-specific from_pretrained(...) initializer for custom STS model families. )r2   mlx_audio.sts.models.moshirF   from_pretrainedr&   rB   r$   r:   r%   r   r   
ValueError)r,   rC   rD   r0   r   rF   resolved_model_pathload_kwargss           r)   
load_modelrT   p   s     %Z:6:JW<,,
O/
;ZZ
+!::&6>	 - 
 	
    )("C#$#
 ..$ 4Z @	
 	
 ---

:, ') 	) r+   c                      t        | f||d|S )zAlias for :func:`load_model`.)rC   rD   )rT   )r,   rC   rD   r0   s       r)   loadrV      s     jEtFEfEEr+   )FF)pathlibr   typingr   r   mlx.nnnnmlx_audio.utilsr   r   r   r	   r%   dictr&   r*   r2   r:   intrB   boolModulerT   rV   rN   r+   r)   <module>r`      s?    "   "$%#&  (3- @E#t)$4 8C= &c4i  
,%T	*: x}  3c4i 3
3 3
 YY3p Fc4i F
F F
 YYFr+   