o
    Xh                     @   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   S/var/www/eduai.edurigo.com/lang_trans_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ed< eed< dS )TTSItemidnameNr%   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	storigoIdlanguageDataN)r&   r'   r(   intr*   r   r+   r   r   r   r   r0   :   s   
 r0   z$/generate-storigo-content-hindi-file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,   r:   rE   download_urlcontentfolderz'Error generating TTS for item ID %s: %szTTS generation failed: z
Processed z items)r:   messagerK   resultsphp_server_response   )r6   rJ   zBatch TTS generation failedi  zBatch TTS generation failed: r   )-r3   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)r5   base_folderstorigo_folderfull_folder_pathmodel	tokenizerrM   file_data_for_uploaditeminputsoutput	output_nprE   	file_pathrI   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 )Nz3https://api.edurigo.com/uploadaudiofile/uploadAudiorF   rH   rG   rE   r,   rb	audioFilez	audio/mp3)r1   r2   fileName
resourceId)filesr/   statusr:   rL   r/   )rE   r:   rL   r/   F)rE   r:   rL   	completed)r   rM   )openrequestspostjsonrY   r   ri   r)   )r~   php_server_urlupload_results	file_datary   rH   rG   rE   resource_idfr   r/   responseresult_jsonrz   r   r   r   rk      sN   


rk   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 )rE   r   ).0r/   r   r   r   
<dictcomp>   s    zclean_audio.<locals>.<dictcomp>rM   r:   rE   rF   z	Deleted: zError deleting z: N)r   r   r   rP   removeprintri   )r   r~   file_mapresultrE   r   rF   rz   r   r   r   rl      s$   

 rl   )/fastapir   r   fastapi.responsesr   r   r   re   pydanticr   typingr   r   rS   r   pathlibr   r	   rZ   r^   r`   	soundfilerg   loggingr
   basicConfigINFO	getLoggerr&   rj   r   r   r   r   transformersr!   r"   scipyr#   r+   r.   r0   appr   r}   rk   rl   r   r   r   r   <module>   sT    


]0