o
    S;iP                      @   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m	Z	m
Z
 d dlmZ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mZ d dlmZmZmZ d dlZd dlZd dlZd dlZd dlmZ ejejd	d
 eeZdZe d dd Z!e ej" e!  e d e ej" d dl#m$Z$m%Z% d dlZd dl&Z&d dlZd dlZG dd de	Z'G dd de	Z(G dd de	Z)G dd de	Z*e Z+e+,dde*fddZ-dee defdd Z.d!d" Z/dS )#    )FastAPIHTTPException)FileResponseN)	BaseModelField)ListDict)Path)r   r   Any)JSONResponsez'%(asctime)s [%(levelname)s] %(message)s)levelformatzL/var/www/eduai.edurigo.com/doc_train/edurigo_ai/Puru/ai4bharat/ai4bharat_envSSc                  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 )
z Activate the virtual environmentlibz
python3.10zsite-packagesr   VIRTUAL_ENVbinPATH N)	ospathjoinENV_PATHsysinsertenvironpathsepget)site_packages r   W/var/www/eduai.edurigo.com/translate_text_audio/production/lang_trans_audio_fast_api.pyactivate_environment   s
   

,r    ssaaa)	VitsModelAutoTokenizerc                   @   s   e Zd ZU eed< dS )
TTSRequesttextN)__name__
__module____qualname__str__annotations__r   r   r   r   r$   0   s   
 r$   c                   @   s>   e Zd ZU eddZeed< eed< eed< G dd dZdS )	TTSItem	contentId)aliasidnametypec                   @   s   e Zd ZdZdS )zTTSItem.ConfigTN)r&   r'   r(   allow_population_by_field_namer   r   r   r   Config8   s    r2   N)	r&   r'   r(   r   r.   intr*   r)   r2   r   r   r   r   r+   3   s
   
 r+   c                   @   s   e Zd ZU ee ed< dS )TTSBatchRequestdataN)r&   r'   r(   r   r+   r*   r   r   r   r   r4   ;   s   
 r4   c                   @   sB   e Zd ZU eed< eed< eed< eed< eed< ee ed< dS )TTSBatchRequest2clientId	storigoIdhosthostTypestorigoLanguagelanguageDataN)r&   r'   r(   r3   r*   r)   r   r+   r   r   r   r   r6   >   s   
 r6   z$/generate-storigo-content-hindi-filerequestc                    s  | j s
tdddz[d| j d}d| j }tj||}tj|s:tj|dd t	|t
jt
jB t
jB  | j }d	| }t|}t|}g }g }	d
d
d
d}
| j D ]}|j so||jdd|jd q[z||jdd}t|d d
 }|
d  |7  < t  |d+i |j}W d   n1 sw   Y  |  tj }|j!dkr|j"d
 dkr|#d
}d|j dt$t%& dd  d}tj||}t'j(||dd | d| d| }|	|j||| j| j)| j*| jd ||jd|||j|j|d W n. t+y: } z!t,-d|jt$| ||jdd t$| |jd W Y d}~nd}~ww |
d |
d!  |
d"< q[t.|	| j*}t/||	 dd#t| d$|
|||d%}t0d&|d'W S  t+y } zt,1d( td)d*t$| dd}~ww ),z<Generate TTS for multiple items with dynamic folder creationi  zData array cannot be empty)status_codedetailz0/var/www/eduai.edurigo.com/translate_text_audio/z/convert_mp3storigo_T)exist_okzfacebook/mms-tts-r   )input_tokensoutput_tokenstotal_tokensFzContent cannot be empty)r.   successerrorcontentTypept)return_tensors	input_idsrB   N      techno__   z.mp3i>  )
samplerate/)r.   filename
local_path
storigo_id	client_idr9   r:   )r.   rE   rR   download_urlcontentrG   folderz'Error generating TTS for item ID %s: %szTTS generation failed: rC   rD   z
Processed z items)rE   messagetoken_usagerX   resultsphp_server_response   )r>   rW   zBatch TTS generation failedi  zBatch TTS generation failed: r   )2r<   r   r:   r8   r   r   r   existsmakedirschmodstatS_IRWXUS_IRWXGS_IRWXOr;   lowerr"   from_pretrainedr#   r/   stripappendr.   r0   lentorchno_gradwaveformcpunumpyastypenpfloat32ndimshapesqueezer)   uuiduuid4sfwriter7   r9   	ExceptionloggerrF   send_files_to_php_serverclean_audior   	exception)r=   base_folderstorigo_folderfull_folder_pathlanguage
model_namemodel	tokenizerr[   file_data_for_uploadrZ   iteminputsrB   output	output_nprR   	file_pathrV   ephp_responseresponse_datar   r   r   generate_tts_batchJ   s   







$
	

r   file_data_listr9   c                 C   s  d| d}g }| D ]}}z[|d }|d }|d }|d }|d }	t |d8}
d	||
d
fi}||||	d}tj|||d}| }|||ddk|d|di d W d    n1 saw   Y  W q
 ty } z||ddt|d W Y d }~q
d }~ww d|dS )Nzhttps://z#/uploadaudiofile/uploadStorigoAudiorS   rU   rT   rR   r.   rb	audioFilez	audio/mp3)r7   r8   fileName
resourceId)filesr5   statusrE   rY   r5   )rR   rE   rY   r5   F)rR   rE   rY   	completed)r   r[   )openrequestspostjsonrh   r   ry   r)   )r   r9   php_server_urlupload_results	file_datar   rU   rT   rR   resource_idfr   r5   responseresult_jsonr   r   r   r   r{      sL   


r{   c                 C   s   dd |D }| d D ]F}|d rQ|d }| |}|rQ|d }ztj|r3t| td|  W q tyP } ztd| d	|  W Y d
}~qd
}~ww qd
S )z-Clean up local files after successful uploadsc                 S   s   i | ]}|d  |qS )rR   r   ).0r5   r   r   r   
<dictcomp>   s    zclean_audio.<locals>.<dictcomp>r[   rE   rR   rS   z	Deleted: zError deleting z: N)r   r   r   r^   removeprintry   )r   r   file_mapresultrR   r   rS   r   r   r   r   r|      s$   

 r|   )0fastapir   r   fastapi.responsesr   r   r   ru   pydanticr   r   typingr   r   ra   r   pathlibr	   r
   rj   rn   rp   	soundfilerw   loggingr   basicConfigINFO	getLoggerr&   rz   r   r   r    r   transformersr"   r#   scipyr$   r+   r4   r6   appr   r   r{   r|   r   r   r   r   <module>   sT    


	j0