c840f37a44
CI/CD Pipeline / Validate Code Quality And Tests (push) Successful in 33s
CI/CD Pipeline / Frontend Lint (push) Successful in 1m12s
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Integration Tests (push) Failing after 1m8s
CI/CD Pipeline / Unit Tests (push) Successful in 2m52s
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
67 lines
1.7 KiB
Python
Executable File
67 lines
1.7 KiB
Python
Executable File
"""TTS 服务工厂.
|
||
|
||
根据配置创建对应的 TTS 服务实例。
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
import logging
|
||
import os
|
||
|
||
from packages.ports.tts_service import TtsService
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
# 可用的 provider 映射
|
||
_PROVIDERS: dict[str, type[TtsService]] = {}
|
||
|
||
|
||
def register_provider(name: str, cls: type[TtsService]) -> None:
|
||
"""注册 TTS 供应商."""
|
||
_PROVIDERS[name] = cls
|
||
|
||
|
||
def get_tts_service(provider: str | None = None, **kwargs) -> TtsService:
|
||
"""获取 TTS 服务实例.
|
||
|
||
Args:
|
||
provider: 供应商名称(None 则从环境变量读取 TTS_PROVIDER)
|
||
**kwargs: 传递给服务构造函数的参数
|
||
|
||
Returns:
|
||
TTS 服务实例
|
||
|
||
Raises:
|
||
ValueError: 不支持的供应商
|
||
"""
|
||
if provider is None:
|
||
provider = os.environ.get("TTS_PROVIDER", "mock")
|
||
|
||
provider = provider.lower()
|
||
|
||
if provider not in _PROVIDERS:
|
||
# 延迟导入避免循环依赖
|
||
if provider == "mock":
|
||
from packages.adapters.tts.mock_tts_service import MockTtsService
|
||
|
||
_PROVIDERS["mock"] = MockTtsService
|
||
else:
|
||
logger.warning("未知 TTS provider: %s,回退到 mock", provider)
|
||
from packages.adapters.tts.mock_tts_service import MockTtsService
|
||
|
||
_PROVIDERS["mock"] = MockTtsService
|
||
provider = "mock"
|
||
|
||
cls = _PROVIDERS[provider]
|
||
return cls(**kwargs)
|
||
|
||
|
||
def available_providers() -> list[str]:
|
||
"""获取可用的供应商列表."""
|
||
# 确保 mock 已注册
|
||
if "mock" not in _PROVIDERS:
|
||
from packages.adapters.tts.mock_tts_service import MockTtsService
|
||
|
||
_PROVIDERS["mock"] = MockTtsService
|
||
return list(_PROVIDERS.keys())
|