o �J�hv�@s�ddlZddlZddlZddlmZmZddlZddlm Z ddl m Z ddl m m ZddlTddlTddlmZmZddlmZmZmZGdd �d e�ZdS) �N)�ABC�abstractmethod)�List)�datetime)�*)� load_yaml� save_yaml)�DEFAULT_PARAMETERS_CONFIG_PATH�NLLB_MODELS_DIR�TRANSLATION_OUTPUT_DIRcs�eZdZeefdedef�fdd� Zededefdd��Z ee � �fd ed ed ed e j fd d��Z dde � �fde d ed ed ededede fdd�Zedd��Zdd�Zedeefdd��Zed ed ed ededef dd��Z�ZS)�TranslationBase� model_dir� output_dircsPt���d|_||_||_tj|jdd�tj|jdd�d|_|��|_ dS)NT)�exist_ok) �super�__init__�modelr r�os�makedirs�current_model_size� get_device�device)�selfr r�� __class__��LC:\pinokio\api\whisper-webui.git\app\modules\translation\translation_base.pyrs zTranslationBase.__init__�text� max_lengthcC�dS�Nr)rrrrrr� translateszTranslationBase.translate� model_size�src_lang�tgt_lang�progresscCrr r)rr"r#r$r%rrr� update_model%szTranslationBase.update_model��T�fileobjs� add_timestamp�returnc Cs�z�z�|rt|dtjj�rdd�|D�}|j|||||d�|j||||d�i}|D]J} tj�tj� | ��\} } t | |j �} | � | �} t | �D]\}}||t| �dd�|j|j|d�}||_qHt|j | | | |d �\}}||d �|| <q+d }|��D]\} }|d 7}|| �d �7}||d�7}q|d|��}dd�|��D�}||gWW|��Sty�}ztd|����d}~ww|��w)a Translate subtitle file from source language to target language Parameters ---------- fileobjs: list List of files to transcribe from gr.Files() model_size: str Whisper model size from gr.Dropdown() src_lang: str Source language of the file to translate from gr.Dropdown() tgt_lang: str Target language of the file to translate from gr.Dropdown() max_length: int Max length per line to translate add_timestamp: bool Boolean value from gr.Checkbox() that determines whether to add a timestamp at the end of the filename. progress: gr.Progress Indicator to show progress directly in gradio. I use a forked version of whisper for this. To see more info : https://github.com/jhj0517/jhj0517-whisper/tree/add-progress-callback Returns ---------- A List of String to return to gr.Textbox() Files to return to gr.Files() rcSsg|]}|j�qSr)�name)�.0�filerrr� <listcomp>Ssz2TranslationBase.translate_file.<locals>.<listcomp>)r"r#r$rr))r"r#r$r%z Translating..)�desc)r)r�output_file_name� output_format�resultr))�subtitle�path�z%------------------------------------ z r3z6Done! Subtitle is in the outputs/translation folder. cSsg|]\}}|d�qS)r4r)r,�key�itemrrrr.{szError translating file: N)� isinstance�gr�utils� NamedString�cache_parametersr&rr4�splitext�basename� get_writerr� to_segments� enumerate�lenr!r� generate_file�items�offload� Exception�print)rr(r"r#r$rr)r%� files_info�fileobj� file_name�file_ext�writer�segments�i�segmentZtranslated_textr3� file_path� total_result�infoZgr_strZoutput_file_paths�errr�translate_file.s\#��   �   ��� zTranslationBase.translate_filecCs0tj��rdStj��rdStjj��rdSdS)N�cuda�xpu�mps�cpu)�torchrU� is_availablerV�backendsrWrrrrr�s   zTranslationBase.get_devicecCsf|jdur |`d|_|jdkrtj��tj��|jdkr-tj��tj��tj��t � �dS)z(Offload the model and free up the memoryNrUrV) rrrYrU� empty_cache�reset_max_memory_allocatedrV�reset_accumulated_memory_stats�reset_peak_memory_stats�gc�collect)rrrrrE�s         zTranslationBase.offload� file_pathscCs0|sdS|D]}|rtj�|�rt�|�qdSr )rr4�exists�remove)rbrPrrr�remove_input_files�s ��z"TranslationBase.remove_input_filescCsNdtfdd�}tt�}|||�||�|d�|dd<||dd<t|t�dS)N�langcSs2|ttj���vrdd�tj��D�}||S|S)NcSsi|]\}}||�qSrr)r,r6�valuerrr� <dictcomp>�szKTranslationBase.cache_parameters.<locals>.validate_lang.<locals>.<dictcomp>)�list�nllb�NLLB_AVAILABLE_LANGS�valuesrD)rf�flippedrrr� validate_lang�sz7TranslationBase.cache_parameters.<locals>.validate_lang)r"� source_lang� target_langr� translationrjr))�strrr r)r"r#r$rr)rn� cached_paramsrrrr<�s� z TranslationBase.cache_parameters)�__name__� __module__� __qualname__r r rrrr�intr!r9�Progressr&ri�boolrT� staticmethodrrErrer<� __classcell__rrrrr st��� � ����� � ������� �V  ����r )rrY�gradior9�abcrrr`�typingrr�"modules.translation.nllb_inferencerq�nllb_inferencerj�modules.whisper.data_classes�modules.utils.subtitle_manager�modules.utils.files_managerrr�modules.utils.pathsr r r r rrrr�<module>s  
Memory