Skip to content

V0.5.0

Latest

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 30 Oct 02:40
decc982

✨ 新特性

会话标签

  • amrita_memory_sessions 表新增 tag 列(VARCHAR(64),可为空),用于存放归档时由模型生成的一行短摘要,也可由 /session rename 手动改写。
  • 旧数据该列为 NULL,用于区分「从未生成过标签」与「生成失败/被清空」;展示侧按 tag → data.abstract → 首条用户消息 的顺序逐级回落。
  • 标签长度统一在写入前截断到 64 字符(_clip_tag):SQLite 不校验 VARCHAR 长度,但严格方言会直接拒写,模型生成的摘要长度不可控,这里统一收口,避免归档因标签过长而失败。

新增数据库/接口方法

  • MemorySessions.add_session(data, tag=None):插入归档并返回 (id, created_at),created_at 显式取值,便于后续回填标签时精确定位该行。
  • MemorySessions.update_session_tag(session_id, tag, created_at):条件写,仅在 tag IS NULL 且 id、user_id、created_at 全部匹配时生效,用于归档流程的标签回填。
  • MemorySessions.rename_session(session_id, tag, created_at=None):强制写,用于用户手动重命名,不校验 tag IS NULL;调用方持有 created_at 时建议一并传入,防止主键回收后改到新行。
  • 对应在 AmritaMemory(memory.py)上暴露同名方法,均复用 database_lock(owner) 与 add_session 串行,避免 SQLite 上的交叉写入。

🐛 问题修复

会话列表排序不稳定

  • get() 现在显式使用 ORDER BY created_at ASC, id ASC。/session list 的编号、use / del / rename 均按下标定位,而 SQLite 的 id 会回收复用,仅依赖隐式 rowid 顺序并不稳定;同一秒内连续归档导致 created_at 相同时,再以 id 兜底。
  • _expire() 同步改为 ORDER BY created_at DESC, id DESC,与 get() 保持同一口径,避免在保留边界上删掉列表顺序里本该保留的那条。

主键回收导致的误写

  • 写入标签时同时校验 id、user_id 与 created_at,防止 SQLite 回收复用 id 后,把旧会话的标签写到新行,或改到他人的归档上。

🗃️ 数据库迁移

  • 新增迁移 9a1f4c7b2d30_session_tag(父迁移 072361e8936f):
    • upgrade:为 amrita_memory_sessions 添加 tag 列(nullable=True,无 server_default,旧行保持 NULL)。
    • downgrade:删除该列。
  • 升级时自动执行,无需手动干预。

⬆️ 升级说明

  • 版本号:0.4.0 → 0.5.0。
  • 由于涉及表结构变更,升级后首次启动会触发 Alembic 迁移;建议升级前备份数据库文件。
  • add_session 的返回值由 None 变为 (id, created_at),如有直接调用请按需适配;update_session_tag / rename_session 为新增接口,对现有调用无影响。

What's Changed

  • feat: session tag for archived sessions by @AmriaLin in #2

Full Changelog: 0.4.0...0.5.0