
    ni3Y                       S SK r S SKrS SKrS SKrS SKrS SKrS SKJr  S SKJ	r	J
r
Jr   S SKJr  \R                  R                  \5      r\R                  R%                  \5      r\R                  R)                  \S5      r\R                  R)                  \S5      r\R                  R/                  \5      (       a  \" \5        \" S\ 35        O4\R                  R/                  \5      (       a  \" \5        \" S\ S35        S	 H  r\R6                  R9                  \S5        M!       SNS
\
\   S\
\   SS4S jjr\" 5         S SK J!r!  S SK"J#r#  S SK$J%r%J&r&J'r'J(r(J)r)  S SK*J+r+J,r,  S SK-J.r.J/r/J0r0  S SK1r1/ SQr2S\4S jr3S\4S jr4S\S\5\
\   \4   4S jr6S\S\4S jr7SOS\S\
\   S\S\4S jjr8S\S\S\4S jr9    SPS\S\	\   S\
\   S\S \
\   S\
\   4S! jjr:S"\S#\S\4S$ jr;S"\S\\
\   \
\   4   4S% jr<S"\S\
\   4S& jr=S"\S\>4S' jr?S(\S\
\@   4S) jrAS\
\	\@      4S* jrB SQS+\#S#\S,\
\   SS4S- jjrC  SRS\S\
\D   S.\
\D   S/\
\D   S\
\D   4
S0 jjrE  SRS\S\
\@   S.\
\@   S/\
\@   S\
\@   4
S1 jjrFSQS\S\
\   S\4S2 jjrGS3\
\   S\
\   4S4 jrHS(\S\4S5 jrIS6\S\4S7 jrJSQS8\S9\
\	\      S\4S: jjrKS;\%S<\&SS4S= jrLS>\
\   S\4S? jrM SQS@\%SA\&S;\%S<\&SB\SC\
\   SS4SD jjrNS@\%S\
\>   4SE jrOSFSGS@\%SS4SH jrP   SSSI\SJ\
\   S;\
\%   S<\
\&   4SK jjrQSL rR\SSM:X  a  \R" 5         gg! \ a     GN<f = f)T    N)Path)ListOptionalTuple)load_dotenvz.envz.env.examplezLoaded configuration from z (fallback))
http_proxyhttps_proxy
HTTP_PROXYHTTPS_PROXY	ALL_PROXYlevelsuppress_audio_tokensreturnc                 4  ^  SSK Jn  Tc#  [        R                  R                  SS5      S;  mU c  Sn [        U 5      R                  5       n S[        4U4S jjnUR                  5         UR                  [        R                  XS	9  g ! [         a     g f = f)
Nr   )loggerACE_STEP_SUPPRESS_AUDIO_TOKENS1>   0FalsefalseINFOr   c                    > U R                  SS5      nSU;   d9  SU;   d3  UR                  5       (       a  [        UR                  5       5      S1:X  a  gT(       d  gSU;  $ )	Nmessage zDiT TEXT ENCODER INPUTztext_prompt:=FTz<|audio_code_)getstripset)recordr   r   s     "/mnt/workspace/ACE-Step-1.5/cli.py_log_filter'_configure_logging.<locals>._log_filter.   sX    **Y+ %/(C$8SE$A$g--    )r   filter)logurur   	Exceptionosenvironr   strupperboolremoveaddsysstderr)r   r   r   r!   s    `  r    _configure_loggingr0      s    ! $ "

/OQT U]t t}JE.t . MMO
JJszzJ;/  s   B
 

BB)AceStepHandler)
LLMHandler)GenerationParamsGenerationConfiggenerate_musiccreate_sampleformat_sample)DEFAULT_DIT_INSTRUCTIONTASK_INSTRUCTIONS)get_gpu_configset_global_gpu_configis_mps_platform)vocalsbacking_vocalsdrumsbassguitarkeyboard
percussionstringssynthfxbrass	woodwindsc                      [         R                  R                  [         R                  R                  [        5      5      $ N)r'   pathdirnameabspath__file__ r#   r    _get_project_rootrP   Y   s"    77??277??8455r#   c                  .    SSK Jn   [        U " 5       5      $ )zReturn the default checkpoints directory via the shared resolver.

Always delegates to model_downloader.get_checkpoints_dir() so that
ACESTEP_CHECKPOINTS_DIR, ACESTEP_PROJECT_ROOT, and the cwd-based
fallback are handled in one place.
r   get_checkpoints_dir)acestep.model_downloaderrS   r)   rR   s    r    _get_default_checkpoint_dirrU   ]   s     ="$%%r#   descriptionc                    SS K nU (       d  gU R                  5       R                  5       n0 SS_SS_SS_SS_SS_SS_S	S
_SS
_S
S
_SS_SS_SS_SS_SS_SS_SS_SS_0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S_SS_S!S"_S"S"_S#S$_S$S$_ES%S%S&S&S'S'S(S(S)S)S*S*S+S+S,.EnS nUR                  5        H`  u  pV[	        U5      S-::  a  S.UR
                  " U5      -   S/-   nOS0UR
                  " U5      -   S0-   nUR                  " Xr5      (       d  M^  Un  O   S1nS2U;   a  S3nXH4$ S4U;   d  S5U;   a  S3nXH4$ UR                  S65      (       d  US7:X  a  S3nXH4$ )8Nr   NFenglishenchinesezhu   中文mandarinjapanesejau	   日本語koreankou	   한국어spanishesu   españolfrenchfru	   françaisgermandedeutschitalianititaliano
portugueseptu
   portuguêsrussianruu   русскийbengalibnhindihiarthviidtrnlpl)arabicrt   thairu   
vietnameserv   
indonesianrw   turkishrx   dutchry   polishrz      z(?:^|\s|[.,;:!?])z(?:$|\s|[.,;:!?])z\bFinstrumentalTz
pure musiczpure instrumentz solosolo)relowerr   itemslenescapesearchendswith)	rV   r   description_lowerlanguage_mappingdetected_language	lang_name	lang_codepatternis_instrumentals	            r    _parse_description_hintsr   h   s   #))+1134t4!4)-t5? 	D &t .24 	$	 $T	 ,0	
 	4
 $T
 ,0 	$ $T ,0 	$ "4 *.t 	4 $T ,0 	d )$ 15d 	4 *4 26t 	4 t 	 T dD$$tTd',  0 6 6 8	y>Q*RYYy-AADXXGbii	22U:G99W00 ) !9 O** -- 
*	*.?CT.T -- 
	#	#G	,	,0AV0K--r#   promptc                     [        U 5      R                  5       nU(       d"  [        U 5      R                  5       nU(       d  M"  U$ rJ   )inputr   )r   values     r    _prompt_non_emptyr      s5    &M!Ef##% eLr#   defaultrequiredc                      US;  a  SU S3OSn[        U  U S35      R                  5       nU(       a  U$ US;  a  [        U5      $ U(       d  g[        S5        M[  )NNr    []r   : z)This value is required. Please try again.)r   r   r)   print)r   r   r   suffixr   s        r    _prompt_with_defaultr      sg    
$+:$=2gYa2+,224L*$w<9: r#   c                     U(       a  SOSn [        U  SU S35      R                  5       R                  5       nU(       d  U$ US;   a  gUS;   a  g[        S	5        MQ  )
NynTz (y/n) [default: ]: >   r   r   yestrue>   r   r   nor   FzPlease enter 'y' or 'n'.)r   r   r   r   )r   r   default_strr   s       r    _prompt_boolr      sf     #cK
 1+cBCIIKQQSN----() r#   optionsallow_customcustom_errorc                 L   U(       d  U$ [        SU -   5        [        USS9 H  u  pg[        U SU 35        M     US;  a  UOSn [        SU S35      R                  5       n	U	(       d
  US:X  a  S $ U$ U	R	                  5       S:X  a  g U	R                  5       (       a8  [        U	5      nSUs=::  a  [        U5      ::  a
  O  OXS-
     $ [        S	5        M  U(       a<  U(       a#  U" U	5      (       d  [        U=(       d    S
5        M  X;  a  [        S5        U	$ [        S5        M  )N
   )startz. r   autoz*Choose a model (number or name) [default: r   z0Invalid selection. Please choose a valid number.z$Invalid selection. Please try again.zUnknown model. Using as-is.zPlease choose a valid option.)r   	enumerater   r   r   isdigitintr   )
r   r   r   r   custom_validatorr   idxoptiondefault_displaychoices
             r    _prompt_choice_from_listr      s    	$- 2Rx ! 3!(
!:gO
COCTTWXY__a*f44A'A<<>V#>>f+CC'3w<'Qw''DE(8(@(@lL&LM$34M-.' r#   formatted_promptinstruction_pathc                     [        USSS9 nUR                  U 5        SSS5        [        S5        [        SU 35        [        S	5        [	        5          [        US
SS9 nUR                  5       sSSS5        $ ! , (       d  f       Nb= f! [         a  n[        SU SU 35        U s SnA$ SnAff = f! , (       d  f       g= f! [         a  n[        SU SU 35        U s SnA$ SnAff = f)zDWrite formatted prompt to file, wait for user edits, then read back.wutf-8encodingNzWARNING: Failed to write r   z
--- Final Draft Saved ---z	Saved to z6Edit the file now. Press Enter when ready to continue.rWARNING: Failed to read )openwriter&   r   r   read)r   r   fes       r    _edit_formatted_prompt_via_filer      s     "C':aGG$% ; 

'(	I&'
()	
BC	G "C':a668 ;: ;:  )*:);2aSAB  ;:  ()9(:"QC@A su   B A;B C !B61	C ;
B	B 	B 
B3B.(B3.B36
C C C 
C.C)#C.)C.c                    [        [        R                  " SU [        R                  5      5      nU(       d  gUS   R	                  S5      R                  5       nUS   R	                  S5      n/ SQn[        U5      nU H'  nUR                  U5      nUS:w  d  M  [        XW5      nM)     USU R                  5       nU=(       d    SU=(       d    S4$ )zHBest-effort extraction of caption/lyrics from a formatted prompt string.z # Caption\n(.*?)\n+# Lyric\n(.*)NNr   r   )z
<|eot_id|>z<|start_header_id|>z<|assistant|>z<|user|>z
<|system|>z
<|im_end|>z<|im_start|>N)
listr   finditerDOTALLgroupr   r   findminrstrip)r   matchescaptionlyricscut_markerscut_atmarkerposs           r    -_extract_caption_lyrics_from_formatted_promptr      s    2;;BDTVXV_V_`aGbk"((*GR[q!F AK[Fkk&!"9%F  GV_##%F?dFNd**r#   c                     [         R                  " SU [         R                  5      nU(       d  gUR                  S5      R	                  5       nU=(       d    S$ )zJBest-effort extraction of instruction text from a formatted prompt string.z# Instruction\n(.*?)\n\nNr   )r   r   r   r   r   )r   matchinstructions      r    *_extract_instruction_from_formatted_promptr     sA    II13CRYYOE++a.&&(K$r#   c                    [        [        R                  " SU [        R                  5      5      nU(       d  0 $ US   R	                  S5      n0 nSn/ nUR                  5        H  nUR                  5       nU(       d  M  [        R                  " SU5      nU(       aw  U(       a!  SR                  U5      R                  5       X4'   UR	                  S5      R                  5       R                  5       nUR	                  S5      R                  5       /nM  U(       d  M  UR                  U5        M     U(       a(  U(       a!  SR                  U5      R                  5       X4'   U$ )zeBest-effort extraction of COT metadata from a formatted prompt string,
supporting multi-line values.
z<think>\n(.*?)\n</think>r   r   Nz^(\w+):\s*(.*) r   )r   r   r   r   r   
splitlinesr   r   joinr   append)r   r   blockmetadatacurrent_keycurrent_value_linesline	key_matchs           r    +_extract_cot_metadata_from_formatted_promptr     s    2;;:<LbiiXYG	BKa EHK  "zz|HH.5	(+1D(E(K(K(M%#//!,224::<K#,??1#5#;#;#=">{#**40 #  * #)< = C C EOr#   r   c                      [         R                  " SU 5      nU(       d  g [        UR                  S5      5      $ ! [         a     g f = f)Nz[-+]?\d*\.?\d+r   )r   r   floatr   r&   )r   r   s     r    _parse_numberr   6  sC    		+U3U[[^$$ s   ; ; 
AAc                    U c  g [        U [        5      (       a4  [        S U  5       5      (       a  U  Vs/ s H  n[        U5      PM     sn$ g [        U [        5      (       d  g U R                  5       nU(       d  g UR                  S5      (       d  UR                  S5      (       a`   [        R                  " U5      n[        U[        5      (       a3  [        S U 5       5      (       a  U Vs/ s H  n[        U5      PM     sn$ g  UR                  S5       Vs/ s H2  oR                  5       (       d  M  [        UR                  5       5      PM4     sn$ s  snf ! [         a     g f = fs  snf s  snf ! [         a     g f = f)Nc              3   N   #    U  H  n[        U[        [        45      v   M     g 7frJ   
isinstancer   r   .0ts     r    	<genexpr>)_parse_timesteps_input.<locals>.<genexpr>D  s     :Eqz!c5\**E   #%[(c              3   N   #    U  H  n[        U[        [        45      v   M     g 7frJ   r   r   s     r    r   r   Q  s      +XQWAJq3,,G,GQWr   ,)r   r   allr   r)   r   
startswithastliteral_evalr&   split)r   r   rawparseds       r    _parse_timesteps_inputr  @  s>   }%:E:::&+,eE!He,,eS!!
++-C
~~ccnnS11	%%c*F fd##+XQW+X(X(X&,-fE!Hf--*-))C.F.QGGI aggi .FF! -  		 . G sG   E)E /E-	E7 E28E2E7 
E*)E*2E7 7
FFllm_handlerpreloaded_promptc                 P   ^ ^^^^ T R                   m0 mSUUU UU4S jjnUT l         g)zPIntercept formatted prompt generation to allow user editing before audio tokens.c                   > T" U UUUUS9nU(       a  T" U UUSUS9nTR                  U5      nU(       aj  UR                  S5      (       d  UR                  S5      (       a>  UR                  S5      =(       d    U nUR                  S5      =(       d    Un	T" UU	USUS9$ U$ TR                  U5      nU(       a  US   $ [        TSS5      (       a  US S S.TU'   U$ Tb  Tn
O[        UT5      n
[        U
5      u  pX:w  aY  [	        S	5        U(       d  U	(       a  UTl        U	Tl        [        U
5      nU(       a  UTl        [        U
5      nU(       a  UTl
        U
UU	S.TU'   U
$ )
N)is_negative_promptnegative_promptFedited_captionedited_lyricsTedited_prompt_skip_prompt_edit)r  r  r  z0INFO: Using edited draft for audio-token prompt.)r   getattrr   r   r   _edited_caption_edited_lyricsr   _edited_instructionr   _edited_metas)r   r   cot_textr  r  r   conditional_promptcachedr  r  editededited_instructionedited_metascacher   r  originalr  s                r    wrapped*_install_prompt_edit_hook.<locals>.wrappedc  s   1+
 !)#( /" YY12F6::&6776::o;V;V!',<!=!H &

? ; Ev"!'+$3  M6"/**; 3U;;!'"&!%E&M
 M'%F4V=MNF(UV\(]%DE.<+-:*!KF!S!2D/FvNL,8)#,*
f
 r#   N)FNO USER INPUT)build_formatted_prompt_with_cot)r  r   r  r  r  r  s   ``` @@r    _install_prompt_edit_hookr"  Z  s*     ::HE; ;z 3:K/r#   	min_value	max_valuec                    Uc  SOUn [        U  SU S35      R                  5       nU(       d  U$  [        U5      nUb  Xb:  a  [	        SU S35        MN  Ub  Xc:  a  [	        SU S35        Mg  U$ ! [         a    [	        S5         M  f = f)Nr   r   r   z'Invalid input. Please enter an integer.Please enter a value >= .Please enter a value <= )r   r   r   
ValueErrorr   r   r   r#  r$  r   r   r  s          r    _prompt_intr+    s     'fWO
?"3378>>@N	ZF  V%7,YKq9: V%7,YKq9:  	;<	   A1 1B
	B
c                    Uc  SOUn [        U  SU S35      R                  5       nU(       d  U$  [        U5      nUb  Xb:  a  [	        SU S35        MN  Ub  Xc:  a  [	        SU S35        Mg  U$ ! [         a    [	        S5         M  f = f)Nr   r   r   z%Invalid input. Please enter a number.r&  r'  r(  )r   r   r   r)  r   r*  s          r    _prompt_floatr.    s     'fWO
?"3378>>@N	5\F  V%7,YKq9: V%7,YKq9:  	9:	r,  c                      U(       a  SU S3OSn[        U  U S35      R                  5       nU(       d	  U(       a  Un[        R                  R	                  U5      (       a  [        U5      $ [        S5        My  )Nr   r   r   r   z$Invalid file path. Please try again.)r   r   r'   rK   isfile_expand_audio_pathr   )r   r   r   rK   s       r    _prompt_existing_filer2    sj    
$+2gYaxxr*+113D77>>$%d++45 r#   path_strc                 2   U (       a  [        U [        5      (       d  U $  [        U 5      R                  5       R	                  SS9R                  5       $ ! [         a8    [        U 5      R                  5       R                  5       R                  5       s $ f = f)NF)strict)r   r)   r   
expanduserresolveas_posixr&   absolute)r3  s    r    r1  r1    s|    :h44AH~((*22%2@IIKK AH~((*335>>@@As   3A ?BBc                 :    [        U 5      R                  5       S;   $ )N>   r   r   r   r   )r)   r   )r   s    r    _parse_boolr;    s    u:!:::r#   devicec                 h   U S:X  a  [        [        S5      (       a$  [        R                  R                  5       (       a  g[        R                  R                  5       (       a  g[        [        R
                  S5      (       a.  [        R
                  R                  R                  5       (       a  ggU $ )Nr   xpucudampscpu)hasattrtorchr>  is_availabler?  backendsr@  )r<  s    r    _resolve_devicerF    sv    5%  UYY%;%;%=%=::""$$5>>5))enn.@.@.M.M.O.OMr#   	task_typetracksc                 Z   U S:X  a2  U(       a  US   OSn[         S   R                  UR                  5       S9$ U S:X  a2  U(       a  US   OSn[         S   R                  UR                  5       S9$ U S:X  a0  U(       a  SR                  U5      OS	n[         S   R                  US
9$ [        $ )Nlegor   rA   )
TRACK_NAMEextractr=   complete, zdrums, bass, guitar)TRACK_CLASSES)r9   formatr*   r   r8   )rG  rH  tracktracks_lists       r    _default_instruction_for_taskrS    s    F#q	 (//5;;=/III#q	 +22ekkm2LLJ+1dii'7L ,33+3NN""r#   params_defaultsconfig_defaultsc                    0 SUR                   _SUR                  _SUR                  _SUR                  _SUR                  _SUR
                  _SUR                  _SUR                  _S	UR                  _S
UR                  _SUR                  _SS_SUR                  _SS _SUR                  _SUR                  _SUR                  _0 SUR                  _SUR                   _SUR"                  _SUR$                  _SUR&                  _SUR(                  _SUR*                  _SUR,                  _SUR.                  _SUR0                  _SUR2                  _SUR4                  _SUR6                  _S UR8                  _S!UR:                  _S"UR<                  _S#UR>                  _EUR@                  S$S%S$S&.EnURC                  5        H   u  pE[E        XS 5      b  M  [G        XU5        M"     g )'Ndurationbpmkeyscaletimesignaturevocal_languageinference_stepsseedguidance_scaleuse_adgcfg_interval_startcfg_interval_endshift      @infer_method	timestepsrepainting_startrepainting_endaudio_cover_strengththinkinglm_temperaturelm_cfg_scalelm_top_klm_top_plm_negative_promptuse_cot_metasuse_cot_captionuse_cot_lyricsuse_cot_languageuse_constrained_decoding
batch_sizeallow_lm_batchuse_random_seedseedslm_batch_chunk_sizeconstrained_decoding_debugFr   )audio_formatsample_modesample_query
use_format)$rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rd  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r   r  setattr)argsrT  rU  optional_defaultskeydefault_values         r    _apply_optional_defaultsr    s   'O,,'""' 	O,,' 	66	'
 	/88' 	?::' 	$$' 	/88' 	?**' 	o@@' 	O<<' 	' 	44' 	T' 	O<<'  	/88!'" 	 D D#'$ 	O,,%'& 	/88''( 	44)'* 	O,,+', 	O,,-'. 	o@@/'0 	661'2 	?::3'4 	/885'6 	O<<7'8 	#O$L$L9': 	o00;'< 	/88='> 	?::?'@ 	&&A'B 	BBC'D 	%o&P&PE'F (44M'R 05574d#+D}- 8r#   r   c                 Z   U (       d  g[        U [        5      (       a  U R                  5       nU(       d  g[        R                  R                  U5      (       a"  S[        R                  R                  U5       3$ [        U5      S::  a  UR                  SS5      $ S[        U5       S3$ g)	Nnonezfile: <   r   r   ztext (z chars)provided)	r   r)   r   r'   rK   r0  basenamer   replace)r   strippeds     r    _summarize_lyricsr  -  s    &#<<>77>>(##BGG,,X6788x=B##D#..Hg..r#   paramsconfigcompactresolved_devicec           	      6   U(       Gd	  [        S5        [        [        U 5      R                  5       5       H  n[        U S[	        X5       35        M     [        S5        [        S5        [        [        U5      R                  5       5       H  n[        U S[	        X5       35        M     [        S5        [        S5        [        [        U5      R                  5       5       H  n[        U S[	        X'5       35        M     [        S5        g U R
                  nU(       a   X`R
                  :w  a  U R
                   SU 3n[        S	5        [        S
UR                   35        [        SUR                  =(       d    S 35        [        S[        UR                  5       35        [        SUR                   S35        [        SUR                   35        UR                  S UR                  4;  a  [        SUR                   35        UR                  S UR                  4;  a  [        SUR                   35        UR                  S UR                  4;  a  [        SUR                   35        [        SUR                   35        [        SUR                    35        [        SU R"                  =(       d    S 35        [        SU R$                  =(       d    S 35        [        SU R&                   35        [        SU 35        [        SUR(                   35        [        SU R*                   35        UR,                  (       a  [        SUR,                   35        O&[        SUR.                   SUR0                   S 35        [        S!5        g )"Nz 
--- Final Parameters (Args) ---r   ------------------------------z,
--- Final Parameters (GenerationParams) ---z+-------------------------------------------z,
--- Final Parameters (GenerationConfig) ---z,-------------------------------------------
z -> z#
--- Final Parameters (Summary) ---ztask_type: z	caption: r  zlyrics: z
duration: sz	outputs: zbpm: z
keyscale: ztimesignature: zinstrumental: z
thinking: z
lm_model: r   zdit_model: z	backend: zdevice: zaudio_format: z
save_dir: zseeds: zseed: z	 (random=)z -------------------------------
)r   sortedvarskeysr  r<  rG  r   r  r   rW  rt  rX  rY  rZ  r   ri  lm_model_pathconfig_pathbackendrz  save_dirrw  r]  rv  )	r  r  r  rT  rU  r  r  kdevice_displays	            r    _print_final_parametersr  <  s    12T
)*AQCr'$*+,- +./=>V))+,AQCr'&,-./ -;<=>V))+,AQCr'&,-./ -=>[[N?kk9 KK=_,=>	
01	K(()
*+	Ifnn./
01	H&v}}56
78	Jv'q
)*	If''(
)*zz$ 3 344fjj\"#t_%=%=>>
6??+,-D/*G*G#HH 4 4567	N6../
01	Jv'
()	Jt))3V4
56	K((2F3
45	Idll^
$%	H^$
%&	N6../
01	Jt}}o
&'||~&'v{{m9V-C-C,DAFG	
-.r#   c                    0 nU R                   b  U R                   US'   U R                  (       a  U R                  US'   U R                  (       a  U R                  US'   U R                  b  U R                  US'   U=(       d    S $ )NrX  rZ  rY  rW  )rX  rZ  rY  rW  )r  metas     r    _build_meta_dictr  s  sn    DzzjjU & 4 4_!??Z"!??Z<4r#   dit_handlerr1   c           	      N   [        U5      nU R                  UR                  UR                  UR                  =(       d    SUR
                  =(       d    SUUR                  =(       d    SS9u  p4[        S5        [        U5        [        S5        [        U5        [        S5        g )Nr   unknown)taskr   r   r   metasr[  z*
--- Final DiT Prompt (Caption Branch) ---z)
--- Final DiT Prompt (Lyrics Branch) ---z)----------------------------------------
)r  build_dit_inputsrG  r   r   r   r[  r   )r  r  r  caption_inputlyrics_inputs        r    _print_dit_promptr    s    F#D"-">">&&$"}}",,9	 #? #M 

78	-	
67	,	
67r#   configure_onlydefault_config_pathc                 #  ^) [        S5        [        S5        [        S5        [        S5        [        S5         [        S5        [        S5        [        S5        [        S	5        [        S
5        [        S5        [        S5        SSSSSSS.nU R                  =(       d    Sm)[        U)4S jUR                  5        5       S5      n[	        SU S35      R                  5       nU(       d  UnUR                  US5      U l        U R                  S;   a  [        S5        [        5       nUR                  5       n	U R                  S;   n
U
(       a/  U	(       a(  U	 Vs/ s H  nSUR                  5       ;   d  M  UPM     n	nU
(       a?  U R                  (       a.  S[        U R                  5      R                  5       ;  a  SU l
        U
(       aJ  U	(       a7  U R                  U	;   a  U R                  nOU	S   nXl
        [        SU 35        O>[        S5        O2U	(       a   [        SU	U R                  S S!9nUb  Xl
        O[        S"5        [        5       nUR                  5       nU(       a   [        S#UU R                  S S!9nUb  Xl        O[        S$5        U R                  S%;   a  [!        S&U R"                  S'9U l        U R                  S:X  a6  [%        S(U R&                  5      U l        [%        S)U R(                  5      U l        U R                  S*;   a  [        S+5        [        S,R+                  [,        5      5        U R                  S:X  a  U R.                  OU R0                  n[3        S-US S.9nU[,        ;  a  [        S/5        U R                  S:X  a  UU l        OUU l        U R4                  (       a  U R4                  [6        :X  a  [9        U R                  U/5      U l        [3        S0U R4                  S S.9U l        U R                  S:X  a  [        S+5        [        S,R+                  [,        5      5        [3        S1U R:                  S S.9nUR=                  S25       Vs/ s H*  nUR                  5       (       d  M  UR                  5       PM,     nnS2R+                  U5      U l        U R4                  (       a  U R4                  [6        :X  a  [9        U R                  U5      U l        [3        S0U R4                  S S.9U l        U R                  S3;   a  [3        S4U R>                  S S.9U l        OU R                  S:X  az  [A        S5U RB                  5      U l!        U RB                  (       a  [3        S6U RD                  S7S.9U l"        U RB                  (       d#  [3        S8U R>                  S7S.9nU(       a  UU l        U R                  S9;   GaJ  U RB                  (       Gd8  [        S:5        [        S;5        [        S<5        [        S=5        [        S>5        U RF                  (       d  U RH                  S?:X  a  SnOU RJ                  (       a  S@nOwU RH                  (       aP  [M        U RH                  [        5      (       a1  [N        RP                  RS                  U RH                  5      (       a  SAnOU RH                  (       a  SBnOSn[	        SCU S35      R                  5       nU(       d  UnUS:X  a"  S U l#        S?U l$        S7U l%        [        SD5        GOmUS@:X  a"  S U l%        SEU l$        S7U l#        [        SF5        GOEUSA:X  a  S7U l#        S7U l%        [M        U RH                  [        5      (       a:  [N        RP                  RS                  U RH                  5      (       a  U RH                  OSn [!        SGU5      nURU                  SH5      (       a  UU l$        [        SIU 35        O[        SJ5        ME  USB:X  a  S7U l#        S7U l%        [M        U RH                  [        5      (       aK  U RH                  (       a:  [N        RP                  RS                  U RH                  5      (       d  U RH                  OSn[3        SKUS S.9U l$        U RF                  (       d1  [3        SLU RV                  S7S.9R                  5       nU(       a  UU l+        U RJ                  (       aD  U R>                  (       d  [Y        SM5      U l        U RZ                  (       d  [        SN5        S U l-        []        SOU R^                  b  U R^                  OSPSQSR9U l/        [	        SS5      R                  5       nUST:X  Ga  U R                  S:X  a,  U RB                  (       d  [A        SUU R`                  5      U l0        [        SV5        [%        SWU Rb                  SXSYSZ9U l1        []        S[U Rd                  S\S]SZ9U l2        [3        S^U Rf                  5      U l3        [3        S_U Rh                  5      U l4        [3        SLU RV                  5      U l+        [        S`5        []        SaU Rj                  5      U l5        []        SbU Rl                  SQSR9U l6        U R                  (       a  SU R                  ;   ap  [%        ScU Rn                  5      U l7        [A        SdU Rp                  5      U l8        [%        SeU Rr                  SfSg5      U l9        [%        ShU Rt                  SfSg5      U l:        [%        SiU Rv                  SgSj5      U l;        [3        SkU Rx                  5      U l<        [3        SlU Rz                  S7S.9nU(       a  UU l=        U R                  S:X  a  [%        SmU R|                  SfSg5      U l>        [        Sn5        [A        SoU RZ                  5      U l-        [%        SpU R~                  SfSq5      U l?        [%        SrU R                  5      U l@        []        SsU R                  SSR9U lA        [%        StU R                  SfSg5      U lB        [3        SuU R                  5      U lC        [A        SvU R                  5      U lD        [A        SwU R                  5      U lE        [A        SxU RJ                  5      U l%        [A        SyU R                  5      U lF        [A        SzU R                  5      U lG        [        S{5        [3        S|U R                  5      U lH        [3        S}U R                  5      U lI        [A        S~U R                  5      U lJ        [3        SSES7S.9nU(       ai  UR                  S2S5      R=                  5        Vs/ s H  nUR                  5       (       d  M  UPM     n n U  Vs/ s H  n[        U5      PM     snU lM        [A        SU R                  5      U lO        []        SU R                  SQSR9U lP        [A        SU R                  5      U lQ        OU(       a  U(       a  [        XU5        U RJ                  (       a#  U RZ                  (       d  [        SN5        S U l-        [        S5        [        SU R                   35        U R>                  (       a  [        SU R>                   35        U R                  S;   a  [        SU R4                   35        U R"                  (       a  [        SU R"                   35        [        SU Rb                   S35        [        SU R^                   35        U RF                  (       a  [        S5        OU RJ                  (       a  [        SU RV                   S35        OuU RH                  (       aH  [N        RP                  RS                  U RH                  5      (       a  [        SU RH                   S35        OU RH                  (       a  [        S5        [        S5        U(       d@  [	        S5      R                  5       n!U!S:X  a!  [        S5        [        R                  " S5        U=(       d    Sn"[	        SU" S35      n#U#(       d  U"n#U#RU                  S5      (       d  U#S-  n# [        U 5      R                  5        V$V%s0 s H)  u  n$n%U$S;  d  M  U$R                  S5      (       a  M&  U$U%_M+     n&n$n%[        U#S5       n'[        R                  " U&U'5        SSS5        [        SU# 35        [        SU# 35        X(       + 4$ s  snf s  snf s  snf s  snf ! [         a    [        S5         GNf = fs  sn%n$f ! , (       d  f       Nh= f! [         a  n([        SU( S35         Sn(A(NmSn(A(ff = f! [        [        4 a$    [        S5        [        R                  " S5         Nf = f)z:
Runs an interactive wizard to set generation parameters.
z0Welcome to the ACE-Step Music Generation Wizard!z0This will guide you through creating your music.z!Press Ctrl+C at any time to exit.z9Note: Required models will be auto-downloaded if missing.r  z
--- Task Type ---z01. text2music - generate music from text/lyrics.z92. cover     - transform existing audio into a new style.z;3. repaint   - regenerate a specific time segment of audio.z?4. lego      - generate a specific instrument track in context.z>5. extract   - isolate a specific instrument track from a mix.zC6. complete  - complete/extend partial tracks with new instruments.
text2musiccoverrepaintrJ  rL  rM  )r   23456c              3   <   >#    U  H  u  pUT:X  d  M  Uv   M     g 7frJ   rO   )r   r  vcurrent_tasks      r    r   run_wizard.<locals>.<genexpr>  s     Q+;41qL?PQQ+;s   	r   zChoose a task (1-6) [default: r      rJ  rL  rM  zdNote: This task requires a base DiT model (acestep-v15-base). It will be auto-downloaded if missing.baseNr   z/
Note: This task requires a base model. Using: zi
Note: This task requires a base model (e.g., 'acestep-v15-base'). It will be auto-downloaded if missing.z--- Available DiT Models ---T)r   r   z_
Note: No local DiT models found. The main model will be auto-downloaded during initialization.z--- Available LM Models ---zb
Note: No local LM models found. If LM features are enabled, a default LM will be auto-downloaded.   rJ  r  rL  r  rM  zEnter path to source audio file)r   zRepaint start time in secondszRepaint end time in seconds>   rJ  rL  z
Available tracks:rN  zChoose a track)r   zUnknown track. Using as-is.InstructionzChoose tracks (comma-separated)r      rJ  r  r  rM  zAEnter a music description (e.g., 'upbeat electronic dance music')z5Use Simple Mode (auto-generate caption/lyrics via LM)z1Describe the music you want (for auto-generation)Fz:Enter a music description (optional if you provide lyrics)>   rJ  r  r  rM  r  z
--- Lyrics Options ---z1. Instrumental (no lyrics).z!2. Generate lyrics automatically.z3. Provide path to a .txt file.z4. Paste lyrics directly.[Instrumental]r  r  r  zYour choice (1-4) [default: z%Instrumental music will be generated.r   z'Lyrics will be generated automatically.z.Please enter the path to your .txt lyrics filez.txtzLyrics will be loaded from: z7Invalid file path or not a .txt file. Please try again.z$Paste lyrics (single line or use \n)z,Vocal language (e.g., 'en', 'zh', 'unknown')z0Enter a music description for lyric generation: zQINFO: Automatic lyric generation requires the LM handler. Enabling LM 'thinking'.z+Number of outputs (audio clips) to generater   r   )r#  z4
Configure advanced parameters? (y/n) [default: n]: r   z+Use format_sample to enhance caption/lyricsz
--- Optional Metadata ---zDuration in seconds (10-600)
   iX  )r#  r$  zBPM (30-300, empty for auto)   i,  z*Keyscale (e.g., 'C Major', empty for auto)z,Time signature (e.g., '4/4', empty for auto)z
--- Advanced DiT Settings ---zRandom seed (-1 for random)zInference stepsz Guidance scale (for base models)z#Enable Adaptive Dual Guidance (ADG)zCFG interval start (0.0-1.0)              ?zCFG interval end (0.0-1.0)zTimestep shift (1.0-5.0)g      @zInference method (ode/sde)z,Custom timesteps list (e.g., [0.97, 0.5, 0])zAudio cover strength (0.0-1.0)z
--- Advanced LM Settings ---zEnable LM 'thinking'zLM temperature (0.0-2.0)g       @zLM CFG scalezLM top-k (0 disables)zLM top-p (0.0-1.0)zLM negative promptzUse CoT for metadatazUse CoT for caption refinementzUse CoT for lyrics generationzUse CoT for language detectionzUse constrained decodingz
--- Output Settings ---zSave directoryzAudio format (mp3/wav/flac)zUse random seed per batchz<Custom seeds (comma/space separated, leave empty for random)r   z+Invalid seeds input. Ignoring custom seeds.zAllow LM batch processingzLM batch chunk sizezConstrained decoding debugz
--- Summary ---zTask: zDescription: zInstruction: zSource audio: 
Duration: r  z	Outputs: zLyrics: InstrumentalzLyrics: Auto-generated (r  zLyrics: Provided from file (zLyrics: Provided as textz:Start generation with these settings? (y/n) [default: y]: r   zGeneration cancelled.zconfig.tomlz'
Enter filename to save configuration [z.toml)r  _r   zConfiguration saved to z2You can reuse it next time with: python cli.py -c zError saving configuration: z. Please try again.z
Wizard cancelled. Exiting.)]r   rG  nextr   r   r   r   r1    get_available_acestep_v15_modelsr   r  r)   r   r2   get_available_5hz_lm_modelsr  r2  	src_audior.  rf  rg  r   TRACK_CHOICES
lego_trackextract_trackr   r   r8   rS  complete_tracksr  r   r   r{  r|  r   r   rq  r   r'   rK   r0  r   r[  r   ri  r+  rt  r}  rW  rX  rY  rZ  r]  r\  r^  r_  r`  ra  rb  rd  re  rh  rj  rk  rl  rm  rn  ro  rp  rr  rs  r  rz  rv  r  r   rw  r)  ru  rx  ry  r  r.   exitr  r   r   tomldumpr&   KeyboardInterruptEOFError)*r  r  r  rT  rU  task_maptask_defaulttask_choicer  available_dit_models	base_onlymselectedr  available_lm_modelsselected_lmtrack_defaultrQ  
tracks_rawr   rH  r   default_choicer   default_lyrics_pathlyrics_pathdefault_lyricslangadvancedtimesteps_inputseeds_inputr  rw  confirmdefault_filenameconfig_filenamer  r  config_to_saver   r   r  s*                                            @r    
run_wizardr    s    

<=	
<=	
-.	
EF	(OF#$@AIJKLOPNOST
 ~~5Q8>>+;QSVW<\N#NOUUW&K!k<@>><<xy %&*KKMNN&EE	-/C#[/C!vQRQXQXQZGZA/C #[))fC@P@P<Q<W<W<Y.Y#D###';;#//H3A6H#+ H
ST  C  D!/.$((!	H ##+ tu !l)EEG2-#**!	K &%0"wx >>PP23T^b^l^lmDN>>Y&$1/1F1F%D! #0-t/B/B#D >>00'($))M*+/3~~/GDOOTM_M_M()9=SWXEM)34~~'"'%*"##t'7'7;R'R#@RWQX#Y 3M4CSCS^bcD>>Z''($))M*+-.OQUQeQeptuJ)3)9)9#)>L)>A!'')iaggi)>FL#&88F#3D ##t'7'7;R'R#@QW#X 3M4CSCS^bcD>>EE/SDL
 ^^|++,ceieueuvD$8G%%"%!
 ##.PLL"
 #*DL >>SS\`\l\l\l,-015634-.  DKK3C$C!$$$!$DKK!=!="''..QUQ\Q\B]B]!$!$!$9.9IMNTTVF'}$(!.&+#=>3&*# $)!?@3$)!&+#5?S5Q5QVXV]V]VdVdeiepepVqVqdkkw{#"78hj}"~K"++F33&1 <[MJKST  3$)!&+#0:4;;0L0LQUQ\Q\egelelesestxtt  fA  fA  GK23Z\juyz$$+B''" %'	 
 *.D'""||#45g#hDL}}mn$(DM%9#:DOO
 PQWWYs?~~-d6F6F"./\^b^m^m"n/0)*H$--ceqtuDM"#A488WYehiDH01]_c_l_lmDM!56dfjfxfx!yD"67egkgzgz"{D34#$A499MDI#./@$BVBVbc#dD Fd.>.>$>&34VX\XkXk&l#+,QSWS_S_`*78VX\XoXoqtvy*z'(56RTXTiTiknps(t%&'A4::sTWXDJ 45QSWSdSd eD2>O
 !0~~(,94d6O6OQTVY-) 23()?ODM"/0JDL_L_adfi"jD -nd>O>O PD'(?Z[\DM)*>sTWXDM&:;OQUQhQh&iD#!-.DdFXFX!YD#/0PRVRfRf#gD "./NPTPcPc"dD$01QSWShSh$iD!,89SUYUrUr,sD)-.01A4==QDM 45RTXTeTe fD#/0KTMaMa#bD .NK
 $/$7$7S$A$G$G$IW$IqQWWY$IWI27!8%Q#a&%!8DJ #//JDL_L_"`D'23H$JbJbno'pD$.:;WY]YxYx.yD+?(P t}}ef DM!"t~~&'(<<M$,,01>><<M$"2"2!345>>N4>>"234
4==/+,	$//*+,()  ,T-@-@,ACD[[RWW^^DKK881$++a@A[[-/hXY__aG#~-..?-"JK[J\\_ `a.O''00w&O
	I!%d!1!1!3!3AJ& /0||C/@ 1!3   os+q		.!, ,+O+<=>FFWXY ###S	 $\R M| X!8! IGHI` ,+  	I03FGHH	I x( ,-s  D"AE AC+8AC+>K"AE  AC0=AC0b9AE 
AC5'AC5-AE 0AC? 4AC:	AC? J:AE AAD2 A(ADA9ADBADBAD2 B'AD!B?$AD2 C+AE C:AC? C?ADDAE DADDAE DAD2 D!
AD/D+AD2 D2
AED<AEEAE EAEEAE E1AFFAFc                  Bi   [        5       n [        U 5        [        5       nU(       + =(       a%    U R                  S:  =(       a    U R                  S:  n[	        SS 35        [	        S5        [	        S 5        [	        SU R                  S S35        [	        S	U R
                   35        [	        S
U R                   SU R                  S-   S35        [	        SU R                   SU R                  S-   S35        [	        SU R                   35        [	        SU R                   35        [	        SU R                   35        [	        SU R                  =(       d    S 35        [	        S S35        U(       a  [	        S5        O:U R                  S:  a  [	        S5        OU(       a  [	        S5        O[	        S5        [        5       n[        5       n[        R                  " S[        R                   S9nUR#                  SS[$        SS9  UR#                  SSS S!9  UR#                  S"[$        S#/ S$QS%S&9  UR#                  S'[$        S(S)S*9  UR'                  5       n[)        UR*                  S+9  UR,                  (       d  S,OUR.                  nU(       a   SS#KnS-n	[	        S.5        OS/n	0 S0[5        5       _S1S#_S2[%        [7        5       5      _S3S#_S4U	_S5S6_S7S#_S8U_S9S:_S;S<_S=UR8                  _S>S?_S@S?_SAS#_SBUR:                  _SCS:_SDUR<                  _0 SEUR>                  _SFUR@                  _SGURB                  _SHURD                  _SIURF                  _SJURH                  _SKURJ                  _SLURL                  _SMURN                  _SNURP                  _SOS?_SPS?_SQS?_SRS:_SSS?_STS:_SUURR                  _E0 SVURT                  _SWURV                  _SXURX                  _SYSZ_S[URZ                  _S\S#_S]U R                  _S^UR\                  _S_UR^                  _S`UR`                  _SaURb                  _SbURd                  _ScURf                  _SdURh                  _SeURj                  _SfURl                  _SgU_ES#URn                  URp                  URr                  URt                  S?URv                  URx                  URz                  UR*                  Sh.
En
[        R|                  " GS$0 U
D6nS#Ul        UR,                  (       a  [~        R                  R                  UR,                  5      (       d  UR                  SiUR,                   35         [        UR,                  Sj5       n[        R                  " U5      nS#S#S#5        [	        SkUR,                   35        WR                  5        H  u  nn[        XU5        M     UR,                  Ul        UR                  b  UR                  UlI        UR                  (       a;  [        USnUR,                  UUSo9u  nn[	        Sp5        [        R                  " S5        UR,                  (       d8  [        US:S#UUSo9u  nnU(       d!  [	        Sp5        [        R                  " S5        URh                  (       a#  UR                  (       d  [	        Sq5        SnUlN        UR                  (       d  [5        5       UlO        OT[~        R                  R                  [~        R                  R                  [%        UR                  5      5      5      UlO        UR                  (       a  [~        R                  R                  [%        UR                  5      5      UlR        [~        R                  R                  UR                  5      (       d9  [~        R                  R                  UR                  UR                  5      UlR        URJ                  (       a  [        URJ                  5      Ul%        URH                  (       a  [        URH                  5      Ul$        [        UR                  5      n [        UR                  5      nUR                  (       a  Uc  [        Sr5      eUR                  (       a(  [        UR                  5      Ul        S:Ul7        StUl*        UR                  (       a  UR                  (       d  SuUl^        OR[        UR                  [$        5      (       a3  UR                  R                  5       R                  5       Sv;   a  SnUl]        URD                  Sw;   a0  URJ                  (       d  UR                  SxURD                   Sy35        URD                  Sz;   a0  UR                  (       d  UR                  S{URD                   Sy35        URD                  S|:X  a  UR                  (       dD  UR                  (       d3  UR                  (       d"  UR                  (       d  UR                  S}5        URh                  (       a"  UR                  (       d  UR                  S~5        UR                  (       d  UR                  (       a  SnUlc        O3UR                  (       d  UR                  (       a  UR                  S5        UR                  (       a#  URh                  (       a  [	        S5        S:Ul4        URF                  [        :X  a<  URD                  [        ;   a(  URD                  S;   a  [        URD                     Ul#        1 SknURD                  U;   aW  UR                  (       aF  S[%        UR                  5      R                  5       ;  a  UR                  SURD                   S35        URD                  S:X  a;  URN                  St:w  a+  URN                  URL                  ::  a  UR                  S5        URD                  S;   Ga  [        URF                  =(       aH    URF                  R                  5       =(       a'    URF                  R                  5       URF                  :g  5      nU(       Gdf  URD                  S:X  aN  UR                  (       d  UR                  S5        [        SUR                  R                  5       /5      Ul#        GOURD                  S:X  aM  UR                  (       d  UR                  S5        [        SUR                  R                  5       /5      Ul#        OURD                  S:X  a  UR                  (       d  UR                  S5        UR                  R                  S5       Vs/ s H*  nUR                  5       (       d  M  UR                  5       PM,     nnU(       d  UR                  S5        [        SU5      Ul#        UR                  n[        U[$        5      (       Gaq  U(       Gai  [~        R                  R                  U5      n[~        R                  R                  U5      (       Gd%  S#nUR,                  (       a  [~        R                  R                  [~        R                  R                  UR,                  5      5      n[~        R                  R                  UU5      n[~        R                  R                  U5      (       a  UnUc~  UR                  (       am  [~        R                  R                  [~        R                  R                  UR                  5      U5      n[~        R                  R                  U5      (       a  UnUb  UnUb  US:X  a  SnUl4        S?Ul^        [	        S5        Oj[~        R                  R                  U5      (       aF  [	        SU 35         [        USjSS9 nUR                  5       Ul^        S#S#S#5        [	        SU 35        UR                  S:X  a  SUlI        UR                  S;  a  S/UlI        [	        S5        [        5       n[        5       n1 SknSS1nURD                  U;  =(       a    UR                  =(       d    UR                  =(       d    [        UR                  =(       a#    [%        UR                  5      R                  5       5      =(       dX    UR                  =(       dE    URd                  =(       d2    URf                  =(       d    URh                  =(       d    URj                  n UR                  Gc  UR                  5       n!URD                  U;   a/  U!(       a(  U! V"s/ s H  n"SU"R                  5       ;   d  M  U"PM     n!n"U!(       d  [	        S5        SSKuJvn#Jwn$  U$" 5       n%U#" U%5      u  n&n'[	        U'5        U&(       d  UR                  SU' 35        UR                  5       n!URD                  U;   a/  U!(       a(  U! V"s/ s H  n"SU"R                  5       ;   d  M  U"PM     n!n"URD                  U;   a  U!(       d  [	        S5        SSKuJxn(Jwn$  U$" 5       n%U(" SU%5      u  n&n'[	        U'5        U&(       d  UR                  SU' 35        UR                  5       n!U!(       a(  U! V"s/ s H  n"SU"R                  5       ;   d  M  U"PM     n!n"U!(       a@  URD                  S;   a  Sn)OSn)U)U!;   a  U)OU!S   Ulg        [	        SUR                   35        OUR                  S5        URD                  S;   aF  S[%        UR                  5      R                  5       ;  a  UR                  SURD                   S35        SSKuJvn#Jxn(Jwn$Jyn*Jzn+J{n,  U$" 5       n%U*" U%5      (       d<  [	        S5        U#" U%5      u  n&n'[	        U'5        U&(       d  UR                  SU' 35        UR                  (       a  [%        UR                  5      n-S1[        U,R                  5       5      -  n.U+" U-U%5      (       a  O@U-U.;   a+  U(" U-U%5      u  n&n'U&(       d  UR                  SU- SU' 35        O[	        SU- S35        UR                  n/U/c  UR                  U5      n/[~        GR                   GR                  SS?5      R                  5       R                  5       S;   n0[	        SUR                   35        UGR                  UR                  UR                  UU/U0UGR                  UGR                  S9  U (       Ga  SSKuJn1  UGR                  c  UGR                  5       n2U2(       a%  U2S   Ul        [	        SUGR                   35        GO6U1" U%S9u  n&n'[	        U'5        U&(       d  UR                  S5        UGR                  5       n2U2(       d  UR                  S5        U2S   Ul        [	        SUGR                   35        O[%        UGR                  5      n3[~        R                  R                  U35      (       a%  [~        R                  R                  U35      (       a  O^U+" U3U%5      (       a  OOU3U,;   a4  U1" U3U%S9u  n&n'[	        U'5        U&(       d  UR                  SU3 SU' 35        OUR                  SU3 S35        [	        SUGR                   35        UGR                  UR                  UGR                  UR                  UUGR                  S#S9  O5URD                  U;   a  [	        SURD                   S35        O[	        S5        [	        S5        S:n4UR                  (       d;  UR                  (       GaC  [%        UR                  5      R                  5       (       Ga  UGR                  (       d  UR                  S5        UR                  (       a4  [%        UR                  5      R                  5       (       a  UR                  OSn5G[        U55      u  n6n7URB                  (       a  URB                  S;  a  URB                  n8OU6n8[	        S5        G[        UU5U7U8UR\                  UR`                  URb                  S9n9U9GR                  (       a  U9R                  Ulb        U9R                  Ul^        [        U9R                  5      Ul]        UR<                  c  U9R<                  Ul        UR>                  (       d  U9R>                  Ul        UR@                  (       d  U9R@                  Ul         UR:                  S::  a  U9R:                  Ul        URB                  S;   a  U9GR                  Ul!        SnUlc        [	        S5        O2UR                  SU9R                  =(       d    U9GR                   35        UR                  (       Ga  UR                  (       d  UR                  (       Ga{  UGR                  (       d  UR                  S5        0 n:UR<                  b  UR<                  U:SD'   UR:                  b3  G[        UR:                  5      S:  a  G[        UR:                  5      U:SB'   UR>                  (       a  UR>                  U:SE'   UR@                  (       a  UR@                  U:SF'   URB                  (       a  URB                  S:w  a  URB                  U:S'   [	        S5        G[!        UUR                  =(       d    S?UR                  =(       d    S?U:(       a  U:OS#UR\                  UR`                  URb                  S9n;U;GR                  (       a  U;R                  =(       d    UR                  Ulb        U;R                  =(       d    UR                  Ul^        U;R:                  (       a  U;R:                  Ul        Snn4U;R<                  (       a  U;R<                  Ul        U;R>                  (       a  U;R>                  Ul        U;R@                  (       a  U;R@                  Ul         [	        S5        O2UR                  SU;R                  =(       d    U;GR                   35        URh                  (       Ga6  UGR                  (       d  UR                  S5        [	        S5        G[        UUR                  S:URB                  S:w  a  URB                  OS#UR\                  UR`                  URb                  S9n9U9GR                  (       Gai  [	        S5        U9R                  Ulb        U9R                  Ul^        UR<                  c  U9R<                  Ul        UR>                  (       d  U9R>                  Ul        UR@                  (       d  U9R@                  Ul         UR:                  S::  a  U9R:                  Ul        URB                  S:X  a  U9GR                  Ul!        [	        SUR                   35        UR                  S#S R                  5       GR#                  SS5      n<[	        SU< S35        [	        SUR<                   SUR>                   SURB                   S35        S:Ul2        S:Ul3        O1[	        SU9R                   35        [	        S5        SuUl^        SnUl]        S:Ul4        UR                  (       d  U4(       a  S:Ul2        UR                  (       Ga  URD                  U;  Ga
  [~        R                  R                  UR                  (       a)  [~        R                  R                  UR                  5      O[~        GR$                  " 5       S5      n=S#n>S:n?UR,                  (       aK  [~        R                  R                  U=5      (       a'  Snn? [        U=SjSS9 nUR                  5       n>S#S#S#5        U?(       a  [	        SU= S35        U>b  U>R                  5       (       d  S#n>G['        UU=U>S9  [        GS$0 SHURD                  _SIURF                  _SJURH                  _SKURJ                  _SUGR(                  _S>UR                  _SAUR                  _SCUR                  _SGURB                  _SDUR<                  _SEUR>                  _SFUR@                  _SBUR:                  _SUURR                  _SVURT                  _SWURV                  _SXURX                  _SURv                  _SURx                  _SYUGR*                  _S[URZ                  _S\W_SLURL                  _SMURN                  _SNURP                  _S]UR                  _S^UR\                  _S_UR^                  _S`UR`                  _SaURb                  _SURz                  _SbURd                  _ScURf                  _SdURh                  _SeURj                  _SfURl                  _6n@[        UR.                  URp                  URn                  UR                  URr                  URt                  UR8                  S9nAG[-        USS(5      nB[%        UB5      GR/                  5       nCUCS:g  nDG[1        UU@UAUUUDUS9  [	        S5        [	        SU@R                   S35        [	        SU@R:                   SUAR.                   35        UAR                  (       a  [	        SWAR                   35        [	        S5        UR                  =(       aS    URD                  U;  =(       a=    W@GR(                  =(       a$    [%        W@GR(                  5      R                  5       (       + nES#nFUE(       Ga  W@R`                  (       a  W@R`                  S:X  a  S#OG[3        W@R`                  5      nGW@Rb                  (       a  W@Rb                  S:  a  S#OW@Rb                  nHWAR.                  b  WAR.                  OS,nIS?nJWAR                  b  [        WAR                  G[4        5      (       a<  [        WAR                  5      S:  a#  SR                  S WAR                   5       5      nJO5[        WAR                  G[2        5      (       a  [%        WAR                  5      nJUGR7                  WIWJWARn                  5      u  nKnW@R:                  nLU@R<                  nMU@R>                  nNU@R@                  nOU@RB                  nPS#nQ0 nRS#nSS#nTS#nU0 nVSSSS.nFG[9        S5       GH  nW0 nXW@R<                  b,   G[        W@R<                  5      nYUYS:  a  G[3        WY5      WXSD'   W@R>                  (       ah  W@R>                  R                  5       (       aI  W@R>                  R                  5       R                  5       S;  a  W@R>                  R                  5       WXSE'   W@R@                  (       ah  W@R@                  R                  5       (       aI  W@R@                  R                  5       R                  5       S;  a  W@R@                  R                  5       WXSF'   W@R:                  b,   G[        W@R:                  5      nZUZS:  a  G[3        WZ5      WXSB'   WWS:  a}  W@R                  (       a<  W@R                  R                  5       (       a  W@R                  R                  5       WXS>'   W@RB                  (       a  W@RB                  S;  a  W@RB                  WXS'   WX(       a  WXOS#n[UGR=                  W@R                  =(       d    S?W@R                  =(       d    S?SW@R\                  U@R^                  U@Rz                  WGWHU@R:                  W[U@Rf                  U@Rj                  U@Rd                  U@Rl                  WARt                  WIWKS9nQUQGR                  S5      =(       d    0 GR                  S0 5      n\U\(       a  WFS==   G[        W\GR                  SS5      =(       d    S5      -  ss'   WFS==   G[        W\GR                  SS5      =(       d    S5      -  ss'   WFS==   G[        W\GR                  SU\GR                  SS5      =(       d    SW\GR                  SS5      =(       d    S-   5      =(       d    S5      -  ss'   WQGR                  SS:5      (       dE  WQGR                  SGS 5      n][	        GSU] 35        [	        GSUQGR                  SS?5       35          g#WIS,:  a4  WQGR                  GS5      =(       d    0 /S   nRWQGR                  S/ 5      n^O0WQGR                  GS0 5      =(       d    0 nRWQGR                  SS?5      n^W^(       a  W^W@l        O[	        GS5        G[-        UGSS#5      nSG[-        UGSS#5      nTG[-        UGSS#5      nUG[-        UGS0 5      nVS#n_S#n`S#naS#nbS#n6UV(       a  WVGR                  SD5      nYUY(       a!  G[?        WY5      ncUcb  WcS:  a  G[3        Wc5      n`WVGR                  SB5      nZUZ(       a!  G[?        WZ5      ncUcb  WcS:  a  G[        Wc5      n_WVGR                  SE5      ndUd(       a  WdnaWVGR                  SF5      neUe(       a  WenbWVGR                  S5      =(       d    WVGR                  SG5      nfUf(       a  Wfn6WWS:X  GaF  W_S#L=(       a>    WLS#L =(       d3    G[        WL5      S:*  =(       d    G[A        G[        WL5      W_-
  5      GS	:  ngW`S#L=(       a    W`WM:g  nhWaS#L=(       a    WaWN:g  niWbS#L=(       a    WbWO:g  njU6S#L=(       a    U6WP:g  nkWg(       d  Wh(       d  Wi(       d  Wj(       d  Wk(       a  Wg(       a  W_W@l        Wh(       a  W`W@l        Wi(       a  WaW@l        Wj(       a  WbW@l         Wk(       a  U6W@l!        WV(       a  WVGR                  S>5      OS#nlUl(       a  WlR                  5       (       a  WlW@lb        [	        GS
5        SnUl        GM    O   WV(       a  WVGR                  S>5      OS#nmUm(       a  WmR                  5       (       a  WmW@lb        ONWS(       a  WSW@lb        O?W@Rf                  (       a.  WRGR                  S>5      (       a  WRGR                  S>5      W@lb        WT(       a  WTW@l^        O?W@R                  (       d.  WRGR                  SA5      (       a  WRGR                  SA5      W@l^        WU(       a  WUW@l#        WV(       a  WVGR                  SD5      nYUY(       a   G[?        WY5      ncUcb  G[3        Wc5      W@l        WVGR                  SB5      nZUZ(       a   G[?        WZ5      ncUcb  G[        Wc5      W@l        WVGR                  SE5      ndUd(       a  WdW@l        WVGR                  SF5      neUe(       a  WeW@l         WVGR                  S5      =(       d    WVGR                  SG5      nfUf(       a  WfW@l!        GOW@R<                  cP  WRGR                  SD5      GS;  a9  G[?        [%        WRGR                  SD5      5      5      ncUcb  G[3        Wc5      W@l        W@R>                  (       d.  WRGR                  SE5      (       a  WRGR                  SE5      W@l        W@R@                  (       d.  WRGR                  SF5      (       a  WRGR                  SF5      W@l         W@R:                  cP  WRGR                  SB5      GS;  a9  G[?        [%        WRGR                  SB5      5      5      ncUcb  G[        Wc5      W@l        W@RB                  GS;   a9  WRGR                  SG5      =(       d    WRGR                  S5      nfUf(       a  WfW@l!        W@Rj                  (       at  WV(       a+  WVGR                  S5      =(       d    WVGR                  SG5      OS#nnUn(       d9  WRGR                  SG5      =(       d    WRGR                  S5      noUo(       a  WoW@l!        WR(       a  WMc  W@R<                  U@l        WN(       d  W@R>                  U@l        WO(       d  W@R@                  U@l        WLb  G[        WL5      S::  a  W@R:                  U@l        WPGS;   a  W@RB                  U@l        W@R                  (       d  WRGR                  S>S?5      W@l        W@R                  (       d  WRGR                  SAS?5      W@l        S:W@lN        S:U@l3        S:U@l5        S:U@l2        G[S        UGS5      (       a  S:Ul        WCGS;   a  G[U        UW@5        [	        GS5        G[W        UUW@WAUGRX                  GS9npO.WCGS;   a  G[U        UW@5        G[W        UUW@WAUGRX                  GS9npWpGR                  (       Ga  [	        GS[        WpGRZ                  5       GSUGRX                   GS35        G[]        UpGRZ                  5       H+  u  nqnr[	        GSUqS,-    GSUrGS    GSUrGS   SV    35        M-     WpGR^                  GR                  S0 5      nsWE(       a  WF(       a  Wsb  [        WsG[`        5      (       d  0 nsUsWpGR^                  S'   WFS   S:  aO  WFS   WsGS'   UFS   UsGS'   UFS   UsGS'   G[        UsGR                  GSS5      =(       d    S5      ntWsGS   Ut-   UsGS'   Ws(       a  [	        GS5        WsGR                  GSS5      nu[	        GSUuS GS 35        UR                  (       a=  WsGR                  GSS5      nvUsGR                  GSS5      nw[	        GS!UvUw-   S GS 35        WsGR                  GSS5      nx[	        GS"UxS GS 35        [	        GS#5        g#g#[	        GSWpR                   35        [	        GSUpGR                   35        g#! [2         a    S/n	 G0Nf = f! , (       d  f       G-N= f! [         a,  nUR                  SlUR,                   SmU 35         S#nAG.NS#nAff = f! [         a  nUR                  SsU 35         S#nAG+NRS#nAff = fs  snf ! , (       d  f       G$N= f! [         a"  nUR                  SU SU 35         S#nAG$N1S#nAff = fs  sn"f s  sn"f s  sn"f ! , (       d  f       GN= f! [         a   n[	        SU= SmU 35        S#n>S:n? S#nAGNS#nAff = f! [        G[:        4 a     GNmf = f! [        G[:        4 a     GNZf = f(%  zG
Main function to run ACE-Step music generation from the command line.
r      r   z<============================================================zGPU Configuration Detected:z  GPU Memory: z.2fz GiBz  Configuration Tier: z  Max Duration (with LM): zs (r  z min)z  Max Duration (without LM): z  Max Batch Size (with LM): z  Max Batch Size (without LM): z  Default LM Init: z  Available LM Models: Nonez&Auto-enabling CPU offload (GPU < 16GB)z-CPU offload disabled by default (GPU >= 16GB)z"MPS detected, running on Apple GPUzNo GPU detected, running on CPUz4ACE-Step 1.5: Music generation (wizard/config only).)rV   formatter_classz-cz--configz*Path to a TOML configuration file to load.)typehelpz--configure
store_truez4Run wizard to save configuration without generating.)actionr  z	--backendN)vllmrm   mlxzg5Hz LM backend. Auto-detected if not specified: 'mlx' on Apple Silicon, 'vllm' on CUDA, 'pt' otherwise.)r  r   choicesr  z--log-levelr   zMLogging level for internal modules (TRACE/DEBUG/INFO/WARNING/ERROR/CRITICAL).)r  r   r  )r   r   r  z=Apple Silicon detected with MLX available. Using MLX backend.r  project_rootr  checkpoint_dirr  r  r<  r   use_flash_attentionoffload_to_cpuoffload_dit_to_cpuFr  outputrz  r   r   r   r   rW  r   rX  rY  rZ  r[  rG  r   reference_audior  rf  rg  rh  r  r  r  r{  r|  r}  r\  r]  r^  r_  rb  rc  rd  re  ri  rj  rk  rl  rm  ro  rp  rq  rr  rs  rt  )
rw  rv  ru  rx  ry  audio_codesr`  ra  rn  	log_levelzConfig file not found: r   zConfiguration loaded from zError loading TOML config file r   T)r  r  rT  rU  z3Configuration complete. Exiting without generation.zRINFO: Automatic lyric generation requires the LM handler. Forcing --thinking=True.z@Timesteps must be a list of numbers or a comma-separated string.zkInvalid format for timesteps. Expected a list of numbers (e.g., '[1.0, 0.5, 0.0]' or '0.97,0.5,0'). Error: r   r  >   [inst][instrumental]r  z'--src_audio is required for task_type 'z'.r  z%--caption is required for task_type 'r  z1--caption or --lyrics is required for text2music.z9--use_cot_lyrics requires --caption for lyric generation.zI--sample_mode/sample_query are only supported for task_type 'text2music'.z6INFO: sample_mode enabled. Disabling --use_cot_lyrics.>   r  r  r  r  r  ztask_type 'z:' requires a base model config (e.g., 'acestep-v15-base').r  zA--repainting_end must be greater than --repainting_start (or -1).rJ  z8--instruction or --lego_track is required for lego task.rL  z>--instruction or --extract_track is required for extract task.rM  zA--instruction or --complete_tracks is required for complete task.r   z2--complete_tracks must contain at least one track.generatezLyrics generation enabled.z+INFO: Attempting to load lyrics from file: r   r   zLyrics loaded from file: zCould not read lyrics file z	. Error: pyTorchrm   >   rm   r  r  z!Initializing ACE-Step handlers...r  zTNo DiT models found. Downloading main model (acestep-v15-turbo + core components)...)ensure_main_modelrS   zFailed to download main model: zIBase-only task selected. Downloading base DiT model (acestep-v15-base)...)ensure_dit_modelrS   zacestep-v15-basez#Failed to download base DiT model: zacestep-v15-turbozAuto-selected config_path: z<No available DiT models found. Please specify --config_path.)r  r  rS   check_main_model_existscheck_model_existsSUBMODEL_REGISTRYz:Main model components not found. Downloading main model...zFailed to download DiT model 'z': zWarning: DiT model 'z@' not found locally and not in registry. Skipping auto-download.ACESTEP_COMPILE_MODEL>   r   r   onr   r   z%Initializing DiT handler with model: )r  r  r<  r  compile_modelr  r  )ensure_lm_modelzUsing default LM model: )checkpoints_dirzMNo LM models available. Please specify --lm_model_path or disable --thinking.z\No LM models available after download. Please specify --lm_model_path or disable --thinking.zFailed to download LM model 'z
LM model 'zP' not found locally and not in registry. Please provide a valid --lm_model_path.z$Initializing LM handler with model: )r  r  r  r<  r  dtypez"LM is not required for task_type 'z&'. Skipping LM handler initialization.z>LM 'thinking' is disabled. Skipping LM handler initialization.zHandlers initialized.zM--sample_mode/sample_query requires the LM handler, but it's not initialized.r   )rZ   r  r   z-
INFO: Creating sample via 'create_sample'...)r  queryr   r[  temperaturetop_ktop_p)r  r   Nu/   ✓ Sample created. Using generated parameters.zcreate_sample failed: z?--use_format requires the LM handler, but it's not initialized.r  languagez7
INFO: Formatting caption/lyrics via 'format_sample'...)r  r   r   user_metadatar  r  r  u   ✓ Format complete.zformat_sample failed: za--use_cot_lyrics requires the LM handler, but it's not initialized. Ensure --thinking is enabled.z<
INFO: Generating lyrics and metadata via 'create_sample'...uE   ✓ Automatic sample creation successful. Using generated parameters:z  - Caption:    r   z  - Lyrics: 'z...'z  - Metadata: BPM=z, Key='z	', Lang=''uG   ⚠️ WARNING: Automatic lyric generation via 'create_sample' failed: z7         Proceeding with an instrumental track instead.zinstruction.txtr   zINFO: Found z. Using it without editing.)r  r  r`  ra  rn  )rt  ru  rv  rw  rx  ry  rz  r  DEBUG)r  r  z
--- Starting Generation ---z
Caption: ""r  zs | Outputs: zCustom Seeds: z---------------------------
r  c              3   8   #    U  H  n[        U5      v   M     g 7frJ   )r)   )r   r  s     r    r   main.<locals>.<genexpr>  s     .L|!s1vv|s   r  )phase1_timephase2_time
total_timer   )zn/ar   )r   r  llm_dit)r   r   
infer_typer  	cfg_scaler  r  r  target_durationr  rp  rr  ro  rs  ry  rt  rw  extra_outputs
time_costsr  r  r  successerrorzUnknown LM erroru   
❌ Generation failed: z   Status: r   zAWARNING: LM did not return audio codes; proceeding without codes.r  r  r  r  gư>zMINFO: Edited metadata detected. Regenerating audio codes with updated values.)NzN/Ar   )Nr   r  r  >   r   r  zCRunning DiT generation with edited prompt and cached audio codes...)r  u   
✅ Generation successful! z audio(s) saved in 'z/'z  [z] Path: rK   z	 | Seed: r  lm_phase1_timelm_phase2_timelm_total_timedit_total_time_costpipeline_total_timez
--- Performance ---zTotal time: r  z  - LM time: z  - DiT time: z-------------------
rO   )r:   r;   r<   gpu_memory_gbr   tiermax_duration_with_lmmax_duration_without_lmmax_batch_size_with_lmmax_batch_size_without_lminit_lm_defaultr  r3   r4   argparseArgumentParserArgumentDefaultsHelpFormatteradd_argumentr)   
parse_argsr0   r  r  rt  mlx.coreImportErrorrP   rU   rz  rW  rX  rY  rZ  r[  rG  r   r  r  rf  rg  rh  r\  r]  r^  r_  rd  rj  rk  rl  rm  ro  rp  rq  rr  rs  rv  ru  rx  ry  r`  ra  rn  	Namespacer'   rK   existsr#  r   r  loadr&   r   r~  r  	configurer  r.   r  ri  r  rM   r6  r  isabsr   r1  rF  r<  r  re  r)  rw  r   r   r   r   r   r   r   r{  r|  r8   r9   r  r+   r  rS  r  r  r  rL   r0  r   r1   r2   r}  r  rT   r  rS   r  r  r  r  r   r  r  is_flash_attention_availabler(   r   initialize_servicer  r  r
  r  r  
initializellm_initializedr   r6   r"  r  status_messager   r7   r  getcwdr"  r  rb  r  r*   r  r   r   prepare_seedsrange	TypeErrorgenerate_with_stop_conditionr   absr  cot_bpmcot_keyscalecot_timesignaturecot_durationcot_vocal_languagecot_caption
cot_lyricsrB  r  r5   r  audiosr   r   dict)y
gpu_configmps_availableauto_offloadrT  rU  parsercli_argsdefault_batch_sizer  default_backenddefaultsr  r   config_from_filer   r  r   r  should_generater<  re  base_only_taskshas_custom_instructionr   rH  
lyrics_argresolved
config_dir	candidater  r  skip_lm_tasksrequires_lmavailable_modelsr  r  rS   r  r"  msgr  	preferredr  r  r  config_nameknown_modelsr  r	  r
  r  r  format_has_durationr|  parsed_languageparsed_instrumentalsample_languagesample_resultuser_metadata_for_formatformat_resultlyrics_previewr   r  use_instruction_filer  r  r  log_level_uppercompact_logsmanual_edit_pipelinelm_time_coststop_k_valuetop_p_valueactual_batch_sizeseed_for_generationactual_seed_listoriginal_target_durationoriginal_bpmoriginal_keyscaleoriginal_timesignatureoriginal_vocal_language	lm_resultlm_metadatar  r  r  r  attemptr  	bpm_valueduration_valueuser_metadata_to_passlm_extra_time	error_msgr  parsed_duration
parsed_bpmparsed_keyscaleparsed_timesignaturer  keyscale_valuetimesignature_valuelanguage_valueduration_changedbpm_changedkeyscale_changedtimesignature_changedlanguage_changededited_caption_for_regenedited_meta_captionedited_langlm_langresultiaudior!  	dit_totalr  lm1_timelm2_timedit_timesy                                                                                                                            r    mainr    s-   
  !J*%#%M%%i:+C+Ca+GiJLdLdgiLiL	Bvh-	
'(	VH	N:33C8
=>	":??"3
45	&z'F'F&Gs:KjKjnpKpJqqv
wx	)**L*L)MSQ[QsQswyQyPzz  A  B	()J)J(K
LM	+J,P,P+Q
RS	
 : :;
<=	#J$B$B$Lf#M
NO	VHB-67		!	!A	%=>	23/0&(O&(O$$J >>F js9ef
lAwx
%v   \	     "HX//0"*//7Q7Q 	%#OQR !>)+>t> 	#9;<> 		>
 	?> 	&> 	t> 	,> 	e> 	H> 	44> 	2> 	"> 	$> 	O,,>  	!>" 	""#>$ 	O,,%>& 	66'>( 	/88)>* 	_..+>, 	22->. 	?::/>0 	_..1>2 	O<<3>4 	/885>6 	 D D7>8 	b9>: 	;>< 	2=>> 	u?>@ 	A>B 	eC>D 	?::E>F 	$$G>H 	/88I>J 	?**K>L 	M>N 	44O>P 	TQ>R 	J..S>T 	/88U>V 	44W>X 	O,,Y>Z 	O,,[>\ 	66]>^ 	?::_>` 	/88a>b 	O<<c>d 	#O$L$Le>f 	(g>h *::)88.BB&5&P&P-@@+<<-@@''{>H@ ))DDKww~~hoo..LL28??2CDE	Shoos+q#'99Q<  ,.x.?@A +002JCDu% 3oo #'' (++
a 	CD?? *  $++!
o GHHHQK 4==bc-/GGOOBGG,>,>s4CTCT?U,VW gg00T5H5H1IJww}}T0011"$'',,t/@/@$BUBU"VD~~+DNN;1$2F2FGT[[)FH*4>>:	>>i/_`` zzdjj/$	&	DKK	%	%$++*;*;*=*C*C*EIe*e  ~~LL~~LLB4>>BRRTUV~~AA||LL@@PPRST~~%||DKK##D,=,=PQt||LLTUt00#Dt00LLdeD//FG# 22t~~IZ7Z>>??0@D 6O~~(T-=-=T--.4466LL;t~~&66pqr~~""$)<)<@U@U)ULL\]~~88!%d&6&6  'P4;K;K;Q;Q;S  'PX\XhXhXnXnXp  uD  uP  uP  YP  "Q%~~'LL![\#@$//J_J_JaIb#c 9,))LL!ab#@TM_M_MeMeMgLh#i :-++LL!de-1-A-A-G-G-LZ-LPQPWPWPY)!'')-LZLL!UV#@V#T  J*c""zWW''
3
ww}}Z((H{{WW__RWW__T[[-IJ
GGLLZ@	77>>),,(HD$5$5GGLL9J9J)KZX	77>>),,(H#%
#"&DDK./WW^^J''?
|LMU*cG<"#&&(DK =1*>? ||y ||00	
-. "K,K5Oi(Mm+ 		
MM %%D%%H#d.?.?*@*F*F*HI% % !!	%
 ##% ""% $$  &GGI>>_,1A+;S+;av?R+;ShiW13O,_=LGS#J>seDE*KKM~~05E/?#W/?!6QWWYCVA/? #W>>_,5E]^V13O+,>PLGS#JB3%HI*KKM/?#W/?!6QWWYCVA/? #W~~!@@.	/	,59I,IyO_`aObD/0@0@/ABCLLWX~~88V3tO_O_K`KfKfKh=h{4>>"22lmn  *+O"?33JK(9c
LL:3%@A$**++,s3D3I3I3K/LLk?;;L(+KILGS=k]#cUST(5uvw22")FFvNJJNN#:B?EEGMMO T M 
1$2B2B1C
DE""&&$$/#**22 #  <%"-"I"I"K"%8%;"01C1C0DEF.Oc
LL!pq&1&M&M&O#*LL!  A%8%;"01C1C0DEF 2 23Mww}}]++}0M0M#M?CC"33.}o^c
LL#@sSVRW!XYz-  9I  J  K4T5G5G4HIJ..,,LL.. 	 	
 >>]*6t~~6FFlmnRS	
!" D---#d6G6G2H2N2N2P2P***LLhi,0,=,=#dFWFWBXB^B^B`B`t((fu/G/U,,4#6#6>S#S"11O-O>?%#,*++----
    (00DL'..DK $]%?%? @Dxx(,,== - 6 6%%%2%@%@"}}! - 6 6""&;;&3&<&<##DCDLL1-2E2E2eIeIe1fgh DLLDKKK***LLZ[#% 88.2hh$U+==$t}})=)A383G$Z0==37==$Z08<8J8J$_54#6#6)#C373F3F$Z0HI%#LL&B;;$"6N2TX++----
    (00@DLLDL'..=$++DK%% - 6 6&*#  (,,%% - 6 6**%2%@%@"()LL1-2E2E2eIeIe1fgh ***\\}~MN%#,,262E2E2R4..X\++----
    YZ(00DL'..DKxxM,=,===-2H2H$-%%M<W<Wt'9}}!=3I3I4=""i/}G]G]1DM$,,01![[#.446>>tSINM.!167&txxjiPTPcPcOddefg "'D#(D [\i\o\o[pqrKL*DK $D $." }}}}<77<<262C2CBGGOOD--.
  $;;277>>*:;;#' -*C'Ba'(vvx$ C  L!1 22MNO'0@0F0F0H0H#!+/?Rbc  %..%$$% ,,% ..	%
 $$% % {{% &&% **% HH% % ((% % ,,% YY%  **!%" #%$  22%%& ..'%( jj)%* &&+%, -%. ../%0 **1%2 "663%4 5%6 **7%8 &&9%: ;%< =%>  22?%@ ((A%B ,,C%D **E%F ..G%H "&!>!>I%FN ??**,,jj 44#'#B#B&&F k62I)n**,O"g-L 

)*	K'r
*+	Jv'}V5F5F4G
HI||v||n-.	
)* 	 	INN-/	I##GF,>,>(?(E(E(GH  M"(//V__5IdsSYSbSbOc"(//V__5KdQWQ`Q`171B1B1NF--TU <<#&,,--#fll2Ca2G&)hh.Lv||.L&L#FLL#..&)&,,&7#)778IK^`f`v`vw!#)?? zz"OO!'!5!5"("7"7	!

 QxGMzz% %fjj 1I 1}/29~e, 6??#8#8#:#:v?T?T?V?\?\?^fq?q,2OO,A,A,Cj)##(<(<(B(B(D(DI]I]IcIcIeIkIkIm  vA  JA171E1E1K1K1Mo.*%*6??%;N%)474Gj1 {>>fnn&:&:&<&</5~~/C/C/EM),((V-B-B/-Y060E0EM*-5BM!#@@,"}}*$"11 -- & 9 9!! &3 & 6 6!'!8!8$22)/)H)H+1+L+L,&# A I& ']]?;ArFF|UWXMm,m6G6GWZ6[6b_b0cc,m,m6G6GWZ6[6b_b0cc,l+u!%%$&**=#>E#(,,]C@GCI 
 0 + ==E22%MM'3EF	1)=>IMM'2$>#?@A 1$(}}Z8@RD!D'mmM2>'mmJ;Ar'mmM2>%0"YZ$[2CTJN#K1A4HM!(6KT!R";DL"OJ"O#' "O(,,U3	*95F)fqj%([
!-!1!1*!=!*>:F)fqj*/-!-!1!1*!=!&4O&2&6&6&G#&+>(!-!1!1*!=!cAQAQRbAc!&4O!|#2$#> $,4 U56!;U5!9:_LMPTT !
 )4S|9S#2$#>#g?VgCg (<D(H({Mae{M{%#2$#>#m?VmCm #{6FJ_cs'*9"%/
'*9,/C,'0?- O[|/?/?	/J`d,/4L4R4R4T4T)Aij48K1[  ^ >Jl..y9t#6#<#<#>#>0FN+FN##	(B(B(__Y7FN)FM;??8#<#<'OOH5FM!3F$((/I&y1%!$VFJ)--j9N&~6%&+FmFO)--j9N"0"."2"2?"C"':$)--j9_\=M=MN^=_N(6%zz!kooe&<DU&U&s;??5+A'BC%!$VFJ??{z'B'B"-//*"=''KOOO,L,L'2'G$&;??:+FN_+_&s;??:+F'GH%&+FmFO$$(==!,1A!B!akooV`Fa!,:F) ""bn<++J7]<;K;KL\;]txK%//*:;Z{z?Z,3F) #!'$&,oo#)+1+?+?('/59Q3RVW3W&,oo#&*??,2,A,A)>>%0__Y%C"==$/OOHb$A!!&"'$; 344,1K)//k62ST[&&SWS`S`a//k62[&&SWS`S`a ~~~-c&--.@-AAUVZVcVcUddfgh!&--0HAuC!uHU6]O9U8_V=T<UVW 1 ))--lB?
Mj6Lj$//
5?$$\2\*S0/<]/K
+,/<]/K
+,.;L.I
?+!*..1F"L"SPST	4>4OR[4[
01)*#(=qAJLC 023}}%>>*:A>%>>*:A>h&9#%>a@A!~~&;Q?HN8C.23)*  	)&,,89F11234W  	%$O	%V ,+  	SLL:8??:K2aSQRR	Sx  H  C  DE  CF  G  	H  	HHH [@ =<  U::,iPQsSTTU@  T $X $X~ CB -01A0B"QCHI#' ',$-x #I.  #I. sf  CM CM8 *CM& CM8 4CN1 .COCO3CO4 >CO"CO4 ECP#E.CP#G3CP(HCP(JCP-J1CP-~CQ ~CP2~"CQ S-+CQ1X+CR	MCM#M"CM#M&
CM5M0CM8 M8
CN.N!CN)N)CN.N1
CON;COOCOO"
CO1O,CO4 O4
CP O>CPPCP P2
CQP<CQ QCQ Q
CQ.QCQ)Q)CQ.Q1CRRCRR	CRRCR__main__r   rX   )NTNNrJ   )NNN)FNNN)Tr0  r   r  r'   r.   r  pathlibr   typingr   r   r   dotenvr   rK   rM   rN   _current_filerL   _project_rootr   	_env_path_env_example_pathr8  r   r6  
_proxy_varr(   popr)   r+   r0   acestep.handlerr1   acestep.llm_inferencer2   acestep.inferencer3   r4   r5   r6   r7   acestep.constantsr8   r9   acestep.gpu_configr:   r;   r<   rC  r  rP   rU   tupler   r   r   r   r   r   r   r   rO  r   r   r   r  r"  r   r+  r.  r2  r1  r;  rF  rS  r  r  r  r  r  r  r  __name__rO   r#   r    <module>r     sK    	 
 	 
   ( (	"GGOOH-MGGOOM2M]F3I]NC	ww~~i  I*9+67	)	*	*%&*+<*=[IJ
 ZJJJNN:t$ Z  ,0<C=<#D>< 
<@   * , n n H U U  63 6&S &0.# 0.%t8K2L 0.fc c 
; 
;x} 
;t 
;`c 
;
* 
*t 
* 
*  ""&!/!/#Y!/ c]!/ 	!/ 3-!/ c]!/H c  S  UX  ,+C +ERZ[^R_aijmanRnLo +* RU # $ D % Xd5k%: : '+F:F:F: smF: 
	F:R X\+/ hsm xPS} #C=4<SM* ^b/3#  8TY? %e_8@*6# 6 6 6A# A8C= A;s ;t ;	C 	C 	
#S 
#(49:M 
#Y\ 
#,.4D ,.Wg ,.lp ,.^hsm  , &*4/4/ 4/ &	4/
 &4/ 4/ c]4/ 
4/n
- 
(4. 
8#3 8=M 8RV 8" Y]=A=AT$T T$QT T$ ()9 :T$ ()9 :T$n
m5` zF A>  		s   B'L9 4L9 9MM