
    EZi*^                     F   d Z ddlZddlZdZ	 ddlmZ esej                  j                  e      Z	ej                  j                  ej                  j                  e	            Zej                  j                  ed      Zej                  j                  ed      Zej                  j                  e      r ee        ede        n/ej                  j                  e      r ee        ede d       d	Zd
D ]  Zej&                  j)                  ed         	 ddlmZ ddlmZ ddlmZ ddlmZ ddlmZmZm Z m!Z!m"Z"m#Z#m$Z$ ddl%m&Z& ddZ/d Z0e1dk(  r e0        yy# e$ r Y pw xY w# e$ r ej                  j                  ej                  j                  ej                  j                  e                  Z'e'ej                  vrej                  jQ                  de'       ddl)mZ ddl*mZ ddl+mZ ddl,mZ ddl-mZmZm Z m!Z!m"Z"m#Z#m$Z$ ddl.m&Z& Y w xY w)z@
ACE-Step V1.5 Pipeline
Handler wrapper connecting model and UI
    NF)load_dotenvz.envz.env.examplezLoaded configuration from z (fallback)T)
http_proxyhttps_proxy
HTTP_PROXYHTTPS_PROXY	ALL_PROXY   )AceStepHandler)
LLMHandler)DatasetHandler)create_gradio_interface)get_gpu_configget_gpu_memory_gbprint_gpu_config_infoset_global_gpu_configVRAM_16GB_MIN_GBVRAM_AUTO_OFFLOAD_THRESHOLD_GBis_mps_platform)ensure_lm_modelc                     | r | j                  d      rd| v r| d   }| d   }nt               }t               }t               }t	        |||| |      }|S )a  
    Create Gradio demo interface
    
    Args:
        init_params: Dictionary containing initialization parameters and state.
                    If None, service will not be pre-initialized.
                    Keys: 'pre_initialized' (bool), 'checkpoint', 'config_path', 'device',
                          'init_llm', 'lm_model_path', 'backend', 'use_flash_attention',
                          'offload_to_cpu', 'offload_dit_to_cpu', 'init_status',
                          'dit_handler', 'llm_handler' (initialized handlers if pre-initialized),
                          'language' (UI language code)
        language: UI language code ('en', 'zh', 'ja', default: 'en')
    
    Returns:
        Gradio Blocks instance
    pre_initializeddit_handlerllm_handlerinit_paramslanguage)getr
   r   r   r   )r   r   r   r   dataset_handlerdemos         ;/mnt/workspace/ACE-Step-1.5/acestep/acestep_v15_pipeline.pycreate_demor!   6   s`    $ {'89m{>Z!-0!-0$& l$&O #;_ZepxyDK    c                     ddl } t               }t        |       |j                  }t	               }| xr |dkD  xr	 |t
        k  }|rdnd}t        dd        t        d       t        d        t        d|d	d
       t        d|j                          t        d|j                   d|j                  dz   d       t        d|j                   d|j                  dz   d       t        d|j                          t        d|j                          t        d|j                          t        d|j                  xs d        t        d d       |rt        d|dd|        nB|rt        d|ddt
         d       n(|dkD  rt        d|ddt
         d       nt        d       t        j                  j!                  t        j                  j!                  t        j                  j#                  t$                          }t        j                  j'                  |d      }|j)                  d d!      }t        j*                  |d"#       t        d$|        | j-                  d%&      }|j/                  d't0        d(d)*       |j/                  d+d,d-.       |j/                  d/d,d0.       |j/                  d1t2        d2d3*       g }	t        j                  j'                  t        j                  j!                  t        j                  j#                  t$                    d4d5d6      }
t        j                  j5                  |
      r@t        j6                  |
      D ](  }|j9                  d7      s|	j;                  |dd8        * |j/                  d9t2        d:|	d;d<j'                  |	      z   =       |j/                  d>d?g d@A       |j/                  dBdC dDdE*       |j/                  dFdG dDdH*       |j/                  dIt2        ddJ*       |j/                  dKt2        ddL*       |j/                  dMt2        dNg dOdP=       |j/                  dQdR ddS*       |j/                  dTt2        ddU*       |j/                  dVt2        |g dWdX| dY=       |j/                  dZd[ dd\*       |j/                  d]d^ |d_|rd`nda db*       |s|j<                  ndD}|j/                  dcdd |de| df*       |j>                  r|sdgnd}|j/                  dht2        |g didj| df=       |j/                  dkt2        dg dldm=       |j/                  dnt0        ddo*       |j/                  dpd,dq.       |j/                  drt2        dds*       |j/                  dtt2        ddu*       |j/                  dvt2        ddw*       |jA                         }|jB                  rd"|_"        |jF                  $t        jH                  jK                  dx      |_#        |jL                  $t        jH                  jK                  dy      |_&        t        jH                  jK                  dz      r$t        jH                  jK                  dz      |_'        |jP                  rt        d{       d"|_"        |jF                  %t        jH                  jK                  d|d}      |_#        |jL                  %t        jH                  jK                  d~d      |_&        t        jH                  jK                  dd      |_'        t        d|jF                          t        d|jL                          t        d|jN                          |jR                  s?|jL                  r3d|jL                  v r%d|cxk  rdk  rn nd"|_)        t        d|dd       |jL                  rUd|cxk  r	t
        k  rFn nCd|jL                  v r5|jL                  j)                  dd      }t        d|dd|        ||_&        	 d}d}d}|jD                  rt        d       tU               }tW               }|jF                  k|jY                         }|r)d|v rdn|d   |_#        t        d|jF                          n0t        dtZ        j\                         t[        j^                  d       t        j                  j#                  t$              }t        j                  j!                  t        j                  j!                  |            }|j`                  }||jc                  |jd                        }d}|jf                  r)|jf                  dNk7  r|jf                  }t        d|        t        d|jF                   d|jd                   d       t        jH                  jK                  dd      ji                         jk                         dv }|jl                  r|sd"}|jo                  ||jF                  |jd                  |||jR                  |jp                  |jl                  |	      \  }}|s3t        d| tZ        j\                         t[        j^                  d       t        d       |jr                  *|j                  |_9        t        d|jr                   d       d}|jr                  r|jL                  W|ju                         }|r#|d   |_&        t        d|jL                          n"t        dtZ        j\                         dD|_9        |jr                  r6|jL                  r)t        j                  j'                  |d      }d}|jf                  r|jf                  dNk7  r|jf                  }	 tw        |jL                  ||      \  }}|st        d| tZ        j\                         t        d|jL                   d|jd                   d       |j{                  ||jL                  |jN                  |jd                  |jR                  d      \  }} | rt        d       |d| z  }n&t        d| tZ        j\                         |d| z  }i dd"d|jP                  d|j|                  d|jF                  d|jd                  d|jr                  d|jL                  d|jN                  d|d|jR                  d|jp                  d|jl                  d|d|d|d|d|j~                  |||j                  d}t        d       t        d|j~                   d       |||j~                  ||j                  d}t        ||j~                        }!t        d       |!j                  ddNd       t        d|j                   d|j                   d       d}"|j                  r/|j                  r#|j                  |j                  f}"t        dë       |g}#|j                  D ]  }$|$s|$|#vs|#j;                  |$        |jB                  rt        dī       ddlHmI}% |!j                  |j                  |j                  |j                  |j                  d"d"dD|"|#ƫ	        |%|!|||j                  ǫ       |j                  rt        dȫ       t        dɫ       	 	 ddlN}&|&j                  d       |!j                  |j                  |j                  |j                  |j                  d"dDdD|"|#ƫ	       y# tx        $ r)}t        d| tZ        j\                         Y d}~}d}~ww xY w# t        $ r t        dʫ       Y yw xY w# tx        $ rQ}t        d| tZ        j\                         ddlQ}'|'j                          t[        j^                  d       Y d}~yd}~ww xY w)zMain entry functionr   Nmlxvllm
