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

@@ -7,8 +7,8 @@ a = Analysis(
binaries=[], binaries=[],
datas=[ datas=[
('./../src-python/models/overlay/fonts', 'fonts/'), ('./../src-python/models/overlay/fonts', 'fonts/'),
('./../src-python/models/translation/prompt', 'prompt/'), ('./../src-python/models/translation/translation_settings/prompt', 'translation_settings/prompt/'),
('./../src-python/models/translation/languages', 'languages/'), ('./../src-python/models/translation/translation_settings/languages', 'translation_settings/languages/'),
('./../.venv/Lib/site-packages/zeroconf', 'zeroconf/'), ('./../.venv/Lib/site-packages/zeroconf', 'zeroconf/'),
('./../.venv/Lib/site-packages/openvr', 'openvr/'), ('./../.venv/Lib/site-packages/openvr', 'openvr/'),
('./../.venv/Lib/site-packages/faster_whisper', 'faster_whisper/'), ('./../.venv/Lib/site-packages/faster_whisper', 'faster_whisper/'),

View File

@@ -7,8 +7,8 @@ a = Analysis(
binaries=[], binaries=[],
datas=[ datas=[
('./../src-python/models/overlay/fonts', 'fonts/'), ('./../src-python/models/overlay/fonts', 'fonts/'),
('./../src-python/models/translation/prompt', 'prompt/'), ('./../src-python/models/translation/translation_settings/prompt', 'prompt/'),
('./../src-python/models/translation/languages', 'languages/'), ('./../src-python/models/translation/translation_settings/languages', 'languages/'),
('./../.venv_cuda/Lib/site-packages/zeroconf', 'zeroconf/'), ('./../.venv_cuda/Lib/site-packages/zeroconf', 'zeroconf/'),
('./../.venv_cuda/Lib/site-packages/openvr', 'openvr/'), ('./../.venv_cuda/Lib/site-packages/openvr', 'openvr/'),
('./../.venv_cuda/Lib/site-packages/faster_whisper', 'faster_whisper/'), ('./../.venv_cuda/Lib/site-packages/faster_whisper', 'faster_whisper/'),

View File

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

View File

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

View File

@@ -41,14 +41,14 @@ def _load_languages(path: str, filename: str) -> str:
Returns: Returns:
Absolute path to the resource file Absolute path to the resource file
""" """
if os.path.exists(os.path.join(path, "_internal", "languages", "languages.yml")): if os.path.exists(os.path.join(path, "_internal", "translation_settings", "languages", filename)):
languages_path = os.path.join(path, "_internal", "languages", "languages.yml") 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", "languages", "languages.yml")): 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", "languages", "languages.yml") 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__)), "languages", "languages.yml")): 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__)), "languages", "languages.yml") languages_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "translation_settings", "languages", filename)
else: 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: with open(languages_path, "r", encoding="utf-8") as f:
return yaml.safe_load(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: if _loaded and not force:
return translation_lang return translation_lang
data = _load_languages(path, "languages/languages.yml") data = _load_languages(path, "languages.yml")
if not isinstance(data, dict): if not isinstance(data, dict):
raise ValueError( raise ValueError(

View File

@@ -4,13 +4,13 @@ import requests
try: try:
from .translation_languages import translation_lang from .translation_languages import translation_lang
from .translation_utils import loadPromptConfig from .translation_utils import loadTranslatePromptConfig
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.abspath(__file__))) sys.path.append(os_path.dirname(os_path.abspath(__file__)))
from translation_languages import translation_lang, loadTranslationLanguages from translation_languages import translation_lang, loadTranslationLanguages
from translation_utils import loadPromptConfig from translation_utils import loadTranslatePromptConfig
translation_lang = loadTranslationLanguages(path=".", force=True) translation_lang = loadTranslationLanguages(path=".", force=True)
def _authentication_check(base_url: str | None = None) -> bool: def _authentication_check(base_url: str | None = None) -> bool:
@@ -50,7 +50,7 @@ class LMStudioClient:
self.model = None self.model = None
self.base_url = base_url # 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.supported_languages = list(translation_lang["LMStudio"]["source"].keys())
self.prompt_template = prompt_config["system_prompt"] self.prompt_template = prompt_config["system_prompt"]

View File

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

View File

@@ -4,13 +4,13 @@ from pydantic import SecretStr
try: try:
from .translation_languages import translation_lang from .translation_languages import translation_lang
from .translation_utils import loadPromptConfig from .translation_utils import loadTranslatePromptConfig
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.dirname(os_path.dirname(os_path.abspath(__file__)))))
from translation_languages import translation_lang, loadTranslationLanguages from translation_languages import translation_lang, loadTranslationLanguages
from translation_utils import loadPromptConfig from translation_utils import loadTranslatePromptConfig
translation_lang = loadTranslationLanguages(path=".", force=True) translation_lang = loadTranslationLanguages(path=".", force=True)
def _authentication_check(api_key: str, base_url: str | None = None) -> bool: def _authentication_check(api_key: str, base_url: str | None = None) -> bool:
@@ -69,7 +69,7 @@ class OpenAIClient:
self.model = None self.model = None
self.base_url = base_url # 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.supported_languages = list(translation_lang["OpenAI_API"]["source"].keys())
self.prompt_template = prompt_config["system_prompt"] self.prompt_template = prompt_config["system_prompt"]

View File

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

View File

@@ -4,13 +4,13 @@ from pydantic import SecretStr
try: try:
from .translation_languages import translation_lang from .translation_languages import translation_lang
from .translation_utils import loadPromptConfig from .translation_utils import loadTranslatePromptConfig
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.dirname(os_path.dirname(os_path.abspath(__file__)))))
from translation_languages import translation_lang, loadTranslationLanguages from translation_languages import translation_lang, loadTranslationLanguages
from translation_utils import loadPromptConfig from translation_utils import loadTranslatePromptConfig
translation_lang = loadTranslationLanguages(path=".", force=True) translation_lang = loadTranslationLanguages(path=".", force=True)
BASE_URL = "https://api.platform.preferredai.jp/v1" BASE_URL = "https://api.platform.preferredai.jp/v1"
@@ -44,7 +44,7 @@ class PlamoClient:
self.base_url = BASE_URL self.base_url = BASE_URL
self.model = None 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.supported_languages = list(translation_lang["Plamo_API"]["source"].keys())
self.prompt_template = prompt_config["system_prompt"] 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") tokenizer_path = os_path.join("./weights", "ctranslate2", directory_name, "tokenizer")
transformers.AutoTokenizer.from_pretrained(tokenizer, cache_dir=tokenizer_path) 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 展開後 # PyInstaller 展開後
if root_path and prompt_filename and os_path.exists(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", "prompt", prompt_filename) prompt_path = os_path.join(root_path, "_internal", "translation_settings", "prompt", prompt_filename)
# src-python 直下実行 # src-python 直下実行
elif prompt_filename and os_path.exists(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", "prompt", prompt_filename) prompt_path = os_path.join(os_path.dirname(__file__), "models", "translation", "translation_settings", "prompt", prompt_filename)
# translation フォルダ直下実行 # translation フォルダ直下実行
elif prompt_filename and os_path.exists(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__), "prompt", prompt_filename) prompt_path = os_path.join(os_path.dirname(__file__), "translation_settings", "prompt", prompt_filename)
else: else:
raise FileNotFoundError(f"Prompt file not found: {prompt_filename}") raise FileNotFoundError(f"Prompt file not found: {prompt_filename}")
with open(prompt_path, "r", encoding="utf-8") as f: with open(prompt_path, "r", encoding="utf-8") as f: