11import datetime
2- import sqlparse
32from typing import List
43
54import orjson
6- from sqlalchemy import and_
7- from sqlalchemy . orm import load_only
5+ import sqlparse
6+ from sqlalchemy import and_ , select
87
98from apps .chat .models .chat_model import Chat , ChatRecord , CreateChat , ChatInfo , RenameChat , ChatQuestion
109from apps .datasource .models .datasource import CoreDatasource
@@ -47,26 +46,29 @@ def delete_chat(session, chart_id) -> str:
4746
4847
4948def get_chat_chart_data (session : SessionDep , chart_record_id : int ):
50- res = session .query (ChatRecord ).options (load_only (ChatRecord .data )).get (chart_record_id )
51- if res :
49+ stmt = select (ChatRecord .data ).where (and_ (ChatRecord .id == chart_record_id ))
50+ res = session .execute (stmt )
51+ for row in res :
5252 try :
53- return orjson .loads (res .data )
53+ return orjson .loads (row .data )
5454 except Exception :
5555 pass
5656 return {}
5757
5858
5959def get_chat_predict_data (session : SessionDep , chart_record_id : int ):
60- res = session .query (ChatRecord ).options (load_only (ChatRecord .predict_data )).get (chart_record_id )
61- if res :
60+ stmt = select (ChatRecord .predict_data ).where (and_ (ChatRecord .id == chart_record_id ))
61+ res = session .execute (stmt )
62+ for row in res :
6263 try :
63- return orjson .loads (res .predict_data )
64+ return orjson .loads (row .predict_data )
6465 except Exception :
6566 pass
66- return ''
67+ return {}
6768
6869
69- def get_chat_with_records (session : SessionDep , chart_id : int , current_user : CurrentUser , current_assistant : CurrentAssistant ) -> ChatInfo :
70+ def get_chat_with_records (session : SessionDep , chart_id : int , current_user : CurrentUser ,
71+ current_assistant : CurrentAssistant ) -> ChatInfo :
7072 chat = session .get (Chat , chart_id )
7173 if not chat :
7274 raise Exception (f"Chat with id { chart_id } not found" )
@@ -78,7 +80,7 @@ def get_chat_with_records(session: SessionDep, chart_id: int, current_user: Curr
7880 ds = out_ds_instance .get_ds (chat .datasource )
7981 else :
8082 ds = session .get (CoreDatasource , chat .datasource ) if chat .datasource else None
81-
83+
8284 if not ds :
8385 chat_info .datasource_exists = False
8486 chat_info .datasource_name = 'Datasource not exist'
@@ -87,14 +89,25 @@ def get_chat_with_records(session: SessionDep, chart_id: int, current_user: Curr
8789 chat_info .datasource_name = ds .name
8890 chat_info .ds_type = ds .type
8991
90- record_list = session .query (ChatRecord ).options (
91- load_only (ChatRecord .id , ChatRecord .chat_id , ChatRecord .create_time , ChatRecord .finish_time ,
92- ChatRecord .question , ChatRecord .sql_answer , ChatRecord .sql , ChatRecord .data ,
92+ stmt = select (ChatRecord .id , ChatRecord .chat_id , ChatRecord .create_time , ChatRecord .finish_time ,
93+ ChatRecord .question , ChatRecord .sql_answer , ChatRecord .sql ,
9394 ChatRecord .chart_answer , ChatRecord .chart , ChatRecord .analysis , ChatRecord .predict ,
9495 ChatRecord .datasource_select_answer , ChatRecord .analysis_record_id , ChatRecord .predict_record_id ,
9596 ChatRecord .recommended_question , ChatRecord .first_chat ,
96- ChatRecord .predict_data , ChatRecord .finish , ChatRecord .error )).filter (
97- and_ (Chat .create_by == current_user .id , ChatRecord .chat_id == chart_id )).order_by (ChatRecord .create_time ).all ()
97+ ChatRecord .finish , ChatRecord .error ).where (
98+ and_ (ChatRecord .create_by == current_user .id , ChatRecord .chat_id == chart_id )).order_by (ChatRecord .create_time )
99+ result = session .execute (stmt ).all ()
100+ record_list : list [ChatRecord ] = []
101+ for row in result :
102+ record_list .append (
103+ ChatRecord (id = row .id , chat_id = row .chat_id , create_time = row .create_time , finish_time = row .finish_time ,
104+ question = row .question , sql_answer = row .sql_answer , sql = row .sql ,
105+ chart_answer = row .chart_answer , chart = row .chart ,
106+ analysis = row .analysis , predict = row .predict ,
107+ datasource_select_answer = row .datasource_select_answer ,
108+ analysis_record_id = row .analysis_record_id , predict_record_id = row .predict_record_id ,
109+ recommended_question = row .recommended_question , first_chat = row .first_chat ,
110+ finish = row .finish , error = row .error ))
98111
99112 result = list (map (format_record , record_list ))
100113
0 commit comments