diff --git a/api/migrations/versions/2025_10_11_1529-d00b2b40ea3e_add_chatflow_memory_tables.py b/api/migrations/versions/2025_10_11_1529-d00b2b40ea3e_add_chatflow_memory_tables.py new file mode 100644 index 0000000000..d1c39943e7 --- /dev/null +++ b/api/migrations/versions/2025_10_11_1529-d00b2b40ea3e_add_chatflow_memory_tables.py @@ -0,0 +1,104 @@ +"""add_chatflow_memory_tables + +Revision ID: d00b2b40ea3e +Revises: 68519ad5cd18 +Create Date: 2025-10-11 15:29:20.244675 + +""" +from alembic import op +import models as models +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'd00b2b40ea3e' +down_revision = '68519ad5cd18' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('chatflow_conversations', + sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('tenant_id', models.types.StringUUID(), nullable=False), + sa.Column('app_id', models.types.StringUUID(), nullable=False), + sa.Column('node_id', sa.Text(), nullable=True), + sa.Column('original_conversation_id', models.types.StringUUID(), nullable=True), + sa.Column('conversation_metadata', sa.Text(), nullable=False), + sa.Column('created_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=False), + sa.Column('updated_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=False), + sa.PrimaryKeyConstraint('id', name='chatflow_conversations_pkey') + ) + with op.batch_alter_table('chatflow_conversations', schema=None) as batch_op: + batch_op.create_index('chatflow_conversations_original_conversation_id_idx', ['tenant_id', 'app_id', 'node_id', 'original_conversation_id'], unique=False) + + op.create_table('chatflow_memory_variables', + sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('tenant_id', models.types.StringUUID(), nullable=False), + sa.Column('app_id', models.types.StringUUID(), nullable=True), + sa.Column('conversation_id', models.types.StringUUID(), nullable=True), + sa.Column('node_id', sa.Text(), nullable=True), + sa.Column('memory_id', sa.Text(), nullable=False), + sa.Column('value', sa.Text(), nullable=False), + sa.Column('name', sa.Text(), nullable=False), + sa.Column('scope', sa.String(length=10), nullable=False), + sa.Column('term', sa.String(length=20), nullable=False), + sa.Column('version', sa.Integer(), nullable=False), + sa.Column('created_by_role', sa.String(length=20), nullable=False), + sa.Column('created_by', models.types.StringUUID(), nullable=False), + sa.Column('created_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=False), + sa.Column('updated_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=False), + sa.PrimaryKeyConstraint('id', name='chatflow_memory_variables_pkey') + ) + with op.batch_alter_table('chatflow_memory_variables', schema=None) as batch_op: + batch_op.create_index('chatflow_memory_variables_memory_id_idx', ['tenant_id', 'app_id', 'node_id', 'memory_id'], unique=False) + + op.create_table('chatflow_messages', + sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('conversation_id', models.types.StringUUID(), nullable=False), + sa.Column('index', sa.Integer(), nullable=False), + sa.Column('version', sa.Integer(), nullable=False), + sa.Column('data', sa.Text(), nullable=False), + sa.Column('created_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=False), + sa.PrimaryKeyConstraint('id', name='chatflow_messages_pkey') + ) + with op.batch_alter_table('chatflow_messages', schema=None) as batch_op: + batch_op.create_index('chatflow_messages_version_idx', ['conversation_id', 'index', 'version'], unique=False) + + with op.batch_alter_table('datasource_providers', schema=None) as batch_op: + batch_op.alter_column('avatar_url', + existing_type=sa.TEXT(), + type_=sa.String(length=255), + existing_nullable=True) + + with op.batch_alter_table('providers', schema=None) as batch_op: + batch_op.drop_column('credential_status') + + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('providers', schema=None) as batch_op: + batch_op.add_column(sa.Column('credential_status', sa.VARCHAR(length=20), server_default=sa.text("'active'::character varying"), autoincrement=False, nullable=True)) + + with op.batch_alter_table('datasource_providers', schema=None) as batch_op: + batch_op.alter_column('avatar_url', + existing_type=sa.String(length=255), + type_=sa.TEXT(), + existing_nullable=True) + + with op.batch_alter_table('chatflow_messages', schema=None) as batch_op: + batch_op.drop_index('chatflow_messages_version_idx') + + op.drop_table('chatflow_messages') + with op.batch_alter_table('chatflow_memory_variables', schema=None) as batch_op: + batch_op.drop_index('chatflow_memory_variables_memory_id_idx') + + op.drop_table('chatflow_memory_variables') + with op.batch_alter_table('chatflow_conversations', schema=None) as batch_op: + batch_op.drop_index('chatflow_conversations_original_conversation_id_idx') + + op.drop_table('chatflow_conversations') + # ### end Alembic commands ###