
    <h=U                         S SK JrJrJrJr  S SKrS SKJr  SSK	J
r
JrJrJrJr  SSKJr  SSKJr  SSKJrJrJrJr  SSKJr  SS	KJr  SS
KJr  SSKJr  \R@                  " \!5      r" " S S\5      r#g)    )AnyCallableOptionalUnionN   )(DiaClassifierFreeGuidanceLogitsProcessor"DiaEOSChannelFilterLogitsProcessor!DiaEOSDelayPatternLogitsProcessorLogitsProcessorListTemperatureLogitsWarper)StoppingCriteriaList)BaseStreamer)GenerateOutputGenerationConfigGenerationMixinGenerationMode)is_deepspeed_zero3_enabled)is_fsdp_managed_module)PreTrainedModel)loggingc                   ~  ^  \ rS rSrSr        S'S\S\\   S\R                  S\\
\\R                  /\\   4      S\\   S\\   S	\\\\4      S
\\R                     S\\R                     S\4U 4S jjjr S(S\\   S\\   S\S\\\4   4U 4S jjjr   S)S\\R                     S\\R                     S	\\\\R                  4      S\\R                  \\   \\\R                  4   4   4U 4S jjjr S(S\S\S	\\\R                  4   S\R                  S\\R,                     S\\R                  \\\R                  4   4   4S jjr  S*U 4S jjr\S\R                  S\S\\R                     S\R                  4S j5       r            S+S\\R                     S\\   S\\   S\\   S\\
\\R                  /\\   4      S\\   S\S    S!\S"   S
\\R                     S\\R                     S\\   S#\\   4S$ jjr\R:                  " 5                   S+S\\R                     S\\   S\\   S\\   S\\
\\R                  /\\   4      S\\   S\S    S!\S"   S
\\R                     S\\R                     S\\   S#\\   S\\\R                  4   4S% jj5       r S&r!U =r"$ ),DiaGenerationMixin(   Ngeneration_configinput_ids_seq_lengthencoder_input_idsprefix_allowed_tokens_fnlogits_processordevicemodel_kwargsnegative_prompt_idsnegative_prompt_attention_maskreturnc
                 |  > UR                   n
UR                  nS Ul         S Ul        [        5       nUb   US:w  a  UR                  [	        U5      5        UR                  [        [        U R                  R                  5      U R                  R                  S95        [        TU ]-  UUUS UUUUU	S9	nU
b,  U
S:w  a&  [        U
UR                  S9nUR                  SU5        UR                  [        U R                  R                  U R                  R                  UR                   US95        Xl         Xl        U$ )Ng      ?)num_channelseos_token_id	r   r   r   r   r   r   r    r!   r"      )guidance_scaleguidance_top_kr   )delay_patternr&   max_generation_lenr   )r)   temperaturer   appendr   r	   lenconfigr+   r&   super_get_logits_processorr   top_kinsertr
   
max_length)selfr   r   r   r   r   r   r    r!   r"   original_guidance_scaleoriginal_temperaturecustom_processorsmerged_processorscfg_processor	__class__s                  ^/var/www/html/shao/venv/lib/python3.13/site-packages/transformers/models/dia/generation_dia.pyr2   (DiaGenerationMixin._get_logits_processor,   sM    #4"B"B0<<+/((,% 01+0D0K$$%<=Q%RS  . !:!:;![[55	
 "G9/!5/%).% 3+I : 

 #.3Ja3OD6066M $$Q6  -"kk77![[55#4#?#?		
 ,C((<%      use_model_defaultskwargsc                    > [         TU ]  " X40 UD6u  pU=R                  [        U R                  R
                  5      -  sl        UR                  S L=(       a    UR                  S:g  U l        X4$ Nr(   )r1   _prepare_generation_configr5   maxr0   r+   r)   	_uses_cfg)r6   r   r@   rA   r    r<   s        r=   rD   -DiaGenerationMixin._prepare_generation_configo   st     +0'*L+
5;+
' 	$$DKK,E,E(FF$ +99EoJ[JjJjnoJo ..r?   inputsbos_token_idc                    > [         TU ]  UUUS9u  pnU R                  (       aW  [        R                  " U5      n[        R
                  " X/SS9nUR                  SS 5      b  US   R                  SS5      US'   XU4$ )N)rH   rI   r    r   dimattention_mask   r(   )r1   _prepare_model_inputsrF   torch
zeros_likecatgetrepeat)r6   rH   rI   r    
input_nameunconditioned_inputsr<   s         r=   rO   (DiaGenerationMixin._prepare_model_inputs   s     ,17+H%% ,I ,
(L >>#(#3#3F#; YY=1EF 0$7C1=>N1O1V1VWXZ[1\-.<//r?   
batch_sizemodel_input_namedecoder_start_token_idc                 <   S=pgUb  SU;   a  UR                  S5      nUb  SU;   a  UR                  S5      nUb  Uc  [        R                  SUSL SUSL S35        U R                  R                  R
                  nU R                  (       a  US-  OUn	Uc(  [        R                  " U	SU4U[        R                  US	9n[        R                  " XR                  S   4[        R                  US
9nUR                  5       n
UR                  S   USS2SS2S4   U R                  R                  :H  R                  SS9R                  5       -
  nU
SS2SU24   R                  SS5      R                  5       nUSS2SU24   R                  5       nXsS'   XS'   Xc4$ )zGPrepares `decoder_input_ids` for generation with encoder-decoder modelsNdecoder_input_idsdecoder_attention_maskz[In order to generate with Dia, we need the processed audio input: Got `decoder_input_ids`: z" and got `decoder_attention_mask`=z]. This can be achieved via the [`DiaProcessor`] but now defaulting to non-delayed generation.rN   r(   )dtyper   )sizer^   r   r   rK   decoder_delay_mask)poploggerwarning_oncer0   decoder_configr%   rF   rP   fulllongonesshapepad_token_idsumrE   	transpose)r6   rX   rY   r    rZ   r   r\   r]   r%   real_batch_size
delay_maskvalid_input_sizes               r=   )_prepare_decoder_input_ids_for_generation<DiaGenerationMixin._prepare_decoder_input_ids_for_generation   s    6:9#(;|(K , 0 01D E#(@L(P%1%5%56N%O" $(>(F%T122TUkswUwTx yop  ;;55BBL15jAoZO ($)JJ$a68NV[V`V`io%! &+ZZ%'>'>q'AB%**]c&"
 '++-
##A&*;Aq!G*DH`H`*`)e)ejl)e)m)q)q)ss 	 'q*;+;*;';<FFq!LQQS!7;L<L;L8L!M!R!R!T 2H-.-7)* ..r?   c                   > U R                   (       a  US   R                  S   S-  OUS   R                  S   nUR                  XPR                  R                  R
                  S5      R                  SS5      n[        T	U ]   " U4SU0UD6nU R                  XR                  R                  U5      US'   UR                  SS5      (       a(  US	   S   S:  a  US   S S 2SS S 24   S S 2S S S 24   US'   US   R                  5       US'   U R                   (       aS  S
 HM  nUR                  US 5      c  M  [        S/S/Xg   R                  S-
  -  -   5      nXg   R                  " U6 Xg'   MO     U$ )Nr   rN   r`   r(   encoder_outputsr\   	use_cacheFcache_position)r\   r]   decoder_position_ids)rF   ri   reshaper0   re   r%   rl   r1   prepare_inputs_for_generationapply_delay_maskrj   rS   
contiguoustuplendimrT   )
r6   	input_idsrs   ra   rA   rX   model_inputskeyrepeat_patternr<   s
            r=   rx   0DiaGenerationMixin.prepare_inputs_for_generation   s    :>_Q'--a0A5_]^M_MeMefgMh
%%j++2L2L2Y2Y[]^hhijlmn	 w<YrXgrkqr -1,A,A{{//1C-
()
 K//LAQ4RST4UXY4Y0<=P0QRSUWYZRZ0[\]_cef\f0gL,- -99L,M,X,X,Z() >>^##C.:%*A3!8I8N8NQR8R1S+S%TN(4(9(@(@.(QL%	 _ r?   r}   pad_idrn   c                     Uc  U $ [        U R                  S   UR                  S   5      nUS S 2S U2S S 24   nU S S 2S U2S S 24   n[        R                  " XA:H  XT5      U S S 2S U2S S 24'   U $ rC   )minri   rP   where)r}   r   rn   mask_len
valid_maskvalid_inputs         r=   ry   #DiaGenerationMixin.apply_delay_mask   s    yq):+;+;A+>?9H9a0
9H9a0 &+[[1E{%_	!YhY/"r?   stopping_criteriasynced_gpusassistant_modelr   streamerr   custom_generatec                 p   UR                  SS 5      nUR                  SS 5      nU R                  " X+40 UD6u  nnU R                  UR                  5       5        U R	                  X~U5        Uc;  [        5       =(       d    [        U 5      =(       a    [        R                  " 5       S:  nUb  UO	[        5       nUb  UO	[        5       nUR                  SS 5      S LnU R                  XR                  U5      u  nnnUR                  S   nUR                  nU R!                  UUUS9  SU;  a  U R#                  UUUU5      nU R%                  UUUUR&                  UR                  S9u  nnUR(                  (       a  U R+                  UU5      nUb  UR-                  UR/                  5       5        UR                  S	   nUR                  S
5      S L =(       a    UR0                  S LnUR                  S5      S L =(       a    UR2                  S LnU R5                  UUUUUUS9nU R7                  5       (       a  SU;  a  SUS'   U R9                  UUU5        UR0                  S-
  nUR                  S   U:w  a3  US:X  a-  U R:                  R<                  (       d  UUR                  S   -  nU R?                  UUUUUU5        URA                  U5      nUb  URB                  S:  a  [E        S5      eU RG                  UUUUUUR                  UU	U
S9	nU RH                  " SX$US.UD6nURJ                  US'   URM                  S	UR                  S	   5      nU[N        RP                  [N        RR                  4;   a4  URT                  S:  a  [E        S5      eU RV                  " U4UUUUUS.UD6$ [E        S5      e)N	tokenizerassistant_tokenizerr(   rM   r   )r   rs   )rX   rY   r    rZ   r   r`   r5   
min_length)r   has_default_max_lengthhas_default_min_lengthrY   inputs_tensorinput_ids_lengthlogits_to_keepinputs_embedszZ`streamer` cannot be used with beam search (yet!). Make sure that `num_beams` is set to 1.r'   )r   r   r   rt   z2`num_return_sequences>1` is incompatible with Dia.)r   r   r   r   r   zGot incompatible mode for generation, should be one of greedy or sampling. Ensure that beam search is de-activated by setting `num_beams=1` and `num_beam_groups=1`. ),rb   rD   _validate_model_kwargscopy_validate_assistantr   r   distget_world_sizer   r   rS   rO   rI   ri   r   _prepare_special_tokens._prepare_encoder_decoder_kwargs_for_generationrp   _decoder_start_token_tensortoken_healingheal_tokensputcpur5   r   _prepare_generated_length_supports_logits_to_keep_validate_generated_lengthr0   is_encoder_decoder_prepare_cache_for_generationget_generation_mode	num_beams
ValueErrorr2   _get_stopping_criteriart   rw   r   SAMPLEGREEDY_SEARCHnum_return_sequences_sample)r6   rH   r   r   r   r   r   r   r   r!   r"   r@   r   rA   r   r   r    kwargs_has_attention_maskr   rY   rX   r   r}   r   r   r   max_cache_lengthgeneration_modeprepared_logits_processorprepared_stopping_criterias                                 r=   _main_generate_loop&DiaGenerationMixin._main_generate_loop   s;   $ JJ{D1	$jj)>E*.*I*I+
5;+
'< 	##L$5$5$78  =PQ 57W;QRV;Wv]a]p]p]ruv]vK/?/K+QdQf1B1N-ThTj %1$4$45Et$LTX$X!8<8R8R22L9
5' #((+
%%$$%68QZ`$a L0NN|-=?PL
 #'"P"P!-%#4#P#P '' #Q #
	< **((I>ILL) %??2.!'L!9T!A!nFWFbFbjnFn!'L!9T!A!nFWFbFbjnFn ::/#9#9-'- ; 
 ((**/?|/S-.L)*''(9;KMcd -77!;"&66 O3KK22 3 3A 66**|_jJZ\b	

 ,??P%6%@%@1%Dl 
 %)$>$>/!1+%=- ''% 3+I %? 
%
! &*%@%@ &
/`i&
ms&
"
 %6$?$?[! %%b)//"*=>	 ~44n6R6RSS 559 !UVV <<!:"<"3'!   l r?   c                    UR                  S5      nUb  UR                  5       nU R                  " SUUUUUUUUU	U
UUS.UD6n[        U[        R
                  5      (       + nU(       a  UR                  nOUnU R                  R                  R                  nUR                  S   U-  nUR                  UUS5      R                  SS5      nU R                  UU R                  R                  U5      nU(       a	  UUl        U$ UnU$ )Nr\   )rH   r   r   r   r   r   r   r   r!   r"   r@   r   r   r`   r(   rN   r   )rS   cloner   
isinstancerP   Tensor	sequencesr0   re   r%   ri   rw   rl   ry   rj   )r6   rH   r   r   r   r   r   r   r   r!   r"   r@   r   rA   rn   outputreturn_dict_in_generateoutput_sequencesr%   bszs                       r=   generateDiaGenerationMixin.generate  s&   $ ZZ 34
!#))+J)) 
/-/%=#+ 3+I1+
 
  '1&F"F"%//% {{11>>$$Q'<7+33CrJTTUVXYZ  001A4;;C[C[]gh"/F  &Fr?   )rF   )NNNNNNNN)N)NNN)NN)NNNNNNNNNNNN)#__name__
__module____qualname____firstlineno__rF   r   r   intrP   
LongTensorr   r   listr   strdictr   r2   boolr{   rD   rO   r   rp   rx   staticmethodry   r   r   no_gradr   r   r   __static_attributes____classcell__)r<   s   @r=   r   r   (   s   I
 /3.2W[:> $156:AEA!+A! 'smA! !++	A!
 #+8S%,,4Gc4R+S"TA! ##67A! A! tCH~.A! &ell3A! )1(>A! 
A! A!H cg/!)*:!;/QYZ^Q_/rv/	%	&/ /$ *./3:>	0&0 u||,0 tC$567	0
 
u||Xc]Dell1B,CC	D0 08 *.0/0/ 0/ 3,-	0/
 !&0/ &0/ 
uc5<<&7!88	90/j 	#J ELL # 8TYT`T`Ka fkfrfr   *.8<:><@W[&*7;-16:AE-1)-Z&Z $$45Z ##67	Z
 $$89Z #+8S%,,4Gc4R+S"TZ d^Z ""34Z >*Z &ell3Z )1(>Z %TNZ "#Zx ]]_ *.8<:><@W[&*7;-16:AE-1)-9&9 $$459 ##67	9
 $$899 #+8S%,,4Gc4R+S"T9 d^9 ""349 >*9 &ell39 )1(>9 %TN9 "#9 
~u///	09 9r?   r   )$typingr   r   r   r   rP   torch.distributeddistributedr   generation.logits_processr   r	   r
   r   r   generation.stopping_criteriar   generation.streamersr   generation.utilsr   r   r   r   integrations.deepspeedr   integrations.fsdpr   modeling_utilsr   utilsr   
get_loggerr   rc   r   r   r?   r=   <module>r      sX     2 1     A 0 a a @ 7 -  
		H	%h hr?   