
    =^j3                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z
d dlZ
d dlZ
d dlmZ  ed          ZdZdZdZdZed	z  d
z  ez  Zedz  Zedz  Zedz  Zedz  dz  Zedz  dz  Zedz  dz  Zedz  dz  ZddddZd3dZd4dZd5d Zd6d#Z d7d$Z!d8d&Z"d9d:d,Z#d;d0Z$d<d1Z%e&d2k    r e' e%                      dS )=    )annotationsN)PathzE/data/video-pipeline/HaTramAudio/project/014-Nguoi-Ve-Ban-Do-Mua-Dongz014-Nguoi-Ve-Ban-Do-Mua-Dongzrun-20260720T152357Z-c85a2128zoroz0http://192.168.40.32:7861/voice/ngoc-huyen-cloneworkttschunksaudiozhot-manifest.jsonscriptztts-manifest.jsonstoryzspoken-narration.txtzpromotion-report.jsonzstory-full.wav
doc_truyenz1.0true)stylespeeddenoisereturnstrc                     t           j                             t           j        j                                                                      dd          S )Nz+00:00Z)datetimenowtimezoneutc	isoformatreplace     U/data/video-pipeline/HaTramAudio/project/014-Nguoi-Ve-Ban-Do-Mua-Dong/work/run_tts.pyr   r       s<      !2!677AACCKKHVYZZZr   pathr   c                   t          j                    }|                     d          5 t          fdd          D ]}|                    |           	 d d d            n# 1 swxY w Y   |                                S )Nrbc                 .                          d          S )Ni   )read)handles   r   <lambda>zsha256_path.<locals>.<lambda>'   s    &++o">"> r   r   )hashlibsha256openiterupdate	hexdigest)r   digestblockr#   s      @r   sha256_pathr-   $   s    ^F	4 !F>>>>DD 	! 	!EMM%    	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! s   ,A##A'*A'valuebytesc                N    t          j        |                                           S )N)r%   r&   r*   )r.   s    r   sha256_bytesr1   ,   s    >%  **,,,r   dictNonec                   t                       | j                            dd           |                     d| j        z   dz             }|                    dd          5 }t          j        ||dd	
           |                    d           |	                                 t          j        |                                           d d d            n# 1 swxY w Y   t          j        ||            d S )NTparentsexist_ok.z.tmpwutf-8encodingF   )ensure_asciiindent
)guardparentmkdir	with_namenamer'   jsondumpwriteflushosfsyncfilenor   )r   r.   	temporaryr#   s       r   atomic_jsonrN   0   s   	GGGKdT222sTY788I	g	.	. "&	%eA>>>>T
!!!	" " " " " " " " " " " " " " "
 Jy$s   "A(CCCc                    t          j        t          dz                      d                    } t          t
          t          dd}|                                D ]0\  }}|                     |          |k    rt          d|           1t          
                                j        t          k    rt          d          d S )Nz.ownership-lock.jsonr:   r;   active)
project_idrun_idownerstatuszownership guard mismatch: zproject root mismatch)rF   loadsROOT	read_textFULL_PROJECT_IDRUN_IDOWNERitemsgetRuntimeErrorresolverE   )lockexpectedkeyr.   s       r   rA   rA   <   s    :t44???QQRRD%	 H nn&& C C
U88C==E!!ACAABBB "||~~o--2333 .-r   tuple[dict, float]c                ,   t          j        dddddddt          |           g          }t          j        |          }|                    dg           }t          |          d	k    s|d
                             d          dk    rt          d          |d
                             d          dk    s|d
                             d          d	k    rt          d          t          |d         d                   }|d
k    rt          d          ||fS )Nffprobez-verrorz-show_entriesz6format=duration:stream=codec_name,sample_rate,channelsz-ofrF   streams   r   
codec_name	pcm_s16lezunexpected WAV codecsample_rate48000channelszunexpected WAV formatformatdurationznon-positive WAV duration)	
subprocesscheck_outputr   rF   rU   r\   lenr]   float)r   outputdatarf   rn   s        r   	probe_wavru   K   s   $4/@vs4yy&  F
 :fDhhy"%%G
7||qGAJNN<88KGG1222qz~~m$$//71:>>*3M3MQR3R3R2333T(^J/00H1}}6777>r     rawtarget_wordsintlist[bytes]c                >   |                      d          }t          j        d|t          j                  }d |D             }d                    |          |k    rt          d          g }d}d}|D ]^}t          t          j        d|t          j                            }|r"||z   |k    r|                    |           d}d}||z  }||z  }_|r|                    |           d	 |D             }	d
                    |	          | k    rt          d          |	S )Nr:   z.*?(?:\n\s*\n|\Z)flagsc                    g | ]}||S r   r   ).0units     r   
<listcomp>zchunk_bytes.<locals>.<listcomp>`   s    ,,,dt,T,,,r    z-paragraph split did not reconstruct narrationr   \b\w+\bc                8    g | ]}|                     d           S )r:   )encode)r   items     r   r   zchunk_bytes.<locals>.<listcomp>p   s$    777t{{7##777r   r   z(chunk bytes do not reconstruct narration)	decoderefindallDOTALLjoinr]   rq   UNICODEappend)
rw   rx   textunitsr   currentcurrent_wordsr   wordsencodeds
             r   chunk_bytesr   ]   sA   ::gDJ+TCCCE,,e,,,E	wwu~~JKKKFGM  BJz4rzBBBCC 	}u,|;;MM'"""GM4 g77777G
xxCEFFFNr   r   output_pathtuple[int, dict, float]c                   t           j                            d| it                                                    }t          dd          D ]p}t                       |                    d|j         d| d          }	 t           j	        
                    t          |ddid	
          }t           j	                            |d          5 }|j        dk    rt          d|j                   |                    d          5 }|                    d          x}r,|                    |           |                    d          x},|                                 t'          j        |                                           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                    d          5 }|                    d          }	d d d            n# 1 swxY w Y   |	d d         dk    s|	dd         dk    rt          d          t-          |          \  }
}t                       t'          j        ||           ||
|fc S # t           j        j        t4          t          t6          j        f$ r8 |                    d           |dk    r t=          j        d|z             Y nw xY wt          d          )Nr   rg      r8   z	.attempt-z.tmp.wavzContent-Typez!application/x-www-form-urlencodedPOST)rt   headersmethodi  )timeout   zHTTP wbi   r       s   RIFF   s   WAVEzresponse is not RIFF/WAVET)
missing_ok   r=   unreachable) urllibparse	urlencodeREQUEST_CONFIGr   rangerA   rD   rE   requestRequestENDPOINTurlopenrT   r]   r'   r"   rH   rI   rJ   rK   rL   ru   r   re   URLErrorTimeoutErrorro   CalledProcessErrorunlinktimesleep)r   r   payloadattemptrM   r   responser#   r,   headerprobern   s               r   request_audior   v   so   l$$fd%En%EFFMMOOGA;; % %))*Zk.>*Z*Z*Z*Z*Z[[		%n,,')LM	 -  G '''== .?c))&'@x'@'@AAA^^D)) .V#+==#=#==% ,U+++ $,==#=#==% ,LLNNNHV]]__---	. . . . . . . . . . . . . . .. . . . . . . . . . . . . . . %% )R) ) ) ) ) ) ) ) ) ) ) ) ) ) )bqbzW$$qt(?(?"#>???'	22OE8GGGJy+...E8++++%|\:C`a 	% 	% 	%---!||JqG|$$$$$		%
 }
%
%%s   >AI	8F"A>F?F"FF"FF"I"F&	&I)F&	*IG$I$G(	(I+G(	,A'IA J:9J:c                    t                       t          j        t                              d                    } |                     d          dvs|                     d          st          d          t                                          }t          |          }|                     d          p|                     d          }||                     d	          k    rt          d
          t          t          dz  dz            |k    rt          d          t                              dd           t                              dd           t                              dd           t!          |          }g }t#          |d          D ]\  }}t          d|ddz  }|                                r|                                |k    r#t                       |                    |           |                    |t+          |          t          |          t-          t/          j        d|                    d          t.          j                            t+          t          d|ddz            d           t          t          j        |dd                                                    }	dt:          t<          dd|                     d|          ||t>          t-          |          |	g tA                      d}
tB                                          rmt          j        tB                              d                    }|                    d          |	k    r'|}
|
"                    ddtA                      d           d |
                    d g           D             	 |D ]}|d!         }tG          |d"                   }tG          |d#                   }                    |          }|r|                    d$          |d$         k    rw|$                                rctK          |          \  }}|                    d%          t          |          k    r+||d&<   tM          |dd't-          |           d(d)           d*dt:          t<          |
d         ||||d$         t>          tA                      d+}t          d,|dd-z  }tO          ||           	 tQ          |                    d          |          \  }}}nn# tR          $ ra}|"                    d.dtU          |          j+        t+          |          tA                      d/           tO          ||           ||
d0<    d }~ww xY wi |d1t          |          |,                                j-        |||tA                      d2|<   |"                    d1d|t+          |          |         d%         |         d3         ||         d4         d5           tO          ||           fd6t]                    D             |
d <   t-                    |
d7<   tA                      |
d8<   tO          tB          |
           tM          |dd't-          |           d9|d:d;d)           t]                    t_          ta          dt-          |          dz                       k    rt          d<          t          d=z  }d>g}t]                    D ]=}|         d#         1                    d?d@          }|                    dA| d?           >t                       |2                    dB3                    |          dBz   d           th          5                    dC          }tm          j7        dDdEdFdGdHdIdJdKdLdMt+          |          dNdOt+          |          g           tK          |          \  }}tq          fdPt]                    D                       }ts          ||z
            dQk    rt          dR          t                       tu          j1        |th                     i |
d1dt-                    fdSt]                    D             t+          th                    ||t          th                    th          ,                                j-        dT|tA                      dU}tO          tB          |           tO          tv          |           tM          t          j        d1dt-                    ||dV         dWdX          d)           dYS # tR          $ r{}i |
d.d|
                    d0          tU          |          j+        t+          |          tA                      dZ}tO          tB          |           tO          tv          |            d }~ww xY w)[Nr:   r;   rT   >   passed	completedcompleted_content_onlyverifiedzpromotion gate is not verifiedcanon_sha256source_canon_sha256spoken_narration_sha256zspoken narration hash mismatchr   zstory-canon.txtzcanon hash mismatchTr5   rg   zsegment-04dz.txtr   r|   z.wav)index	text_pathtext_sha256
word_count
audio_pathF)r>   	sort_keysrunningcandidate_sha256)schema_versionrQ   rR   rT   r   r   r   r   request_configchunk_countplan_sha256segments
started_atr   )rT   r   
updated_atc                R    i | ]$}|                     d           dk    |d         |%S )rT   r   r   )r\   )r   xs     r   
<dictcomp>zmain.<locals>.<dictcomp>   s3    bbb1155??VaCaCa7QCaCaCar   r   r   r   r   r   audio_sha256duration_seconds/z resume verified)rI   
requesting)rT   r   rQ   rR   r   r   r   chunk_indexchunk_text_sha256normalized_request_config
created_atzattempt-z.jsonfailed)rT   r   
error_typere   	failed_atfailed_segment_indexr   )rT   r   audio_bytesr   r   attempt_countcompleted_atr   r   )rT   r   r   r   r   r   r   r   c                     g | ]
}|         S r   r   r   ra   r   s     r   r   zmain.<locals>.<listcomp>  s    KKK#y~KKKr   completed_countr   z completed z.3fszsegment index gapzsegments.ffconcatzffconcat version 1.0'z'\''zfile 'r@   z.story-full.tmp.wavffmpegz-hide_bannerz	-loglevelre   z-yz-fconcatz-safe0z-iz-ccopyc              3  4   K   | ]}|         d          V  dS )r   Nr   )r   ir   s     r   	<genexpr>zmain.<locals>.<genexpr>"  s-      PPIaL!34PPPPPPr   g?zconcat duration mismatchc                     g | ]
}|         S r   r   r   s     r   r   zmain.<locals>.<listcomp>,  s    EEEC3EEEr   sha256_stream_8MiB)rT   r   segment_countr   rs   output_durationsegment_duration_totaloutput_sha256output_byteshash_methodr   r   r   )rT   r   r   r   r   )r>   r   )rT   r   r   r   re   r   )<rA   rF   rU   	PROMOTIONrW   r\   r]   	NARRATION
read_bytesr1   r-   rV   WORKrC   CHUNKSSEGMENTSr   	enumerateexistswrite_bytesr   r   rq   r   r   r   r   dumpsr   rX   rY   r   r   HOTr)   r   is_fileru   printrN   r   	Exceptiontype__name__statst_sizesortedlistr   r   
write_textr   OUTPUTrD   ro   
check_callsumabsrJ   FINAL_MANIFEST)	promotionrw   narration_hashsource_canon_hashpartsplanr   partr   	plan_hashhotpreviousr   r   old_rn   attempt_receiptattempt_pathattemptsr   excr   linesescapedrM   totalfinalr   r   s                                @r   mainr$     s"
   	GGG
9...@@AAI}}X&WWW_h_l_lmw_x_xW;<<<



 
 C!#&&N!n55]G\9]9]'@AAAA;<<<4'>$5566:KKK0111JJtdJ+++
LLL---NN4$N///ED **  t777777	!! 	(Y%9%9%;%;t%C%CGGG!!$'''Y'--bjT[[5I5IQSQ[\\\]]h)CE)C)C)C)CCDD
 
 	 	 	 	 TZ5DQQQXXZZ[[I %%MM*<>OPP0#1(4yy ee C zz|| V:cmmWm==>><<&&)33CJJ)ceeTTUUUbb
B(?(?bbbIv @	T @	TDMET+.//ItL122K--&&C sww}--m1DDDI\I\I^I^D'44877>**k+.F.FFF.6C*+UDDDTDDDDQQQQ&!- $'(:$;'8+9$%)-%8-;!ee O  "=U"="="="==Lo666,9):M:MW^:M:_:_al,m,m)% 
 
 
&&& %"&s))"4 XX!$( (    L/:::.3*+
	 	 % +K 8 8*//119$,!) #	  	  	 Ie ""% !)!+.. )% 0 @(/>$, )% 0 @	$ 	$ 	 	 	 o666KKKK	9J9JKKKC
O%(^^C!" #CS!!!UFFFTFFxFFFFdSSSSS)U1c$ii!m%<%< = ===2333++'(I&& 	. 	.E&|4<<S'JJGLL,',,,----$))E**T1GDDD$$%:;;	nk7D$S$FT63y>>
 	 	 	 $I..xPPPPfY>O>OPPPPPx%  3&&9:::

9f%%%

! ^^EEEE6)3D3DEEE&kk'&+(00"KKMM1/EE
 
 
 	CNE***djKTsS\~~s{  OT  Ud  Oe  f  f  uz  {  {  {  CG  	H  	H  	H  	Hq   

$'GG,B$C$Cs)),XX
 
 
 	C   NF+++s@   /D8e ((Te 
U<AU77U<<Oe 
gA6gg__main__)r   r   )r   r   r   r   )r.   r/   r   r   )r   r   r.   r2   r   r3   )r   r3   )r   r   r   rb   )rv   )rw   r/   rx   ry   r   rz   )r   r   r   r   r   r   )r   ry   )(
__future__r   r   r%   rF   rJ   r   ro   r   urllib.errorr   urllib.parseurllib.requestpathlibr   rV   rX   rY   rZ   r   r   r   r   r  r  r   r   r  r   r   r-   r1   rN   rA   ru   r   r   r$  r  
SystemExitr   r   r   <module>r,     s   " " " " " "    				 				                       tSTT0	(=f}uv%	'>
  #667N33	8O55		*	*'%FKK[ [ [ [   - - - -	  	  	  	 4 4 4 4   $    2!& !& !& !&Hl l l l^ z
*TTVV

 r   