50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
"""persistent user memory table
|
|
|
|
Revision ID: 005_persistent_user_memory
|
|
Revises: 004_add_tools_table
|
|
Create Date: 2026-04-06
|
|
|
|
"""
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
from sqlalchemy.dialects.mysql import CHAR, JSON
|
|
|
|
|
|
revision = "005_persistent_user_memory"
|
|
down_revision = "004_add_tools_table"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
op.create_table(
|
|
"persistent_user_memories",
|
|
sa.Column("id", CHAR(36), nullable=False, comment="主键"),
|
|
sa.Column("scope_kind", sa.String(16), nullable=False, comment="agent 或 workflow"),
|
|
sa.Column("scope_id", CHAR(36), nullable=False, comment="Agent ID 或 Workflow ID"),
|
|
sa.Column("session_key", sa.String(512), nullable=False, comment="会话键 user_id"),
|
|
sa.Column("payload", JSON(), nullable=False, comment="记忆 JSON"),
|
|
sa.Column(
|
|
"updated_at",
|
|
sa.DateTime(),
|
|
server_default=sa.text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"),
|
|
nullable=True,
|
|
comment="更新时间",
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
sa.UniqueConstraint("scope_kind", "scope_id", "session_key", name="uq_persistent_mem_scope_session"),
|
|
mysql_charset="utf8mb4",
|
|
mysql_collate="utf8mb4_unicode_ci",
|
|
)
|
|
op.create_index(
|
|
"ix_persistent_mem_lookup",
|
|
"persistent_user_memories",
|
|
["scope_kind", "scope_id", "session_key"],
|
|
unique=False,
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_index("ix_persistent_mem_lookup", table_name="persistent_user_memories")
|
|
op.drop_table("persistent_user_memories")
|