LMStudio 接続チェックとモデル選択処理を追加・強化、mainloop にエンドポイント追加、LMStudio/Ollama のモデル取得を例外耐性化
- Controller に checkTranslatorLMStudioConnection を追加し、接続成功時に SELECTABLE_TRANSLATION_ENGINE_STATUS や SELECTABLE_LMSTUDIO_MODEL_LIST を更新、選択モデルのフォールバック設定・クライアント更新・UI 更新呼び出しを行うよう実装 - setTranslatorLMStudioURL を接続成功時にモデルリスト/ステータス更新や選択モデルのフォールバック処理を行うよう拡張 - checkTranslatorOllamaConnection 成功時にも SELECTABLE_TRANSLATION_ENGINE_STATUS/モデルリスト更新、選択モデルフォールバック、クライアント更新、UI 更新呼び出しを追加 - mainloop に /get/data/lmstudio_connection エンドポイントを追加して LMStudio 接続チェックを公開 - translation_lmstudio.py と translation_ollama.py のモデル取得処理を try/except で保護し、例外時は空リストを返すよう修正(接続失敗やレスポンス異常に対する耐性向上)
This commit is contained in:
@@ -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 = {
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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.
|
||||
"""
|
||||
try:
|
||||
client = OpenAI(api_key=api_key, base_url=base_url)
|
||||
res = client.models.list()
|
||||
allowed_models = []
|
||||
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()
|
||||
|
||||
@@ -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.
|
||||
"""
|
||||
try:
|
||||
response = requests.get(f"{base_url}/api/tags")
|
||||
models = response.json()["models"]
|
||||
except Exception:
|
||||
models = []
|
||||
|
||||
allowed_models = []
|
||||
for model in models:
|
||||
|
||||
Reference in New Issue
Block a user