o
    k@)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	 d dl
mZm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)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   ]/var/www/eduai.edurigo.com/translate_question_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#   -   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+   0   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.   4   s   
 r.   c                   @   s2   e Zd ZU eed< eed< eed< ee ed< dS )TTSBatchRequest2clientIdhosthostTypelanguageDataN)r&   r'   r(   intr*   r)   r   r+   r   r   r   r   r0   7   s
   
 r0   z%/generate-question-content-hindi-filerequestc                    s  | j s
tdddz?d| j d}tj|}tj|s3tj|dd t|t	j
t	jB t	jB  td}td}g }g }d	d	d	d
}| j D ]}|j s\||jddd qJz||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| }||j||| j%| j&| jd ||jd|||jd W qJ t'y } zt()d|jt | ||jddt | d W Y d}~qJd}~ww |d |d   |d!< t*|| j&}t+||I dH  dd"t| d#|||d$}t,d%|d&W S  t'yg } 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detailz9/var/www/eduai.edurigo.com/translate_question_text_audio/z/convert_mp3T)exist_okzfacebook/mms-tts-hinr   )input_tokensoutput_tokenstotal_tokensFzContent cannot be empty)r,   successerrorpt)return_tensors	input_idsr:   N      techno__   z.mp3i>  )
samplerate/)r,   filename
local_path	client_idr2   r3   )r,   r=   rI   download_urlcontentz'Error generating TTS for item ID %s: %szTTS generation failed: r;   r<   z
Processed z items)r=   messagetoken_usageresultsphp_server_response   )r7   rM   zBatch TTS generation failedi  zBatch TTS generation failed: r   ).r4   r   r3   r   r   r   existsmakedirschmodstatS_IRWXUS_IRWXGS_IRWXOr!   from_pretrainedr"   r-   stripappendr,   lentorchno_gradwaveformcpunumpyastypenpfloat32ndimshapesqueezer)   uuiduuid4sfwriter1   r2   	Exceptionloggerr>   send_files_to_php_serverclean_audior
   	exception)r6   base_folderfull_folder_pathmodel	tokenizerrP   file_data_for_uploadrO   iteminputsr:   output	output_nprI   	file_pathrL   ephp_responseresponse_datar   r   r   generate_tts_batchA   s   





$
	

r   file_data_listr2   c                 C   s  d| d}g }| D ]x}zV|d }|d }|d }|d }t |d7}	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 )Nzhttps://z$/uploadaudiofile/uploadQuestionAudiorJ   rK   rI   r,   rb	audioFilez	audio/mp3)r1   fileName
questionId)filesr/   statusr=   rN   r/   )rI   r=   rN   r/   F)rI   r=   rN   	completed)r   rP   )openrequestspostjsonr\   r   rm   r)   )r   r2   php_server_urlupload_results	file_datar{   rK   rI   r   fr   r/   responseresult_jsonr|   r   r   r   ro      sH   


ro   c                    s   dd |D }| d D ]F}|d rR|d }| |}|rR|d }ztj|r4t| td|  W q tyQ } 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 )rI   r   ).0r/   r   r   r   
<dictcomp>   s    zclean_audio.<locals>.<dictcomp>rP   r=   rI   rJ   z	Deleted: zError deleting z: N)r   r   r   rS   removeprintrm   )r   r   file_mapresultrI   r   rJ   r|   r   r   r   rp      s&   

 rp   )/fastapir   r   fastapi.responsesr   r   r   ri   pydanticr   typingr   r   rV   r   pathlibr   r	   r^   rb   rd   	soundfilerk   loggingr
   basicConfigINFO	getLoggerr&   rn   r   r   r   r   transformersr!   r"   scipyr#   r+   r.   r0   appr   r   ro   rp   r   r   r   r   <module>   sN    


b.