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:
@@ -1,22 +1,19 @@
|
||||
"""
|
||||
Hermes Relay v2 — Flask bridge tussen Node-RED en Hermes Agent.
|
||||
|
||||
Gebruikt een warme Hermes agent (directe Python import) in plaats van
|
||||
subprocess per query. Dit bespaart ~3-5 seconden startup tijd per query.
|
||||
Gebruikt de voice-assistant profiel (minimale chatbot, max_turns=10).
|
||||
Geen prefix/model override nodig — profiel handelt dit af.
|
||||
|
||||
Node-RED stuurt POST met msg.payload → Hermes (direct) → Antwoord + Telegram.
|
||||
|
||||
Endpoints:
|
||||
POST /ask — main relay endpoint
|
||||
GET /health — health check
|
||||
Node-RED stuurt POST met msg.payload → Hermes (direct) → Alleen antwoord terug.
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import logging
|
||||
|
||||
# ── Hermes path toevoegen (zodat we Hermes direct kunnen importeren) ───
|
||||
_HERMES_SITE = '/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages'
|
||||
_HERMES_SITE = "/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages"
|
||||
if _HERMES_SITE not in sys.path:
|
||||
sys.path.insert(0, _HERMES_SITE)
|
||||
|
||||
@@ -24,9 +21,7 @@ from flask import Flask, request, jsonify
|
||||
|
||||
# ── Config ──────────────────────────────────────────────────────────────
|
||||
TIMEOUT = 120 # max seconden voor Hermes query
|
||||
TG_TARGET = "telegram" # hermes send target
|
||||
PROMPT_PREFIX = "/fast" # wordt aan elke prompt toegevoegd
|
||||
MODEL = "qwen3.7-max" # model override (leeg = default uit config)
|
||||
TG_TARGET = "telegram" # hermes send target
|
||||
|
||||
# ── Logging ─────────────────────────────────────────────────────────────
|
||||
logging.basicConfig(
|
||||
@@ -40,24 +35,53 @@ logger = logging.getLogger(__name__)
|
||||
app = Flask(__name__)
|
||||
|
||||
# ── Hermes warm houden ──────────────────────────────────────────────────
|
||||
# Import de Hermes client (triggert eenmalige module laden)
|
||||
HERMES_BIN = "/usr/local/bin/hermes" # nog steeds nodig voor hermes send
|
||||
from hermes_client import call_hermes as _hermes_query
|
||||
|
||||
# Laad gateway config eenmalig voor Telegram verzenden
|
||||
_gw_config_loaded = False
|
||||
_gw_config = None
|
||||
|
||||
def _ensure_gw_config():
|
||||
"""Laad gateway config eenmalig."""
|
||||
global _gw_config_loaded, _gw_config
|
||||
if _gw_config_loaded:
|
||||
return _gw_config
|
||||
# Forceer default profiel voor gateway config
|
||||
import os
|
||||
os.environ["HERMES_HOME"] = "/root/.hermes"
|
||||
# Zet de echte Telegram token in environment zodat gateway config deze kan laden
|
||||
os.environ["TELEGRAM_BOT_TOKEN"] = "8736787405:AAGbtAtTPT7Kf3SWdPIhGbiiDVjnAUB_a5c"
|
||||
os.environ["TELEGRAM_HOME_CHANNEL"] = "5453608010"
|
||||
from gateway.config import load_gateway_config
|
||||
_gw_config = load_gateway_config()
|
||||
_gw_config_loaded = True
|
||||
return _gw_config
|
||||
|
||||
|
||||
def send_telegram(text):
|
||||
"""Stuur bericht via hermes send subprocess."""
|
||||
import subprocess
|
||||
"""Stuur bericht via gateway's send_message_tool (gebruikt gateway config met echte token)."""
|
||||
try:
|
||||
result = subprocess.run(
|
||||
[HERMES_BIN, "send", "--to", TG_TARGET, "--quiet", text],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=30,
|
||||
)
|
||||
return result.returncode == 0
|
||||
logger.info("Telegram send: starting...")
|
||||
_ensure_gw_config()
|
||||
logger.info("Telegram send: gw config loaded")
|
||||
from tools.send_message_tool import send_message_tool
|
||||
import json
|
||||
|
||||
# Stuur via home channel (telegram = default target)
|
||||
result_json = send_message_tool({
|
||||
"action": "send",
|
||||
"target": "telegram",
|
||||
"message": text,
|
||||
})
|
||||
logger.info("Telegram send: send_message_tool returned")
|
||||
result = json.loads(result_json)
|
||||
if result.get("error"):
|
||||
logger.error("Telegram send failed: %s", result["error"])
|
||||
return False
|
||||
logger.info("Telegram send: success=%s", result.get("success", False))
|
||||
return result.get("success", False)
|
||||
except Exception as e:
|
||||
logger.error("Telegram send failed: %s", e)
|
||||
logger.error("Telegram send failed with exception: %s", e, exc_info=True)
|
||||
return False
|
||||
|
||||
|
||||
@@ -65,7 +89,7 @@ def send_telegram(text):
|
||||
|
||||
@app.route("/ask", methods=["POST"])
|
||||
def ask():
|
||||
"""Main relay endpoint."""
|
||||
"""Main relay endpoint — retourneert alleen het antwoord."""
|
||||
start = time.time()
|
||||
|
||||
# Parse input
|
||||
@@ -104,13 +128,12 @@ def health():
|
||||
return jsonify({
|
||||
"status": "ok",
|
||||
"service": "hermes-relay",
|
||||
"version": "2.0",
|
||||
"version": "2.1",
|
||||
"mode": "python-import",
|
||||
"model": MODEL or "(default)",
|
||||
"prompt_prefix": PROMPT_PREFIX or "(none)",
|
||||
"profile": "voice-assistant",
|
||||
})
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
logger.info("Starting Hermes Relay v2.0 (warme agent)...")
|
||||
app.run(host="0.0.0.0", port=8650, debug=False)
|
||||
logger.info("Starting Hermes Relay v2.1 (voice-assistant profiel)...")
|
||||
app.run(host="0.0.0.0", port=8650, debug=False)
|
||||
Reference in New Issue
Block a user