
    ei#                        % S r SSKJr  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
r
SSKJrJrJr  SSKrSSKrSSKr\R(                  " \R*                  S9  \R,                  " S5      rSrSrS	r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"S#S.S$S%S&S.S'S(S)S.S*S+S,S.S-S.SS.S/S0SS.S1S2SS.S3.rS4\S5'   \" \R=                  5       5      rS6\S7'   S8r S9\S:'   S@S; jr!SAS< jr"SBS= jr#SCS> jr$\ 4SDS? jjr%g)Eu  
response_iq_tts.py
──────────────────────────────────────────────────────────────────────────────
Text-to-Speech module for Response IQ powered by Microsoft Edge Neural TTS.

Architecture
────────────
  • 100% Serverless/Cloud-based CPU engine (0 VRAM used).
  • Zero local transformers models required.
  • Spawns a dedicated ThreadPoolExecutor background pipeline to prevent
    FastAPI uvloop event-loop blocking.
  • Decodes cloud-generated MP3 streams to native PCM WAV formats via
    PyTorch audio decoders seamlessly.

Supported languages (14)
  english · hinglish · hindi · marathi · punjabi · tamil · telugu · kannada
  gujarati · bengali · odia · assamese · malayalam · urdu

Version: 5.0.0 (Edge Neural Migration)
──────────────────────────────────────────────────────────────────────────────
    )annotationsN)DictListTuple)levelresponse_iq_ttsi"V  WAVzMicrosoft Edge Azure Neural TTSEnglishzen-INzen-IN-NeerjaNeural)display_namebcp47_lang_tagvoiceHinglishzhi-INzhi-IN-SwaraNeuralHindiBengalizbn-INzbn-IN-TanishaaNeuralUrduzur-INzur-IN-GulNeuralMarathizmr-INzmr-IN-AarohiNeuralGujaratizgu-INzgu-IN-DhwaniNeuralPunjabizpa-INzpa-IN-OjasNeuralTamilzta-INzta-IN-PallaviNeuralTeluguzte-INzte-IN-ShrutiNeuralKannadazkn-INzkn-IN-SapnaNeural	Malayalamzml-INzml-IN-SobhanaNeuralOdiazor-INAssamesezas-INMaithilizmai-IN)englishhinglishhindibengaliurdumarathigujaratipunjabitamiltelugukannada	malayalamodiaassamesemaithilizDict[str, Dict[str, str]]TTS_LANGUAGE_CONFIGz	List[str]TTS_SUPPORTED_LANGUAGESr   strTTS_DEFAULT_LANGUAGEc                    [         R                  " SU 5      n [        R                  " SSU 5      n [        R                  " SSU 5      R	                  5       n U $ )z>NFC normalisation and removal of invisible control characters.NFCz [\x00-\x08\x0B\x0C\x0E-\x1F\x7F] z[ \t]+ )unicodedata	normalizeresubstrip)texts    C/var/www/eduai.edurigo.com/responseiq/production/response_iq_tts.py_normalise_textr:   O   sG      -D665r4@D66)S$'--/DK    c                :  ^ ^^	  SSK m	SU	U U4S jjn [        R                  R                  SS9 nUR                  U5      R                  SS9nSSS5         [        R                  " [        R                  " W5      S
