Skip to content

fix(weixin): prevent excessive message splitting on WeChat platform - #7784

Closed
sherunlock03 wants to merge 1 commit into
NousResearch:mainfrom
sherunlock03:fix/weixin-message-split
Closed

fix(weixin): prevent excessive message splitting on WeChat platform#7784
sherunlock03 wants to merge 1 commit into
NousResearch:mainfrom
sherunlock03:fix/weixin-message-split

Conversation

@sherunlock03

Copy link
Copy Markdown

Problem

The original implementation of _split_text_for_weixin_delivery() in the WeChat (Weixin) platform adapter was splitting messages at every newline character. This caused messages that could have been delivered as a single unit to be fragmented into multiple separate messages, resulting in:

  • Excessive notification spam for users
  • Poor readability with content arriving in scattered pieces
  • Unnecessary API calls to the WeChat platform

For example, a simple 3-paragraph message would be split into 3+ separate messages even if the total length was well under WeChat's 4000 character limit.

Solution

Modified _split_text_for_weixin_delivery() (lines 758-778 in gateway/platforms/weixin.py) to:

  1. Prefer single-message delivery - Only split when content actually exceeds the max_length (4000 chars)
  2. Remove the and "\n" not in content condition - This was causing unnecessary splits for any content with newlines
  3. Use paragraph-based splitting - When splitting is necessary, use _split_markdown_blocks() for intelligent paragraph-aware splitting instead of line-by-line splitting

Changes

- if len(content) <= max_length and "\n" not in content:
+ if len(content) <= max_length:
      return [content]

The function now:

  • Returns the entire content as a single message if it fits within 4000 chars
  • Only splits when necessary using markdown-aware block splitting
  • Preserves the safety mechanisms for oversized blocks

Testing

  • Manual testing confirmed that messages with multiple paragraphs are now delivered as a single message on WeChat
  • Long messages exceeding 4000 chars still split correctly at paragraph boundaries

Impact

  • Improved user experience on WeChat platform
  • Reduced notification spam
  • No breaking changes - the function still respects the max_length limit

The original implementation split messages at every newline character,
causing WeChat to receive multiple fragmented messages for content that
could have been delivered as a single message. This led to a poor user
experience with messages arriving in multiple parts.

Changes:
- Modified _split_text_for_weixin_delivery() to prefer single-message
  delivery when content fits within WeChat's 4000 character limit
- Only split when content actually exceeds max_length
- Use _split_markdown_blocks() for paragraph-based splitting instead of
  line-by-line splitting when splitting is necessary
- Removed the 'no newline' condition that was causing unnecessary splits

This fix ensures that messages are delivered as complete units on WeChat,
improving readability and reducing notification spam.
teknium1 added a commit that referenced this pull request Apr 11, 2026
The Weixin adapter was splitting responses at every top-level newline,
causing notification spam (up to 70 API calls for a single long markdown
response). This salvages the best aspects of six contributor PRs:

Compact mode (new default):
- Messages under the 4000-char limit stay as a single bubble even with
  multiple lines, paragraphs, and code blocks
- Only oversized messages get split at logical markdown boundaries
- Inter-chunk delay (0.3s) between chunks prevents WeChat rate-limit drops

Legacy mode (opt-in):
- Set split_multiline_messages: true in platforms.weixin.extra config
- Or set WEIXIN_SPLIT_MULTILINE_MESSAGES=true env var
- Restores the old per-line splitting behavior

Salvaged from PRs #7797 (guantoubaozi), #7792 (luoxiao6645),
#7838 (qyx596), #7825 (weedge), #7784 (sherunlock03), #7773 (JnyRoad).
Core fix unanimous across all six; config toggle from #7838; inter-chunk
delay from #7825.
teknium1 added a commit that referenced this pull request Apr 11, 2026
)

The Weixin adapter was splitting responses at every top-level newline,
causing notification spam (up to 70 API calls for a single long markdown
response). This salvages the best aspects of six contributor PRs:

Compact mode (new default):
- Messages under the 4000-char limit stay as a single bubble even with
  multiple lines, paragraphs, and code blocks
- Only oversized messages get split at logical markdown boundaries
- Inter-chunk delay (0.3s) between chunks prevents WeChat rate-limit drops

Legacy mode (opt-in):
- Set split_multiline_messages: true in platforms.weixin.extra config
- Or set WEIXIN_SPLIT_MULTILINE_MESSAGES=true env var
- Restores the old per-line splitting behavior

Salvaged from PRs #7797 (guantoubaozi), #7792 (luoxiao6645),
#7838 (qyx596), #7825 (weedge), #7784 (sherunlock03), #7773 (JnyRoad).
Core fix unanimous across all six; config toggle from #7838; inter-chunk
delay from #7825.
@teknium1

Copy link
Copy Markdown
Contributor

Merged via salvage PR #7903. Your contribution — clean minimal fix — was incorporated into the combined fix. All six PRs addressing this issue were synthesized into a single implementation that takes the best aspects of each. Thank you @sherunlock03 for the contribution!

@teknium1 teknium1 closed this Apr 11, 2026
Tommyeds pushed a commit to Tommyeds/hermes-agent that referenced this pull request Apr 12, 2026
…usResearch#7903)

The Weixin adapter was splitting responses at every top-level newline,
causing notification spam (up to 70 API calls for a single long markdown
response). This salvages the best aspects of six contributor PRs:

Compact mode (new default):
- Messages under the 4000-char limit stay as a single bubble even with
  multiple lines, paragraphs, and code blocks
- Only oversized messages get split at logical markdown boundaries
- Inter-chunk delay (0.3s) between chunks prevents WeChat rate-limit drops

Legacy mode (opt-in):
- Set split_multiline_messages: true in platforms.weixin.extra config
- Or set WEIXIN_SPLIT_MULTILINE_MESSAGES=true env var
- Restores the old per-line splitting behavior

Salvaged from PRs NousResearch#7797 (guantoubaozi), NousResearch#7792 (luoxiao6645),
NousResearch#7838 (qyx596), NousResearch#7825 (weedge), NousResearch#7784 (sherunlock03), NousResearch#7773 (JnyRoad).
Core fix unanimous across all six; config toggle from NousResearch#7838; inter-chunk
delay from NousResearch#7825.
aj-nt pushed a commit to aj-nt/hermes-agent that referenced this pull request May 1, 2026
…usResearch#7903)

The Weixin adapter was splitting responses at every top-level newline,
causing notification spam (up to 70 API calls for a single long markdown
response). This salvages the best aspects of six contributor PRs:

Compact mode (new default):
- Messages under the 4000-char limit stay as a single bubble even with
  multiple lines, paragraphs, and code blocks
- Only oversized messages get split at logical markdown boundaries
- Inter-chunk delay (0.3s) between chunks prevents WeChat rate-limit drops

Legacy mode (opt-in):
- Set split_multiline_messages: true in platforms.weixin.extra config
- Or set WEIXIN_SPLIT_MULTILINE_MESSAGES=true env var
- Restores the old per-line splitting behavior

Salvaged from PRs NousResearch#7797 (guantoubaozi), NousResearch#7792 (luoxiao6645),
NousResearch#7838 (qyx596), NousResearch#7825 (weedge), NousResearch#7784 (sherunlock03), NousResearch#7773 (JnyRoad).
Core fix unanimous across all six; config toggle from NousResearch#7838; inter-chunk
delay from NousResearch#7825.
02356abc pushed a commit to 02356abc/hermes-agent that referenced this pull request May 14, 2026
…usResearch#7903)

The Weixin adapter was splitting responses at every top-level newline,
causing notification spam (up to 70 API calls for a single long markdown
response). This salvages the best aspects of six contributor PRs:

Compact mode (new default):
- Messages under the 4000-char limit stay as a single bubble even with
  multiple lines, paragraphs, and code blocks
- Only oversized messages get split at logical markdown boundaries
- Inter-chunk delay (0.3s) between chunks prevents WeChat rate-limit drops

Legacy mode (opt-in):
- Set split_multiline_messages: true in platforms.weixin.extra config
- Or set WEIXIN_SPLIT_MULTILINE_MESSAGES=true env var
- Restores the old per-line splitting behavior

Salvaged from PRs NousResearch#7797 (guantoubaozi), NousResearch#7792 (luoxiao6645),
NousResearch#7838 (qyx596), NousResearch#7825 (weedge), NousResearch#7784 (sherunlock03), NousResearch#7773 (JnyRoad).
Core fix unanimous across all six; config toggle from NousResearch#7838; inter-chunk
delay from NousResearch#7825.
gweeteve pushed a commit to gweeteve/hermes-agent that referenced this pull request Jun 2, 2026
…usResearch#7903)

The Weixin adapter was splitting responses at every top-level newline,
causing notification spam (up to 70 API calls for a single long markdown
response). This salvages the best aspects of six contributor PRs:

Compact mode (new default):
- Messages under the 4000-char limit stay as a single bubble even with
  multiple lines, paragraphs, and code blocks
- Only oversized messages get split at logical markdown boundaries
- Inter-chunk delay (0.3s) between chunks prevents WeChat rate-limit drops

Legacy mode (opt-in):
- Set split_multiline_messages: true in platforms.weixin.extra config
- Or set WEIXIN_SPLIT_MULTILINE_MESSAGES=true env var
- Restores the old per-line splitting behavior

Salvaged from PRs NousResearch#7797 (guantoubaozi), NousResearch#7792 (luoxiao6645),
NousResearch#7838 (qyx596), NousResearch#7825 (weedge), NousResearch#7784 (sherunlock03), NousResearch#7773 (JnyRoad).
Core fix unanimous across all six; config toggle from NousResearch#7838; inter-chunk
delay from NousResearch#7825.
waefrebeorn pushed a commit to waefrebeorn/slermes that referenced this pull request Jul 2, 2026
…usResearch#7903)

The Weixin adapter was splitting responses at every top-level newline,
causing notification spam (up to 70 API calls for a single long markdown
response). This salvages the best aspects of six contributor PRs:

Compact mode (new default):
- Messages under the 4000-char limit stay as a single bubble even with
  multiple lines, paragraphs, and code blocks
- Only oversized messages get split at logical markdown boundaries
- Inter-chunk delay (0.3s) between chunks prevents WeChat rate-limit drops

Legacy mode (opt-in):
- Set split_multiline_messages: true in platforms.weixin.extra config
- Or set WEIXIN_SPLIT_MULTILINE_MESSAGES=true env var
- Restores the old per-line splitting behavior

Salvaged from PRs NousResearch#7797 (guantoubaozi), NousResearch#7792 (luoxiao6645),
NousResearch#7838 (qyx596), NousResearch#7825 (weedge), NousResearch#7784 (sherunlock03), NousResearch#7773 (JnyRoad).
Core fix unanimous across all six; config toggle from NousResearch#7838; inter-chunk
delay from NousResearch#7825.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants