跨模型与供应商切换后恢复旧线程,导致模型错配和对话持续报错
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 395
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
**提交人**: Brady
**客户端版本**: 0.1.73
---
在同一对话中多次切换不同模型和供应商后,模型选择开始影响正常使用:界面显示已切换,但下一次发送有时仍恢复此前模型或此前供应商的线程;随后对话持续报错,继续切换也不能自行恢复,只能新建对话绕过。
复现方式:
1. 新建对话并正常发送消息。
2. 在同一对话内切换到另一供应商的模型并发送消息。
3. 再切回原供应商或切换到第三个模型,继续发送消息。
4. 观察实际恢复的模型、供应商和错误提示。
实际结果:
- 启动请求中的目标模型或供应商,与恢复线程显示的实际模型或供应商不一致。
- 选择第三方模型后,请求可能仍通过 ChatGPT Codex 通道发送,返回“该模型不支持使用 ChatGPT account”的 400 错误。
- 某次第三方模型响应产生了不符合 OpenAI ID 规则的历史消息 ID;切回 OpenAI 后,历史重放持续返回 `invalid_id_prefix`。之后即使继续切换受支持模型,同一对话仍会重复失败。
- Codex 与 Claude Code 之间的切换先登记为“下一次发送时生效”,连续切换时用户难以判断当前实际由哪个运行时处理。
- Claude Code 运行期间还出现未识别 `command_lifecycle` 事件的警告,可能导致界面状态不能准确反映命令进度。
预期结果:
- 每次模型切换后,下一条消息应由用户选择的模型和对应供应商处理。
- 恢复的线程若与目标供应商不兼容,应安全迁移或创建兼容线程,不能由旧线程设置覆盖新选择。
- 跨供应商历史不应因消息 ID 格式差异导致整个对话永久不可用。
- 切换状态应明确可见,失败时不应留下半切换状态。
影响:该问题会使已有对话无法继续,并且界面选择与实际运行状态不一致,已经影响模型切换功能的日常使用。当前只能通过新建对话临时规避。
脱敏诊断摘要:问题在 Cindy 0.1.73 的 macOS 客户端上复现。日志显示同一次切换中,启动参数指定了新的模型和 provider,但 `thread/resume` 仍恢复为此前的 OpenAI provider;相关失败包括历史输入 ID 前缀校验失败,以及第三方模型被错误发送至 ChatGPT Codex 上游。
---
## 提交时的任务环境
仅代表提交时快照,不一定是故障环境。OS 来自提交客户端本机,不含 SSH 远端主机;Harness / 模型来自当前任务。与运行环境无关的反馈可忽略本段。
**版本区域**: CN
**OS**: darwin arm64 (24.6.0)
**Harness**: Codex
**Model ID**: ` gpt-5.6-sol `
**界面语言**: zh-CN
Contributor guide
Research direction
Trace model and provider selection from the launch parameters into thread/resume, then examine history replay and Codex/Claude Code runtime switching. Reproduce the listed cross-provider sequence and verify that the selected provider handles the next message, incompatible threads do not override it, and failures do not leave the conversation unusable or in a half-switched state.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- ai, backend-api-design, desktop
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100