This commit is contained in:
2025-09-08 16:35:40 +08:00
parent f08e2d97e4
commit b0e6e737b6

View File

@@ -0,0 +1,131 @@
"""035_create_chat_log
Revision ID: 68a06302cf70
Revises: 29559ee607af
Create Date: 2025-08-18 16:02:43.353110
"""
from alembic import op
import sqlalchemy as sa
import sqlmodel.sql.sqltypes
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = '68a06302cf70'
down_revision = '646e7ca28e0e'
branch_labels = None
depends_on = None
sql='''
CREATE OR REPLACE FUNCTION safe_jsonb_cast(text) RETURNS jsonb AS
$$
BEGIN
RETURN $1::jsonb;
EXCEPTION
WHEN others THEN
RETURN to_json($1::text)::jsonb;
END;
$$ LANGUAGE plpgsql;
INSERT INTO chat_log(type, operate, pid, ai_modal_id, messages, start_time, finish_time, token_usage, reasoning_content)
SELECT '0',
'0',
id,
ai_modal_id,
safe_jsonb_cast(full_sql_message),
create_time,
finish_time,
safe_jsonb_cast(token_sql),
safe_jsonb_cast(sql_answer)->>'reasoning_content'
FROM chat_record
WHERE full_sql_message IS NOT NULL;
INSERT INTO chat_log(type, operate, pid, ai_modal_id, messages, start_time, finish_time, token_usage, reasoning_content)
SELECT '0',
'1',
id,
ai_modal_id,
safe_jsonb_cast(full_chart_message),
create_time,
finish_time,
safe_jsonb_cast(token_chart),
safe_jsonb_cast(chart_answer)->>'reasoning_content'
FROM chat_record
WHERE full_chart_message IS NOT NULL;
INSERT INTO chat_log(type, operate, pid, ai_modal_id, messages, start_time, finish_time, token_usage, reasoning_content)
SELECT '0',
'2',
id,
ai_modal_id,
safe_jsonb_cast(full_analysis_message),
create_time,
finish_time,
safe_jsonb_cast(token_analysis),
safe_jsonb_cast(analysis)->>'reasoning_content'
FROM chat_record
WHERE full_analysis_message IS NOT NULL;
INSERT INTO chat_log(type, operate, pid, ai_modal_id, messages, start_time, finish_time, token_usage, reasoning_content)
SELECT '0',
'3',
id,
ai_modal_id,
safe_jsonb_cast(full_predict_message),
create_time,
finish_time,
safe_jsonb_cast(token_predict),
safe_jsonb_cast(predict)->>'reasoning_content'
FROM chat_record
WHERE full_predict_message IS NOT NULL;
INSERT INTO chat_log(type, operate, pid, ai_modal_id, messages, start_time, finish_time, token_usage, reasoning_content)
SELECT '0',
'4',
id,
ai_modal_id,
safe_jsonb_cast(full_recommended_question_message),
create_time,
finish_time,
safe_jsonb_cast(token_recommended_question),
safe_jsonb_cast(recommended_question_answer)->>'reasoning_content'
FROM chat_record
WHERE full_recommended_question_message IS NOT NULL;
INSERT INTO chat_log(type, operate, pid, ai_modal_id, messages, start_time, finish_time, token_usage, reasoning_content)
SELECT '0',
'6',
id,
ai_modal_id,
safe_jsonb_cast(full_select_datasource_message),
create_time,
finish_time,
safe_jsonb_cast(token_select_datasource_question),
safe_jsonb_cast(datasource_select_answer)->>'reasoning_content'
FROM chat_record
WHERE full_select_datasource_message IS NOT NULL;
'''
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('chat_log',
sa.Column('id', sa.BigInteger(), sa.Identity(always=True), nullable=False),
sa.Column('type', sa.Enum('0', name='typeenum', native_enum=False, length=3), nullable=True),
sa.Column('operate', sa.Enum('0', '1', '2', '3', '4', '5', '6', name='operationenum', native_enum=False, length=3), nullable=True),
sa.Column('pid', sa.BigInteger(), nullable=True),
sa.Column('ai_modal_id', sa.BigInteger(), nullable=True),
sa.Column('base_modal', sqlmodel.sql.sqltypes.AutoString(length=255), nullable=True),
sa.Column('messages', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
sa.Column('reasoning_content', sa.Text(), nullable=True),
sa.Column('start_time', sa.DateTime(), nullable=True),
sa.Column('finish_time', sa.DateTime(), nullable=True),
sa.Column('token_usage', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
sa.PrimaryKeyConstraint('id')
)
op.execute(sql)
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table('chat_log')
# ### end Alembic commands ###