o
    Xj!                     @   s>  d dl mZmZ 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mZ d dlZd dlmZ d dlmZmZ d dlZd dlZd dlZe
je
jdd e
eZd	Zd
d Ze  d dl m!Z!m"Z" e Z#i Z$de%fddZ&de%de%fddZ'G dd deZ(G dd deZ)e#*dde)fddZ+dS )    )FastAPIHTTPException)JSONResponseN)BeautifulSoup)List)	BaseModelFieldz'%(asctime)s [%(levelname)s] %(message)s)levelformatzL/var/www/eduai.edurigo.com/doc_train/edurigo_ai/Puru/ai4bharat/ai4bharat_envc                  C   s`   t jtddd} | tjvrtjd|  tt jd< t jtdt j t jdd t jd< d S )	Nlibz
python3.10zsite-packagesr   VIRTUAL_ENVbinPATH )	ospathjoinENV_PATHsysinsertenvironpathsepget)site_packages r   T/var/www/eduai.edurigo.com/translate_text_audio/testing/lang_trans_audio_fast_api.pyactivate_environment   s
   

,r   )	VitsModelAutoTokenizerlanguage_codec                 C   s   |    } | std| tvrAd|  }td| zt|}t|}W n t	y6   td|  dw |
  ||ft| < t|  S )NzLanguage code is emptyzfacebook/mms-tts-zLoading TTS model: %sz'TTS model not found for language code '')striplower
ValueErrorMODEL_CACHEloggerinfor   from_pretrainedr   	Exceptioneval)r   
model_namemodel	tokenizerr   r   r   load_tts_model0   s   

r-   textreturnc                 C   s   t | } t| d}|jdd} tjdd| tjd} ddd	d
}| D ]
\}}| ||} q$tj	dtj
d}|d| } | dd} tdd|  } | S )Nzhtml.parser )	separatorzxss\s*=\s*removedr   )flagsu   पी एम एसu   यू पी एस आईu   सी आर एम)zP-M-SzU-P-S-IzC-R-Mu'   [😀-🙏🌀-🗿🚀-🛿🇠-🇿]+    z\s+)htmlunescaper   get_textresub
IGNORECASEitemsreplacecompileUNICODEr!   )r.   soupreplacementskvemoji_patternr   r   r   
clean_textF   s$   

	rC   c                   @   sR   e Zd ZU eddZeed< eed< eed< dZeed< eed< G d	d
 d
Z	dS )TTSItem	contentId)aliasidcontentLanguageIdnamer   backNametypec                   @   s   e Zd ZdZdS )zTTSItem.ConfigTN)__name__
__module____qualname__populate_by_namer   r   r   r   Configw   s    rP   N)
rL   rM   rN   r   rG   int__annotations__strrJ   rP   r   r   r   r   rD   p   s   
 rD   c                   @   sJ   e Zd ZU eed< eed< eed< eed< eed< eed< ee ed< dS )	TTSBatchRequestclientId	storigoIdhosthostTypestorigoLanguagestorigoLanguageNamelanguageDataN)rL   rM   rN   rQ   rR   rS   r   rD   r   r   r   r   rT   {   s   
 rT   z$/generate-storigo-content-hindi-filerequestc                    s   j s
tdddzj}t|\dtdttttf f fdd}g }dddd	}j D ] zt jo= j	 }t j
oG j
	 }|sQ|sQtd
|r|r| j\}}}	| j
\}
}}|d  |	| 7  < | jd jjt j||t j
||
d
 n)|r jn j
}||\}}}|d  |7  < | jd||t| jjd W q2 ty } ztd jt| | jdt| jd W Y d }~q2d }~ww |d |d< tdddt| d||ddW S  ty } ztd tdt|dd }~ww )Ni  zlanguageData cannot be empty)status_codedetailr.   r/   c           	         s.  t | }|s
tdtd| |dd}|d jd dkr#td|d  |d< d	|v r7|d	  |d	< |d jd }t  di |j}W d
   n1 sUw   Y  |	 
  tj}t }tj||ddd t| d}d j dj dt jd
d  d}|||fS )z-Returns (audio_base64, filename, token_count)zText empty after cleaningzCLEANED TEXT: %spt)return_tensors	input_ids   r   z!Tokenization produced empty inputattention_maskNi>  MP3)
samplerater
   zutf-8techno__   z.mp3r   )rC   r#   r%   r&   shapelongtorchno_gradwaveformsqueezecpunumpyastypenpfloat32ioBytesIOsfwritebase64	b64encodegetvaluedecoderH   rZ   uuiduuid4hex)	r.   cleanedinputsn_tokensrm   audio_npbufb64fnameitemr+   r\   r,   r   r   generate_audio_base64   s2   


z1generate_tts_batch.<locals>.generate_audio_base64r   )input_tokensoutput_tokenstotal_tokensz Both name and backName are emptyr   T)
rG   successrH   rZ   name_contentfilenameaudio_base64back_name_contentback_name_filenameback_name_audio_base64)rG   r   r   r   contentrH   rZ   zTTS failed for ID %s: %sF)rG   r   errorcontentTyper      z
Processed z items)r   messagetoken_usageresults)r]   r   zBatch TTS generation failedi  )r[   r   rY   r-   rS   tuplerQ   boolrI   r!   rJ   r#   appendrG   rH   rZ   rC   r(   r%   r   rK   r   len	exception)r\   r   r   r   r   has_namehas_backnamename_b64	name_filename_tokensback_b64	back_fileback_tokensraw_text	audio_b64r   r   er   r   r   generate_tts_batch   s   &!


	

r   ),fastapir   r   fastapi.responsesr   r   r   r|   rt   rx   loggingr7   bs4r   r4   typingr   pydanticr   r   rk   rp   rr   	soundfilerv   basicConfigINFO	getLoggerrL   r%   r   r   transformersr   r   appr$   rS   r-   rC   rD   rT   postr   r   r   r   r   <module>   sB    
*
