Refactor translation settings and prompts

- Updated paths for translation settings in backend.spec and backend_cuda.spec to reflect new directory structure.
- Renamed loadPromptConfig to loadTranslatePromptConfig in translation utility files for consistency.
- Created new YAML files for translation prompts (gemini, groq, lmstudio, ollama, openai, openrouter, plamo) with standardized system prompts.
- Added languages.yml file to define language mappings for various translation backends.
This commit is contained in:
misyaguziya
2025-12-14 16:10:40 +09:00
parent 07bcf041b5
commit 9e88cff889
19 changed files with 40 additions and 40 deletions

View File

@@ -4,14 +4,14 @@ from langchain_google_genai import ChatGoogleGenerativeAI
try:
from .translation_languages import translation_lang
from .translation_utils import loadPromptConfig
from .translation_utils import loadTranslatePromptConfig
except Exception:
import sys
from os import path as os_path
print(os_path.dirname(os_path.dirname(os_path.dirname(os_path.abspath(__file__)))))
sys.path.append(os_path.dirname(os_path.dirname(os_path.dirname(os_path.abspath(__file__)))))
from translation_languages import translation_lang
from translation_utils import loadPromptConfig
from translation_utils import loadTranslatePromptConfig
logger = logging.getLogger("langchain_google_genai")
logger.setLevel(logging.ERROR)
@@ -57,7 +57,7 @@ class GeminiClient:
self.model = None
# プロンプト設定をYAMLファイルから読み込む
prompt_config = loadPromptConfig(root_path, "translation_gemini.yml")
prompt_config = loadTranslatePromptConfig(root_path, "translation_gemini.yml")
self.supported_languages = list(translation_lang["Gemini_API"]["source"].keys())
self.prompt_template = prompt_config["system_prompt"]

View File

@@ -4,13 +4,13 @@ from pydantic import SecretStr
try:
from .translation_languages import translation_lang
from .translation_utils import loadPromptConfig
from .translation_utils import loadTranslatePromptConfig
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, loadTranslationLanguages
from translation_utils import loadPromptConfig
from translation_utils import loadTranslatePromptConfig
translation_lang = loadTranslationLanguages(path=".", force=True)
def _authentication_check(api_key: str) -> bool:
@@ -73,7 +73,7 @@ class GroqClient:
self.model = None
self.base_url = "https://api.groq.com/openai/v1"
prompt_config = loadPromptConfig(root_path, "translation_groq.yml")
prompt_config = loadTranslatePromptConfig(root_path, "translation_groq.yml")
self.supported_languages = list(translation_lang["Groq_API"]["source"].keys())
self.prompt_template = prompt_config["system_prompt"]

View File

