Title: GLM-5 下多轮对话触发 `Assistant message count mismatch after formatting` 后会话停止响应
## 环境
- CoPaw: 0.0.7
- Backend LLM: GLM-5
- OS: macOS 26.3.1
## 问题描述
在使用 **GLM-5** 作为后端模型时,CoPaw 在多轮对话后会出现如下 warning,然后会话会直接结束(表现为:console对话框的发送图标置为灰色):
```text
WARNING .../copaw/agents/model_factory.py:168 | Assistant message count mismatch after formatting (13 before, 12 after). Skipping reasoning_content injection.
出现这条 warning 之后,当前会话会停止响应,无法继续正常返回后续内容。
模型更换为GLM-4.7后,即便后台频繁出现该warning,会话仍表现正常。
复现情况
该问题可在 全新 session 中复现,并非仅由旧 session 污染导致。
复现过程大致如下:
-
新建 session
-
前两轮正常对话
-
第三轮开始出现:
Load session state from ...default_xxx.json successfully
Assistant message count mismatch after formatting (...)
Skipping reasoning_content injection
-
随后该会话停止响应,无法继续正常完成本轮对话
关键日志
INFO ... Session file /Users/Frank/.copaw/sessions/default_1773639935443.json does not exist. Skip loading session state.
INFO ... Saved session state to /Users/Frank/.copaw/sessions/default_1773639935443.json successfully.
...
INFO ... Load session state from /Users/Frank/.copaw/sessions/default_1773639935443.json successfully.
WARNING .../copaw/agents/model_factory.py:168 | Assistant message count mismatch after formatting (13 before, 12 after). Skipping reasoning_content injection.
预期行为
- assistant message 数量在 formatting 前后保持一致
reasoning_content 正常注入
- 会话应继续正常响应,不应因该 warning 卡住
实际行为
- formatting 后 assistant message 数量减少 1
reasoning_content 注入被跳过
- warning 出现后,会话停止响应
初步判断
看起来不是旧 session 文件本身的问题,而是 当前会话中生成的某条 assistant 历史消息 在后续回放时,被 _sanitize_tool_messages() 或 formatting 阶段过滤/合并,导致 assistant message 计数不一致。
怀疑与 GLM-5 的 reasoning/thinking message 格式 兼容性有关;reasoning_content 注入被跳过后,后续会话状态可能进入异常,最终表现为当前会话不再响应。
想确认的问题
- 这是否是 GLM-5 在 0.0.7 下的已知兼容问题?
Skipping reasoning_content injection 是否会直接导致当前会话无法继续响应?
- 是否可以在 warning 处增加更详细的 debug 信息,输出是哪条 assistant message 在 formatting 后丢失/变形?