mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-11-06 05:17:15 +00:00
refactor(yuanbao): drop core wiring
(cherry picked from commit b3e3f85bdf21fe752ec608dbe628fa44a1a5c790)
This commit is contained in:
1 parent
337ac57c6e
commit
af9e553348
4 files changed
+7
-54
No files matched your search
+1
-3
@@ -3324,9 +3324,7 @@ _BUILTIN_ADAPTERS: dict[Platform, tuple[str, str, str, str]] = {
|
||||
Platform.WEBHOOK: ("webhook", "WebhookAdapter", "check_webhook_requirements",
|
||||
"Webhook: aiohttp not installed"),
|
||||
Platform.MSGRAPH_WEBHOOK: ("msgraph_webhook", "MSGraphWebhookAdapter", "check_msgraph_webhook_requirements",
|
||||
"MSGraph webhook: aiohttp not installed"),
|
||||
Platform.YUANBAO: ("yuanbao", "YuanbaoAdapter", "WEBSOCKETS_AVAILABLE",
|
||||
"Yuanbao: websockets not installed. Run: pip install websockets")}
|
||||
"MSGraph webhook: aiohttp not installed")}
|
||||
|
||||
|
||||
def _instantiate_builtin_adapter(platform: Platform, config: Any) -> Optional[BasePlatformAdapter]:
|
||||
|
||||
@@ -47,21 +47,6 @@ _PLATFORMS = [
|
||||
"help": "off = flat channel messages, thread = replies nest under your message."},
|
||||
],
|
||||
},
|
||||
{
|
||||
"key": "yuanbao", "label": "Yuanbao", "emoji": "💎", "token_var": "YUANBAO_APP_ID",
|
||||
"setup_instructions": [
|
||||
"1. Download the Yuanbao app from https://yuanbao.tencent.com/",
|
||||
"2. In the app, go to PAI → My Bot and create a new bot",
|
||||
"3. After the bot is created, copy the App ID and App Secret",
|
||||
"4. Enter them below and Hermes will connect automatically over WebSocket",
|
||||
],
|
||||
"vars": [
|
||||
{"name": "YUANBAO_APP_ID", "prompt": "App ID", "password": False,
|
||||
"help": "The App ID from your Yuanbao IM Bot credentials."},
|
||||
{"name": "YUANBAO_APP_SECRET", "prompt": "App Secret", "password": True,
|
||||
"help": "The App Secret (used for HMAC signing) from your Yuanbao IM Bot."},
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -460,30 +460,3 @@ async def _matrix_send_core(adapter, chat_id, message, media_files, metadata):
|
||||
if not last_result.success:
|
||||
return _error(f"Matrix media send failed: {last_result.error}")
|
||||
return {"error": _NO_DELIVERABLE} if last_result is None else _success("matrix", chat_id, message_id=last_result.message_id)
|
||||
|
||||
|
||||
def _gateway_platform_module(name, *, unavailable, unmet):
|
||||
"""``(gateway.platforms.<name>, None)`` once its ``check_<name>_requirements`` passes, else ``(None, error)``."""
|
||||
import importlib
|
||||
try:
|
||||
module = importlib.import_module(f"gateway.platforms.{name}")
|
||||
except ImportError:
|
||||
return None, {"error": unavailable}
|
||||
return (module, None) if getattr(module, f"check_{name}_requirements")() else (None, {"error": unmet})
|
||||
|
||||
|
||||
|
||||
|
||||
async def _send_yuanbao(chat_id, message, media_files=None):
|
||||
"""Send via the running Yuanbao adapter's persistent WebSocket (no throwaway client possible)."""
|
||||
try:
|
||||
from gateway.platforms.yuanbao import YuanbaoAdapter
|
||||
except ImportError:
|
||||
return _error("Yuanbao adapter module not available.")
|
||||
adapter = YuanbaoAdapter.get_active()
|
||||
if adapter is None:
|
||||
return _error("Yuanbao adapter is not running. Start the gateway with yuanbao platform enabled first.")
|
||||
try:
|
||||
return await adapter._outbound.sender.send_direct(chat_id, message, media_files)
|
||||
except Exception as e:
|
||||
return _error(f"Yuanbao send failed: {e}")
|
||||
@@ -18,7 +18,7 @@ from tools.send_message_senders import (
|
||||
_AUDIO_EXTS, _DEFAULT_CAPTION_LIMIT, _IMAGE_EXTS, _NO_DELIVERABLE, _VIDEO_EXTS, _VOICE_EXTS,
|
||||
_adapter_media_method, _error, _live_adapter, _media_caption_split, _plugin_standalone_sender,
|
||||
_registry_standalone_send, _resolve_slack_user_target, _sanitize_error_text,
|
||||
_send_matrix_via_adapter, _send_telegram, _send_yuanbao)
|
||||
_send_matrix_via_adapter, _send_telegram)
|
||||
from tools.registry import tool_error
|
||||
|
||||
# NOTE: ``send_message`` is intentionally NOT registered as an agent-callable model tool
|
||||
@@ -621,7 +621,8 @@ _PLUGIN_STANDALONE_MEDIA = {"discord": ("Discord", False, True, [], False), "fei
|
||||
"slack": ("Slack", True, True, [], False), "whatsapp": ("WhatsApp", True, True, None, True),
|
||||
# Signal: attachments ride the JSON-RPC param on the final chunk.
|
||||
"signal": ("Signal", True, False, [], False),
|
||||
"weixin": ("Weixin", True, False, None, False)}
|
||||
"weixin": ("Weixin", True, False, None, False),
|
||||
"yuanbao": ("Yuanbao", True, False, None, False)}
|
||||
|
||||
|
||||
async def _send_plugin_standalone(platform_name, pconfig, chat_id, message, chunks, media_files, *, thread_id,
|
||||
@@ -657,22 +658,18 @@ def _via_adapter_route(p, pc, cid, chunk, media, tid, fd):
|
||||
# Native-media chunked routes for built-in platforms; media rides on the final chunk, non-final
|
||||
# chunks get the sentinel. platform -> (media required, sentinel, sender(platform, pconfig,
|
||||
# chat_id, chunk, media, thread_id, force_document)). Matrix: ALL sends use the native adapter
|
||||
# (E2EE text). Yuanbao / WeCom: media needs the
|
||||
# running gateway. Slack text: live adapter (multi-workspace, ignored_channels gates) else the
|
||||
# (E2EE text). WeCom: media needs the running gateway. Slack text: live adapter (multi-workspace, ignored_channels gates) else the
|
||||
# plugin's standalone sender. Names resolve at call time so tests can monkeypatch the senders.
|
||||
_CHUNKED_ROUTES = {
|
||||
"matrix": (False, [], lambda p, pc, cid, chunk, media, tid, fd: _send_matrix_via_adapter(
|
||||
pc, cid, chunk, media_files=media, thread_id=tid)),
|
||||
"yuanbao": (True, None, lambda p, pc, cid, chunk, media, tid, fd: _send_yuanbao(cid, chunk, media_files=media)),
|
||||
"slack": (False, [], _via_adapter_route),
|
||||
"wecom": (True, None, _via_adapter_route)}
|
||||
|
||||
# Text-only senders for built-in platforms (generic path; media is dropped with a
|
||||
# warning). Signature: (pconfig, chat_id, chunk, thread_id) -> result.
|
||||
_TEXT_SENDERS = {
|
||||
**{name: partial(_registry_standalone_send, name)
|
||||
for name in ("whatsapp", "email", "sms", "dingtalk", "feishu", "wecom", "signal", "qqbot")},
|
||||
"yuanbao": lambda pc, cid, chunk, tid: _send_yuanbao(cid, chunk)}
|
||||
_TEXT_SENDERS = {name: partial(_registry_standalone_send, name)
|
||||
for name in ("whatsapp", "email", "sms", "dingtalk", "feishu", "wecom", "signal", "qqbot", "yuanbao")}
|
||||
|
||||
_MEDIA_PLATFORMS_NOTE = "telegram, discord, matrix, weixin, signal, yuanbao, feishu, whatsapp, slack and qqbot"
|
||||
|
||||
|
||||
Reference in new issue
Block a user