Convert to pip package
- Moved __init__.py and plugin.yaml into hermes_piper_plugin/ package directory - Added pyproject.toml with build config and entry point registration - Updated tests to reference new subdirectory paths - Updated README with pip-based installation instructions This converts the plugin from a flat layout (loaded via hermes plugins install) to a proper pip package with the 'hermes_agent.plugins' entry point.
This commit is contained in:
59
hermes_piper_plugin/__init__.py
Normal file
59
hermes_piper_plugin/__init__.py
Normal file
@@ -0,0 +1,59 @@
|
||||
"""
|
||||
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)")
|
||||
11
hermes_piper_plugin/plugin.yaml
Normal file
11
hermes_piper_plugin/plugin.yaml
Normal file
@@ -0,0 +1,11 @@
|
||||
name: piper
|
||||
version: 1.0.0
|
||||
description: >
|
||||
Makes Piper TTS the default provider instead of Edge. Zero fork needed —
|
||||
uses runtime monkey-patching to set DEFAULT_PROVIDER = "piper" at plugin
|
||||
load time. Survives Hermes upgrades without merge conflicts.
|
||||
author: "@gortium"
|
||||
hooks:
|
||||
- on_session_start
|
||||
requires_pip:
|
||||
- piper-tts
|
||||
Reference in New Issue
Block a user