翻訳モデル設定を SELECTED_* に統一し、Controller と UI 更新の連携を追加

- 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 のモデル関連エンドポイントを追加
This commit is contained in:
misyaguziya
2025-10-16 21:55:27 +09:00
parent a862805a05
commit c18748f6bc
3 changed files with 66 additions and 59 deletions

View File

@@ -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"

View File

@@ -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

View File

@@ -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",