@@ -41,14 +41,14 @@ def _load_languages(path: str, filename: str) -> str:
Returns:
Absolute path to the resource file
"""
if os.path.exists(os.path.join(path, "_internal", "languages", "languages.yml")):
languages_path = os.path.join(path, "_internal", "languages", "languages.yml")
elif os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), "models", "translation", "languages", "languages.yml")):
languages_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "models", "translation", "languages", "languages.yml")
elif os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), "languages", "languages.yml")):
languages_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "languages", "languages.yml")
if os.path.exists(os.path.join(path, "_internal", "translation_settings", "languages", filename)):
languages_path = os.path.join(path, "_internal", "translation_settings", "languages", filename)
elif os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), "models", "translation", "translation_settings", "languages", filename)):
languages_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "models", "translation", "translation_settings", "languages", filename)
elif os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), "translation_settings", "languages", filename)):
languages_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "translation_settings", "languages", filename)
else:
raise FileNotFoundError(f"Prompt file not found: {filename}")
raise FileNotFoundError(f"Languages file not found: {filename}")
with open(languages_path, "r", encoding="utf-8") as f:
return yaml.safe_load(f)
@@ -99,7 +99,7 @@ def loadTranslationLanguages(path: str, force: bool = False) -> Dict[str, Any]:
if _loaded and not force:
return translation_lang
data = _load_languages(path, "languages/languages.yml")
data = _load_languages(path, "languages.yml")
if not isinstance(data, dict):
raise ValueError(

View File

@@ -4,13 +4,13 @@ import requests
try:
from .translation_languages import translation_lang
from .translation_utils import loadPromptConfig
from .translation_utils import loadTranslatePromptConfig
except Exception:
import sys
from os import path as os_path
sys.path.append(os_path.dirname(os_path.abspath(__file__)))
from translation_languages import translation_lang, loadTranslationLanguages
from translation_utils import loadPromptConfig
from translation_utils import loadTranslatePromptConfig
translation_lang = loadTranslationLanguages(path=".", force=True)
def _authentication_check(base_url: str | None = None) -> bool:
@@ -50,7 +50,7 @@ class LMStudioClient:
self.model = None
self.base_url = base_url # None の場合は公式エンドポイント
prompt_config = loadPromptConfig(root_path, "translation_lmstudio.yml")
prompt_config = loadTranslatePromptConfig(root_path, "translation_lmstudio.yml")
self.supported_languages = list(translation_lang["LMStudio"]["source"].keys())
self.prompt_template = prompt_config["system_prompt"]

View File

@@ -3,13 +3,13 @@ from langchain_ollama import ChatOllama
try:
from .translation_languages import translation_lang
from .translation_utils import loadPromptConfig
from .translation_utils import loadTranslatePromptConfig
except Exception:
import sys
from os import path as os_path
sys.path.append(os_path.dirname(os_path.abspath(__file__)))
from translation_languages import translation_lang, loadTranslationLanguages
from translation_utils import loadPromptConfig
from translation_utils import loadTranslatePromptConfig
translation_lang = loadTranslationLanguages(path=".", force=True)
def _authentication_check(base_url: str | None = None) -> bool:
@@ -48,7 +48,7 @@ class OllamaClient:
self.model = None
self.base_url = "http://localhost:11434"
prompt_config = loadPromptConfig(root_path, "translation_ollama.yml")
prompt_config = loadTranslatePromptConfig(root_path, "translation_ollama.yml")
self.supported_languages = list(translation_lang["Ollama"]["source"].keys())
self.prompt_template = prompt_config["system_prompt"]

View File

@@ -4,13 +4,13 @@ from pydantic import SecretStr
try:
from .translation_languages import translation_lang
from .translation_utils import loadPromptConfig
from .translation_utils import loadTranslatePromptConfig
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, loadTranslationLanguages
from translation_utils import loadPromptConfig
from translation_utils import loadTranslatePromptConfig
translation_lang = loadTranslationLanguages(path=".", force=True)
def _authentication_check(api_key: str, base_url: str | None = None) -> bool:
@@ -69,7 +69,7 @@ class OpenAIClient:
self.model = None
self.base_url = base_url # None の場合は公式エンドポイント
prompt_config = loadPromptConfig(root_path, "translation_openai.yml")
prompt_config = loadTranslatePromptConfig(root_path, "translation_openai.yml")
self.supported_languages = list(translation_lang["OpenAI_API"]["source"].keys())
self.prompt_template = prompt_config["system_prompt"]

View File

@@ -4,13 +4,13 @@ from pydantic import SecretStr
try:
from .translation_languages import translation_lang
from .translation_utils import loadPromptConfig
from .translation_utils import loadTranslatePromptConfig
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, loadTranslationLanguages
from translation_utils import loadPromptConfig
from translation_utils import loadTranslatePromptConfig
translation_lang = loadTranslationLanguages(path=".", force=True)
def _authentication_check(api_key: str) -> bool:
@@ -73,7 +73,7 @@ class OpenRouterClient:
self.model = None
self.base_url = "https://openrouter.ai/api/v1"
prompt_config = loadPromptConfig(root_path, "translation_openrouter.yml")
prompt_config = loadTranslatePromptConfig(root_path, "translation_openrouter.yml")
self.supported_languages = list(translation_lang["OpenRouter_API"]["source"].keys())
self.prompt_template = prompt_config["system_prompt"]

View File

@@ -4,13 +4,13 @@ from pydantic import SecretStr
try:
from .translation_languages import translation_lang
from .translation_utils import loadPromptConfig
from .translation_utils import loadTranslatePromptConfig
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, loadTranslationLanguages
from translation_utils import loadPromptConfig
from translation_utils import loadTranslatePromptConfig
translation_lang = loadTranslationLanguages(path=".", force=True)
BASE_URL = "https://api.platform.preferredai.jp/v1"
@@ -44,7 +44,7 @@ class PlamoClient:
self.base_url = BASE_URL
self.model = None
prompt_config = loadPromptConfig(root_path, "translation_plamo.yml")
prompt_config = loadTranslatePromptConfig(root_path, "translation_plamo.yml")
self.supported_languages = list(translation_lang["Plamo_API"]["source"].keys())
self.prompt_template = prompt_config["system_prompt"]

View File

@@ -101,16 +101,16 @@ def downloadCTranslate2Tokenizer(path: str, weight_type: str = "m2m100_418M-ct2-
tokenizer_path = os_path.join("./weights", "ctranslate2", directory_name, "tokenizer")
transformers.AutoTokenizer.from_pretrained(tokenizer, cache_dir=tokenizer_path)
def loadPromptConfig(root_path: str | None = None, prompt_filename: str | None = None) -> dict:
def loadTranslatePromptConfig(root_path: str | None = None, prompt_filename: str | None = None) -> dict:
# PyInstaller 展開後
if root_path and prompt_filename and os_path.exists(os_path.join(root_path, "_internal", "prompt", prompt_filename)):
prompt_path = os_path.join(root_path, "_internal", "prompt", prompt_filename)
if root_path and prompt_filename and os_path.exists(os_path.join(root_path, "_internal", "translation_settings", "prompt", prompt_filename)):
prompt_path = os_path.join(root_path, "_internal", "translation_settings", "prompt", prompt_filename)
# src-python 直下実行
elif prompt_filename and 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)
elif prompt_filename and os_path.exists(os_path.join(os_path.dirname(__file__), "models", "translation", "translation_settings", "prompt", prompt_filename)):
prompt_path = os_path.join(os_path.dirname(__file__), "models", "translation", "translation_settings", "prompt", prompt_filename)
# translation フォルダ直下実行
elif prompt_filename and 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)
elif prompt_filename and os_path.exists(os_path.join(os_path.dirname(__file__), "translation_settings", "prompt", prompt_filename)):
prompt_path = os_path.join(os_path.dirname(__file__), "translation_settings", "prompt", prompt_filename)
else:
raise FileNotFoundError(f"Prompt file not found: {prompt_filename}")
with open(prompt_path, "r", encoding="utf-8") as f: