o
    o?iB"                     @   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   T/var/www/eduai.edurigo.com/translate_text_audio/testing/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                   @   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 )	TTSBatchRequest2clientId	storigoIdhosthostTypestorigoLanguagestorigoLanguageName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| 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*}t0||	 dd#t| d$|
|||d%}t1d&|d'W S  t,y } zt-2d( 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_idsrC   N      techno__   z.mp3i>  )
samplerate/)r.   filename
local_path
storigo_id	client_idr9   r:   r<   )r.   rF   rS   download_urlcontentrH   folderz'Error generating TTS for item ID %s: %szTTS generation failed: rD   rE   z
Processed z items)rF   messagetoken_usagerY   resultsphp_server_response   )r?   rX   zBatch TTS generation failedi  zBatch TTS generation failed: r   )3r=   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   r<   	ExceptionloggerrG   send_files_to_php_serverclean_audior   	exception)r>   base_folderstorigo_folderfull_folder_pathlanguage
model_namemodel	tokenizerr\   file_data_for_uploadr[   iteminputsrC   output	output_nprS   	file_pathrW   ephp_responseresponse_datar   r   r   generate_tts_batchK   s   







$
	

r   file_data_listr9   c                 C   s$  d| d}g }| D ]}z`|d }|d }|d }|d }|d }	|d }
t |d	9}d
||dfi}||||	|
d}tj|||d}| }|||ddk|d|di d W d    n1 sfw   Y  W q
 ty } z||ddt|d W Y d }~q
d }~ww d|dS )Nzhttps://z#/uploadaudiofile/uploadStorigoAudiorT   rV   rU   rS   r.   r<   rb	audioFilez	audio/mp3)r7   r8   fileName
resourceIdr<   )filesr5   statusrF   rZ   r5   )rS   rF   rZ   r5   F)rS   rF   rZ   	completed)r   r\   )openrequestspostjsonri   r   rz   r)   )r   r9   php_server_urlupload_results	file_datar   rV   rU   rS   resource_idr<   fr   r5   responseresult_jsonr   r   r   r   r|      sP   


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 )rS   r   ).0r5   r   r   r   
<dictcomp>   s    zclean_audio.<locals>.<dictcomp>r\   rF   rS   rT   z	Deleted: zError deleting z: N)r   r   r   r_   removeprintrz   )r   r   file_mapresultrS   r   rT   r   r   r   r   r}      s$   

 r}   )0fastapir   r   fastapi.responsesr   r   r   rv   pydanticr   r   typingr   r   rb   r   pathlibr	   r
   rk   ro   rq   	soundfilerx   loggingr   basicConfigINFO	getLoggerr&   r{   r   r   r    r   transformersr"   r#   scipyr$   r+   r4   r6   appr   r   r|   r}   r   r   r   r   <module>   sT    



j2