Skip to content

Commit d2c1f8c

Browse files
perf: Query Response Time Optimization for Advanced Assistant
1 parent 073e616 commit d2c1f8c

File tree

1 file changed

+27
-15
lines changed

1 file changed

+27
-15
lines changed

backend/apps/chat/task/llm.py

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
executor = ThreadPoolExecutor(max_workers=200)
4747

4848
dynamic_ds_types = [1, 3]
49-
49+
dynamic_subsql_prefix = 'select * from sqlbot_dynamic_temp_table_'
5050

5151
class LLMService:
5252
ds: CoreDatasource
@@ -615,12 +615,17 @@ def generate_with_sub_sql(self, sql, sub_mappings: list):
615615
def generate_assistant_dynamic_sql(self, sql, tables: List):
616616
ds: AssistantOutDsSchema = self.ds
617617
sub_query = []
618+
result_dict = {}
618619
for table in ds.tables:
619620
if table.name in tables and table.sql:
620-
sub_query.append({"table": table.name, "query": table.sql})
621+
#sub_query.append({"table": table.name, "query": table.sql})
622+
result_dict[table.name] = table.sql
623+
sub_query.append({"table": table.name, "query": f'{dynamic_subsql_prefix}{table.name}'})
621624
if not sub_query:
622625
return None
623-
return self.generate_with_sub_sql(sql=sql, sub_mappings=sub_query)
626+
temp_sql_text = self.generate_with_sub_sql(sql=sql, sub_mappings=sub_query)
627+
result_dict['sqlbot_temp_sql_text'] = temp_sql_text
628+
return result_dict
624629

625630
def build_table_filter(self, sql: str, filters: list):
626631
filter = json.dumps(filters, ensure_ascii=False)
@@ -983,27 +988,27 @@ def run_task(self, in_chat: bool = True):
983988
chart_type = self.get_chart_type_from_sql_answer(full_sql_text)
984989

985990
use_dynamic_ds: bool = self.current_assistant and self.current_assistant.type in dynamic_ds_types
986-
991+
is_page_embedded: bool = self.current_assistant and self.current_assistant.type == 4
992+
dynamic_sql_result = None
993+
sqlbot_temp_sql_text = None
994+
assistant_dynamic_sql = None
987995
# todo row permission
988-
if (not self.current_assistant and is_normal_user(self.current_user)) or use_dynamic_ds:
996+
if ((not self.current_assistant or is_page_embedded) and is_normal_user(self.current_user)) or use_dynamic_ds:
989997
sql, tables = self.check_sql(res=full_sql_text)
990998
sql_result = None
991-
dynamic_sql_result = None
992-
if self.current_assistant:
999+
1000+
if use_dynamic_ds:
9931001
dynamic_sql_result = self.generate_assistant_dynamic_sql(sql, tables)
994-
if dynamic_sql_result:
995-
SQLBotLogUtil.info(dynamic_sql_result)
996-
sql, *_ = self.check_sql(res=dynamic_sql_result)
997-
998-
sql_result = self.generate_assistant_filter(sql, tables)
1002+
sqlbot_temp_sql_text = dynamic_sql_result.get('sqlbot_temp_sql_text') if dynamic_sql_result else None
1003+
#sql_result = self.generate_assistant_filter(sql, tables)
9991004
else:
10001005
sql_result = self.generate_filter(sql, tables) # maybe no sql and tables
10011006

10021007
if sql_result:
10031008
SQLBotLogUtil.info(sql_result)
10041009
sql = self.check_save_sql(res=sql_result)
1005-
elif dynamic_sql_result:
1006-
sql = self.check_save_sql(res=dynamic_sql_result)
1010+
elif dynamic_sql_result and sqlbot_temp_sql_text:
1011+
assistant_dynamic_sql = self.check_save_sql(res=sqlbot_temp_sql_text)
10071012
else:
10081013
sql = self.check_save_sql(res=full_sql_text)
10091014
else:
@@ -1017,7 +1022,14 @@ def run_task(self, in_chat: bool = True):
10171022
yield f'```sql\n{format_sql}\n```\n\n'
10181023

10191024
# execute sql
1020-
result = self.execute_sql(sql=sql)
1025+
real_execute_sql = sql
1026+
if sqlbot_temp_sql_text and assistant_dynamic_sql:
1027+
dynamic_sql_result.pop('sqlbot_temp_sql_text')
1028+
for origin_table, subsql in dynamic_sql_result.items():
1029+
assistant_dynamic_sql = assistant_dynamic_sql.replace(f'{dynamic_subsql_prefix}{origin_table}', subsql)
1030+
real_execute_sql = assistant_dynamic_sql
1031+
1032+
result = self.execute_sql(sql=real_execute_sql)
10211033
self.save_sql_data(data_obj=result)
10221034
if in_chat:
10231035
yield 'data:' + orjson.dumps({'content': 'execute-success', 'type': 'sql-data'}).decode() + '\n\n'

0 commit comments

Comments
 (0)