o
    h                     @   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	 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 fddZ-d d! Z.dS )"    )FastAPIHTTPException)FileResponseN)	BaseModel)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   P/var/www/eduai.edurigo.com/lang_trans_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ed< eed< dS )TTSItemidcontentNr%   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   r.   7   s   
 r.   c                   @   s*   e Zd ZU eed< eed< ee ed< dS )TTSBatchRequest2clientId	storigoIdr/   N)r&   r'   r(   intr*   r   r+   r   r   r   r   r0   :   s   
 r0   z/generate-tts-batchrequestc                    s  | j s
tdddz!d}d| j }tj||}tj|s5tj|dd t|t	j
t	jB t	jB  td}td}g }g }| j D ]}|j sX||jd	d
d qFz||jdd}	t  |d%i |	j}
W d   n1 sww   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$d ||jd|||j|d W qF t%y } zt&'d|jt| ||jd	dt| d W Y d}~qFd}~ww t(|I dH }t)|| ddt*| d|||d}t+d |d!W S  t%yI } zt&,d" 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detailz?/var/www/eduai.edurigo.com/lang_trans_audio/testing/convert_mp3storigo_T)exist_okzfacebook/mms-tts-hinFzContent cannot be empty)r,   successerrorpt)return_tensorsN   r      techno__   z.mp3i>  )
samplerate/)r,   filename
local_path
storigo_id	client_id)r,   r9   rD   download_urlr-   folderz'Error generating TTS for item ID %s: %szTTS generation failed: z
Processed z items)r9   messagerI   resultsphp_server_response   )r5   r-   zBatch TTS generation failedi  zBatch TTS generation failed: r   )-r/   r   r2   r   r   r   existsmakedirschmodstatS_IRWXUS_IRWXGS_IRWXOr!   from_pretrainedr"   r-   stripappendr,   torchno_gradwaveformcpunumpyastypenpfloat32ndimshapesqueezer)   uuiduuid4sfwriter1   	Exceptionloggerr:   send_files_to_php_serverclean_audiolenr
   	exception)r4   base_folderstorigo_folderfull_folder_pathmodel	tokenizerrK   file_data_for_uploaditeminputsoutput	output_nprD   	file_pathrH   ephp_responseresponse_datar   r   r   generate_tts_batchC   s   





$		


r{   file_data_listc                    s  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 s^w   Y  W q ty } z||ddt|d W Y d }~qd }~ww d|dS )Nz4https://api.edurigo1.com/uploadaudiofile/uploadAudiorE   rG   rF   rD   r,   rb	audioFilez	audio/mp3)r1   r2   fileName
resourceId)filesr/   statusr9   rJ   r/   )rD   r9   rJ   r/   F)rD   r9   rJ   	completed)r   rK   )openrequestspostjsonrW   r   rg   r)   )r|   php_server_urlupload_results	file_datarw   rG   rF   rD   resource_idfr   r/   responseresult_jsonrx   r   r   r   ri      sN   


ri   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 )rD   r   ).0r/   r   r   r   
<dictcomp>   s    zclean_audio.<locals>.<dictcomp>rK   r9   rD   rE   z	Deleted: zError deleting z: N)r   r   r   rN   removeprintrg   )r   r|   file_mapresultrD   r   rE   rx   r   r   r   rj      s$   

 rj   )/fastapir   r   fastapi.responsesr   r   r   rc   pydanticr   typingr   r   rQ   r   pathlibr   r	   rX   r\   r^   	soundfilere   loggingr
   basicConfigINFO	getLoggerr&   rh   r   r   r   r   transformersr!   r"   scipyr#   r+   r.   r0   appr   r{   ri   rj   r   r   r   r   <module>   sT    


]0