88 lines
3.9 KiB
Python
88 lines
3.9 KiB
Python
"""add agentkit extension tables
|
|
|
|
Revision ID: b001_agentkit_extension
|
|
Revises: a79329c23b20
|
|
Create Date: 2026-06-04
|
|
|
|
新增 fischer-agentkit 扩展表:
|
|
- episodic_memories: 经验记忆
|
|
- evolution_logs: 进化日志
|
|
- ab_test_configs: A/B测试配置
|
|
"""
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
from sqlalchemy.dialects import postgresql
|
|
|
|
revision = "b001_agentkit_extension"
|
|
down_revision = "a79329c23b20"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
# episodic_memories
|
|
op.create_table(
|
|
"episodic_memories",
|
|
sa.Column("id", sa.Uuid(), nullable=False),
|
|
sa.Column("agent_name", sa.String(50), nullable=False),
|
|
sa.Column("task_type", sa.String(50), nullable=False),
|
|
sa.Column("input_data", postgresql.JSONB(), nullable=True),
|
|
sa.Column("output_data", postgresql.JSONB(), nullable=True),
|
|
sa.Column("success", sa.Boolean(), nullable=True),
|
|
sa.Column("quality_score", sa.Float(), nullable=True),
|
|
sa.Column("reflection", sa.Text(), nullable=True),
|
|
sa.Column("embedding_id", sa.String(100), nullable=True),
|
|
sa.Column("tags", postgresql.JSONB(), nullable=True),
|
|
sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index("idx_episodic_agent_name", "episodic_memories", ["agent_name"])
|
|
op.create_index("idx_episodic_task_type", "episodic_memories", ["task_type"])
|
|
op.create_index("idx_episodic_created_at", "episodic_memories", ["created_at"])
|
|
|
|
# evolution_logs
|
|
op.create_table(
|
|
"evolution_logs",
|
|
sa.Column("id", sa.Uuid(), nullable=False),
|
|
sa.Column("agent_name", sa.String(50), nullable=False),
|
|
sa.Column("change_type", sa.String(30), nullable=False),
|
|
sa.Column("before", postgresql.JSONB(), nullable=True),
|
|
sa.Column("after", postgresql.JSONB(), nullable=True),
|
|
sa.Column("metrics", postgresql.JSONB(), nullable=True),
|
|
sa.Column("ab_test_id", sa.String(100), nullable=True),
|
|
sa.Column("status", sa.String(20), server_default="pending", nullable=False),
|
|
sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index("idx_evolution_agent_name", "evolution_logs", ["agent_name"])
|
|
op.create_index("idx_evolution_change_type", "evolution_logs", ["change_type"])
|
|
op.create_index("idx_evolution_status", "evolution_logs", ["status"])
|
|
op.create_index("idx_evolution_created_at", "evolution_logs", ["created_at"])
|
|
|
|
# ab_test_configs
|
|
op.create_table(
|
|
"ab_test_configs",
|
|
sa.Column("id", sa.Uuid(), nullable=False),
|
|
sa.Column("agent_name", sa.String(50), nullable=False),
|
|
sa.Column("test_name", sa.String(100), nullable=False),
|
|
sa.Column("variant_a", postgresql.JSONB(), nullable=False),
|
|
sa.Column("variant_b", postgresql.JSONB(), nullable=False),
|
|
sa.Column("traffic_split", sa.Float(), server_default="0.5", nullable=False),
|
|
sa.Column("status", sa.String(20), server_default="running", nullable=False),
|
|
sa.Column("winner", sa.String(10), nullable=True),
|
|
sa.Column("metrics", postgresql.JSONB(), nullable=True),
|
|
sa.Column("started_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False),
|
|
sa.Column("ended_at", sa.DateTime(timezone=True), nullable=True),
|
|
sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index("idx_ab_test_agent_name", "ab_test_configs", ["agent_name"])
|
|
op.create_index("idx_ab_test_status", "ab_test_configs", ["status"])
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_table("ab_test_configs")
|
|
op.drop_table("evolution_logs")
|
|
op.drop_table("episodic_memories")
|