Skip to content

fix weixin chunk delivery retries - #7899

Closed
corazzione wants to merge 1 commit into
NousResearch:mainfrom
corazzione:fix-weixin-chunk-delivery
Closed

fix weixin chunk delivery retries#7899
corazzione wants to merge 1 commit into
NousResearch:mainfrom
corazzione:fix-weixin-chunk-delivery

Conversation

@corazzione

Copy link
Copy Markdown
Contributor

Summary

Adds per-chunk retry and pacing for Weixin text delivery so long replies split into multiple bubbles are less likely to lose trailing chunks silently.

Root cause

The Weixin adapter sent all split text chunks in a tight loop and treated each _send_message call as a single-attempt operation. If iLink/WeChat temporarily rejected, throttled, or dropped a later chunk, the adapter had no retry/backoff around that specific chunk before moving through the turn lifecycle.

Changes

  • Add configurable Weixin chunk delivery settings for inter-chunk delay, retry count, and retry delay.
  • Send each text chunk through a helper that retries failures before reporting the send as failed.
  • Reuse the same client_id for retries of a given chunk so duplicate delivery can be de-duplicated by the backend when supported.
  • Add regression coverage for pacing between chunks and retrying a failed middle chunk before continuing.

Validation

  • python -m pytest tests/gateway/test_weixin.py tests/tools/test_send_message_tool.py -q -n0
  • python -m py_compile gateway/platforms/weixin.py tests/gateway/test_weixin.py
  • git diff --check

Fixes #7836

teknium1 pushed a commit that referenced this pull request Apr 11, 2026
When sending multi-chunk responses, individual chunks can fail due to
transient iLink API errors. Previously a single failure would abort the
entire message. Now each chunk is retried with linear backoff before
giving up, and the same client_id is reused across retries for
server-side deduplication.

Configurable via config.yaml (platforms.weixin.extra) or env vars:
- send_chunk_delay_seconds (default 0.35s) — pacing between chunks
- send_chunk_retries (default 2) — max retry attempts per chunk
- send_chunk_retry_delay_seconds (default 1.0s) — base retry delay

Replaces the hardcoded 0.3s inter-chunk delay from #7903.

Salvaged from PR #7899 by @corazzione. Fixes #7836.
teknium1 pushed a commit that referenced this pull request Apr 11, 2026
When sending multi-chunk responses, individual chunks can fail due to
transient iLink API errors. Previously a single failure would abort the
entire message. Now each chunk is retried with linear backoff before
giving up, and the same client_id is reused across retries for
server-side deduplication.

Configurable via config.yaml (platforms.weixin.extra) or env vars:
- send_chunk_delay_seconds (default 0.35s) — pacing between chunks
- send_chunk_retries (default 2) — max retry attempts per chunk
- send_chunk_retry_delay_seconds (default 1.0s) — base retry delay

Replaces the hardcoded 0.3s inter-chunk delay from #7903.

Salvaged from PR #7899 by @corazzione. Fixes #7836.
@teknium1

Copy link
Copy Markdown
Contributor

Merged via salvage PR #7932 with your authorship preserved. Your per-chunk retry logic, configurable delay, and client_id dedup were cherry-picked onto current main (reconciled with the inter-chunk delay from #7903). Thank you @corazzione!

@teknium1 teknium1 closed this Apr 11, 2026
@corazzione
corazzione deleted the fix-weixin-chunk-delivery branch April 12, 2026 03:57
Tommyeds pushed a commit to Tommyeds/hermes-agent that referenced this pull request Apr 12, 2026
When sending multi-chunk responses, individual chunks can fail due to
transient iLink API errors. Previously a single failure would abort the
entire message. Now each chunk is retried with linear backoff before
giving up, and the same client_id is reused across retries for
server-side deduplication.

Configurable via config.yaml (platforms.weixin.extra) or env vars:
- send_chunk_delay_seconds (default 0.35s) — pacing between chunks
- send_chunk_retries (default 2) — max retry attempts per chunk
- send_chunk_retry_delay_seconds (default 1.0s) — base retry delay

Replaces the hardcoded 0.3s inter-chunk delay from NousResearch#7903.

Salvaged from PR NousResearch#7899 by @corazzione. Fixes NousResearch#7836.
aj-nt pushed a commit to aj-nt/hermes-agent that referenced this pull request May 1, 2026
When sending multi-chunk responses, individual chunks can fail due to
transient iLink API errors. Previously a single failure would abort the
entire message. Now each chunk is retried with linear backoff before
giving up, and the same client_id is reused across retries for
server-side deduplication.

Configurable via config.yaml (platforms.weixin.extra) or env vars:
- send_chunk_delay_seconds (default 0.35s) — pacing between chunks
- send_chunk_retries (default 2) — max retry attempts per chunk
- send_chunk_retry_delay_seconds (default 1.0s) — base retry delay

Replaces the hardcoded 0.3s inter-chunk delay from NousResearch#7903.

Salvaged from PR NousResearch#7899 by @corazzione. Fixes NousResearch#7836.
02356abc pushed a commit to 02356abc/hermes-agent that referenced this pull request May 14, 2026
When sending multi-chunk responses, individual chunks can fail due to
transient iLink API errors. Previously a single failure would abort the
entire message. Now each chunk is retried with linear backoff before
giving up, and the same client_id is reused across retries for
server-side deduplication.

Configurable via config.yaml (platforms.weixin.extra) or env vars:
- send_chunk_delay_seconds (default 0.35s) — pacing between chunks
- send_chunk_retries (default 2) — max retry attempts per chunk
- send_chunk_retry_delay_seconds (default 1.0s) — base retry delay

Replaces the hardcoded 0.3s inter-chunk delay from NousResearch#7903.

Salvaged from PR NousResearch#7899 by @corazzione. Fixes NousResearch#7836.
gweeteve pushed a commit to gweeteve/hermes-agent that referenced this pull request Jun 2, 2026
When sending multi-chunk responses, individual chunks can fail due to
transient iLink API errors. Previously a single failure would abort the
entire message. Now each chunk is retried with linear backoff before
giving up, and the same client_id is reused across retries for
server-side deduplication.

Configurable via config.yaml (platforms.weixin.extra) or env vars:
- send_chunk_delay_seconds (default 0.35s) — pacing between chunks
- send_chunk_retries (default 2) — max retry attempts per chunk
- send_chunk_retry_delay_seconds (default 1.0s) — base retry delay

Replaces the hardcoded 0.3s inter-chunk delay from NousResearch#7903.

Salvaged from PR NousResearch#7899 by @corazzione. Fixes NousResearch#7836.
waefrebeorn pushed a commit to waefrebeorn/slermes that referenced this pull request Jul 2, 2026
When sending multi-chunk responses, individual chunks can fail due to
transient iLink API errors. Previously a single failure would abort the
entire message. Now each chunk is retried with linear backoff before
giving up, and the same client_id is reused across retries for
server-side deduplication.

Configurable via config.yaml (platforms.weixin.extra) or env vars:
- send_chunk_delay_seconds (default 0.35s) — pacing between chunks
- send_chunk_retries (default 2) — max retry attempts per chunk
- send_chunk_retry_delay_seconds (default 1.0s) — base retry delay

Replaces the hardcoded 0.3s inter-chunk delay from NousResearch#7903.

Salvaged from PR NousResearch#7899 by @corazzione. Fixes NousResearch#7836.
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.

Weixin: multi-part replies can drop trailing chunks while the agent believes all parts were delivered

2 participants