From 9e88cff88916f2033266068f70d4e3c2c046c795 Mon Sep 17 00:00:00 2001 From: misyaguziya <53165965+misyaguziya@users.noreply.github.com> Date: Sun, 14 Dec 2025 16:10:40 +0900 Subject: [PATCH] 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. --- spec/backend.spec | 4 ++-- spec/backend_cuda.spec | 4 ++-- .../models/translation/translation_gemini.py | 6 +++--- .../models/translation/translation_groq.py | 6 +++--- .../models/translation/translation_languages.py | 16 ++++++++-------- .../models/translation/translation_lmstudio.py | 6 +++--- .../models/translation/translation_ollama.py | 6 +++--- .../models/translation/translation_openai.py | 6 +++--- .../models/translation/translation_openrouter.py | 6 +++--- .../models/translation/translation_plamo.py | 6 +++--- .../languages/languages.yml | 0 .../prompt/translation_gemini.yml | 0 .../prompt/translation_groq.yml | 0 .../prompt/translation_lmstudio.yml | 0 .../prompt/translation_ollama.yml | 0 .../prompt/translation_openai.yml | 0 .../prompt/translation_openrouter.yml | 0 .../prompt/translation_plamo.yml | 0 .../models/translation/translation_utils.py | 14 +++++++------- 19 files changed, 40 insertions(+), 40 deletions(-) rename src-python/models/translation/{ => translation_settings}/languages/languages.yml (100%) rename src-python/models/translation/{ => translation_settings}/prompt/translation_gemini.yml (100%) rename src-python/models/translation/{ => translation_settings}/prompt/translation_groq.yml (100%) rename src-python/models/translation/{ => translation_settings}/prompt/translation_lmstudio.yml (100%) rename src-python/models/translation/{ => translation_settings}/prompt/translation_ollama.yml (100%) rename src-python/models/translation/{ => translation_settings}/prompt/translation_openai.yml (100%) rename src-python/models/translation/{ => translation_settings}/prompt/translation_openrouter.yml (100%) rename src-python/models/translation/{ => translation_settings}/prompt/translation_plamo.yml (100%) diff --git a/spec/backend.spec b/spec/backend.spec index 57d72f6f..786d7233 100644 --- a/spec/backend.spec +++ b/spec/backend.spec @@ -7,8 +7,8 @@ a = Analysis( binaries=[], datas=[ ('./../src-python/models/overlay/fonts', 'fonts/'), - ('./../src-python/models/translation/prompt', 'prompt/'), - ('./../src-python/models/translation/languages', 'languages/'), + ('./../src-python/models/translation/translation_settings/prompt', 'translation_settings/prompt/'), + ('./../src-python/models/translation/translation_settings/languages', 'translation_settings/languages/'), ('./../.venv/Lib/site-packages/zeroconf', 'zeroconf/'), ('./../.venv/Lib/site-packages/openvr', 'openvr/'), ('./../.venv/Lib/site-packages/faster_whisper', 'faster_whisper/'), diff --git a/spec/backend_cuda.spec b/spec/backend_cuda.spec index 3d665926..0fc561f5 100644 --- a/spec/backend_cuda.spec +++ b/spec/backend_cuda.spec @@ -7,8 +7,8 @@ a = Analysis( binaries=[], datas=[ ('./../src-python/models/overlay/fonts', 'fonts/'), - ('./../src-python/models/translation/prompt', 'prompt/'), - ('./../src-python/models/translation/languages', 'languages/'), + ('./../src-python/models/translation/translation_settings/prompt', 'prompt/'), + ('./../src-python/models/translation/translation_settings/languages', 'languages/'), ('./../.venv_cuda/Lib/site-packages/zeroconf', 'zeroconf/'), ('./../.venv_cuda/Lib/site-packages/openvr', 'openvr/'), ('./../.venv_cuda/Lib/site-packages/faster_whisper', 'faster_whisper/'), diff --git a/src-python/models/translation/translation_gemini.py b/src-python/models/translation/translation_gemini.py index 1c8a0161..9683ba9a 100644 --- a/src-python/models/translation/translation_gemini.py +++ b/src-python/models/translation/translation_gemini.py @@ -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"] diff --git a/src-python/models/translation/translation_groq.py b/src-python/models/translation/translation_groq.py index 04c57dbe..34d1a6f8 100644 --- a/src-python/models/translation/translation_groq.py +++ b/src-python/models/translation/translation_groq.py @@ -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"] diff --git a/src-python/models/translation/translation_languages.py b/src-python/models/translation/translation_languages.py index eccd5665..311bbd95 100644 --- a/src-python/models/translation/translation_languages.py +++ b/src-python/models/translation/translation_languages.py @@ -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( diff --git a/src-python/models/translation/translation_lmstudio.py b/src-python/models/translation/translation_lmstudio.py index 16ff9545..43a36620 100644 --- a/src-python/models/translation/translation_lmstudio.py +++ b/src-python/models/translation/translation_lmstudio.py @@ -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"] diff --git a/src-python/models/translation/translation_ollama.py b/src-python/models/translation/translation_ollama.py index 543e603a..f2f7ba6b 100644 --- a/src-python/models/translation/translation_ollama.py +++ b/src-python/models/translation/translation_ollama.py @@ -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"] diff --git a/src-python/models/translation/translation_openai.py b/src-python/models/translation/translation_openai.py index cc09a90e..ce70bb09 100644 --- a/src-python/models/translation/translation_openai.py +++ b/src-python/models/translation/translation_openai.py @@ -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"] diff --git a/src-python/models/translation/translation_openrouter.py b/src-python/models/translation/translation_openrouter.py index cec7aee3..f192dc6d 100644 --- a/src-python/models/translation/translation_openrouter.py +++ b/src-python/models/translation/translation_openrouter.py @@ -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"] diff --git a/src-python/models/translation/translation_plamo.py b/src-python/models/translation/translation_plamo.py index 68d68754..6adc3143 100644 --- a/src-python/models/translation/translation_plamo.py +++ b/src-python/models/translation/translation_plamo.py @@ -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"] diff --git a/src-python/models/translation/languages/languages.yml b/src-python/models/translation/translation_settings/languages/languages.yml similarity index 100% rename from src-python/models/translation/languages/languages.yml rename to src-python/models/translation/translation_settings/languages/languages.yml diff --git a/src-python/models/translation/prompt/translation_gemini.yml b/src-python/models/translation/translation_settings/prompt/translation_gemini.yml similarity index 100% rename from src-python/models/translation/prompt/translation_gemini.yml rename to src-python/models/translation/translation_settings/prompt/translation_gemini.yml diff --git a/src-python/models/translation/prompt/translation_groq.yml b/src-python/models/translation/translation_settings/prompt/translation_groq.yml similarity index 100% rename from src-python/models/translation/prompt/translation_groq.yml rename to src-python/models/translation/translation_settings/prompt/translation_groq.yml diff --git a/src-python/models/translation/prompt/translation_lmstudio.yml b/src-python/models/translation/translation_settings/prompt/translation_lmstudio.yml similarity index 100% rename from src-python/models/translation/prompt/translation_lmstudio.yml rename to src-python/models/translation/translation_settings/prompt/translation_lmstudio.yml diff --git a/src-python/models/translation/prompt/translation_ollama.yml b/src-python/models/translation/translation_settings/prompt/translation_ollama.yml similarity index 100% rename from src-python/models/translation/prompt/translation_ollama.yml rename to src-python/models/translation/translation_settings/prompt/translation_ollama.yml diff --git a/src-python/models/translation/prompt/translation_openai.yml b/src-python/models/translation/translation_settings/prompt/translation_openai.yml similarity index 100% rename from src-python/models/translation/prompt/translation_openai.yml rename to src-python/models/translation/translation_settings/prompt/translation_openai.yml diff --git a/src-python/models/translation/prompt/translation_openrouter.yml b/src-python/models/translation/translation_settings/prompt/translation_openrouter.yml similarity index 100% rename from src-python/models/translation/prompt/translation_openrouter.yml rename to src-python/models/translation/translation_settings/prompt/translation_openrouter.yml diff --git a/src-python/models/translation/prompt/translation_plamo.yml b/src-python/models/translation/translation_settings/prompt/translation_plamo.yml similarity index 100% rename from src-python/models/translation/prompt/translation_plamo.yml rename to src-python/models/translation/translation_settings/prompt/translation_plamo.yml diff --git a/src-python/models/translation/translation_utils.py b/src-python/models/translation/translation_utils.py index 8c3e4e46..23f24b15 100644 --- a/src-python/models/translation/translation_utils.py +++ b/src-python/models/translation/translation_utils.py @@ -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: