Merge branch 'bugfix_translate_lang' into develop
This commit is contained in:
@@ -368,6 +368,7 @@ class TestMainloop():
|
|||||||
if expected_status == [401]:
|
if expected_status == [401]:
|
||||||
print(f"-> {Color.YELLOW}[SKIP]{Color.RESET} No test available for this endpoint: {endpoint}.")
|
print(f"-> {Color.YELLOW}[SKIP]{Color.RESET} No test available for this endpoint: {endpoint}.")
|
||||||
self.record_test_result(endpoint, None, None, expected_status) # テスト結果を記録
|
self.record_test_result(endpoint, None, None, expected_status) # テスト結果を記録
|
||||||
|
success=True
|
||||||
return success
|
return success
|
||||||
elif expected_status == [404]:
|
elif expected_status == [404]:
|
||||||
print(f"-> {Color.RED}[ERROR]{Color.RESET} Unknown endpoint: {endpoint}.")
|
print(f"-> {Color.RED}[ERROR]{Color.RESET} Unknown endpoint: {endpoint}.")
|
||||||
@@ -474,6 +475,7 @@ class TestMainloop():
|
|||||||
if expected_status == [401]:
|
if expected_status == [401]:
|
||||||
print(f"-> {Color.YELLOW}[SKIP]{Color.RESET} No test available for this endpoint: {endpoint}.")
|
print(f"-> {Color.YELLOW}[SKIP]{Color.RESET} No test available for this endpoint: {endpoint}.")
|
||||||
self.record_test_result(endpoint, None, None, expected_status) # テスト結果を記録
|
self.record_test_result(endpoint, None, None, expected_status) # テスト結果を記録
|
||||||
|
success=True
|
||||||
return success
|
return success
|
||||||
elif expected_status == [404]:
|
elif expected_status == [404]:
|
||||||
print(f"-> {Color.RED}[ERROR]{Color.RESET} Unknown endpoint: {endpoint}.")
|
print(f"-> {Color.RED}[ERROR]{Color.RESET} Unknown endpoint: {endpoint}.")
|
||||||
@@ -625,6 +627,70 @@ class TestMainloop():
|
|||||||
self.test_delete_data_endpoints_single(endpoint)
|
self.test_delete_data_endpoints_single(endpoint)
|
||||||
print("----データ削除系のエンドポイントのテスト終了----")
|
print("----データ削除系のエンドポイントのテスト終了----")
|
||||||
|
|
||||||
|
def test_translate_language(self, text):
|
||||||
|
"""
|
||||||
|
指定された言語ペアで翻訳をテストする
|
||||||
|
:param text: 翻訳するテキスト
|
||||||
|
:return: 翻訳結果とステータスコード
|
||||||
|
"""
|
||||||
|
# エンドポイント
|
||||||
|
endpoint = "/run/send_message_box"
|
||||||
|
result, status = self.main.handleRequest(endpoint, text)
|
||||||
|
return result, status
|
||||||
|
|
||||||
|
def test_translate_all_language_pairs(self):
|
||||||
|
results = {}
|
||||||
|
# 翻訳機能を有効にする
|
||||||
|
self.main.handleRequest("/set/enable/translation", None)
|
||||||
|
# 対応する言語コードのリストを取得
|
||||||
|
self.config_dict["selectable_language_list"], _ = self.main.handleRequest("/get/data/selectable_language_list", None)
|
||||||
|
selectable_language_list = self.config_dict.get("selectable_language_list", None)
|
||||||
|
# すべての言語ペアで翻訳をテスト
|
||||||
|
for source_lang in selectable_language_list:
|
||||||
|
results[source_lang["language"]] = {}
|
||||||
|
for target_lang in selectable_language_list:
|
||||||
|
results[source_lang["language"]][target_lang["language"]] = {}
|
||||||
|
data = {}
|
||||||
|
for i in ["1", "2", "3"]:
|
||||||
|
data[i] = {}
|
||||||
|
data[i]["1"] = source_lang | {"enable": True}
|
||||||
|
self.main.handleRequest("/set/data/selected_your_languages", data)
|
||||||
|
data = {}
|
||||||
|
for i in ["1", "2", "3"]:
|
||||||
|
data[i] = {}
|
||||||
|
for j in ["1", "2", "3"]:
|
||||||
|
if j == "1":
|
||||||
|
data[i][j] = target_lang | {"enable": True}
|
||||||
|
else:
|
||||||
|
data[i][j] = target_lang | {"enable": False}
|
||||||
|
self.main.handleRequest("/set/data/selected_target_languages", data)
|
||||||
|
|
||||||
|
# 翻訳エンジンを設定する(例: "CTranslate2")
|
||||||
|
self.config_dict["translation_engines"], _ = self.main.handleRequest("/get/data/translation_engines", None)
|
||||||
|
translation_engines = self.config_dict.get("translation_engines", None)
|
||||||
|
for engine in translation_engines:
|
||||||
|
results[source_lang["language"]][target_lang["language"]][engine] = None
|
||||||
|
data = {}
|
||||||
|
for i in ["1", "2", "3"]:
|
||||||
|
data[i] = engine
|
||||||
|
self.main.handleRequest("/set/data/selected_translation_engines", data)
|
||||||
|
|
||||||
|
# テスト翻訳を実行
|
||||||
|
print(f"Translating from {source_lang} to {target_lang} using {engine}")
|
||||||
|
result, status = self.test_translate_language({"id":"000001", "message":"こんにちわ 世界!"})
|
||||||
|
if status == 200:
|
||||||
|
print(f"-> {Color.GREEN}[PASS]{Color.RESET} Translation from {source_lang} to {target_lang}: {result}")
|
||||||
|
results[source_lang["language"]][target_lang["language"]][engine] = True
|
||||||
|
else:
|
||||||
|
print(f"-> {Color.RED}[ERROR]{Color.RESET} Translation from {source_lang} to {target_lang} failed with status {status}")
|
||||||
|
results[source_lang["language"]][target_lang["language"]][engine] = False
|
||||||
|
# 翻訳機能を無効にする
|
||||||
|
self.main.handleRequest("/set/disable/translation", None)
|
||||||
|
print("----すべての言語ペアでの翻訳テスト終了----")
|
||||||
|
import json
|
||||||
|
with open("translation_test_results.json", "w", encoding="utf-8") as f:
|
||||||
|
json.dump(results, f, indent=4, ensure_ascii=False)
|
||||||
|
|
||||||
def generate_summary(self):
|
def generate_summary(self):
|
||||||
"""
|
"""
|
||||||
テスト結果のサマリーを生成して表示する
|
テスト結果のサマリーを生成して表示する
|
||||||
@@ -669,14 +735,15 @@ if __name__ == "__main__":
|
|||||||
import traceback
|
import traceback
|
||||||
try:
|
try:
|
||||||
test = TestMainloop()
|
test = TestMainloop()
|
||||||
test.test_endpoints_on_off_all()
|
# test.test_endpoints_on_off_all()
|
||||||
test.test_set_data_endpoints_all()
|
# test.test_set_data_endpoints_all()
|
||||||
test.test_run_endpoints_all()
|
# test.test_run_endpoints_all()
|
||||||
test.test_delete_data_endpoints_all()
|
# test.test_delete_data_endpoints_all()
|
||||||
# test.test_endpoints_all_random()
|
test.test_endpoints_all_random()
|
||||||
# test.test_endpoints_on_off_continuous()
|
# test.test_endpoints_on_off_continuous()
|
||||||
# test.test_endpoints_on_off_random()
|
# test.test_endpoints_on_off_random()
|
||||||
# test.test_endpoints_specific_random()
|
# test.test_endpoints_specific_random()
|
||||||
|
# test.test_translate_all_language_pairs()
|
||||||
test.generate_summary()
|
test.generate_summary()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
print("Interrupted by user, shutting down...")
|
print("Interrupted by user, shutting down...")
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import copy
|
||||||
from typing import Callable, Any
|
from typing import Callable, Any
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from subprocess import Popen
|
from subprocess import Popen
|
||||||
@@ -753,25 +754,10 @@ class Controller:
|
|||||||
|
|
||||||
def setSelectedTranslationComputeDevice(self, device:str, *args, **kwargs) -> dict:
|
def setSelectedTranslationComputeDevice(self, device:str, *args, **kwargs) -> dict:
|
||||||
printLog("setSelectedTranslationComputeDevice", device)
|
printLog("setSelectedTranslationComputeDevice", device)
|
||||||
pre_device = config.SELECTED_TRANSLATION_COMPUTE_DEVICE
|
|
||||||
pre_compute_type = config.SELECTED_TRANSLATION_COMPUTE_TYPE
|
|
||||||
config.SELECTED_TRANSLATION_COMPUTE_DEVICE = device
|
config.SELECTED_TRANSLATION_COMPUTE_DEVICE = device
|
||||||
config.SELECTED_TRANSLATION_COMPUTE_TYPE = "auto"
|
config.SELECTED_TRANSLATION_COMPUTE_TYPE = "auto"
|
||||||
try:
|
self.run(200, self.run_mapping["selected_translation_compute_type"], config.SELECTED_TRANSLATION_COMPUTE_TYPE)
|
||||||
model.changeTranslatorCTranslate2Model()
|
model.setChangedTranslatorParameters(True)
|
||||||
self.run(200, self.run_mapping["selected_translation_compute_type"], config.SELECTED_TRANSLATION_COMPUTE_TYPE)
|
|
||||||
except Exception as e:
|
|
||||||
# VRAM不足エラーの検出(デバイス切り替え時)
|
|
||||||
is_vram_error, error_message = model.detectVRAMError(e)
|
|
||||||
if is_vram_error:
|
|
||||||
# 前のデバイス設定に戻す
|
|
||||||
printLog("VRAM error detected, reverting device setting")
|
|
||||||
config.SELECTED_TRANSLATION_COMPUTE_DEVICE = pre_device
|
|
||||||
config.SELECTED_TRANSLATION_COMPUTE_TYPE = pre_compute_type
|
|
||||||
model.changeTranslatorCTranslate2Model()
|
|
||||||
else:
|
|
||||||
# その他のエラーは通常通り処理
|
|
||||||
errorLogging()
|
|
||||||
return {"status":200,"result":config.SELECTED_TRANSLATION_COMPUTE_DEVICE}
|
return {"status":200,"result":config.SELECTED_TRANSLATION_COMPUTE_DEVICE}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -801,12 +787,39 @@ class Controller:
|
|||||||
# def getMaxSpeakerThreshold(*args, **kwargs) -> dict:
|
# def getMaxSpeakerThreshold(*args, **kwargs) -> dict:
|
||||||
# return {"status":200, "result":config.MAX_SPEAKER_THRESHOLD}
|
# return {"status":200, "result":config.MAX_SPEAKER_THRESHOLD}
|
||||||
|
|
||||||
@staticmethod
|
def setEnableTranslation(self, *args, **kwargs) -> dict:
|
||||||
def setEnableTranslation(*args, **kwargs) -> dict:
|
|
||||||
if config.ENABLE_TRANSLATION is False:
|
if config.ENABLE_TRANSLATION is False:
|
||||||
if model.isLoadedCTranslate2Model() is False:
|
if model.isLoadedCTranslate2Model() is False or model.isChangedTranslatorParameters() is True:
|
||||||
model.changeTranslatorCTranslate2Model()
|
try:
|
||||||
config.ENABLE_TRANSLATION = True
|
model.changeTranslatorCTranslate2Model()
|
||||||
|
model.setChangedTranslatorParameters(False)
|
||||||
|
config.ENABLE_TRANSLATION = True
|
||||||
|
except Exception as e:
|
||||||
|
# VRAM不足エラーの検出(デバイス切り替え時)
|
||||||
|
is_vram_error, error_message = model.detectVRAMError(e)
|
||||||
|
if is_vram_error:
|
||||||
|
# Defaultのデバイス設定に戻す
|
||||||
|
printLog("VRAM error detected, reverting device setting")
|
||||||
|
self.setDisableTranslation()
|
||||||
|
config.SELECTED_TRANSLATION_COMPUTE_DEVICE = copy.deepcopy(config.SELECTABLE_COMPUTE_DEVICE_LIST[0])
|
||||||
|
config.SELECTED_TRANSLATION_COMPUTE_TYPE = "auto"
|
||||||
|
self.run(200, self.run_mapping["selected_translation_compute_device"], config.SELECTED_TRANSLATION_COMPUTE_DEVICE)
|
||||||
|
self.run(200, self.run_mapping["selected_translation_compute_type"], config.SELECTED_TRANSLATION_COMPUTE_TYPE)
|
||||||
|
self.run(
|
||||||
|
400,
|
||||||
|
self.run_mapping["enable_translation"],
|
||||||
|
{
|
||||||
|
"message":"Translation disabled due to VRAM overflow",
|
||||||
|
"data": False
|
||||||
|
},
|
||||||
|
)
|
||||||
|
model.changeTranslatorCTranslate2Model()
|
||||||
|
model.setChangedTranslatorParameters(False)
|
||||||
|
else:
|
||||||
|
# その他のエラーは通常通り処理
|
||||||
|
errorLogging()
|
||||||
|
else:
|
||||||
|
config.ENABLE_TRANSLATION = True
|
||||||
return {"status":200, "result":config.ENABLE_TRANSLATION}
|
return {"status":200, "result":config.ENABLE_TRANSLATION}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -1571,17 +1584,8 @@ class Controller:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def setCtranslate2WeightType(data, *args, **kwargs) -> dict:
|
def setCtranslate2WeightType(data, *args, **kwargs) -> dict:
|
||||||
pre_weight_type = config.CTRANSLATE2_WEIGHT_TYPE
|
|
||||||
config.CTRANSLATE2_WEIGHT_TYPE = str(data)
|
config.CTRANSLATE2_WEIGHT_TYPE = str(data)
|
||||||
if model.checkTranslatorCTranslate2ModelWeight(config.CTRANSLATE2_WEIGHT_TYPE):
|
model.setChangedTranslatorParameters(True)
|
||||||
def callback():
|
|
||||||
model.changeTranslatorCTranslate2Model()
|
|
||||||
th_callback = Thread(target=callback)
|
|
||||||
th_callback.daemon = True
|
|
||||||
th_callback.start()
|
|
||||||
th_callback.join()
|
|
||||||
else:
|
|
||||||
config.CTRANSLATE2_WEIGHT_TYPE = pre_weight_type
|
|
||||||
return {"status":200, "result":config.CTRANSLATE2_WEIGHT_TYPE}
|
return {"status":200, "result":config.CTRANSLATE2_WEIGHT_TYPE}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -1590,17 +1594,8 @@ class Controller:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def setSelectedTranslationComputeType(data, *args, **kwargs) -> dict:
|
def setSelectedTranslationComputeType(data, *args, **kwargs) -> dict:
|
||||||
pre_compute_type = config.SELECTED_TRANSLATION_COMPUTE_TYPE
|
|
||||||
config.SELECTED_TRANSLATION_COMPUTE_TYPE = str(data)
|
config.SELECTED_TRANSLATION_COMPUTE_TYPE = str(data)
|
||||||
if model.checkTranslatorCTranslate2ModelWeight(config.CTRANSLATE2_WEIGHT_TYPE):
|
model.setChangedTranslatorParameters(True)
|
||||||
def callback():
|
|
||||||
model.changeTranslatorCTranslate2Model()
|
|
||||||
th_callback = Thread(target=callback)
|
|
||||||
th_callback.daemon = True
|
|
||||||
th_callback.start()
|
|
||||||
th_callback.join()
|
|
||||||
else:
|
|
||||||
config.SELECTED_TRANSLATION_COMPUTE_TYPE = pre_compute_type
|
|
||||||
return {"status":200, "result":config.SELECTED_TRANSLATION_COMPUTE_TYPE}
|
return {"status":200, "result":config.SELECTED_TRANSLATION_COMPUTE_TYPE}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|||||||
@@ -128,6 +128,12 @@ class Model:
|
|||||||
def isLoadedCTranslate2Model(self):
|
def isLoadedCTranslate2Model(self):
|
||||||
return self.translator.isLoadedCTranslate2Model()
|
return self.translator.isLoadedCTranslate2Model()
|
||||||
|
|
||||||
|
def isChangedTranslatorParameters(self):
|
||||||
|
return self.translator.isChangedTranslatorParameters()
|
||||||
|
|
||||||
|
def setChangedTranslatorParameters(self, is_changed):
|
||||||
|
self.translator.setChangedTranslatorParameters(is_changed)
|
||||||
|
|
||||||
def checkTranscriptionWhisperModelWeight(self, weight_type:str):
|
def checkTranscriptionWhisperModelWeight(self, weight_type:str):
|
||||||
return checkWhisperWeight(config.PATH_LOCAL, weight_type)
|
return checkWhisperWeight(config.PATH_LOCAL, weight_type)
|
||||||
|
|
||||||
|
|||||||
@@ -176,7 +176,7 @@ dict_google_languages = {
|
|||||||
"Belarusian":"be",
|
"Belarusian":"be",
|
||||||
"Cebuano":"ceb",
|
"Cebuano":"ceb",
|
||||||
"Esperanto":"eo",
|
"Esperanto":"eo",
|
||||||
"Basque":"eu",
|
# "Basque":"eu",
|
||||||
"Irish":"ga"
|
"Irish":"ga"
|
||||||
}
|
}
|
||||||
translation_lang["Google"] = {
|
translation_lang["Google"] = {
|
||||||
@@ -317,7 +317,7 @@ dict_ctranslate2_languages = {
|
|||||||
"Malayalam": "ml",
|
"Malayalam": "ml",
|
||||||
"Welsh": "cy",
|
"Welsh": "cy",
|
||||||
"Slovak": "sk",
|
"Slovak": "sk",
|
||||||
"Telugu": "te",
|
# "Telugu": "te",
|
||||||
"Persian": "fa",
|
"Persian": "fa",
|
||||||
"Latvian": "lv",
|
"Latvian": "lv",
|
||||||
"Bengali": "bn",
|
"Bengali": "bn",
|
||||||
@@ -328,7 +328,7 @@ dict_ctranslate2_languages = {
|
|||||||
"Estonian": "et",
|
"Estonian": "et",
|
||||||
"Macedonian": "mk",
|
"Macedonian": "mk",
|
||||||
"Breton": "br",
|
"Breton": "br",
|
||||||
"Basque": "eu",
|
# "Basque": "eu",
|
||||||
"Icelandic": "is",
|
"Icelandic": "is",
|
||||||
"Armenian": "hy",
|
"Armenian": "hy",
|
||||||
"Nepali": "ne",
|
"Nepali": "ne",
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ class Translator():
|
|||||||
self.ctranslate2_translator = None
|
self.ctranslate2_translator = None
|
||||||
self.ctranslate2_tokenizer = None
|
self.ctranslate2_tokenizer = None
|
||||||
self.is_loaded_ctranslate2_model = False
|
self.is_loaded_ctranslate2_model = False
|
||||||
|
self.is_changed_translator_parameters = False
|
||||||
self.is_enable_translators = ENABLE_TRANSLATORS
|
self.is_enable_translators = ENABLE_TRANSLATORS
|
||||||
|
|
||||||
def authenticationDeepLAuthKey(self, authkey):
|
def authenticationDeepLAuthKey(self, authkey):
|
||||||
@@ -64,6 +65,12 @@ class Translator():
|
|||||||
def isLoadedCTranslate2Model(self):
|
def isLoadedCTranslate2Model(self):
|
||||||
return self.is_loaded_ctranslate2_model
|
return self.is_loaded_ctranslate2_model
|
||||||
|
|
||||||
|
def isChangedTranslatorParameters(self):
|
||||||
|
return self.is_changed_translator_parameters
|
||||||
|
|
||||||
|
def setChangedTranslatorParameters(self, is_changed):
|
||||||
|
self.is_changed_translator_parameters = is_changed
|
||||||
|
|
||||||
def translateCTranslate2(self, message, source_language, target_language):
|
def translateCTranslate2(self, message, source_language, target_language):
|
||||||
result = False
|
result = False
|
||||||
if self.is_loaded_ctranslate2_model is True:
|
if self.is_loaded_ctranslate2_model is True:
|
||||||
|
|||||||
@@ -15,8 +15,14 @@ import { useStore_MainFunctionsStateMemory } from "@store";
|
|||||||
|
|
||||||
export const ConfigPageCloseTriggerController = () => {
|
export const ConfigPageCloseTriggerController = () => {
|
||||||
const { currentIsOpenedConfigPage } = useIsOpenedConfigPage();
|
const { currentIsOpenedConfigPage } = useIsOpenedConfigPage();
|
||||||
const { currentMainFunctionsStateMemory, updateMainFunctionsStateMemory} = useStore_MainFunctionsStateMemory();
|
|
||||||
const {
|
const {
|
||||||
|
currentMainFunctionsStateMemory,
|
||||||
|
updateMainFunctionsStateMemory,
|
||||||
|
} = useStore_MainFunctionsStateMemory();
|
||||||
|
|
||||||
|
const {
|
||||||
|
currentTranslationStatus,
|
||||||
|
setTranslation,
|
||||||
currentTranscriptionSendStatus,
|
currentTranscriptionSendStatus,
|
||||||
setTranscriptionSend,
|
setTranscriptionSend,
|
||||||
currentTranscriptionReceiveStatus,
|
currentTranscriptionReceiveStatus,
|
||||||
@@ -34,12 +40,14 @@ export const ConfigPageCloseTriggerController = () => {
|
|||||||
|
|
||||||
const memorizeLatestMainFunctionsState = () => {
|
const memorizeLatestMainFunctionsState = () => {
|
||||||
updateMainFunctionsStateMemory({
|
updateMainFunctionsStateMemory({
|
||||||
|
translation: currentTranslationStatus.data,
|
||||||
transcription_send: currentTranscriptionSendStatus.data,
|
transcription_send: currentTranscriptionSendStatus.data,
|
||||||
transcription_receive: currentTranscriptionReceiveStatus.data,
|
transcription_receive: currentTranscriptionReceiveStatus.data,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const restoreMainFunctionState = () => {
|
const restoreMainFunctionState = () => {
|
||||||
|
if (currentMainFunctionsStateMemory.data.translation === true) setTranslation(true);
|
||||||
if (currentMainFunctionsStateMemory.data.transcription_send === true) setTranscriptionSend(true);
|
if (currentMainFunctionsStateMemory.data.transcription_send === true) setTranscriptionSend(true);
|
||||||
if (currentMainFunctionsStateMemory.data.transcription_receive === true) setTranscriptionReceive(true);
|
if (currentMainFunctionsStateMemory.data.transcription_receive === true) setTranscriptionReceive(true);
|
||||||
};
|
};
|
||||||
@@ -48,6 +56,7 @@ export const ConfigPageCloseTriggerController = () => {
|
|||||||
if (currentIsOpenedConfigPage.data === true) { // When config page is opened.
|
if (currentIsOpenedConfigPage.data === true) { // When config page is opened.
|
||||||
memorizeLatestMainFunctionsState();
|
memorizeLatestMainFunctionsState();
|
||||||
unregisterAll();
|
unregisterAll();
|
||||||
|
if (currentTranslationStatus.data === true) setTranslation(false);
|
||||||
if (currentTranscriptionSendStatus.data === true) setTranscriptionSend(false);
|
if (currentTranscriptionSendStatus.data === true) setTranscriptionSend(false);
|
||||||
if (currentTranscriptionReceiveStatus.data === true) setTranscriptionReceive(false);
|
if (currentTranscriptionReceiveStatus.data === true) setTranscriptionReceive(false);
|
||||||
} else if (currentIsOpenedConfigPage.data === false) { // When config page is closed.
|
} else if (currentIsOpenedConfigPage.data === false) { // When config page is closed.
|
||||||
|
|||||||
Reference in New Issue
Block a user