Runtime monkey-patch that changes tools.tts_tool.DEFAULT_PROVIDER from 'edge' to 'piper' at plugin load time. Zero fork needed. - plugin.yaml with requires_pip: piper-tts - __init__.py with _apply_piper_patch() + on_session_start hook - README with installation and safety notes
60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
"""
|
|
hermes-piper-plugin (piper)
|
|
|
|
Overrides Hermes' default TTS provider from Edge to Piper at plugin load
|
|
time. Uses runtime monkey-patching — zero modifications to the Hermes repo.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
_PATCHED = False
|
|
|
|
|
|
def _apply_piper_patch() -> None:
|
|
"""Replace Edge default with Piper in TTS tool's provider selection.
|
|
|
|
Python module-level constants are mutable — ``DEFAULT_PROVIDER`` is a
|
|
string that ``_get_provider()`` reads at call time (not import time).
|
|
Changing it after import is safe and immediately effective.
|
|
"""
|
|
global _PATCHED
|
|
if _PATCHED:
|
|
return
|
|
|
|
try:
|
|
import tools.tts_tool
|
|
|
|
old_default = getattr(tools.tts_tool, "DEFAULT_PROVIDER", "edge")
|
|
tools.tts_tool.DEFAULT_PROVIDER = "piper"
|
|
|
|
logger.info("piper-plugin: DEFAULT_PROVIDER changed from '%s' → 'piper'", old_default)
|
|
_PATCHED = True
|
|
except ImportError:
|
|
logger.warning("piper-plugin: tools.tts_tool not importable — patch deferred")
|
|
except Exception as exc:
|
|
logger.warning("piper-plugin: failed to patch DEFAULT_PROVIDER: %s", exc)
|
|
|
|
|
|
def _on_session_start(**kw):
|
|
"""Log Piper default status at session start (idempotent)."""
|
|
if not _PATCHED:
|
|
_apply_piper_patch()
|
|
|
|
try:
|
|
import tools.tts_tool
|
|
current = getattr(tools.tts_tool, "DEFAULT_PROVIDER", "?")
|
|
logger.info("piper-plugin: TTS default provider = %s (patched=%s)", current, _PATCHED)
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
def register(ctx) -> None:
|
|
"""Register Piper default override."""
|
|
_apply_piper_patch()
|
|
ctx.register_hook("on_session_start", _on_session_start)
|
|
logger.info("piper-plugin: registered ✓ (TTS default → piper)")
|