new123 / src /open_llm_vtuber /config_manager /tts_preprocessor.py
britto224's picture
Upload 280 files
6ef0cd2 verified
# config_manager/translate.py
from typing import Literal, Optional, Dict, ClassVar
from pydantic import ValidationInfo, Field, model_validator
from .i18n import I18nMixin, Description
# --- Sub-models for specific Translator providers ---
class DeepLXConfig(I18nMixin):
"""Configuration for DeepLX translation service."""
deeplx_target_lang: str = Field(..., alias="deeplx_target_lang")
deeplx_api_endpoint: str = Field(..., alias="deeplx_api_endpoint")
DESCRIPTIONS: ClassVar[Dict[str, Description]] = {
"deeplx_target_lang": Description(
en="Target language code for DeepLX translation",
zh="DeepLX 翻译的目标语言代码",
),
"deeplx_api_endpoint": Description(
en="API endpoint URL for DeepLX service", zh="DeepLX 服务的 API 端点 URL"
),
}
class TencentConfig(I18nMixin):
"""Configuration for tencent translation service."""
secret_id: str = Field(..., description="Tencent Secret ID")
secret_key: str = Field(..., description="Tencent Secret Key")
region: str = Field(..., description="Region for Tencent Service")
source_lang: str = Field(
..., description="Source language code for tencent translation"
)
target_lang: str = Field(
..., description="Target language code for tencent translation"
)
DESCRIPTIONS: ClassVar[Dict[str, Description]] = {
"secret_id": Description(en="Tencent Secret ID", zh="腾讯服务的Secret ID"),
"secret_key": Description(en="Tencent Secret Key", zh="腾讯服务的Secret Key"),
"region": Description(en="Region for Tencent Service", zh="腾讯服务使用的区域"),
"source_lang": Description(
en="Source language code for tencent translation", zh="腾讯翻译的源语言代码"
),
"target_lang": Description(
en="Target language code for tencent translation",
zh="腾讯翻译的目标语言代码",
),
}
# --- Main TranslatorConfig model ---
class TranslatorConfig(I18nMixin):
"""Configuration for translation services."""
translate_audio: bool = Field(..., alias="translate_audio")
translate_provider: Literal["deeplx", "tencent"] = Field(
..., alias="translate_provider"
)
deeplx: Optional[DeepLXConfig] = Field(None, alias="deeplx")
tencent: Optional[TencentConfig] = Field(None, alias="tencent")
DESCRIPTIONS: ClassVar[Dict[str, Description]] = {
"translate_audio": Description(
en="Enable audio translation (requires DeepLX deployment)",
zh="启用音频翻译(需要部署 DeepLX)",
),
"translate_provider": Description(
en="Translation service provider to use", zh="要使用的翻译服务提供者"
),
"deeplx": Description(
en="Configuration for DeepLX translation service", zh="DeepLX 翻译服务配置"
),
"tencent": Description(
en="Configuration for TenCent translation service", zh="腾讯 翻译服务配置"
),
}
@model_validator(mode="after")
def check_translator_config(cls, values: "TranslatorConfig", info: ValidationInfo):
translate_audio = values.translate_audio
translate_provider = values.translate_provider
if translate_audio:
if translate_provider == "deeplx" and values.deeplx is None:
raise ValueError(
"DeepLX configuration must be provided when translate_audio is True and translate_provider is 'deeplx'"
)
elif translate_provider == "tencent" and values.tencent is None:
raise ValueError(
"Tencent configuration must be provided when translate_audio is True and translate_provider is 'tencent'"
)
return values
class TTSPreprocessorConfig(I18nMixin):
"""Configuration for TTS preprocessor."""
remove_special_char: bool = Field(..., alias="remove_special_char")
ignore_brackets: bool = Field(default=True, alias="ignore_brackets")
ignore_parentheses: bool = Field(default=True, alias="ignore_parentheses")
ignore_asterisks: bool = Field(default=True, alias="ignore_asterisks")
ignore_angle_brackets: bool = Field(default=True, alias="ignore_angle_brackets")
translator_config: TranslatorConfig = Field(..., alias="translator_config")
DESCRIPTIONS: ClassVar[Dict[str, Description]] = {
"remove_special_char": Description(
en="Remove special characters from the input text",
zh="从输入文本中删除特殊字符",
),
"translator_config": Description(
en="Configuration for translation services", zh="翻译服务的配置"
),
}