
    `jm7                       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)PathzO/data/video-pipeline/HaTramAudio/project/029-Chiec-O-De-Lai-O-Tram-Xe-Buyt-Cuoiz&029-Chiec-O-De-Lai-O-Tram-Xe-Buyt-Cuoizrun-20260722T162951Z-87a939adLevyz0http://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     work/tts/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 ]0\  }}|                     |          |k    rt          d|           1t          
                                j        t          k    rt          d          d S )Nz.ownership-lock.jsonr:   r;   )
project_idrun_idownerz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   rS   rZ   lenr[   float)r   outputdatard   rl   s        r   	probe_wavrs   J   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          t          j        d|t          j                            }|st          d          t          |          |z   dz
  |z  }t          t          |          |          \  fdt          |          D             }t          d |D                       rt          d          t          d	 |d d
         D                       rt          d          g }d}d}t          |          D ]h\  }	}
||
z  }|	t          |          dz
  k    rt          |          n||                                         }|                    |||                    |}id |D             }d |D             }||k    sd                    |          | k    rt          d          |S )Nr:   \b\w+\bflagsznarration has no wordsre   c                *    g | ]}|k     rd ndz   S )re   r   r   ).0indexbaseextras     r   
<listcomp>zchunk_bytes.<locals>.<listcomp>f   s*    QQQUd55==aaa0QQQr   c              3  "   K   | ]
}|d k    V  dS )i  Nr   r~   counts     r   	<genexpr>zchunk_bytes.<locals>.<genexpr>g   s&      
+
+553;
+
+
+
+
+
+r   zchunk exceeds 430 wordsc              3  "   K   | ]
}|d k     V  dS )i@  Nr   r   s     r   r   zchunk_bytes.<locals>.<genexpr>i   s&      
0
0553;
0
0
0
0
0
0r   z"non-final chunk is below 320 wordsr   c                8    g | ]}|                     d           S )r:   )encoder~   items     r   r   zchunk_bytes.<locals>.<listcomp>t   s$    777t{{7##777r   c           
         g | ]C}t          t          j        d |                    d          t          j                            DS )rz   r:   r{   )ro   refindalldecodeUNICODEr   s     r   r   zchunk_bytes.<locals>.<listcomp>u   s@    hhhX\BJz4;;w+?+?rzRRRSShhhr   r   z-chunk partition did not reconstruct narration)r   listr   finditerr   r[   ro   divmodrangeany	enumeratestartappendjoin)ru   rv   textmatcheschunk_countcountsr   r   consumedr   r   endencodedmeasuredr   r   s                 @@r   chunk_bytesr   \   s   ::gD2;z4rzBBBCCG 53444 w<<,.2|CKW{33KD%QQQQQeK>P>PQQQF

+
+F
+
+
+++ 64555

0
0F3B3K
0
0
000 A?@@@FEH!&))  uE CKK!O33c$iii9J9P9P9R9Rd59o&&&77777Ghh`ghhhH6SXXg..#55JKKK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   re      r8   z	.attempt-z.tmp.wavzContent-Typez!application/x-www-form-urlencodedPOST)rr   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   r   rA   rD   rE   requestRequestENDPOINTurlopenstatusr[   r'   r"   rH   rI   rJ   rK   rL   rs   r   rc   URLErrorTimeoutErrorrm   CalledProcessErrorunlinktimesleep)r   r   payloadattemptrM   r   responser#   r,   headerproberl   s               r   request_audior   {   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z  dz                      d                    } |                     di                               di           }|                     di                               d          dk    s|                    d	          d
urt          d          t          j        t                              d                    }|                    d          dvs|                    d	          st          d          t          	                                }t          |          }|                    d          p|                    d          }|                     d          |k    s|                    d          |k    rt          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
0           d1dt:          t<          |d"         ||||d+         t>          tA                      d2}t          d3|dd4z  }tO          ||           	 tQ          |
                    d          |          \  }}}nn# tR          $ ra}|"                    d5dtU          |          j+        t+          |          tA                      d6           tO          ||           ||d7<    d }~ww xY wi |dt          |          |,                                j-        |||tA                      d8|<   |"                    dd
