LMStudio と Ollama の翻訳バックエンドを追加・統合。
- config: SELECTABLE_/SELECTED_ の LMStudio/Ollama 項目と LMSTUDIO_URL を追加。 - Controller: LMStudio/Ollama の認証チェック、URL取得/設定、モデル一覧取得/設定のエンドポイントを実装。 - Model/Translator: LMStudio/Ollama 用の認証・モデル一覧・モデル設定・クライアント更新メソッドを追加し、翻訳処理の選択肢に対応。 - translation_* クライアント: 各クライアントでのプロンプト読み込み処理を共通化し、translation_utils.loadPromptConfig を利用するようにリファクタ。 - translation_languages: LMStudio/Ollama 用の言語マッピングを追加。
This commit is contained in:
@@ -1,8 +1,14 @@
|
||||
from openai import OpenAI
|
||||
from langchain_openai import ChatOpenAI
|
||||
from pydantic import SecretStr
|
||||
import yaml
|
||||
from os import path as os_path
|
||||
|
||||
try:
|
||||
from .translation_utils import loadPromptConfig
|
||||
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_utils import loadPromptConfig
|
||||
|
||||
def _authentication_check(api_key: str, base_url: str | None = None) -> bool:
|
||||
"""Check if the provided API key is valid by attempting to list models.
|
||||
@@ -27,22 +33,6 @@ def _get_available_text_models(api_key: str, base_url: str | None = None) -> lis
|
||||
allowed_models.sort()
|
||||
return allowed_models
|
||||
|
||||
def _load_prompt_config(root_path: str = None) -> dict:
|
||||
prompt_filename = "translation_lmstudio.yml"
|
||||
# PyInstaller 展開後
|
||||
if root_path and os_path.exists(os_path.join(root_path, "_internal", "prompt", prompt_filename)):
|
||||
prompt_path = os_path.join(root_path, "_internal", "prompt", prompt_filename)
|
||||
# src-python 直下実行
|
||||
elif os_path.exists(os_path.join(os_path.dirname(__file__), "models", "translation", "prompt", prompt_filename)):
|
||||
prompt_path = os_path.join(os_path.dirname(__file__), "models", "translation", "prompt", prompt_filename)
|
||||
# translation フォルダ直下実行
|
||||
elif os_path.exists(os_path.join(os_path.dirname(__file__), "prompt", prompt_filename)):
|
||||
prompt_path = os_path.join(os_path.dirname(__file__), "prompt", prompt_filename)
|
||||
else:
|
||||
raise FileNotFoundError(f"Prompt file not found: {prompt_filename}")
|
||||
with open(prompt_path, "r", encoding="utf-8") as f:
|
||||
return yaml.safe_load(f)
|
||||
|
||||
class LMStudioClient:
|
||||
"""LM Studio Translation simple wrapper.
|
||||
prompt/translation_lmstudio.yml から system_prompt / supported_languages を読み込む。
|
||||
@@ -52,7 +42,7 @@ class LMStudioClient:
|
||||
self.model = None
|
||||
self.base_url = base_url # None の場合は公式エンドポイント
|
||||
|
||||
prompt_config = _load_prompt_config(root_path)
|
||||
prompt_config = loadPromptConfig(root_path, "translation_lmstudio.yml")
|
||||
self.supported_languages = prompt_config["supported_languages"]
|
||||
self.prompt_template = prompt_config["system_prompt"]
|
||||
|
||||
@@ -112,13 +102,11 @@ class LMStudioClient:
|
||||
return content.strip()
|
||||
|
||||
if __name__ == "__main__":
|
||||
AUTH_KEY = "lm-studio"
|
||||
client = LMStudioClient(base_url="http://192.168.68.110:1234/v1")
|
||||
models = client.getModelList()
|
||||
print(models)
|
||||
# if models:
|
||||
# print("Available models:", models)
|
||||
# model = input("Select a model: ")
|
||||
client.setModel("google/gemma-3n-e4b")
|
||||
client.updateClient()
|
||||
print(client.translate("こんにちは世界", "Japanese", "English"))
|
||||
if models:
|
||||
print("Available models:", models)
|
||||
model = input("Select a model: ")
|
||||
client.setModel(model)
|
||||
client.updateClient()
|
||||
print(client.translate("こんにちは世界", "Japanese", "English"))
|
||||
Reference in New Issue
Block a user