From 5ca809c8dd92cdd86a7e43e84ef26c0555c87053 Mon Sep 17 00:00:00 2001 From: misyaguziya <53165965+misyaguziya@users.noreply.github.com> Date: Sun, 23 Nov 2025 00:59:09 +0900 Subject: [PATCH] [Update] Config: Add model revalidation logic to ensure selected models are valid based on available options. --- src-python/config.py | 43 +++++++++++++++++++++++++++++++++++----- src-python/controller.py | 3 +++ 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src-python/config.py b/src-python/config.py index c841b2ae..55a46122 100644 --- a/src-python/config.py +++ b/src-python/config.py @@ -527,6 +527,19 @@ def _compute_device_validator(val, inst): return copy.deepcopy(val) return None +def _allowed_in_populated(list_attr_name: str): + def _inner(value, inst): + try: + lst = getattr(inst, list_attr_name) + except Exception: + return True # インスタンス状態取得失敗時も弾かない + if not lst: # 空/未初期化 + return True + if value is None: + return True + return value in lst + return _inner + class Config: """Application configuration singleton. @@ -719,11 +732,11 @@ class Config: USE_EXCLUDE_WORDS = ManagedProperty('USE_EXCLUDE_WORDS', type_=bool) CTRANSLATE2_WEIGHT_TYPE = ManagedProperty('CTRANSLATE2_WEIGHT_TYPE', type_=str, allowed=lambda v, inst: v in inst.SELECTABLE_CTRANSLATE2_WEIGHT_TYPE_LIST) WHISPER_WEIGHT_TYPE = ManagedProperty('WHISPER_WEIGHT_TYPE', type_=str, allowed=lambda v, inst: v in inst.SELECTABLE_WHISPER_WEIGHT_TYPE_LIST) - SELECTED_PLAMO_MODEL = ManagedProperty('SELECTED_PLAMO_MODEL', type_=str, allowed=lambda v, inst: v in inst.SELECTABLE_PLAMO_MODEL_LIST) - SELECTED_GEMINI_MODEL = ManagedProperty('SELECTED_GEMINI_MODEL', type_=str, allowed=lambda v, inst: v in inst.SELECTABLE_GEMINI_MODEL_LIST) - SELECTED_OPENAI_MODEL = ManagedProperty('SELECTED_OPENAI_MODEL', type_=str, allowed=lambda v, inst: v in inst.SELECTABLE_OPENAI_MODEL_LIST) - SELECTED_LMSTUDIO_MODEL = ManagedProperty('SELECTED_LMSTUDIO_MODEL', type_=str, allowed=lambda v, inst: v in inst.SELECTABLE_LMSTUDIO_MODEL_LIST) - SELECTED_OLLAMA_MODEL = ManagedProperty('SELECTED_OLLAMA_MODEL', type_=str, allowed=lambda v, inst: v in inst.SELECTABLE_OLLAMA_MODEL_LIST) + SELECTED_PLAMO_MODEL = ManagedProperty('SELECTED_PLAMO_MODEL', type_=str, allowed=_allowed_in_populated('SELECTABLE_PLAMO_MODEL_LIST')) + SELECTED_GEMINI_MODEL = ManagedProperty('SELECTED_GEMINI_MODEL', type_=str, allowed=_allowed_in_populated('SELECTABLE_GEMINI_MODEL_LIST')) + SELECTED_OPENAI_MODEL = ManagedProperty('SELECTED_OPENAI_MODEL', type_=str, allowed=_allowed_in_populated('SELECTABLE_OPENAI_MODEL_LIST')) + SELECTED_LMSTUDIO_MODEL = ManagedProperty('SELECTED_LMSTUDIO_MODEL', type_=str, allowed=_allowed_in_populated('SELECTABLE_LMSTUDIO_MODEL_LIST')) + SELECTED_OLLAMA_MODEL = ManagedProperty('SELECTED_OLLAMA_MODEL', type_=str, allowed=_allowed_in_populated('SELECTABLE_OLLAMA_MODEL_LIST')) # --- Translation and language settings --- MIC_WORD_FILTER = ValidatedProperty('MIC_WORD_FILTER', _mic_word_filter_validator) @@ -1033,6 +1046,26 @@ class Config: errorLogging() self.saveConfigToFile() + def revalidate_selected_models(self): + pairs = [ + ('SELECTED_PLAMO_MODEL', 'SELECTABLE_PLAMO_MODEL_LIST'), + ('SELECTED_GEMINI_MODEL', 'SELECTABLE_GEMINI_MODEL_LIST'), + ('SELECTED_OPENAI_MODEL', 'SELECTABLE_OPENAI_MODEL_LIST'), + ('SELECTED_LMSTUDIO_MODEL', 'SELECTABLE_LMSTUDIO_MODEL_LIST'), + ('SELECTED_OLLAMA_MODEL', 'SELECTABLE_OLLAMA_MODEL_LIST'), + ] + for sel_attr, list_attr in pairs: + try: + current = getattr(self, sel_attr) + lst = getattr(self, list_attr) + if lst and current is not None and current not in lst: + if len(lst) > 0: + setattr(self, sel_attr, lst[0]) + else: + setattr(self, sel_attr, None) + except Exception: + errorLogging() + # Auto-register all descriptors after Config class definition _auto_register_descriptors() diff --git a/src-python/controller.py b/src-python/controller.py index db326cb2..2f3aa530 100644 --- a/src-python/controller.py +++ b/src-python/controller.py @@ -3138,6 +3138,9 @@ class Controller: model.stopWebSocketServer() printLog("WebSocket server host or port is not available") + printLog("Revalidate Selected Models") + config.revalidate_selected_models() + printLog("Update settings") self.updateConfigSettings()