🐛[bugfix] controller: offline時の処理を追加

This commit is contained in:
misyaguziya
2025-02-06 18:29:07 +09:00
parent 69d9e9bad3
commit 78d79f4a54
6 changed files with 155 additions and 54 deletions

View File

@@ -237,6 +237,15 @@ class Config:
if isinstance(value, dict): if isinstance(value, dict):
self._SELECTABLE_TRANSLATION_ENGINE_STATUS = value self._SELECTABLE_TRANSLATION_ENGINE_STATUS = value
@property
def SELECTABLE_TRANSCRIPTION_ENGINE_STATUS(self):
return self._SELECTABLE_TRANSCRIPTION_ENGINE_STATUS
@SELECTABLE_TRANSCRIPTION_ENGINE_STATUS.setter
def SELECTABLE_TRANSCRIPTION_ENGINE_STATUS(self, value):
if isinstance(value, dict):
self._SELECTABLE_TRANSCRIPTION_ENGINE_STATUS = value
# Save Json Data # Save Json Data
## Main Window ## Main Window
@property @property
@@ -977,6 +986,9 @@ class Config:
self._SELECTABLE_TRANSLATION_ENGINE_STATUS = {} self._SELECTABLE_TRANSLATION_ENGINE_STATUS = {}
for engine in self.SELECTABLE_TRANSLATION_ENGINE_LIST: for engine in self.SELECTABLE_TRANSLATION_ENGINE_LIST:
self._SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = False self._SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = False
self._SELECTABLE_TRANSCRIPTION_ENGINE_STATUS = {}
for engine in self.SELECTABLE_TRANSCRIPTION_ENGINE_LIST:
self._SELECTABLE_TRANSCRIPTION_ENGINE_STATUS[engine] = False
# Save Json Data # Save Json Data
## Main Window ## Main Window

View File

@@ -6,7 +6,7 @@ import re
from device_manager import device_manager from device_manager import device_manager
from config import config from config import config
from model import model from model import model
from utils import removeLog, printLog, errorLogging from utils import removeLog, printLog, errorLogging, isConnectedNetwork
class Controller: class Controller:
def __init__(self) -> None: def __init__(self) -> None:
@@ -25,6 +25,18 @@ class Controller:
self.run = run self.run = run
# response functions # response functions
def connectedNetwork(self) -> None:
self.run(
200,
self.run_mapping["connected_network"],
)
def disconnectedNetwork(self) -> None:
self.run(
200,
self.run_mapping["disconnected_network"],
)
def updateMicHostList(self) -> None: def updateMicHostList(self) -> None:
self.run( self.run(
200, 200,
@@ -148,15 +160,25 @@ class Controller:
) )
def downloaded(self) -> None: def downloaded(self) -> None:
weight_type_dict = config.SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_DICT if model.checkTranslatorCTranslate2ModelWeight(self.weight_type) is True:
weight_type_dict[self.weight_type] = True weight_type_dict = config.SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_DICT
config.SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_DICT = weight_type_dict weight_type_dict[self.weight_type] = True
config.SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_DICT = weight_type_dict
self.run( self.run(
200, 200,
self.run_mapping["downloaded_ctranslate2_weight"], self.run_mapping["downloaded_ctranslate2_weight"],
self.weight_type, self.weight_type,
) )
else:
self.run(
400,
self.run_mapping["error_ctranslate2_weight"],
{
"message":"CTranslate2 weight download error",
"data": None
},
)
class DownloadWhisper: class DownloadWhisper:
def __init__(self, run_mapping:dict, weight_type:str, run:Callable[[int, str, Any], None]) -> None: def __init__(self, run_mapping:dict, weight_type:str, run:Callable[[int, str, Any], None]) -> None:
@@ -173,15 +195,25 @@ class Controller:
) )
def downloaded(self) -> None: def downloaded(self) -> None:
weight_type_dict = config.SELECTABLE_WHISPER_WEIGHT_TYPE_DICT if model.checkTranscriptionWhisperModelWeight(self.weight_type) is True:
weight_type_dict[self.weight_type] = True weight_type_dict = config.SELECTABLE_WHISPER_WEIGHT_TYPE_DICT
config.SELECTABLE_WHISPER_WEIGHT_TYPE_DICT = weight_type_dict weight_type_dict[self.weight_type] = True
config.SELECTABLE_WHISPER_WEIGHT_TYPE_DICT = weight_type_dict
self.run( self.run(
200, 200,
self.run_mapping["downloaded_whisper_weight"], self.run_mapping["downloaded_whisper_weight"],
self.weight_type, self.weight_type,
) )
else:
self.run(
400,
self.run_mapping["error_whisper_weight"],
{
"message":"Whisper weight download error",
"data": None
},
)
def micMessage(self, result: dict) -> None: def micMessage(self, result: dict) -> None:
message = result["text"] message = result["text"]
@@ -541,6 +573,11 @@ class Controller:
self.updateTranslationEngineAndEngineList() self.updateTranslationEngineAndEngineList()
return {"status":200, "result":config.SELECTED_TARGET_LANGUAGES} return {"status":200, "result":config.SELECTED_TARGET_LANGUAGES}
@staticmethod
def getTranscriptionEngines(*args, **kwargs) -> dict:
engines = [key for key, value in config.SELECTABLE_TRANSCRIPTION_ENGINE_STATUS.items() if value is True]
return {"status":200, "result":engines}
@staticmethod @staticmethod
def getSelectedTranscriptionEngine(*args, **kwargs) -> dict: def getSelectedTranscriptionEngine(*args, **kwargs) -> dict:
return {"status":200, "result":config.SELECTED_TRANSCRIPTION_ENGINE} return {"status":200, "result":config.SELECTED_TRANSCRIPTION_ENGINE}
@@ -1665,6 +1702,11 @@ class Controller:
def init(self, *args, **kwargs) -> None: def init(self, *args, **kwargs) -> None:
removeLog() removeLog()
printLog("Start Initialization") printLog("Start Initialization")
connected_network = isConnectedNetwork()
if connected_network is True:
self.connectedNetwork()
else:
self.disconnectedNetwork()
printLog("Init Translation Engine Status") printLog("Init Translation Engine Status")
for engine in config.SELECTABLE_TRANSLATION_ENGINE_LIST: for engine in config.SELECTABLE_TRANSLATION_ENGINE_LIST:
@@ -1680,9 +1722,6 @@ class Controller:
auth_keys = config.AUTH_KEYS auth_keys = config.AUTH_KEYS
auth_keys[engine] = None auth_keys[engine] = None
config.AUTH_KEYS = auth_keys config.AUTH_KEYS = auth_keys
case _:
config.SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = True
self.initializationProgress(1) self.initializationProgress(1)
# download CTranslate2 Model Weight # download CTranslate2 Model Weight
@@ -1708,6 +1747,31 @@ class Controller:
if isinstance(th_download_whisper, Thread): if isinstance(th_download_whisper, Thread):
th_download_whisper.join() th_download_whisper.join()
for engine in config.SELECTABLE_TRANSLATION_ENGINE_LIST:
match engine:
case "CTranslate2":
if model.checkTranslatorCTranslate2ModelWeight(config.CTRANSLATE2_WEIGHT_TYPE) is True:
config.SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = True
else:
config.SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = False
case _:
if connected_network is True:
config.SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = True
else:
config.SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = False
for engine in config.SELECTABLE_TRANSCRIPTION_ENGINE_LIST:
match engine:
case "Whisper":
if model.checkTranscriptionWhisperModelWeight(config.WHISPER_WEIGHT_TYPE) is True:
config.SELECTABLE_TRANSCRIPTION_ENGINE_STATUS[engine] = True
else:
config.SELECTABLE_TRANSCRIPTION_ENGINE_STATUS[engine] = False
case _:
if connected_network is True:
config.SELECTABLE_TRANSCRIPTION_ENGINE_STATUS[engine] = True
else:
config.SELECTABLE_TRANSCRIPTION_ENGINE_STATUS[engine] = False
self.initializationProgress(2) self.initializationProgress(2)
# set Translation Engine # set Translation Engine

View File

@@ -8,6 +8,9 @@ from controller import Controller
from utils import printLog, printResponse, errorLogging, encodeBase64 from utils import printLog, printResponse, errorLogging, encodeBase64
run_mapping = { run_mapping = {
"connected_network":"/run/connected_network",
"disconnected_network":"/run/disconnected_network",
"transcription_mic":"/run/transcription_send_mic_message", "transcription_mic":"/run/transcription_send_mic_message",
"transcription_speaker":"/run/transcription_receive_speaker_message", "transcription_speaker":"/run/transcription_receive_speaker_message",
@@ -20,8 +23,10 @@ run_mapping = {
"download_progress_ctranslate2_weight":"/run/download_progress_ctranslate2_weight", "download_progress_ctranslate2_weight":"/run/download_progress_ctranslate2_weight",
"downloaded_ctranslate2_weight":"/run/downloaded_ctranslate2_weight", "downloaded_ctranslate2_weight":"/run/downloaded_ctranslate2_weight",
"error_ctranslate2_weight":"/run/error_ctranslate2_weight",
"download_progress_whisper_weight":"/run/download_progress_whisper_weight", "download_progress_whisper_weight":"/run/download_progress_whisper_weight",
"downloaded_whisper_weight":"/run/downloaded_whisper_weight", "downloaded_whisper_weight":"/run/downloaded_whisper_weight",
"error_whisper_weight":"/run/error_whisper_weight",
"selected_mic_device":"/run/selected_mic_device", "selected_mic_device":"/run/selected_mic_device",
"selected_speaker_device":"/run/selected_speaker_device", "selected_speaker_device":"/run/selected_speaker_device",
@@ -79,6 +84,7 @@ mapping = {
"/get/data/selected_target_languages": {"status": True, "variable":controller.getSelectedTargetLanguages}, "/get/data/selected_target_languages": {"status": True, "variable":controller.getSelectedTargetLanguages},
"/set/data/selected_target_languages": {"status": True, "variable":controller.setSelectedTargetLanguages}, "/set/data/selected_target_languages": {"status": True, "variable":controller.setSelectedTargetLanguages},
"/get/data/transcription_engines": {"status": False, "variable":controller.getTranscriptionEngines},
"/get/data/selected_transcription_engine": {"status": False, "variable":controller.getSelectedTranscriptionEngine}, "/get/data/selected_transcription_engine": {"status": False, "variable":controller.getSelectedTranscriptionEngine},
"/set/data/selected_transcription_engine": {"status": False, "variable":controller.setSelectedTranscriptionEngine}, "/set/data/selected_transcription_engine": {"status": False, "variable":controller.setSelectedTranscriptionEngine},

View File

@@ -80,7 +80,7 @@ class Model:
self.speaker_transcriber = None self.speaker_transcriber = None
self.speaker_energy_recorder = None self.speaker_energy_recorder = None
self.speaker_energy_plot_progressbar = None self.speaker_energy_plot_progressbar = None
self.previous_send_message = "" self.previous_send_message = ""
self.previous_receive_message = "" self.previous_receive_message = ""
self.translator = Translator() self.translator = Translator()

View File

@@ -1,6 +1,11 @@
from os import path as os_path from os import path as os_path
from deepl import Translator as deepl_Translator from deepl import Translator as deepl_Translator
from translators import translate_text as other_web_Translator try:
from translators import translate_text as other_web_Translator
ENABLE_TRANSLATORS = True
except Exception:
ENABLE_TRANSLATORS = False
from .translation_languages import translation_lang from .translation_languages import translation_lang
from .translation_utils import ctranslate2_weights from .translation_utils import ctranslate2_weights
@@ -18,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_enable_translators = ENABLE_TRANSLATORS
def authenticationDeepLAuthKey(self, authkey): def authenticationDeepLAuthKey(self, authkey):
result = True result = True
@@ -97,42 +103,47 @@ class Translator():
source_language, target_language = self.getLanguageCode(translator_name, target_country, source_language, target_language) source_language, target_language = self.getLanguageCode(translator_name, target_country, source_language, target_language)
match translator_name: match translator_name:
case "DeepL": case "DeepL":
result = other_web_Translator( if self.is_enable_translators is True:
query_text=message, result = other_web_Translator(
translator="deepl", query_text=message,
from_language=source_language, translator="deepl",
to_language=target_language, from_language=source_language,
) to_language=target_language,
)
case "DeepL_API": case "DeepL_API":
if self.deepl_client is None: if self.is_enable_translators is True:
result = False if self.deepl_client is None:
else: result = False
result = self.deepl_client.translate_text( else:
message, result = self.deepl_client.translate_text(
source_lang=source_language, message,
target_lang=target_language, source_lang=source_language,
).text target_lang=target_language,
).text
case "Google": case "Google":
result = other_web_Translator( if self.is_enable_translators is True:
query_text=message, result = other_web_Translator(
translator="google", query_text=message,
from_language=source_language, translator="google",
to_language=target_language, from_language=source_language,
) to_language=target_language,
)
case "Bing": case "Bing":
result = other_web_Translator( if self.is_enable_translators is True:
query_text=message, result = other_web_Translator(
translator="bing", query_text=message,
from_language=source_language, translator="bing",
to_language=target_language, from_language=source_language,
) to_language=target_language,
)
case "Papago": case "Papago":
result = other_web_Translator( if self.is_enable_translators is True:
query_text=message, result = other_web_Translator(
translator="papago", query_text=message,
from_language=source_language, translator="papago",
to_language=target_language, from_language=source_language,
) to_language=target_language,
)
case "CTranslate2": case "CTranslate2":
result = self.translateCTranslate2( result = self.translateCTranslate2(
message=message, message=message,

View File

@@ -6,6 +6,14 @@ import logging
from logging.handlers import RotatingFileHandler from logging.handlers import RotatingFileHandler
from ctranslate2 import get_supported_compute_types from ctranslate2 import get_supported_compute_types
import requests
def isConnectedNetwork(url="http://www.google.com", timeout=3):
try:
response = requests.get(url, timeout=timeout)
return response.status_code == 200
except requests.RequestException:
return False
def getBestComputeType(device, device_index) -> str: def getBestComputeType(device, device_index) -> str:
compute_types = get_supported_compute_types(device, device_index) compute_types = get_supported_compute_types(device, device_index)