3131from apps .datasource .crud .row_permission import transFilterTree
3232from apps .datasource .models .datasource import CoreDatasource , CoreTable
3333from apps .db .db import exec_sql
34- from apps .system .crud .assistant import AssistantOutDs , get_assistant_ds
34+ from apps .system .crud .assistant import AssistantOutDs , AssistantOutDsFactory , get_assistant_ds
35+ from apps .system .schemas .system_schema import AssistantOutDsSchema
3536from common .core .config import settings
3637from common .core .deps import CurrentAssistant , SessionDep , CurrentUser
3738from common .utils .utils import extract_nested_json
@@ -67,15 +68,23 @@ def __init__(self, session: SessionDep, current_user: CurrentUser, chat_question
6768 chat : Chat = self .session .get (Chat , chat_id )
6869 if not chat :
6970 raise Exception (f"Chat with id { chat_id } not found" )
70- ds : CoreDatasource | None = None
71+ ds : CoreDatasource | AssistantOutDsSchema | None = None
7172 if chat .datasource :
7273 # Get available datasource
7374 # ds = self.session.query(CoreDatasource).filter(CoreDatasource.id == chat.datasource).first()
74- ds = self .session .get (CoreDatasource , chat .datasource )
75- if not ds :
76- raise Exception ("No available datasource configuration found" )
77-
78- chat_question .engine = ds .type_name if ds .type != 'excel' else 'PostgreSQL'
75+ if current_assistant and current_assistant .type == 1 :
76+ self .out_ds_instance = AssistantOutDsFactory .get_instance (current_assistant )
77+ ds = self .out_ds_instance .get_ds (chat .datasource )
78+ if not ds :
79+ raise Exception ("No available datasource configuration found" )
80+ chat_question .engine = ds .type
81+ chat_question .db_schema = self .out_ds_instance .get_db_schema (ds .id )
82+ else :
83+ ds = self .session .get (CoreDatasource , chat .datasource )
84+ if not ds :
85+ raise Exception ("No available datasource configuration found" )
86+ chat_question .engine = ds .type_name if ds .type != 'excel' else 'PostgreSQL'
87+ chat_question .db_schema = get_table_schema (session = self .session , current_user = current_user , ds = ds )
7988
8089 history_records : List [ChatRecord ] = list (
8190 map (lambda x : ChatRecord (** x .model_dump ()), filter (lambda r : True if r .first_chat != True else False ,
@@ -84,13 +93,9 @@ def __init__(self, session: SessionDep, current_user: CurrentUser, chat_question
8493 chart_id = chat_id ))))
8594 self .change_title = len (history_records ) == 0
8695
87- # get schema
88- if ds :
89- chat_question .db_schema = get_table_schema (session = self .session , current_user = current_user , ds = ds )
90-
9196 chat_question .lang = current_user .language
9297
93- self .ds = CoreDatasource (** ds .model_dump ()) if ds else None
98+ self .ds = ( ds if isinstance ( ds , AssistantOutDsSchema ) else CoreDatasource (** ds .model_dump () )) if ds else None
9499 self .chat_question = chat_question
95100 self .config = get_default_config ()
96101 self .chat_question .ai_modal_id = self .config .model_id
@@ -298,7 +303,7 @@ def generate_recommend_questions_task(self):
298303
299304 # get schema
300305 if self .ds and not self .chat_question .db_schema :
301- self .chat_question .db_schema = get_table_schema (session = self .session , current_user = self .current_user , ds = self .ds )
306+ self .chat_question .db_schema = self . out_ds_instance . get_db_schema ( self . ds . id ) if self . out_ds_instance else get_table_schema (session = self .session , current_user = self .current_user , ds = self .ds )
302307
303308 guess_msg : List [Union [BaseMessage , dict [str , Any ]]] = []
304309 guess_msg .append (SystemMessage (content = self .chat_question .guess_sys_question ()))
0 commit comments