diff --git a/controller.py b/controller.py index 47f15f66..634d3181 100644 --- a/controller.py +++ b/controller.py @@ -61,10 +61,11 @@ def messageFormatter(format_type:str, translation, message): return osc_message def changeToCTranslate2Process(): - config.CHOICE_INPUT_TRANSLATOR = "CTranslate2" - config.CHOICE_OUTPUT_TRANSLATOR = "CTranslate2" - updateTranslationEngineAndEngineList() - view.printToTextbox_TranslationEngineLimitError() + if config.CHOICE_INPUT_TRANSLATOR != "CTranslate2" or config.CHOICE_OUTPUT_TRANSLATOR != "CTranslate2": + config.CHOICE_INPUT_TRANSLATOR = "CTranslate2" + config.CHOICE_OUTPUT_TRANSLATOR = "CTranslate2" + updateTranslationEngineAndEngineList() + view.printToTextbox_TranslationEngineLimitError() # func transcription send message def sendMicMessage(message): diff --git a/model.py b/model.py index 487b55be..7d89a0a9 100644 --- a/model.py +++ b/model.py @@ -183,13 +183,17 @@ class Model: # 翻訳失敗時のフェールセーフ処理 if translation is False: translation_success_flag = False - translation = self.translator.translate( - translator_name="CTranslate2", - source_language=source_language, - target_language=target_language, - target_country=target_country, - message=message - ) + while True: + translation = self.translator.translate( + translator_name="CTranslate2", + source_language=source_language, + target_language=target_language, + target_country=target_country, + message=message + ) + if translation is not False: + break + sleep(0.1) return translation, translation_success_flag def getOutputTranslate(self, message): @@ -210,13 +214,17 @@ class Model: # 翻訳失敗時のフェールセーフ処理 if translation is False: translation_success_flag = False - translation = self.translator.translate( - translator_name="CTranslate2", - source_language=source_language, - target_language=target_language, - target_country=target_country, - message=message - ) + while True: + translation = self.translator.translate( + translator_name="CTranslate2", + source_language=source_language, + target_language=target_language, + target_country=target_country, + message=message + ) + if translation is not False: + break + sleep(0.1) return translation, translation_success_flag def addKeywords(self): diff --git a/models/translation/translation_translator.py b/models/translation/translation_translator.py index a71d0f55..d2717747 100644 --- a/models/translation/translation_translator.py +++ b/models/translation/translation_translator.py @@ -52,6 +52,18 @@ class Translator(): self.ctranslate2_translator = None self.ctranslate2_tokenizer = None + def translateCTranslate2(self, message, source_language, target_language): + try: + self.ctranslate2_tokenizer.src_lang = source_language + source = self.ctranslate2_tokenizer.convert_ids_to_tokens(self.ctranslate2_tokenizer.encode(message)) + target_prefix = [self.ctranslate2_tokenizer.lang_code_to_token[target_language]] + results = self.ctranslate2_translator.translate_batch([source], target_prefix=[target_prefix]) + target = results[0].hypotheses[0][1:] + result = self.ctranslate2_tokenizer.decode(self.ctranslate2_tokenizer.convert_tokens_to_ids(target)) + except Exception: + result = False + return result + @staticmethod def getLanguageCode(translator_name, target_country, source_language, target_language): match translator_name: @@ -115,12 +127,11 @@ class Translator(): to_language=target_language, ) case "CTranslate2": - self.ctranslate2_tokenizer.src_lang = source_language - source = self.ctranslate2_tokenizer.convert_ids_to_tokens(self.ctranslate2_tokenizer.encode(message)) - target_prefix = [self.ctranslate2_tokenizer.lang_code_to_token[target_language]] - results = self.ctranslate2_translator.translate_batch([source], target_prefix=[target_prefix]) - target = results[0].hypotheses[0][1:] - result = self.ctranslate2_tokenizer.decode(self.ctranslate2_tokenizer.convert_tokens_to_ids(target)) + result = self.translateCTranslate2( + message=message, + source_language=source_language, + target_language=target_language, + ) except Exception: import traceback with open('error.log', 'a') as f: