mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-21 05:11:26 +00:00
fix(telegram): skip send_chat_action for DM topic reply-fallback lanes
The send path uses Hermes' reply-anchor fallback for DM topic lanes (message_thread_id + reply_to_message_id), but send_chat_action only accepts message_thread_id — Telegram's Bot API 10.0 rejects it for these lanes. Without this short-circuit, every typing tick (~every 2s during agent runs) makes a doomed API call that gets logged as a 'thread not found' debug warning. Skip the call entirely when the metadata indicates a DM topic reply-fallback lane; the user-visible behavior is unchanged (no typing indicator either way for these lanes), but the logs stay clean. Identified during salvage review of #22053.
This commit is contained in:
parent
b3239572f0
commit
aef297a45e
2 changed files with 38 additions and 0 deletions
|
|
@ -235,6 +235,36 @@ async def test_send_typing_does_not_fall_back_to_root_for_dm_topic():
|
|||
]
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_send_typing_skips_api_call_for_dm_topic_reply_fallback():
|
||||
"""Hermes-created DM topic lanes have no working Bot API typing route.
|
||||
|
||||
``send_chat_action`` only accepts ``message_thread_id``, which Telegram's
|
||||
Bot API 10.0 rejects for these lanes — the call would silently fail and
|
||||
log a "thread not found" warning every typing tick (every 2s). Skipping
|
||||
the call entirely keeps logs clean while preserving the user-visible
|
||||
behavior (no typing indicator either way for these lanes).
|
||||
"""
|
||||
adapter = _make_adapter()
|
||||
call_log = []
|
||||
|
||||
async def mock_send_chat_action(**kwargs):
|
||||
call_log.append(dict(kwargs))
|
||||
|
||||
adapter._bot = SimpleNamespace(send_chat_action=mock_send_chat_action)
|
||||
|
||||
await adapter.send_typing(
|
||||
"12345",
|
||||
metadata={
|
||||
"thread_id": "20197",
|
||||
"telegram_dm_topic_reply_fallback": True,
|
||||
"telegram_reply_to_message_id": "462",
|
||||
},
|
||||
)
|
||||
|
||||
assert call_log == []
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_send_retries_without_thread_on_thread_not_found():
|
||||
"""When message_thread_id causes 'thread not found', retry without it."""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue