v2.1: Switch to voice-assistant profile

- Use voice-assistant profile (minimal chatbot, max_turns=10, nous provider)
- Remove /fast prefix and model override - handled by profile config
- Use messaging toolset for send_message tool (Telegram delivery)
- Add hardcoded TELEGRAM_BOT_TOKEN and TELEGRAM_HOME_CHANNEL to relay env
- Telegram delivery now works via gateway's send_message_tool
- Version bump to 2.1
- Health endpoint shows profile: voice-assistant
This commit is contained in:
2026-06-16 09:37:48 +02:00
parent 1780eed406
commit e05fa9c5c1
2 changed files with 83 additions and 63 deletions
+31 -34
View File
@@ -3,6 +3,9 @@ Hermes Client — directe Python import (geen subprocess overhead).
Warme agent: eenmalig initialiseren, daarna hergebruiken voor elke query.
Dit bespaart de subprocess + Python startup overhead van 2-5 seconden per query.
Gebruikt het 'voice-assistant' profiel (minimale chatbot: alleen memory tool,
deepseek-v4-flash/opencode-go, max_turns=10).
"""
import io
import os
@@ -17,8 +20,8 @@ logger = logging.getLogger(__name__)
_HERMES_LOADED = False
_cli = None
# Model override voor relay (leeg = default uit config)
MODEL_OVERRIDE = "qwen3.7-plus"
# Voice-assistant profiel home directory
_HERMES_HOME = "/root/.hermes/profiles/voice-assistant"
def _ensure_hermes_loaded():
@@ -29,52 +32,50 @@ def _ensure_hermes_loaded():
start = time.time()
# Forceer voice-assistant profiel via HERMES_HOME
os.environ["HERMES_HOME"] = _HERMES_HOME
# Zorg dat Hermes in de Python path zit
hermes_path = '/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages'
hermes_path = "/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages"
if hermes_path not in sys.path:
sys.path.insert(0, hermes_path)
# Force UTF-8
os.environ.setdefault('PYTHONIOENCODING', 'utf-8')
os.environ.setdefault("PYTHONIOENCODING", "utf-8")
# Laad .env via Hermes' eigen loader
from hermes_cli.env_loader import load_hermes_dotenv
from hermes_constants import get_hermes_home
_hermes_home = get_hermes_home()
_project_env = os.path.join(os.path.dirname(hermes_path), '.env')
_project_env = os.path.join(os.path.dirname(hermes_path), ".env")
load_hermes_dotenv(hermes_home=_hermes_home, project_env=_project_env)
# Load config
# Load config (nu vanuit voice-assistant profiel)
from hermes_cli.config import load_config
config = load_config()
# Resolve toolsets (geen tools voor snelle relay)
from hermes_cli.tools_config import _get_platform_tools
if MODEL_OVERRIDE:
# Geen tools laden bij model override (DeepSeek heeft incompatible tool schema)
toolsets = []
else:
toolsets = sorted(_get_platform_tools(config, 'cli'))
# Gebruik messaging toolset zodat agent send_message tool kan gebruiken
toolsets = ["messaging"]
# YOLO mode + interactive mode
os.environ['HERMES_YOLO_MODE'] = '1'
os.environ['HERMES_INTERACTIVE'] = '1'
os.environ['HERMES_SESSION_SOURCE'] = 'relay'
os.environ["HERMES_YOLO_MODE"] = "1"
os.environ["HERMES_INTERACTIVE"] = "1"
os.environ["HERMES_SESSION_SOURCE"] = "relay"
# Import HermesCLI
from cli import HermesCLI
# Maak CLI instantie (nog géén agent init — dat gebeurt pas bij eerste query)
_cli = HermesCLI(
model=config.get('model', {}).get('default', ''),
model=config.get("model", {}).get("default", ""),
toolsets=toolsets,
)
# Onderdruk banner/status output
_cli.tool_progress_mode = 'off'
_cli.tool_progress_mode = "off"
elapsed = time.time() - start
logger.info(
"Hermes loaded in %.2fs (toolsets: %s)",
"Hermes loaded in %.2fs (toolsets: %s, profile: voice-assistant)",
elapsed, toolsets
)
_HERMES_LOADED = True
@@ -90,24 +91,20 @@ def call_hermes(prompt):
"""
_ensure_hermes_loaded()
# Prefix (zoals /fast)
prefix = os.environ.get('HERMES_RELAY_PREFIX', '/fast')
full_prompt = (prefix + " " + prompt).strip() if prefix else prompt
# Geen prefix meer — voice-assistant profiel handelt dit af via config
full_prompt = prompt.strip()
start = time.time()
# ── Agent initialiseren met model override ──
# ── Agent initialiseren ──
turn_route = _cli._resolve_turn_agent_config(full_prompt)
# Override model als MODEL_OVERRIDE is ingesteld
model_override = MODEL_OVERRIDE if MODEL_OVERRIDE else turn_route['model']
if turn_route['signature'] != _cli._active_agent_route_signature:
if turn_route["signature"] != _cli._active_agent_route_signature:
_cli.agent = None
init_ok = _cli._init_agent(
model_override=model_override,
runtime_override=turn_route['runtime'],
request_overrides=turn_route.get('request_overrides'),
model_override=turn_route["model"],
runtime_override=turn_route["runtime"],
request_overrides=turn_route.get("request_overrides"),
)
if not init_ok:
return "⚠️ Kon Hermes agent niet initialiseren."
@@ -137,11 +134,11 @@ def call_hermes(prompt):
return "⚠️ Hermes error: " + str(e)
elapsed = time.time() - start
# Fallback als Hermes None teruggeeft (error path)
if result is None:
logger.warning("Hermes returned None — possible error during query")
return "⚠️ Geen antwoord van Hermes. Probeer opnieuw."
logger.info("Hermes responded in %.1fs (%d chars)", elapsed, len(result))
return result
return result