Skip to content

fix: 修复对话消息未持久化及压缩任务 DB session 过期问题#28

Merged
robscc merged 1 commit intomainfrom
fix/session-message-persistence
Mar 19, 2026
Merged

fix: 修复对话消息未持久化及压缩任务 DB session 过期问题#28
robscc merged 1 commit intomainfrom
fix/session-message-persistence

Conversation

@robscc
Copy link
Owner

@robscc robscc commented Mar 19, 2026

Summary

  • 修复 StreamingResponse 下 user/assistant 消息未持久化:FastAPI < 0.118.0 的依赖清理在流完成前执行,导致 get_db()commit() 早于消息写入。升级 FastAPI >= 0.118.0 并在 reply() / reply_stream() 中添加防御性显式 commit。
  • 修复后台压缩/提炼任务复用已关闭的请求级 DB session_compress()_flush_background() 改为使用独立的 AsyncSessionLocal + bg_memory,避免 'prepared' state 错误。
  • 修复 BufferMemory 构造函数错误参数及集成测试 UNIQUE 约束冲突。

Test plan

  • 531 unit/integration tests 全部通过
  • E2E 验证:新建会话 → 发送消息 → 刷新页面 → 历史消息正常加载
  • E2E 验证:发送多条消息 → 触发 token 压缩 → 旧消息标记 compressed → 摘要消息插入 → context_tokens 重置
  • 前端正确展示压缩分隔线("📦 以上 N 条已压缩为摘要")

🤖 Generated with Claude Code

根因:FastAPI < 0.118.0 的 StreamingResponse 依赖清理在流完成前执行,
导致 get_db() 的 commit() 在消息写入之前就已调用,user/assistant 消息丢失。
压缩/提炼后台任务复用已关闭的请求级 DB session,导致 'prepared' state 错误。

修复:
- 升级 FastAPI >= 0.118.0 修复 StreamingResponse 生命周期
- reply() / reply_stream() 中显式 commit 确保消息持久化(防御性编程)
- _compress() / _flush_background() 使用独立 AsyncSessionLocal + bg_memory
- 修复 BufferMemory 构造函数错误参数
- 修复集成测试 UNIQUE 约束冲突

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@robscc robscc merged commit 3495335 into main Mar 19, 2026
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.

1 participant