[Update] Controller: Add methods for LMStudio and Ollama connection status checks
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
@@ -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},
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user