[Update] Controller: Add methods for LMStudio and Ollama connection status checks

This commit is contained in:
misyaguziya
2025-11-24 18:01:30 +09:00
parent 8cc9255fd0
commit 9a35577ec6
6 changed files with 61 additions and 18 deletions

View File

@@ -1900,6 +1900,9 @@ class Controller:
} }
return response return response
def getTranslatorLMStudioConnection(self, *args, **kwargs) -> dict:
return {"status":200, "result":model.getTranslatorLMStudioConnected()}
def checkTranslatorLMStudioConnection(self, *args, **kwargs) -> dict: def checkTranslatorLMStudioConnection(self, *args, **kwargs) -> dict:
printLog("Check Translator LMStudio Connection") printLog("Check Translator LMStudio Connection")
translator_name = "LMStudio" translator_name = "LMStudio"
@@ -1937,6 +1940,10 @@ class Controller:
} }
return response return response
def getConnectedLMStudio(self, *args, **kwargs) -> dict:
is_connected = model.getTranslatorLMStudioConnectedStatus()
return {"status":200, "result": is_connected}
def getTranslatorLMStudioURL(self, *args, **kwargs) -> dict: def getTranslatorLMStudioURL(self, *args, **kwargs) -> dict:
return {"status":200, "result":config.LMSTUDIO_URL} return {"status":200, "result":config.LMSTUDIO_URL}
@@ -2015,6 +2022,9 @@ class Controller:
} }
return response return response
def getTranslatorOllamaConnection(self, *args, **kwargs) -> dict:
return {"status":200, "result":model.getTranslatorOllamaConnected()}
def checkTranslatorOllamaConnection(self, *args, **kwargs) -> dict: def checkTranslatorOllamaConnection(self, *args, **kwargs) -> dict:
printLog("Check Translator Ollama Connection") printLog("Check Translator Ollama Connection")
translator_name = "Ollama" translator_name = "Ollama"

View File

@@ -207,6 +207,7 @@ mapping = {
"/set/data/openai_auth_key": {"status": True, "variable":controller.setOpenAIAuthKey}, "/set/data/openai_auth_key": {"status": True, "variable":controller.setOpenAIAuthKey},
"/delete/data/openai_auth_key": {"status": True, "variable":controller.delOpenAIAuthKey}, "/delete/data/openai_auth_key": {"status": True, "variable":controller.delOpenAIAuthKey},
"/get/data/connected_lmstudio": {"status": True, "variable":controller.getTranslatorLMStudioConnection},
"/run/lmstudio_connection": {"status": True, "variable":controller.checkTranslatorLMStudioConnection}, "/run/lmstudio_connection": {"status": True, "variable":controller.checkTranslatorLMStudioConnection},
"/get/data/selectable_lmstudio_model_list": {"status": True, "variable":controller.getTranslatorLStudioModelList}, "/get/data/selectable_lmstudio_model_list": {"status": True, "variable":controller.getTranslatorLStudioModelList},
"/get/data/selected_lmstudio_model": {"status": True, "variable":controller.getTranslatorLMStudioModel}, "/get/data/selected_lmstudio_model": {"status": True, "variable":controller.getTranslatorLMStudioModel},
@@ -214,6 +215,7 @@ mapping = {
"/get/data/lmstudio_url": {"status": True, "variable":controller.getTranslatorLMStudioURL}, "/get/data/lmstudio_url": {"status": True, "variable":controller.getTranslatorLMStudioURL},
"/set/data/lmstudio_url": {"status": True, "variable":controller.setTranslatorLMStudioURL}, "/set/data/lmstudio_url": {"status": True, "variable":controller.setTranslatorLMStudioURL},
"/get/data/connected_ollama": {"status": True, "variable":controller.getTranslatorOllamaConnection},
"/run/ollama_connection": {"status": True, "variable":controller.checkTranslatorOllamaConnection}, "/run/ollama_connection": {"status": True, "variable":controller.checkTranslatorOllamaConnection},
"/get/data/selectable_ollama_model_list": {"status": True, "variable":controller.getTranslatorOllamaModelList}, "/get/data/selectable_ollama_model_list": {"status": True, "variable":controller.getTranslatorOllamaModelList},
"/get/data/selected_ollama_model": {"status": True, "variable":controller.getTranslatorOllamaModel}, "/get/data/selected_ollama_model": {"status": True, "variable":controller.getTranslatorOllamaModel},

View File

@@ -249,6 +249,10 @@ class Model:
self.ensure_initialized() self.ensure_initialized()
self.translator.updateOpenAIClient() self.translator.updateOpenAIClient()
def getTranslatorLMStudioConnected(self) -> bool:
self.ensure_initialized()
return self.translator.getLMStudioConnected()
def authenticationTranslatorLMStudio(self, base_url: str) -> bool: def authenticationTranslatorLMStudio(self, base_url: str) -> bool:
result = self.translator.setLMStudioClientURL(base_url=base_url, root_path=config.PATH_LOCAL) result = self.translator.setLMStudioClientURL(base_url=base_url, root_path=config.PATH_LOCAL)
return result return result
@@ -265,6 +269,10 @@ class Model:
self.ensure_initialized() self.ensure_initialized()
self.translator.updateLMStudioClient() self.translator.updateLMStudioClient()
def getTranslatorOllamaConnected(self) -> bool:
self.ensure_initialized()
return self.translator.getOllamaConnected()
def authenticationTranslatorOllama(self) -> bool: def authenticationTranslatorOllama(self) -> bool:
result = self.translator.checkOllamaClient(root_path=config.PATH_LOCAL) result = self.translator.checkOllamaClient(root_path=config.PATH_LOCAL)
return result return result

View File

@@ -1,6 +1,6 @@
from openai import OpenAI
from langchain_openai import ChatOpenAI from langchain_openai import ChatOpenAI
from pydantic import SecretStr from pydantic import SecretStr
import requests
try: try:
from .translation_languages import translation_lang from .translation_languages import translation_lang
@@ -8,33 +8,35 @@ try:
except Exception: except Exception:
import sys import sys
from os import path as os_path from os import path as os_path
sys.path.append(os_path.dirname(os_path.dirname(os_path.dirname(os_path.abspath(__file__))))) sys.path.append(os_path.dirname(os_path.abspath(__file__)))
from translation_languages import translation_lang from translation_languages import translation_lang, loadTranslationLanguages
from translation_utils import loadPromptConfig from translation_utils import loadPromptConfig
loadTranslationLanguages(path=".", force=True)
def _authentication_check(api_key: str, base_url: str | None = None) -> bool: def _authentication_check(base_url: str | None = None) -> bool:
"""Check if the provided API key is valid by attempting to list models. """Check if the provided API key is valid by attempting to list models.
""" """
try: try:
client = OpenAI(api_key=api_key, base_url=base_url) response = requests.get(f"{base_url}/models", timeout=0.2)
client.models.list() if response.status_code == 200:
return True return True
else:
return False
except Exception: except Exception:
return False return False
def _get_available_text_models(api_key: str, base_url: str | None = None) -> list[str]: def _get_available_text_models(base_url: str | None = None) -> list[str]:
"""Extract the list of available text models from the LM Studio. """Extract the list of available text models from the LM Studio.
""" """
try: try:
client = OpenAI(api_key=api_key, base_url=base_url) response = requests.get(f"{base_url}/models", timeout=0.2)
res = client.models.list() models = response.json()["data"]
models = res.data
except Exception: except Exception:
models = [] models = []
allowed_models = [] allowed_models = []
for model in models: for model in models:
allowed_models.append(model.id) allowed_models.append(model["id"])
allowed_models.sort() allowed_models.sort()
return allowed_models return allowed_models
@@ -58,13 +60,13 @@ class LMStudioClient:
return self.base_url return self.base_url
def setBaseURL(self, base_url: str | None) -> None: def setBaseURL(self, base_url: str | None) -> None:
result = _authentication_check(api_key=self.api_key, base_url=base_url) result = _authentication_check(base_url=base_url)
if result: if result:
self.base_url = base_url self.base_url = base_url
return result return result
def getModelList(self) -> list[str]: def getModelList(self) -> list[str]:
return _get_available_text_models(api_key=self.api_key, base_url=self.base_url) if self.base_url else [] return _get_available_text_models(base_url=self.base_url) if self.base_url else []
def getModel(self) -> str: def getModel(self) -> str:
return self.model return self.model
@@ -108,7 +110,7 @@ class LMStudioClient:
return content.strip() return content.strip()
if __name__ == "__main__": if __name__ == "__main__":
client = LMStudioClient(base_url="http://192.168.68.110:1234/v1") client = LMStudioClient(base_url="http://127.0.0.1:1234/v1")
models = client.getModelList() models = client.getModelList()
if models: if models:
print("Available models:", models) print("Available models:", models)

View File

@@ -7,15 +7,16 @@ try:
except Exception: except Exception:
import sys import sys
from os import path as os_path from os import path as os_path
sys.path.append(os_path.dirname(os_path.dirname(os_path.dirname(os_path.abspath(__file__))))) sys.path.append(os_path.dirname(os_path.abspath(__file__)))
from translation_languages import translation_lang from translation_languages import translation_lang, loadTranslationLanguages
from translation_utils import loadPromptConfig from translation_utils import loadPromptConfig
loadTranslationLanguages(path=".", force=True)
def _authentication_check(base_url: str | None = None) -> bool: def _authentication_check(base_url: str | None = None) -> bool:
"""Check authentication for Ollama API. """Check authentication for Ollama API.
""" """
try: try:
response = requests.get(f"{base_url}") response = requests.get(f"{base_url}", timeout=0.2)
if response.status_code == 200: if response.status_code == 200:
return True return True
else: else:

View File

@@ -176,6 +176,16 @@ class Translator:
"""Update the OpenAI client (fetch available models).""" """Update the OpenAI client (fetch available models)."""
self.openai_client.updateClient() self.openai_client.updateClient()
def getLMStudioConnected(self) -> bool:
"""Get LM Studio connection status.
Returns True if connected, False otherwise.
"""
if self.lmstudio_client is None:
return False
else:
return True
def setLMStudioClientURL(self, base_url: str | None = None, root_path: str = None) -> bool: def setLMStudioClientURL(self, base_url: str | None = None, root_path: str = None) -> bool:
"""Authenticate LM Studio with the provided base URL. """Authenticate LM Studio with the provided base URL.
@@ -207,6 +217,16 @@ class Translator:
"""Update the LM Studio client (fetch available models).""" """Update the LM Studio client (fetch available models)."""
self.lmstudio_client.updateClient() self.lmstudio_client.updateClient()
def getOllamaConnected(self) -> bool:
"""Get Ollama connection status.
Returns True if connected, False otherwise.
"""
if self.ollama_client is None:
return False
else:
return True
def checkOllamaClient(self, root_path: str = None) -> bool: def checkOllamaClient(self, root_path: str = None) -> bool:
"""Check if Ollama client is available. """Check if Ollama client is available.