From c18748f6bc7978e00f6dbb2f28e67f5a5cc0648d Mon Sep 17 00:00:00 2001 From: misyaguziya <53165965+misyaguziya@users.noreply.github.com> Date: Thu, 16 Oct 2025 21:55:27 +0900 Subject: [PATCH] =?UTF-8?q?=E7=BF=BB=E8=A8=B3=E3=83=A2=E3=83=87=E3=83=AB?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=82=92=20SELECTED=5F*=20=E3=81=AB=E7=B5=B1?= =?UTF-8?q?=E4=B8=80=E3=81=97=E3=80=81Controller=20=E3=81=A8=20UI=20?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E3=81=AE=E9=80=A3=E6=90=BA=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - config: PLAMO_MODEL/GEMINI_MODEL/OPENAI_MODEL を SELECTED_PLAMO_MODEL/SELECTED_GEMINI_MODEL/SELECTED_OPENAI_MODEL にリネーム - JSON シリアライズキーも SELECTED_* に変更 - 初期化フィールドを新キーに合わせて修正 - controller: すべての参照を新しい SELECTED_* プロパティへ置換 - モデル一覧取得時に run コールバックで selectable リストを通知 - 選択モデルを更新した際に run コールバックで選択状態を通知 - モデル更新・クライアント再構築処理の呼び出しを保持 - mainloop: GUI 更新用の run_mapping に selectable/selected のモデル関連エンドポイントを追加 --- src-python/config.py | 46 ++++++++++++------------- src-python/controller.py | 72 ++++++++++++++++++++-------------------- src-python/mainloop.py | 7 ++++ 3 files changed, 66 insertions(+), 59 deletions(-) diff --git a/src-python/config.py b/src-python/config.py index 96376397..ffbc8844 100644 --- a/src-python/config.py +++ b/src-python/config.py @@ -922,39 +922,39 @@ class Config: self.saveConfig(inspect.currentframe().f_code.co_name, value) @property - @json_serializable('PLAMO_MODEL') - def PLAMO_MODEL(self): - return self._PLAMO_MODEL + @json_serializable('SELECTED_PLAMO_MODEL') + def SELECTED_PLAMO_MODEL(self): + return self._SELECTED_PLAMO_MODEL - @PLAMO_MODEL.setter - def PLAMO_MODEL(self, value): + @SELECTED_PLAMO_MODEL.setter + def SELECTED_PLAMO_MODEL(self, value): if isinstance(value, str): if value in self.SELECTABLE_PLAMO_MODEL_LIST: - self._PLAMO_MODEL = value + self._SELECTED_PLAMO_MODEL = value self.saveConfig(inspect.currentframe().f_code.co_name, value) @property @json_serializable('GEMINI_MODEL') - def GEMINI_MODEL(self): - return self._GEMINI_MODEL + def SELECTED_GEMINI_MODEL(self): + return self._SELECTED_GEMINI_MODEL - @GEMINI_MODEL.setter - def GEMINI_MODEL(self, value): + @SELECTED_GEMINI_MODEL.setter + def SELECTED_GEMINI_MODEL(self, value): if isinstance(value, str): if value in self.SELECTABLE_GEMINI_MODEL_LIST: - self._GEMINI_MODEL = value + self._SELECTED_GEMINI_MODEL = value self.saveConfig(inspect.currentframe().f_code.co_name, value) @property - @json_serializable('OPENAI_MODEL') - def OPENAI_MODEL(self): - return self._OPENAI_MODEL + @json_serializable('SELECTED_OPENAI_MODEL') + def SELECTED_OPENAI_MODEL(self): + return self._SELECTED_OPENAI_MODEL - @OPENAI_MODEL.setter - def OPENAI_MODEL(self, value): + @SELECTED_OPENAI_MODEL.setter + def SELECTED_OPENAI_MODEL(self, value): if isinstance(value, str): if value in self.SELECTABLE_OPENAI_MODEL_LIST: - self._OPENAI_MODEL = value + self._SELECTED_OPENAI_MODEL = value self.saveConfig(inspect.currentframe().f_code.co_name, value) @property @@ -1181,9 +1181,6 @@ class Config: self._SELECTABLE_TRANSCRIPTION_ENGINE_LIST = list(transcription_lang[first_key].values())[0].keys() except Exception: self._SELECTABLE_TRANSCRIPTION_ENGINE_LIST = [] - self._SELECTABLE_PLAMO_MODEL_LIST = [] - self._SELECTABLE_GEMINI_MODEL_LIST = [] - self._SELECTABLE_OPENAI_MODEL_LIST = [] self._SELECTABLE_UI_LANGUAGE_LIST = ["en", "ja", "ko", "zh-Hant", "zh-Hans"] self._COMPUTE_MODE = "cuda" if torch.cuda.is_available() else "cpu" self._SELECTABLE_COMPUTE_DEVICE_LIST = getComputeDeviceList() @@ -1234,6 +1231,9 @@ class Config: self._SELECTABLE_TRANSCRIPTION_ENGINE_STATUS = {} for engine in self.SELECTABLE_TRANSCRIPTION_ENGINE_LIST: self._SELECTABLE_TRANSCRIPTION_ENGINE_STATUS[engine] = False + self._SELECTABLE_PLAMO_MODEL_LIST = [] + self._SELECTABLE_GEMINI_MODEL_LIST = [] + self._SELECTABLE_OPENAI_MODEL_LIST = [] # Save Json Data ## Main Window @@ -1341,9 +1341,9 @@ class Config: self._SELECTED_TRANSLATION_COMPUTE_DEVICE = copy.deepcopy(self.SELECTABLE_COMPUTE_DEVICE_LIST[0]) self._SELECTED_TRANSCRIPTION_COMPUTE_DEVICE = copy.deepcopy(self.SELECTABLE_COMPUTE_DEVICE_LIST[0]) self._CTRANSLATE2_WEIGHT_TYPE = "m2m100_418M-ct2-int8" - self._PLAMO_MODEL = None - self._GEMINI_MODEL = None - self._OPENAI_MODEL = None + self._SELECTED_PLAMO_MODEL = None + self._SELECTED_GEMINI_MODEL = None + self._SELECTED_OPENAI_MODEL = None self._SELECTED_TRANSLATION_COMPUTE_TYPE = "auto" self._WHISPER_WEIGHT_TYPE = "base" self._SELECTED_TRANSCRIPTION_COMPUTE_TYPE = "auto" diff --git a/src-python/controller.py b/src-python/controller.py index e3b788a2..f4c1e094 100644 --- a/src-python/controller.py +++ b/src-python/controller.py @@ -1622,10 +1622,10 @@ class Controller: config.AUTH_KEYS = auth_keys config.SELECTABLE_TRANSLATION_ENGINE_STATUS[translator_name] = True config.SELECTABLE_PLAMO_MODEL_LIST = model.getTranslatorPlamoModelList() - # ここにrunが必要 - if config.PLAMO_MODEL not in config.SELECTABLE_PLAMO_MODEL_LIST: - config.PLAMO_MODEL = config.SELECTABLE_PLAMO_MODEL_LIST[0] - # ここにrunが必要 + self.run(200, self.run_mapping["selectable_plamo_model_list"], config.SELECTABLE_PLAMO_MODEL_LIST) + if config.SELECTED_PLAMO_MODEL not in config.SELECTABLE_PLAMO_MODEL_LIST: + config.SELECTED_PLAMO_MODEL = config.SELECTABLE_PLAMO_MODEL_LIST[0] + self.run(200, self.run_mapping["selected_plamo_model"], config.SELECTED_PLAMO_MODEL) model.updateTranslatorPlamoClient() self.updateTranslationEngineAndEngineList() response = {"status":200, "result":config.AUTH_KEYS[translator_name]} @@ -1669,7 +1669,7 @@ class Controller: return {"status":200, "result": config.SELECTABLE_PLAMO_MODEL_LIST} def getPlamoModel(self, *args, **kwargs) -> dict: - return {"status":200, "result":config.PLAMO_MODEL} + return {"status":200, "result":config.SELECTED_PLAMO_MODEL} def setPlamoModel(self, data, *args, **kwargs) -> dict: printLog("Set Plamo Model", data) @@ -1677,15 +1677,15 @@ class Controller: data = str(data) result = model.setTranslatorPlamoModel(model=data) if result is True: - config.PLAMO_MODEL = data + config.SELECTED_PLAMO_MODEL = data model.updateTranslatorPlamoClient() - response = {"status":200, "result":config.PLAMO_MODEL} + response = {"status":200, "result":config.SELECTED_PLAMO_MODEL} else: response = { "status":400, "result":{ "message":"Plamo model is not valid", - "data": config.PLAMO_MODEL + "data": config.SELECTED_PLAMO_MODEL } } except Exception as e: @@ -1694,7 +1694,7 @@ class Controller: "status":400, "result":{ "message":f"Error {e}", - "data": config.PLAMO_MODEL + "data": config.SELECTED_PLAMO_MODEL } } return response @@ -1716,10 +1716,10 @@ class Controller: config.AUTH_KEYS = auth_keys config.SELECTABLE_TRANSLATION_ENGINE_STATUS[translator_name] = True config.SELECTABLE_GEMINI_MODEL_LIST = model.getTranslatorGeminiModelList() - # ここにrunが必要 - if config.GEMINI_MODEL not in config.SELECTABLE_GEMINI_MODEL_LIST: - config.GEMINI_MODEL = config.SELECTABLE_GEMINI_MODEL_LIST[0] - # ここにrunが必要 + self.run(200, self.run_mapping["selectable_gemini_model_list"], config.SELECTABLE_GEMINI_MODEL_LIST) + if config.SELECTED_GEMINI_MODEL not in config.SELECTABLE_GEMINI_MODEL_LIST: + config.SELECTED_GEMINI_MODEL = config.SELECTABLE_GEMINI_MODEL_LIST[0] + self.run(200, self.run_mapping["selected_gemini_model"], config.SELECTED_GEMINI_MODEL) model.updateTranslatorGeminiClient() self.updateTranslationEngineAndEngineList() response = {"status":200, "result":config.AUTH_KEYS[translator_name]} @@ -1763,7 +1763,7 @@ class Controller: return {"status":200, "result": config.SELECTABLE_GEMINI_MODEL_LIST} def getGeminiModel(self, *args, **kwargs) -> dict: - return {"status":200, "result":config.GEMINI_MODEL} + return {"status":200, "result":config.SELECTED_GEMINI_MODEL} def setGeminiModel(self, data, *args, **kwargs) -> dict: printLog("Set Gemini Model", data) @@ -1771,15 +1771,15 @@ class Controller: data = str(data) result = model.setTranslatorGeminiModel(model=data) if result is True: - config.GEMINI_MODEL = data + config.SELECTED_GEMINI_MODEL = data model.updateTranslatorGeminiClient() - response = {"status":200, "result":config.GEMINI_MODEL} + response = {"status":200, "result":config.SELECTED_GEMINI_MODEL} else: response = { "status":400, "result":{ "message":"Gemini model is not valid", - "data": config.GEMINI_MODEL + "data": config.SELECTED_GEMINI_MODEL } } except Exception as e: @@ -1788,7 +1788,7 @@ class Controller: "status":400, "result":{ "message":f"Error {e}", - "data": config.GEMINI_MODEL + "data": config.SELECTED_GEMINI_MODEL } } return response @@ -1809,10 +1809,10 @@ class Controller: config.AUTH_KEYS = auth_keys config.SELECTABLE_TRANSLATION_ENGINE_STATUS[translator_name] = True config.SELECTABLE_OPENAI_MODEL_LIST = model.getTranslatorOpenAIModelList() - # ここにrunが必要 - if config.OPENAI_MODEL not in config.SELECTABLE_OPENAI_MODEL_LIST: - config.OPENAI_MODEL = config.SELECTABLE_OPENAI_MODEL_LIST[0] - # ここにrunが必要 + self.run(200, self.run_mapping["selectable_openai_model_list"], config.SELECTABLE_OPENAI_MODEL_LIST) + if config.SELECTED_OPENAI_MODEL not in config.SELECTABLE_OPENAI_MODEL_LIST: + config.SELECTED_OPENAI_MODEL = config.SELECTABLE_OPENAI_MODEL_LIST[0] + self.run(200, self.run_mapping["selected_openai_model"], config.SELECTED_OPENAI_MODEL) model.updateTranslatorOpenAIClient() self.updateTranslationEngineAndEngineList() response = {"status":200, "result":config.AUTH_KEYS[translator_name]} @@ -1848,7 +1848,7 @@ class Controller: return {"status":200, "result": config.SELECTABLE_OPENAI_MODEL_LIST} def getOpenAIModel(self, *args, **kwargs) -> dict: - return {"status":200, "result":config.OPENAI_MODEL} + return {"status":200, "result":config.SELECTED_OPENAI_MODEL} def setOpenAIModel(self, data, *args, **kwargs) -> dict: printLog("Set OpenAI Model", data) @@ -1856,14 +1856,14 @@ class Controller: data = str(data) result = model.setTranslatorOpenAIModel(model=data) if result is True: - config.OPENAI_MODEL = data - response = {"status":200, "result":config.OPENAI_MODEL} + config.SELECTED_OPENAI_MODEL = data + response = {"status":200, "result":config.SELECTED_OPENAI_MODEL} else: response = { "status":400, "result":{ "message":"OpenAI model is not valid", - "data": config.OPENAI_MODEL + "data": config.SELECTED_OPENAI_MODEL } } except Exception as e: @@ -1872,7 +1872,7 @@ class Controller: "status":400, "result":{ "message":f"Error {e}", - "data": config.OPENAI_MODEL + "data": config.SELECTED_OPENAI_MODEL } } return response @@ -2759,9 +2759,9 @@ class Controller: config.SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = True printLog("Plamo API Key is valid") config.SELECTABLE_PLAMO_MODEL_LIST = model.getTranslatorPlamoModelList() - if config.PLAMO_MODEL not in config.SELECTABLE_PLAMO_MODEL_LIST: - config.PLAMO_MODEL = config.SELECTABLE_PLAMO_MODEL_LIST[0] - model.setTranslatorPlamoModel(config.PLAMO_MODEL) + if config.SELECTED_PLAMO_MODEL not in config.SELECTABLE_PLAMO_MODEL_LIST: + config.SELECTED_PLAMO_MODEL = config.SELECTABLE_PLAMO_MODEL_LIST[0] + model.setTranslatorPlamoModel(config.SELECTED_PLAMO_MODEL) model.updateTranslatorPlamoClient() else: # error update Auth key @@ -2777,9 +2777,9 @@ class Controller: config.SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = True printLog("Gemini API Key is valid") config.SELECTABLE_GEMINI_MODEL_LIST = model.getTranslatorGeminiModelList() - if config.GEMINI_MODEL not in config.SELECTABLE_GEMINI_MODEL_LIST: - config.GEMINI_MODEL = config.SELECTABLE_GEMINI_MODEL_LIST[0] - model.setTranslatorGeminiModel(config.GEMINI_MODEL) + if config.SELECTED_GEMINI_MODEL not in config.SELECTABLE_GEMINI_MODEL_LIST: + config.SELECTED_GEMINI_MODEL = config.SELECTABLE_GEMINI_MODEL_LIST[0] + model.setTranslatorGeminiModel(config.SELECTED_GEMINI_MODEL) model.updateTranslatorGeminiClient() else: # error update Auth key @@ -2795,9 +2795,9 @@ class Controller: config.SELECTABLE_TRANSLATION_ENGINE_STATUS[engine] = True printLog("OpenAI API Key is valid") config.SELECTABLE_OPENAI_MODEL_LIST = model.getTranslatorOpenAIModelList() - if config.OPENAI_MODEL not in config.SELECTABLE_OPENAI_MODEL_LIST: - config.OPENAI_MODEL = config.SELECTABLE_OPENAI_MODEL_LIST[0] - model.setTranslatorOpenAIModel(config.OPENAI_MODEL) + if config.SELECTED_OPENAI_MODEL not in config.SELECTABLE_OPENAI_MODEL_LIST: + config.SELECTED_OPENAI_MODEL = config.SELECTABLE_OPENAI_MODEL_LIST[0] + model.setTranslatorOpenAIModel(config.SELECTED_OPENAI_MODEL) model.updateTranslatorOpenAIClient() else: # error update Auth key diff --git a/src-python/mainloop.py b/src-python/mainloop.py index cfedaecd..e5dbc735 100644 --- a/src-python/mainloop.py +++ b/src-python/mainloop.py @@ -51,6 +51,13 @@ run_mapping = { "selected_translation_compute_type":"/run/selected_translation_compute_type", "selected_transcription_compute_type":"/run/selected_transcription_compute_type", + "selectable_plamo_model_list":"/run/selectable_plamo_model_list", + "selected_plamo_model":"/run/selected_plamo_model", + "selectable_gemini_model_list":"/run/selectable_gemini_model_list", + "selected_gemini_model":"/run/selected_gemini_model", + "selectable_openai_model_list":"/run/selectable_openai_model_list", + "selected_openai_model":"/run/selected_openai_model", + "mic_host_list":"/run/mic_host_list", "mic_device_list":"/run/mic_device_list", "speaker_device_list":"/run/speaker_device_list",