diff --git a/src-python/controller.py b/src-python/controller.py index 136f807c..f8ce770c 100644 --- a/src-python/controller.py +++ b/src-python/controller.py @@ -1877,16 +1877,59 @@ class Controller: } return response + def checkTranslatorLMStudioConnection(self, *args, **kwargs) -> dict: + printLog("Check Translator LMStudio Connection") + translator_name = "LMStudio" + try: + result = model.authenticationTranslatorLMStudio() + if result is True: + config.SELECTABLE_TRANSLATION_ENGINE_STATUS[translator_name] = True + config.SELECTABLE_LMSTUDIO_MODEL_LIST = model.getTranslatorLMStudioModelList() + self.run(200, self.run_mapping["selectable_lmstudio_model_list"], config.SELECTABLE_LMSTUDIO_MODEL_LIST) + if config.SELECTED_LMSTUDIO_MODEL not in config.SELECTABLE_LMSTUDIO_MODEL_LIST: + config.SELECTED_LMSTUDIO_MODEL = config.SELECTABLE_LMSTUDIO_MODEL_LIST[0] + self.run(200, self.run_mapping["selected_lmstudio_model"], config.SELECTED_LMSTUDIO_MODEL) + model.updateTranslatorLMStudioClient() + self.updateTranslationEngineAndEngineList() + response = {"status":200, "result":True} + else: + response = { + "status":400, + "result":{ + "message":"Cannot connect to LMStudio server", + "data": False + } + } + except Exception as e: + errorLogging() + response = { + "status":400, + "result":{ + "message":f"Error {e}", + "data": False + } + } + return response + def getTranslatorLMStudioURL(self, *args, **kwargs) -> dict: return {"status":200, "result":config.LMSTUDIO_URL} def setTranslatorLMStudioURL(self, data, *args, **kwargs) -> dict: printLog("Set Translator LMStudio URL", data) + translator_name = "LMStudio" try: data = str(data) result = model.authenticationTranslatorLMStudio(base_url=data) if result is True: config.LMSTUDIO_URL = data + config.SELECTABLE_TRANSLATION_ENGINE_STATUS[translator_name] = True + config.SELECTABLE_LMSTUDIO_MODEL_LIST = model.getTranslatorLMStudioModelList() + self.run(200, self.run_mapping["selectable_lmstudio_model_list"], config.SELECTABLE_LMSTUDIO_MODEL_LIST) + if config.SELECTED_LMSTUDIO_MODEL not in config.SELECTABLE_LMSTUDIO_MODEL_LIST: + config.SELECTED_LMSTUDIO_MODEL = config.SELECTABLE_LMSTUDIO_MODEL_LIST[0] + self.run(200, self.run_mapping["selected_lmstudio_model"], config.SELECTED_LMSTUDIO_MODEL) + model.updateTranslatorLMStudioClient() + self.updateTranslationEngineAndEngineList() response = {"status":200, "result":config.LMSTUDIO_URL} else: response = { @@ -1943,9 +1986,18 @@ class Controller: def checkTranslatorOllamaConnection(self, *args, **kwargs) -> dict: printLog("Check Translator Ollama Connection") + translator_name = "Ollama" try: result = model.authenticationTranslatorOllama() if result is True: + config.SELECTABLE_TRANSLATION_ENGINE_STATUS[translator_name] = True + config.SELECTABLE_OLLAMA_MODEL_LIST = model.getTranslatorOllamaModelList() + self.run(200, self.run_mapping["selectable_ollama_model_list"], config.SELECTABLE_OLLAMA_MODEL_LIST) + if config.SELECTED_OLLAMA_MODEL not in config.SELECTABLE_OLLAMA_MODEL_LIST: + config.SELECTED_OLLAMA_MODEL = config.SELECTABLE_OLLAMA_MODEL_LIST[0] + self.run(200, self.run_mapping["selected_ollama_model"], config.SELECTED_OLLAMA_MODEL) + model.updateTranslatorOllamaClient() + self.updateTranslationEngineAndEngineList() response = {"status":200, "result":True} else: response = { diff --git a/src-python/mainloop.py b/src-python/mainloop.py index 4e77104b..21e194bc 100644 --- a/src-python/mainloop.py +++ b/src-python/mainloop.py @@ -206,6 +206,7 @@ mapping = { "/set/data/openai_auth_key": {"status": True, "variable":controller.setOpenAIAuthKey}, "/delete/data/openai_auth_key": {"status": True, "variable":controller.delOpenAIAuthKey}, + "/get/data/lmstudio_connection": {"status": True, "variable":controller.checkTranslatorLMStudioConnection}, "/get/data/lmstudio_model_list": {"status": True, "variable":controller.getTranslatorLStudioModelList}, "/get/data/lmstudio_model": {"status": True, "variable":controller.getTranslatorLMStudioModel}, "/set/data/lmstudio_model": {"status": True, "variable":controller.setTranslatorLMStudioModel}, diff --git a/src-python/models/translation/translation_lmstudio.py b/src-python/models/translation/translation_lmstudio.py index 34319075..7751dc16 100644 --- a/src-python/models/translation/translation_lmstudio.py +++ b/src-python/models/translation/translation_lmstudio.py @@ -25,11 +25,15 @@ def _authentication_check(api_key: str, base_url: str | None = None) -> bool: def _get_available_text_models(api_key: str, base_url: str | None = None) -> list[str]: """Extract the list of available text models from the LM Studio. """ - client = OpenAI(api_key=api_key, base_url=base_url) - res = client.models.list() - allowed_models = [] + try: + client = OpenAI(api_key=api_key, base_url=base_url) + res = client.models.list() + models = res.data + except Exception: + models = [] - for model in res.data: + allowed_models = [] + for model in models: allowed_models.append(model.id) allowed_models.sort() diff --git a/src-python/models/translation/translation_ollama.py b/src-python/models/translation/translation_ollama.py index 2d56aaee..6dd1f2fb 100644 --- a/src-python/models/translation/translation_ollama.py +++ b/src-python/models/translation/translation_ollama.py @@ -26,8 +26,11 @@ def _authentication_check(base_url: str | None = None) -> bool: def _get_available_text_models(base_url: str | None = None) -> list[str]: """Extract available text models from Ollama. """ - response = requests.get(f"{base_url}/api/tags") - models = response.json()["models"] + try: + response = requests.get(f"{base_url}/api/tags") + models = response.json()["models"] + except Exception: + models = [] allowed_models = [] for model in models: