mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-29 01:31:41 +00:00
The typing-indicator refresh loop in BasePlatformAdapter._keep_typing awaited each send_typing call unconditionally. Each call is an HTTP round-trip to the platform API (Telegram/Discord), normally ~100ms. When the same network instability that causes upstream provider timeouts (e.g. Anthropic capacity blips slowing first-token latency past the 120s stream-read timeout) also slows the platform typing API to multi-second response times, the refresh loop stalls inside the await. Platform-side typing expires at ~5s, so the bubble dies and stays dead until the stuck send_typing call returns — right when the user most needs the 'still working' signal and instead sees a bot that looks dead, then asks 'wtf are you doing' which itself interrupts the eventually-recovering turn. Bound each send_typing with asyncio.wait_for (1.5s cap, derived from interval so it's always below the 2s cadence). Slow calls get abandoned so the next scheduled tick fires a fresh send_typing on schedule. As long as any one of them reaches the platform within its ~5s typing-expiry window, the bubble stays visible across the stall. Also catches non-timeout send_typing exceptions (transient HTTP errors) so one bad tick doesn't terminate the whole loop. Tests: 4 new in tests/gateway/test_keep_typing_timeout.py covering slow-send non-blocking, fast-send still-awaited, exception resilience, and paused-chat regression guard. |
||
|---|---|---|
| .. | ||
| qqbot | ||
| __init__.py | ||
| ADDING_A_PLATFORM.md | ||
| api_server.py | ||
| base.py | ||
| bluebubbles.py | ||
| dingtalk.py | ||
| discord.py | ||
| email.py | ||
| feishu.py | ||
| feishu_comment.py | ||
| feishu_comment_rules.py | ||
| helpers.py | ||
| homeassistant.py | ||
| matrix.py | ||
| mattermost.py | ||
| signal.py | ||
| slack.py | ||
| sms.py | ||
| telegram.py | ||
| telegram_network.py | ||
| webhook.py | ||
| wecom.py | ||
| wecom_callback.py | ||
| wecom_crypto.py | ||
| weixin.py | ||
| whatsapp.py | ||
| yuanbao.py | ||
| yuanbao_media.py | ||
| yuanbao_proto.py | ||
| yuanbao_sticker.py | ||