# Совместимый шим над silero_tts (для OpenCode-проекта silero_open_ai). # Пакет silero-tts>=6.0 из pyproject.toml — приватный билд OpenCode'а, на PyPI таково нет. # Даёт интерфейс, который ожидает app/synthesis.py: SileroTTS(...).tts_model.apply_tts(...) # Модель грузится из models/.pt (torch.package) — сеть не нужна. import os import torch _MODELS_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "models") class SileroTTS: def __init__(self, model_id: str, language: str = "ru", speaker: str = "baya", sample_rate: int = 24000, device: str = "cpu", num_threads: int = 4, **kwargs): self.language = language self.speaker = speaker self.sample_rate = int(sample_rate) self.put_accent = kwargs.pop("put_accent", True) self.put_yo = kwargs.pop("put_yo", True) torch.set_num_threads(int(num_threads)) path = os.path.join(_MODELS_DIR, f"{model_id}.pt") if not os.path.isfile(path): raise FileNotFoundError(f"model not found: {path}") self.tts_model = torch.package.PackageImporter(path).load_pickle("tts_models", "model") try: self.tts_model.to(torch.device(device)) except (AttributeError, NotImplementedError): pass # модель без .to() — остаётся на CPU