11import datetime
22from typing import List
3- from sqlalchemy import desc , func
43
54import orjson
65import sqlparse
76from sqlalchemy import and_ , select , update
7+ from sqlalchemy import desc , func
88from sqlalchemy .orm import aliased
99
1010from apps .chat .models .chat_model import Chat , ChatRecord , CreateChat , ChatInfo , RenameChat , ChatQuestion , ChatLog , \
1111 TypeEnum , OperationEnum , ChatRecordResult
12- from apps .datasource .crud .recommended_problem import get_datasource_recommended , get_datasource_recommended_chart
13- from apps .datasource .models .datasource import CoreDatasource , DsRecommendedProblem
12+ from apps .datasource .crud .recommended_problem import get_datasource_recommended_chart
13+ from apps .datasource .models .datasource import CoreDatasource
1414from apps .system .crud .assistant import AssistantOutDsFactory
1515from common .core .deps import CurrentAssistant , SessionDep , CurrentUser , Trans
1616from common .utils .utils import extract_nested_json
@@ -28,11 +28,13 @@ def get_chat_record_by_id(session: SessionDep, record_id: int):
2828 engine_type = r .engine_type , ai_modal_id = r .ai_modal_id , create_by = r .create_by )
2929 return record
3030
31+
3132def get_chat (session : SessionDep , chat_id : int ) -> Chat :
3233 statement = select (Chat ).where (Chat .id == chat_id )
3334 chat = session .exec (statement ).scalars ().first ()
3435 return chat
3536
37+
3638def list_chats (session : SessionDep , current_user : CurrentUser ) -> List [Chat ]:
3739 oid = current_user .oid if current_user .oid is not None else 1
3840 chart_list = session .query (Chat ).filter (and_ (Chat .create_by == current_user .id , Chat .oid == oid )).order_by (
@@ -57,6 +59,7 @@ def list_recent_questions(session: SessionDep, current_user: CurrentUser, dataso
5759 )
5860 return [record [0 ] for record in chat_records ] if chat_records else []
5961
62+
6063def rename_chat (session : SessionDep , rename_object : RenameChat ) -> str :
6164 chat = session .get (Chat , rename_object .id )
6265 if not chat :
@@ -191,7 +194,8 @@ def get_chat_with_records_with_data(session: SessionDep, chart_id: int, current_
191194
192195
193196def get_chat_with_records (session : SessionDep , chart_id : int , current_user : CurrentUser ,
194- current_assistant : CurrentAssistant , with_data : bool = False ,trans : Trans = None ) -> ChatInfo :
197+ current_assistant : CurrentAssistant , with_data : bool = False ,
198+ trans : Trans = None ) -> ChatInfo :
195199 chat = session .get (Chat , chart_id )
196200 if not chat :
197201 raise Exception (f"Chat with id { chart_id } not found" )
@@ -200,7 +204,7 @@ def get_chat_with_records(session: SessionDep, chart_id: int, current_user: Curr
200204
201205 if current_assistant and current_assistant .type in dynamic_ds_types :
202206 out_ds_instance = AssistantOutDsFactory .get_instance (current_assistant )
203- ds = out_ds_instance .get_ds (chat .datasource ,trans )
207+ ds = out_ds_instance .get_ds (chat .datasource , trans )
204208 else :
205209 ds = session .get (CoreDatasource , chat .datasource ) if chat .datasource else None
206210
@@ -221,6 +225,7 @@ def get_chat_with_records(session: SessionDep, chart_id: int, current_user: Curr
221225 ChatRecord .question , ChatRecord .sql_answer , ChatRecord .sql ,
222226 ChatRecord .chart_answer , ChatRecord .chart , ChatRecord .analysis , ChatRecord .predict ,
223227 ChatRecord .datasource_select_answer , ChatRecord .analysis_record_id , ChatRecord .predict_record_id ,
228+ ChatRecord .regenerate_record_id ,
224229 ChatRecord .recommended_question , ChatRecord .first_chat ,
225230 ChatRecord .finish , ChatRecord .error ,
226231 sql_alias_log .reasoning_content .label ('sql_reasoning_content' ),
@@ -247,6 +252,7 @@ def get_chat_with_records(session: SessionDep, chart_id: int, current_user: Curr
247252 ChatRecord .question , ChatRecord .sql_answer , ChatRecord .sql ,
248253 ChatRecord .chart_answer , ChatRecord .chart , ChatRecord .analysis , ChatRecord .predict ,
249254 ChatRecord .datasource_select_answer , ChatRecord .analysis_record_id , ChatRecord .predict_record_id ,
255+ ChatRecord .regenerate_record_id ,
250256 ChatRecord .recommended_question , ChatRecord .first_chat ,
251257 ChatRecord .finish , ChatRecord .error , ChatRecord .data , ChatRecord .predict_data ).where (
252258 and_ (ChatRecord .create_by == current_user .id , ChatRecord .chat_id == chart_id )).order_by (
@@ -264,6 +270,7 @@ def get_chat_with_records(session: SessionDep, chart_id: int, current_user: Curr
264270 analysis = row .analysis , predict = row .predict ,
265271 datasource_select_answer = row .datasource_select_answer ,
266272 analysis_record_id = row .analysis_record_id , predict_record_id = row .predict_record_id ,
273+ regenerate_record_id = row .regenerate_record_id ,
267274 recommended_question = row .recommended_question , first_chat = row .first_chat ,
268275 finish = row .finish , error = row .error ,
269276 sql_reasoning_content = row .sql_reasoning_content ,
@@ -280,6 +287,7 @@ def get_chat_with_records(session: SessionDep, chart_id: int, current_user: Curr
280287 analysis = row .analysis , predict = row .predict ,
281288 datasource_select_answer = row .datasource_select_answer ,
282289 analysis_record_id = row .analysis_record_id , predict_record_id = row .predict_record_id ,
290+ regenerate_record_id = row .regenerate_record_id ,
283291 recommended_question = row .recommended_question , first_chat = row .first_chat ,
284292 finish = row .finish , error = row .error , data = row .data , predict_data = row .predict_data ))
285293
@@ -347,8 +355,9 @@ def format_record(record: ChatRecordResult):
347355
348356 return _dict
349357
358+
350359def get_chat_brief_generate (session : SessionDep , chat_id : int ):
351- chat = get_chat (session = session ,chat_id = chat_id )
360+ chat = get_chat (session = session , chat_id = chat_id )
352361 if chat is not None and chat .brief_generate is not None :
353362 return chat .brief_generate
354363 else :
@@ -468,6 +477,7 @@ def save_question(session: SessionDep, current_user: CurrentUser, question: Chat
468477 record .datasource = chat .datasource
469478 record .engine_type = chat .engine_type
470479 record .ai_modal_id = question .ai_modal_id
480+ record .regenerate_record_id = question .regenerate_record_id
471481
472482 result = ChatRecord (** record .model_dump ())
473483
0 commit comments