|t+          |          |         d,         |         d9         ||         d:         d;           tO          ||           fd<t]                    D             |d'<   t-                    |d=<   tA                      |d><   tO          tB          |           tM          |dd.t-          |           d?|d@dAd
0           t]                    t_          ta          dt-          |          dz                       k    rt          dB          t          dCz  }dDg}t]                    D ]=}|         d*         1                    dEdF          }|                    dG| dE           >t                       |2                    dH3                    |          dHz   d           th          5                    dI          }tm          j7        dJdKdLdMdNdOdPdQdRdSt+          |          dTdUt+          |          g           tK          |          \  }}tq          fdVt]                    D                       }ts          ||z
            dWk    rt          dX          t                       tu          j1        |th                     i |dd
t-                    fdYt]                    D             t+          th                    ||t          th                    th          ,                                j-        dZ|tA                      d[}tO          tB          |           tO          tv          |           tM          t          j        dd
t-                    ||d\         d]d^          d
0           d_S # tR          $ r{}i |d5d|                    d7          tU          |          j+        t+          |          tA                      d`}tO          tB          |           tO          tv          |            d }~ww xY w)aNr
   zproject-manifest.jsonr:   r;   gate_eventsr   steps	completedverifiedTzStory Gate is not committedr   >   passedr   completed_content_onlyzpromotion gate is not verifiedcanon_sha256source_canon_sha256z!Story Gate canon binding mismatchspoken_narration_sha256zspoken narration hash mismatchzstory-canon.txtzcanon hash mismatchr5   re   zsegment-04dz.txtrz   r{   z.wav)r   	text_pathtext_sha256
word_count
audio_pathF)r>   	sort_keysrunningcandidate_sha256)schema_versionrP   rQ   r   r   r   r   r   request_configr   plan_sha256segments
started_atr   )r   r   
updated_atc                R    i | ]$}|                     d           dk    |d         |%S )r   r   r   )rZ   )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)r   r   rP   rQ   r   r   r   chunk_indexchunk_text_sha256normalized_request_config
created_atzattempt-z.jsonfailed)r   r   
error_typerc   	failed_atfailed_segment_index)r   r   audio_bytesr   r   attempt_countcompleted_atr   r   )r   r   r   r   r   r   r   r   c                     g | ]
}|         S r   r   r~   r_   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	-loglevelrc   z-yz-fconcatz-safe0z-iz-ccopyc              3  4   K   | ]}|         d          V  dS )r   Nr   )r~   ir   s     r   r   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>7  s    EEEC3EEEr   sha256_stream_8MiB)r   r   segment_countr   rq   output_durationsegment_duration_totaloutput_sha256output_byteshash_methodr   r   r  )r   r   r   r   r  )r>   r   )r   r   r   r   rc   r   )<rA   rF   rS   rT   rU   rZ   r[   	PROMOTION	NARRATION
read_bytesr1   r-   WORKrC   CHUNKSSEGMENTSr   r   existswrite_bytesr   r   ro   r   r   r   r   dumpsr   rV   rW   r   r   HOTr)   r   is_filers   printrN   r   	Exceptiontype__name__statst_sizesortedr   r   r   
write_textr   OUTPUTrD   rm   
check_callsumabsrJ   FINAL_MANIFEST) manifeststory_event	promotionru   narration_hashsource_canon_hashpartsplanr   partr   	plan_hashhotpreviousr   r   old_rl   attempt_receiptattempt_pathattemptsr   excr   linesescapedrM   totalfinalr   r   s                                   @r   mainr2     s
   	GGGz4(?-DDOOY`OaabbH,,}b1155grBBK||GR  $$W--<<PZ@[@[cg@g@g8999
9...@@AAI}}X&WWW_h_l_lmw_x_xW;<<<



 
 C!#&&N!n55]G\9]9]||N##'888KOON<[<[_p<p<p>???'@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@    D8h? (Xh? 
Y-AY((Y--Oh? ?
k	A6j??k__main__)r   r   )r   r   r   r   )r.   r/   r   r   )r   r   r.   r2   r   r3   )r   r3   )r   r   r   r`   )rt   )ru   r/   rv   rw   r   rx   )r   r   r   r   r   r   )r   rw   )(
__future__r   r   r%   rF   rJ   r   rm   r   urllib.errorr   urllib.parseurllib.requestpathlibr   rT   rV   rW   rX   r   r  r	  r
  r  r  r  r  r  r   r   r-   r1   rN   rA   rs   r   r   r2  r  
SystemExitr   r   r   <module>r:     s   " " " " " "    				 				                       t]^^:	(=f}uv%	'>
  #667N33	8O55		*	*'%FKK[ [ [ [   - - - -	  	  	  	 4 4 4 4   $    >!& !& !& !&Hr r r rj z
*TTVV

 r   