o
    jNiO                     @   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< eed< dS )TTSItemidquestionLanguageId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/   5   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   r1   8   s
   
 r1   z%/generate-question-content-hindi-filerequestc                    s  | j s
tdddzAd| 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'| 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(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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,   r-   filename
local_path	client_idr3   r4   )r,   r>   rJ   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   )r8   rN   zBatch TTS generation failedi  zBatch TTS generation failed: r   )/r5   r   r4   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-   r)   uuiduuid4sfwriter2   r3   	Exceptionloggerr?   send_files_to_php_serverclean_audior
   	exception)r7   base_folderfull_folder_pathmodel	tokenizerrQ   file_data_for_uploadrP   iteminputsr;   output	output_nprJ   	file_pathrM   ephp_responseresponse_datar   r   r   generate_tts_batchB   s   





$
	

r   file_data_listr3   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/uploadQuestionAudiorK   rL   rJ   r,   r-   rb	audioFilez	audio/mp3)r2   fileName
questionIdr-   )filesr0   statusr>   rO   r0   )rJ   r>   rO   r0   F)rJ   r>   rO   	completed)r   rQ   )openrequestspostjsonr]   r   rn   r)   )r   r3   php_server_urlupload_results	file_datar|   rL   rJ   r   r-   fr   r0   responseresult_jsonr}   r   r   r   rp      sL   


rp   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 )rJ   r   ).0r0   r   r   r   
<dictcomp>   s    zclean_audio.<locals>.<dictcomp>rQ   r>   rJ   rK   z	Deleted: zError deleting z: N)r   r   r   rT   removeprintrn   )r   r   file_mapresultrJ   r   rK   r}   r   r   r   rq      s&   

 rq   )/fastapir   r   fastapi.responsesr   r   r   rj   pydanticr   typingr   r   rW   r   pathlibr   r	   r_   rc   re   	soundfilerl   loggingr
   basicConfigINFO	getLoggerr&   ro   r   r   r   r   transformersr!   r"   scipyr#   r+   r/   r1   appr   r   rp   rq   r   r   r   r   <module>   sN    


b0