Skip to content

feat(weixin): add split_messages config to control message splitting … - #7797

Closed
guantoubaozi wants to merge 1 commit into
NousResearch:mainfrom
guantoubaozi:feat/weixin-split-messages-config
Closed

feat(weixin): add split_messages config to control message splitting …#7797
guantoubaozi wants to merge 1 commit into
NousResearch:mainfrom
guantoubaozi:feat/weixin-split-messages-config

Conversation

@guantoubaozi

Copy link
Copy Markdown

Title:

feat(weixin): add split_messages config to control message splitting behavior

Description:

## Problem

The Weixin adapter splits every response into multiple messages — one per paragraph or top-level line break. While this was designed for readability, in practice it makes responses appear as a flood of separate message bubbles in WeChat, which many users find noisy and hard to follow.

Currently there is no way to control this behavior.

## Solution

Add a new `split_messages` configuration option for the Weixin adapter:

| Value | Behavior |
|-------|----------|
| `true` (default) | Split at paragraph boundaries — **current behavior, unchanged** |
| `false` | Keep responses in a single message when under `MAX_MESSAGE_LENGTH` (4000 chars) |

Oversized content (> 4000 chars) always falls back to block-aware splitting regardless of this setting.

### Configuration

Via `config.yaml`:

```yaml
platforms:
  weixin:
    extra:
      split_messages: false
```

Or via environment variable:

```env
WEIXIN_SPLIT_MESSAGES=false
```

## Changes

- `WeixinAdapter.__init__()`: Read `split_messages` from `extra` config or `WEIXIN_SPLIT_MESSAGES` env var (default: `true`)
- `WeixinAdapter._split_text()`: When `split_messages` is `false`, skip per-line splitting and return content as a single message (or use block-aware packing for oversized content)

## Backward Compatibility

Default is `true`, so existing behavior is completely unchanged. Users who prefer merged messages can opt in by setting the config.

## Testing

Tested with personal WeChat (iLink Bot API) in production gateway:

- `split_messages: true` (default): responses split at paragraph boundaries ✅
- `split_messages: false`: short responses delivered as single message ✅
- `split_messages: false` + long response (> 4000 chars): split at block boundaries ✅
- Code fences: preserved intact in both modes ✅
- Markdown formatting: renders correctly in both modes ✅

…behavior

Add a new 'split_messages' option for the Weixin adapter that controls
whether responses are split into multiple messages at paragraph
boundaries (default, preserving current behavior) or kept as a single
message when under MAX_MESSAGE_LENGTH.

Configurable via:
- config.yaml: platforms.weixin.extra.split_messages: false
- Environment variable: WEIXIN_SPLIT_MESSAGES=false

Default is 'true' (current behavior unchanged). Setting to 'false'
delivers the full response as one message, which many users prefer
for readability in WeChat's chat UI.
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 — simplest core 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 @guantoubaozi 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.
prmartinow pushed a commit to prmartinow/hermes-agent that referenced this pull request Aug 26, 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