[Update] Controller: Add methods for LMStudio and Ollama connection status checks
This commit is contained in:
@@ -1900,6 +1900,9 @@ class Controller:
|
||||
}
|
||||
return response
|
||||
|
||||
def getTranslatorLMStudioConnection(self, *args, **kwargs) -> dict:
|
||||
return {"status":200, "result":model.getTranslatorLMStudioConnected()}
|
||||
|
||||
def checkTranslatorLMStudioConnection(self, *args, **kwargs) -> dict:
|
||||
printLog("Check Translator LMStudio Connection")
|
||||
translator_name = "LMStudio"
|
||||
@@ -1937,6 +1940,10 @@ class Controller:
|
||||
}
|
||||
return response
|
||||
|
||||
def getConnectedLMStudio(self, *args, **kwargs) -> dict:
|
||||
is_connected = model.getTranslatorLMStudioConnectedStatus()
|
||||
return {"status":200, "result": is_connected}
|
||||
|
||||
def getTranslatorLMStudioURL(self, *args, **kwargs) -> dict:
|
||||
return {"status":200, "result":config.LMSTUDIO_URL}
|
||||
|
||||
@@ -2015,6 +2022,9 @@ class Controller:
|
||||
}
|
||||
return response
|
||||
|
||||
def getTranslatorOllamaConnection(self, *args, **kwargs) -> dict:
|
||||
return {"status":200, "result":model.getTranslatorOllamaConnected()}
|
||||
|
||||
def checkTranslatorOllamaConnection(self, *args, **kwargs) -> dict:
|
||||
printLog("Check Translator Ollama Connection")
|
||||
translator_name = "Ollama"
|
||||
|
||||
@@ -207,6 +207,7 @@ mapping = {
|
||||
"/set/data/openai_auth_key": {"status": True, "variable":controller.setOpenAIAuthKey},
|
||||
"/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},
|
||||
"/get/data/selectable_lmstudio_model_list": {"status": True, "variable":controller.getTranslatorLStudioModelList},
|
||||
"/get/data/selected_lmstudio_model": {"status": True, "variable":controller.getTranslatorLMStudioModel},
|
||||
@@ -214,6 +215,7 @@ mapping = {
|
||||
"/get/data/lmstudio_url": {"status": True, "variable":controller.getTranslatorLMStudioURL},
|
||||
"/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},
|
||||
"/get/data/selectable_ollama_model_list": {"status": True, "variable":controller.getTranslatorOllamaModelList},
|
||||
"/get/data/selected_ollama_model": {"status": True, "variable":controller.getTranslatorOllamaModel},
|
||||
|
||||
@@ -249,6 +249,10 @@ class Model:
|
||||
self.ensure_initialized()
|
||||
self.translator.updateOpenAIClient()
|
||||
|
||||
def getTranslatorLMStudioConnected(self) -> bool:
|
||||
self.ensure_initialized()
|
||||
return self.translator.getLMStudioConnected()
|
||||
|
||||
def authenticationTranslatorLMStudio(self, base_url: str) -> bool:
|
||||
result = self.translator.setLMStudioClientURL(base_url=base_url, root_path=config.PATH_LOCAL)
|
||||
return result
|
||||
@@ -265,6 +269,10 @@ class Model:
|
||||
self.ensure_initialized()
|
||||
self.translator.updateLMStudioClient()
|
||||
|
||||
def getTranslatorOllamaConnected(self) -> bool:
|
||||
self.ensure_initialized()
|
||||
return self.translator.getOllamaConnected()
|
||||
|
||||
def authenticationTranslatorOllama(self) -> bool:
|
||||
result = self.translator.checkOllamaClient(root_path=config.PATH_LOCAL)
|
||||
return result
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from openai import OpenAI
|
||||
from langchain_openai import ChatOpenAI
|
||||
from pydantic import SecretStr
|
||||
import requests
|
||||
|
||||
try:
|
||||
from .translation_languages import translation_lang
|
||||
@@ -8,33 +8,35 @@ try:
|
||||
except Exception:
|
||||
import sys
|
||||
from os import path as os_path
|
||||
sys.path.append(os_path.dirname(os_path.dirname(os_path.dirname(os_path.abspath(__file__)))))
|
||||
from translation_languages import translation_lang
|
||||
sys.path.append(os_path.dirname(os_path.abspath(__file__)))
|
||||
from translation_languages import translation_lang, loadTranslationLanguages
|
||||
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.
|
||||
"""
|
||||
try:
|
||||
client = OpenAI(api_key=api_key, base_url=base_url)
|
||||
client.models.list()
|
||||
response = requests.get(f"{base_url}/models", timeout=0.2)
|
||||
if response.status_code == 200:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
except Exception:
|
||||
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.
|
||||
"""
|
||||
try:
|
||||
client = OpenAI(api_key=api_key, base_url=base_url)
|
||||
res = client.models.list()
|
||||
models = res.data
|
||||
response = requests.get(f"{base_url}/models", timeout=0.2)
|
||||
models = response.json()["data"]
|
||||
except Exception:
|
||||
models = []
|
||||
|
||||
allowed_models = []
|
||||
for model in models:
|
||||
allowed_models.append(model.id)
|
||||
allowed_models.append(model["id"])
|
||||
|
||||
allowed_models.sort()
|
||||
return allowed_models
|
||||
@@ -58,13 +60,13 @@ class LMStudioClient:
|
||||
return self.base_url
|
||||
|
||||
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:
|
||||
self.base_url = base_url
|
||||
return result
|
||||
|
||||
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:
|
||||
return self.model
|
||||
@@ -108,7 +110,7 @@ class LMStudioClient:
|
||||
return content.strip()
|
||||
|
||||
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()
|
||||
if models:
|
||||
print("Available models:", models)
|
||||
|
||||
@@ -7,15 +7,16 @@ try:
|
||||
except Exception:
|
||||
import sys
|
||||
from os import path as os_path
|
||||
sys.path.append(os_path.dirname(os_path.dirname(os_path.dirname(os_path.abspath(__file__)))))
|
||||
from translation_languages import translation_lang
|
||||
sys.path.append(os_path.dirname(os_path.abspath(__file__)))
|
||||
from translation_languages import translation_lang, loadTranslationLanguages
|
||||
from translation_utils import loadPromptConfig
|
||||
loadTranslationLanguages(path=".", force=True)
|
||||
|
||||
def _authentication_check(base_url: str | None = None) -> bool:
|
||||
"""Check authentication for Ollama API.
|
||||
"""
|
||||
try:
|
||||
response = requests.get(f"{base_url}")
|
||||
response = requests.get(f"{base_url}", timeout=0.2)
|
||||
if response.status_code == 200:
|
||||
return True
|
||||
else:
|
||||
|
||||
@@ -176,6 +176,16 @@ class Translator:
|
||||
"""Update the OpenAI client (fetch available models)."""
|
||||
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:
|
||||
"""Authenticate LM Studio with the provided base URL.
|
||||
|
||||
@@ -207,6 +217,16 @@ class Translator:
|
||||
"""Update the LM Studio client (fetch available models)."""
|
||||
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:
|
||||
"""Check if Ollama client is available.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user