Affected area
Conversations / streaming
Version or commit
v0.1.2
Environment
OS: 任意
Browser: Web 端
Deployment: local / Docker / separated frontend-backend 均可能
Model provider: 任意支持流式、工具调用或可能中途失败的模型提供方
Scenario: 流式回复、工具调用、上游报错、网络中断、继续生成、重试
Reproduction steps
- 打开一个已有会话,发送一条会触发较长流式输出或工具调用的消息。
- 让模型调用在中途失败,例如上游返回错误、工具调用失败、网络中断,或生成过程中主动/被动中断。
- 观察当前 assistant 消息是否保留已输出内容和工具轨迹。
- 点击继续生成或重试。
- 观察分支切换器、当前消息链路和后续消息是否稳定展示。
Expected behavior
调用失败或中断后,如果本轮已经产生可见内容、思考过程或工具调用轨迹,应该保留到当前 assistant 消息中,并将消息标记为 interrupted / failed,而不是让消息从当前分支中消失。
继续生成时,应基于这条已保留的 interrupted assistant 消息继续追加新的上下文,不应出现分支不可用、消息链断开、临时消息消失、或继续后看不到上一段输出的问题。
如果失败发生在没有任何可保留内容之前,也应该给出清晰错误状态,并确保分支选择回退到最近一个可用的服务端消息节点。
Actual behavior
在调用报错或调用失败后,有时会出现以下现象:
- 当前分支变成不可用,分支切换器无法正常定位。
- 已经流式输出过的内容在刷新或继续生成后消失。
- 继续生成后,前一次失败消息没有稳定保留在当前消息链路中。
- 本地临时消息和服务端真实消息之间切换时,可能导致当前可见分支跳变。
初步排查定位:
- 后端已有
persistInterruptedMessageGeneration 逻辑,只会在已有 assistant 文本或工具轨迹时保留 interrupted 消息。
- 如果失败发生在该逻辑成功落库之前,或没有满足保留条件,user/assistant 消息可能最终被标记为 error,默认上下文不会继续使用该失败分支。
- 前端
pendingExchange 会先插入临时 user/assistant 消息,并设置临时分支选择;失败后依赖 reload() 拉取服务端消息并 reconcile 分支。
- 如果服务端只落库了部分状态、reload 失败、或临时 ID 与真实 ID 切换窗口处理不稳定,就可能出现消息消失或分支不可用。
- 继续生成目前要求 assistant 消息状态为 interrupted;如果失败消息被标记为 error 或没有保留内容,继续入口会不可用。
Logs, screenshots, or request samples
Configuration and deployment context
No response
Pre-submit checklist
Affected area
Conversations / streaming
Version or commit
v0.1.2
Environment
OS: 任意
Browser: Web 端
Deployment: local / Docker / separated frontend-backend 均可能
Model provider: 任意支持流式、工具调用或可能中途失败的模型提供方
Scenario: 流式回复、工具调用、上游报错、网络中断、继续生成、重试
Reproduction steps
Expected behavior
调用失败或中断后,如果本轮已经产生可见内容、思考过程或工具调用轨迹,应该保留到当前 assistant 消息中,并将消息标记为 interrupted / failed,而不是让消息从当前分支中消失。
继续生成时,应基于这条已保留的 interrupted assistant 消息继续追加新的上下文,不应出现分支不可用、消息链断开、临时消息消失、或继续后看不到上一段输出的问题。
如果失败发生在没有任何可保留内容之前,也应该给出清晰错误状态,并确保分支选择回退到最近一个可用的服务端消息节点。
Actual behavior
在调用报错或调用失败后,有时会出现以下现象:
初步排查定位:
persistInterruptedMessageGeneration逻辑,只会在已有 assistant 文本或工具轨迹时保留 interrupted 消息。pendingExchange会先插入临时 user/assistant 消息,并设置临时分支选择;失败后依赖reload()拉取服务端消息并 reconcile 分支。Logs, screenshots, or request samples
Configuration and deployment context
No response
Pre-submit checklist