Files
vidconf/backend/core/plugins/factory.py

48 lines
2.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Factory + реестр для реализаций плагинов Transcriber/Summarizer."""
from core.plugins.config import SummarizerConfig, TranscriberConfig
from core.plugins.summarizer import Summarizer
from core.plugins.transcriber import Transcriber
class PluginError(Exception):
"""Базовая ошибка при сбое реестра/factory плагинов."""
class UnknownProviderError(PluginError):
"""Вызывается, когда запрошенный `provider` плагина не зарегистрирован."""
_TRANSCRIBERS: dict[str, type[Transcriber]] = {}
_SUMMARIZERS: dict[str, type[Summarizer]] = {}
def register_transcriber[T: type[Transcriber]](cls: T) -> T:
"""Зарегистрировать подкласс `Transcriber` под его ключом `provider`."""
_TRANSCRIBERS[cls.provider] = cls
return cls
def register_summarizer[S: type[Summarizer]](cls: S) -> S:
"""Зарегистрировать подкласс `Summarizer` под его ключом `provider`."""
_SUMMARIZERS[cls.provider] = cls
return cls
def create_transcriber(cfg: TranscriberConfig) -> Transcriber:
"""Инстанцировать `Transcriber`, зарегистрированный для `cfg.provider`."""
try:
cls = _TRANSCRIBERS[cfg.provider]
except KeyError as exc:
raise UnknownProviderError(f"Неизвестный провайдер transcriber: {cfg.provider!r}") from exc
return cls(model=cfg.model, language=cfg.language, **cfg.options) # type: ignore[call-arg]
def create_summarizer(cfg: SummarizerConfig) -> Summarizer:
"""Инстанцировать `Summarizer`, зарегистрированный для `cfg.provider`."""
try:
cls = _SUMMARIZERS[cfg.provider]
except KeyError as exc:
raise UnknownProviderError(f"Неизвестный провайдер summarizer: {cfg.provider!r}") from exc
return cls(model=cfg.model, chunk_minutes=cfg.chunk_minutes, **cfg.options) # type: ignore[call-arg]