z<============================================================zGPU Configuration Detected:z  GPU Memory: z.2fz GBz  Configuration Tier: z  Max Duration (with LM): zs (<   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: Noneu0   Apple Silicon (MPS) detected — unified memory z.1fz#GB, no CPU offload needed, backend=zAuto-enabling CPU offload (GPU zGB < zGB threshold)z%CPU offload disabled by default (GPU zGB >= zNo GPU detected, running on CPUgradio_outputs\/T)exist_okzOutput directory: zGradio Demo for ACE-Step V1.5)descriptionz--porti  z Port to run the gradio server on)typedefaulthelpz--share
store_truezCreate a public link)actionr0   z--debugzEnable debug modez--server-namez	127.0.0.1z@Server name (default: 127.0.0.1, use 0.0.0.0 for all interfaces)uigradioi18nz.jsonz
--languageenzUI language: z, )r.   r/   choicesr0   z--allowed-pathappendz6Additional allowed file paths for Gradio (repeatable).)r2   r/   r0   z--service_modec                 &    | j                         dv S N)true1yeslowerxs    r    <lambda>zmain.<locals>.<lambda>       FZ9Zr"   Fz`Enable service mode (default: False). When enabled, uses preset models and restricts UI options.z--init_servicec                 &    | j                         dv S r;   r?   rA   s    r    rC   zmain.<locals>.<lambda>   rD   r"   z.Initialize service on startup (default: False)z--checkpointz5Checkpoint file path (optional, for display purposes)z--config_pathz+Main model path (e.g., 'acestep-v15-turbo')z--deviceauto)rF   cudampsxpucpuz!Processing device (default: auto)z
--init_llmc                 &    | j                         dv S r;   r?   rA   s    r    rC   zmain.<locals>.<lambda>   s    QWWYBV5Vr"   z5Initialize 5Hz LM (default: auto based on GPU memory)z--lm_model_pathz/5Hz LM model path (e.g., 'acestep-5Hz-lm-0.6B')z	--backend)r%   ptr$   z5Hz LM backend (default: z2, use 'mlx' for native Apple Silicon acceleration)z--use_flash_attentionc                 &    | j                         dv S r;   r?   rA   s    r    rC   zmain.<locals>.<lambda>   s    	Ma@ar"   z*Use flash attention (default: auto-detect)z--offload_to_cpuc                 &    | j                         dv S r;   r?   rA   s    r    rC   zmain.<locals>.<lambda>   s    1779H\;\r"   z Offload models to CPU (default: TrueFalsez", auto-detected based on GPU VRAM)z--offload_dit_to_cpuc                 &    | j                         dv S r;   r?   rA   s    r    rC   zmain.<locals>.<lambda>   s    qwwyL`?`r"   z-Offload DiT to CPU after diffusion (default: z", auto-detected based on GPU tier)int8_weight_onlyz--quantization)rR   int4_weight_onlyNz"DiT quantization method (default: z--download-source)huggingface
modelscoperF   zGPreferred model download source (default: auto-detect based on network)z--batch_sizezUDefault batch size for generation (1-8). Defaults to min(2, GPU_max) if not specifiedz--enable-apiz%Enable API endpoints (default: False)z--auth-usernamez"Username for Gradio authenticationz--auth-passwordz"Password for Gradio authenticationz	--api-keyz(API key for API endpoints authenticationACESTEP_CONFIG_PATHACESTEP_LM_MODEL_PATHACESTEP_LM_BACKENDz8Service mode enabled - applying preset configurations...SERVICE_MODE_DIT_MODELz(acestep-v15-turbo-fix-inst-shift-dynamicSERVICE_MODE_LM_MODELzacestep-5Hz-lm-1.7B-v4-fixSERVICE_MODE_BACKENDz  DiT model: z  LM model: z  Backend: 4B   z>Auto-enabling CPU offload (4B LM model requires offloading on z.0fzGB GPU)z1.7Bz&WARNING: 4B LM model is too large for z%GB GPU. Downgrading to 1.7B variant: z)Initializing service from command line...zacestep-v15-turbozAuto-selected config_path: z>Error: No available models found. Please specify --config_path)filer	   z!Using preferred download source: zInitializing DiT model: z on z...ACESTEP_COMPILE_MODEL >   r=   yonr>   r<   )	project_rootconfig_pathdeviceuse_flash_attentioncompile_modeloffload_to_cpuoffload_dit_to_cpuquantizationprefer_sourcezError initializing DiT model: z"DiT model initialized successfullyzAuto-setting init_llm to z based on GPU configurationzUsing default LM model: z;Warning: No LM models available, skipping LM initializationcheckpoints)
model_namecheckpoints_dirrk   z#Warning: LM model download failed: z&Warning: Failed to download LM model: zInitializing 5Hz LM: )checkpoint_dirlm_model_pathbackendre   rh   dtypez5Hz LM initialized successfullyz'Warning: 5Hz LM initialization failed: r   service_mode
checkpointrd   re   init_llmrp   rq   rf   rh   ri   rj   init_statusenable_generater   r   r   )
gpu_config
output_dirdefault_batch_sizez.Service initialization completed successfully!z)Creating Gradio interface with language: )rx   r   ry   rz   r   z(Enabling queue for multi-user support...   )max_sizestatus_update_ratedefault_concurrency_limitzLaunching server on :zAuthentication enabledzEnabling API endpoints...)setup_api_routes)	server_nameserver_portsharedebug
show_errorprevent_thread_lock	inbrowserauthallowed_paths)api_keyzAPI authentication enabledzoAPI endpoints enabled: /health, /v1/models, /release_task, /query_result, /create_random_sample, /format_lyricsz
Shutting down...zError launching Gradio: )Sargparser   r   gpu_memory_gbr   r   printtiermax_duration_with_lmmax_duration_without_lmmax_batch_size_with_lmmax_batch_size_without_lminit_lm_defaultavailable_lm_modelsospathdirnameabspath__file__joinreplacemakedirsArgumentParseradd_argumentintstrexistslistdirendswithr9   offload_dit_to_cpu_defaultquantization_default
parse_args
enable_apiinit_servicerd   environr   rp   rq   rs   rh   r
   r    get_available_acestep_v15_modelssysstderrexitrf   is_flash_attention_availablere   download_sourcestripr@   rj   initialize_serviceri   ru   get_available_5hz_lm_modelsr   	Exception
initializert   r   
batch_sizer!   queuer   portauth_usernameauth_passwordallowed_path acestep.ui.gradio.api.api_routesr   launchr   r   r   timesleepKeyboardInterrupt	traceback	print_exc)(r   rx   r   _is_macauto_offload_default_backendrc   ry   parseravailable_ui_language_codesi18n_dirfilename_default_offload_dit_default_quantizationargsfallbackr   r   r   available_modelscurrent_filerf   rk   rg   rv   rw   	lm_statusr   ro   dl_okdl_msge
lm_successr   r   r   pr   r   r   s(                                           r    mainr   W   s     !J*%,,MG  Ki]Q%6i=Ki;iL 'uV 
Bvh-	
'(	VH	N=-S
12	":??"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-@s@SSv  xH  wI  J  	K	/c/B%HfGggtuv		5mC5HOmNnn{|}/0 77??277??277??83L#MNLl,<=J##D#.JKK
T*	zl
+,$$1P$QF
sD?ab
	,=ST
	,=PQ
c;  NP  Q #%ww||BGGOOBGGOOH,EFhX^_H	ww~~h

8,H  )+228CR=A - +tyy)DEE   E	   (/Zdi~  @ (/Zdi  qa  b
S$E|}
c4Fst

fFk  sV  W
+V`d  lc  d
)THyz
#7GQf  pI  JZ  I[  [M  nN  O
/6ako  wc  d
*1\fr  |\  gs  ]c  y@  \A  Ac  zd  eHO:@@UZ
.5`j~  Hu  vJ  uK  Km  Fn  o3=3R3R[b.im
(s<Q  \J  Su  vK  uL  Ln  Qo  p
+#tMr  zC  D
S$  F]  ^ |Bij )THlm
)THlm
#tBlmD  #!zz~~.CDD%!#0G!HD::>>./::>>*>?DL HI #!zz~~(: D
 %!#',"D
 zz~~&<fEd../01T//012DLL>*+ 4#5#5$$BTBT:T}"""&DRS`adReelmn
 a-P2PP4%%%))11$?H8s8K L008z; "*Dd => )*K$,K '#.#O#O#Q #>QUe>e':k{|}k~D$78H8H7IJKZadakaklHHQK 77??84L77??277??<+HIL #'":":"*&1&N&Nt{{&[# !M##(<(<(F $ 4 49-IJ ,T-=-=,>d4;;-sSTJJNN'egeeg!@AM    $+6+I+I) ,,{{$7+#22#'#:#:!..+ ,J 
,(K #6{mD3::V68 }}$ * : :1$--@[\]I}}%%-*5*Q*Q*S'*-@-C* 89K9K8LMN[beblblm(-==T%7%7%'WW\\,%NN %)M++0D0D0N(,(<(<	](7'+'9'9,:*7)v
  %!$Gx"PWZWaWab 1$2D2D1ET$++VYZ[,7,B,B'5&*&8&8 $#{{'+':':" -C -)Iz " ?A#I;'77 G	{SZ]ZdZde#I;'77!4 1 1 doo t//	
 $++ DMM  !3!3 4<< &': !$"5"5 %d&=&=  1 1 { "? {  {!" DMM#$ )(&*oo)K. BC 	9$--LM ( MM(&*oo	K {T]]K 	89

%&' 	 	
 	$T%5%5$6a		{#FG $"4"4&&(:(:;D*+#""AQm+$$Q' #
 ??-.I KK ,, IIjjjj$(+  
 T;T\\R||23  D  E,JJqM  KK ,, IIjjjj$)+  
g % ] FqcJQTQ[Q[\\]` % ,*+,  (,3::>	sw   "M6}3 ;|$ I}3 }3 B*}3 
} !A}3 $	}-}}3 }}3 }0-}3 /}00}3 3	<A__main__)Nr7   )2__doc__r   r   _env_loadeddotenvr   r   r   r   _current_filer   _project_rootr   	_env_path_env_example_pathr   r   ImportError	proxy_varr   pophandlerr
   llm_inferencer   r   r   	ui.gradior   rx   r   r   r   r   r   r   r   model_downloaderr   rc   insertacestep.handleracestep.llm_inferenceacestep.dataset_handleracestep.ui.gradioacestep.gpu_configacestep.model_downloaderr!   r   __name__ r"   r    <module>r      s   
 
 	"1(FGGGLL7	GGLLG77>>)$	".yk:;WW^^-.)*./@.AMN YIJJNN9d# Y9')/2 o  o  o1BFR zF O  		   
977??277??277??83L#MNL388#<(.069 v  v  v8
9s%   C/E& !0E1 &E.-E.1B,H H 