S9u  pgUR                  5       R                  5       R                  5       nX4$ ! [         a    [        S5      ef = f! , (       d  f       N= f! [         a  n[        S	U 35      eSnAff = f! [         a  n[        SU 35      eSnAff = f)z
Synthesises high-quality text using Microsoft Azure Neural voices via edge-tts.
Executes entirely in a separate thread to cleanly bypass FastAPI uvloop.
r   NzJThe 'edge-tts' package is missing. Please install it: pip install edge-ttsc                 N   > SUUU4S jjn [         R                  " U " 5       5      $ )Nc                    >#    TR                  TT5      n [        5       nU R                  5         S h  vN nUS   S:X  d  M  UR                  US   5        M*   N%
 [	        U5      $ 7f)Ntypeaudiodata)Communicate	bytearraystreamextendbytes)communicate
audio_datachunkedge_ttsr8   r   s      r9   	_generate?_synthesise_edge_tts.<locals>._run_async_tts.<locals>._generateh   se     "..tU;K"J*113 5e=G+%%eFm453 $$s+   -A(AAAA(A(AA(returnrF   )asynciorun)rK   rJ   r8   r   s    r9   _run_async_tts,_synthesise_edge_tts.<locals>._run_async_ttsg   s     	% 	% {{9;''r;      )max_workers<   )timeoutz)Edge TTS Cloud Engine generation failed: mp3)formatz(Failed to decode MP3 stream from cloud: rM   )rJ   ImportErrorRuntimeError
concurrentfuturesThreadPoolExecutorsubmitresult	Exception
torchaudioloadioBytesIOsqueezecpunumpy)
r8   r   rQ   executor	mp3_bytesexcwaveformsample_rateaudio_nprJ   s
   ``       @r9   _synthesise_edge_ttsrn   Z   s   


( 
(N22q2AX 7>>r>JI B
M !+

90Ee T##%))+113$$=  
6
 	

( BA NFseLMMN  MEcUKLLMsX   B3 C CC AC= 3C	
CC C 
C:'C55C:=
DDDc                    X:X  a  U $  SS K nUR                  XUS9$ ! [         a    [        R	                  S5        U s $ f = f)Nr   )orig_sr	target_sru5   librosa not installed — skipping fallback resample.)librosaresamplerY   loggerwarning)r@   src_ratetarget_raterr   s       r9   _resample_if_neededrx      sL    ;OO NOs    !A Ac                    [         R                  " 5       n[        R                  " X USSS9  UR	                  S5        [
        R                  " UR                  5       5      R                  S5      $ )Nr	   PCM_16)rX   subtyper   zutf-8)	rc   rd   sfwriteseekbase64	b64encodereaddecode)r@   rl   bufs      r9   _audio_to_base64_wavr      sL    
**,CHHSUHEHHQKCHHJ'..w77r;   c                   U=(       d    [         R                  5       R                  5       nU[        ;  a  SSU S[         30$ U (       a  U R                  5       (       d  SS0$ [        U 5      n [        U   nUS   n[        R                  SU SUS    S	U S
[        U 5       35         [        X5      u  pE[        XE[        5      n[        U[        5      n[        [        U5      [        -  S5      n[        R                  SU S[        U5       35        UU[        U[        U 5      S.$ ! [         a/  n	[        R                  SU	 35        S[!        U	5      0s Sn	A	$ Sn	A	ff = f)u4  
Convert text to human-like speech using Microsoft Edge Neural Cloud APIs.

Returns (success)
─────────────────
{
    "audio_tts"   : "<Base64-encoded WAV string>",
    "language"    : "hindi",
    "sample_rate" : 22050,
    "duration_sec": 4.83,
    "char_count"  : 232,
}
errorzUnsupported language 'z'. Valid values: z>Text payload is empty. Provide a non-empty 'predefinedAnswer'.r   zTTS Cloud Request | language=z (r   z
) | voice=z	 | chars=   z%TTS Cloud Output complete | duration=zs | base64_len=)	audio_ttslanguagerl   duration_sec
char_countzTTS Cloud Pipeline failed: N)r.   r7   lowerr+   r,   r:   rt   infolenrn   rx   TARGET_SAMPLE_RATEr   roundr`   r   r-   )
r8   r   lang_cfgr   rm   raw_sample_ratefinal_audio	audio_b64r   rj   s
             r9   generate_ttsr      s     00779??AH**(
 3!!8 9;
 	
 tzz||YZZ 4 D"8,HWE
KK
'zH^4L3M NyT	-#$8$E! +8FXY+K9KL	S-0BBAF3L> Bi.)+	
 &$.(I
 	
  #23%89S""#s   +BD- -
E&7$E!E&!E&)r8   r-   rN   r-   )r8   r-   r   r-   rN   zTuple[np.ndarray, int])r@   
np.ndarrayrv   intrw   r   rN   r   )r@   r   rl   r   rN   r-   )r8   r-   r   r-   rN   r   )&__doc__
__future__r   rO   r   concurrent.futuresr[   rc   loggingr5   r3   typingr   r   r   rg   np	soundfiler|   ra   basicConfigINFO	getLoggerrt   r   OUTPUT_FORMATTTS_MODEL_IDr+   __annotations__sortedkeysr,   r.   r:   rn   rx   r   r    r;   r9   <module>r      si  , #    	  	  $ $   
   ',, '			,	-
  6 #,Thi",Tgh")Tgh"+Tjk"(Tef"+Thi",Thi"+Tfg")Tij"*Thi"+Tgh"-Tij"(Tgh",Tgh",Tgh2 . $ &,,?,D,D,F%G  G%. c .'MT8 -A >#r;   