mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-08-06 10:54:29 +00:00
bugfix(ChatData): ChatData Use AntV Table
1.Merge ChatData and ChatDB
This commit is contained in:
parent
74a3f6edb5
commit
440a3e955f
@ -29,8 +29,6 @@ from pilot.scene.message import OnceConversation
|
|||||||
from pilot.scene.chat_dashboard.data_loader import DashboardDataLoader
|
from pilot.scene.chat_dashboard.data_loader import DashboardDataLoader
|
||||||
from pilot.scene.chat_db.data_loader import DbDataLoader
|
from pilot.scene.chat_db.data_loader import DbDataLoader
|
||||||
from pilot.memory.chat_history.chat_hisotry_factory import ChatHistory
|
from pilot.memory.chat_history.chat_hisotry_factory import ChatHistory
|
||||||
from pilot.base_modules.agent.commands.command_mange import ApiCall
|
|
||||||
|
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
CFG = Config()
|
CFG = Config()
|
||||||
@ -103,16 +101,12 @@ async def get_editor_sql(con_uid: str, round: int):
|
|||||||
logger.info(
|
logger.info(
|
||||||
f'history ai json resp:{element["data"]["content"]}'
|
f'history ai json resp:{element["data"]["content"]}'
|
||||||
)
|
)
|
||||||
api_call = ApiCall()
|
context = (
|
||||||
api_call.update_from_context(element["data"]["content"])
|
element["data"]["content"]
|
||||||
result = {}
|
.replace("\\n", " ")
|
||||||
result['thoughts'] = element["data"]["content"].replace("\n", " ").replace("\\n", " ")
|
.replace("\n", " ")
|
||||||
if api_call.check_last_plugin_call_ready(element["data"]["content"]):
|
)
|
||||||
|
return Result.succ(json.loads(context))
|
||||||
if len(api_call.plugin_status_map) > 0:
|
|
||||||
first_item = next(iter(api_call.plugin_status_map.items()))[1]
|
|
||||||
result['sql'] = first_item.args["sql"]
|
|
||||||
return Result.succ(result)
|
|
||||||
return Result.faild(msg="not have sql!")
|
return Result.faild(msg="not have sql!")
|
||||||
|
|
||||||
|
|
||||||
@ -140,6 +134,7 @@ async def editor_sql_run(run_param: dict = Body()):
|
|||||||
)
|
)
|
||||||
return Result.succ(sql_run_data)
|
return Result.succ(sql_run_data)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
logging.error("editor_sql_run exception!" + str(e))
|
||||||
return Result.succ(
|
return Result.succ(
|
||||||
SqlRunData(result_info=str(e), run_cost=0, colunms=[], values=[])
|
SqlRunData(result_info=str(e), run_cost=0, colunms=[], values=[])
|
||||||
)
|
)
|
||||||
@ -162,18 +157,17 @@ async def sql_editor_submit(sql_edit_context: ChatSqlEditContext = Body()):
|
|||||||
)
|
)
|
||||||
)[0]
|
)[0]
|
||||||
if edit_round:
|
if edit_round:
|
||||||
new_ai_text = ""
|
|
||||||
for element in edit_round["messages"]:
|
for element in edit_round["messages"]:
|
||||||
if element["type"] == "ai":
|
if element["type"] == "ai":
|
||||||
new_ai_text = element["data"]["content"]
|
db_resp = json.loads(element["data"]["content"])
|
||||||
new_ai_text.replace(sql_edit_context.old_sql, sql_edit_context.new_sql)
|
db_resp["thoughts"] = sql_edit_context.new_speak
|
||||||
element["data"]["content"] = new_ai_text
|
db_resp["sql"] = sql_edit_context.new_sql
|
||||||
|
element["data"]["content"] = json.dumps(db_resp)
|
||||||
for element in edit_round["messages"]:
|
|
||||||
if element["type"] == "view":
|
if element["type"] == "view":
|
||||||
api_call = ApiCall()
|
data_loader = DbDataLoader()
|
||||||
new_view_text = api_call.run_display_sql(new_ai_text, conn.run_to_df)
|
element["data"]["content"] = data_loader.get_table_view_by_conn(
|
||||||
element["data"]["content"] = new_view_text
|
conn.run_to_df(sql_edit_context.new_sql), sql_edit_context.new_speak
|
||||||
|
)
|
||||||
history_mem.update(history_messages)
|
history_mem.update(history_messages)
|
||||||
return Result.succ(None)
|
return Result.succ(None)
|
||||||
return Result.faild(msg="Edit Faild!")
|
return Result.faild(msg="Edit Faild!")
|
||||||
|
@ -24,7 +24,7 @@ class DbChatOutputParser(BaseOutputParser):
|
|||||||
|
|
||||||
def parse_prompt_response(self, model_out_text):
|
def parse_prompt_response(self, model_out_text):
|
||||||
clean_str = super().parse_prompt_response(model_out_text)
|
clean_str = super().parse_prompt_response(model_out_text)
|
||||||
print("clean prompt response:", clean_str)
|
logging.info("clean prompt response:", clean_str)
|
||||||
response = json.loads(clean_str)
|
response = json.loads(clean_str)
|
||||||
for key in sorted(response):
|
for key in sorted(response):
|
||||||
if key.strip() == "sql":
|
if key.strip() == "sql":
|
||||||
@ -43,16 +43,16 @@ class DbChatOutputParser(BaseOutputParser):
|
|||||||
param["type"] = "response_table"
|
param["type"] = "response_table"
|
||||||
param["sql"] = prompt_response.sql
|
param["sql"] = prompt_response.sql
|
||||||
param["data"] = json.loads(df.to_json(orient='records', date_format='iso', date_unit='s'))
|
param["data"] = json.loads(df.to_json(orient='records', date_format='iso', date_unit='s'))
|
||||||
view_json_str = json.dumps(param, default=serialize)
|
view_json_str = json.dumps(param, default=serialize, ensure_ascii=False)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("parse_view_response error!" + str(e))
|
logger.error("parse_view_response error!" + str(e))
|
||||||
err_param = {}
|
err_param = {}
|
||||||
err_param["sql"] = f'{prompt_response.sql}'
|
err_param["sql"] = f'{prompt_response.sql}'
|
||||||
err_param["type"] = "response_table"
|
err_param["type"] = "response_table"
|
||||||
err_param["err_msg"] = str(e)
|
# err_param["err_msg"] = str(e)
|
||||||
err_param["data"] = []
|
err_param["data"] = []
|
||||||
err_msg = str(e)
|
err_msg = str(e)
|
||||||
view_json_str = json.dumps(err_param, default=serialize)
|
view_json_str = json.dumps(err_param, default=serialize, ensure_ascii=False)
|
||||||
|
|
||||||
api_call_element.text = view_json_str
|
api_call_element.text = view_json_str
|
||||||
result = ET.tostring(api_call_element, encoding="utf-8")
|
result = ET.tostring(api_call_element, encoding="utf-8")
|
||||||
|
@ -1,13 +1,45 @@
|
|||||||
class DbDataLoader:
|
import xml.etree.ElementTree as ET
|
||||||
def get_table_view_by_conn(self, data, speak):
|
import json
|
||||||
import pandas as pd
|
import logging
|
||||||
|
|
||||||
### tool out data to table view
|
from pilot.common.json_utils import serialize
|
||||||
if len(data) < 1:
|
|
||||||
data.insert(0, ["result"])
|
class DbDataLoader:
|
||||||
df = pd.DataFrame(data[1:], columns=data[0])
|
def get_table_view_by_conn(self, data, speak, sql:str=None):
|
||||||
html_table = df.to_html(index=False, escape=False, sparsify=False)
|
# import pandas as pd
|
||||||
table_str = "".join(html_table.split())
|
#
|
||||||
html = f"""<div class="w-full overflow-auto">{table_str}</div>"""
|
# ### tool out data to table view
|
||||||
view_text = f"##### {str(speak)}" + "\n" + html.replace("\n", " ")
|
# if len(data) < 1:
|
||||||
return view_text
|
# data.insert(0, ["result"])
|
||||||
|
# df = pd.DataFrame(data[1:], columns=data[0])
|
||||||
|
# html_table = df.to_html(index=False, escape=False, sparsify=False)
|
||||||
|
# table_str = "".join(html_table.split())
|
||||||
|
# html = f"""<div class="w-full overflow-auto">{table_str}</div>"""
|
||||||
|
# view_text = f"##### {str(speak)}" + "\n" + html.replace("\n", " ")
|
||||||
|
# return view_text
|
||||||
|
|
||||||
|
param = {}
|
||||||
|
api_call_element = ET.Element("chart-view")
|
||||||
|
err_msg = None
|
||||||
|
try:
|
||||||
|
|
||||||
|
param["type"] = "response_table"
|
||||||
|
param["sql"] = sql
|
||||||
|
param["data"] = json.loads(data.to_json(orient='records', date_format='iso', date_unit='s'))
|
||||||
|
view_json_str = json.dumps(param, default=serialize, ensure_ascii=False)
|
||||||
|
except Exception as e:
|
||||||
|
logging.error("parse_view_response error!" + str(e))
|
||||||
|
err_param = {}
|
||||||
|
err_param["sql"] = f'{sql}'
|
||||||
|
err_param["type"] = "response_table"
|
||||||
|
err_param["err_msg"] = str(e)
|
||||||
|
err_param["data"] = []
|
||||||
|
err_msg = str(e)
|
||||||
|
view_json_str = json.dumps(err_param, default=serialize, ensure_ascii=False)
|
||||||
|
|
||||||
|
api_call_element.text = view_json_str
|
||||||
|
result = ET.tostring(api_call_element, encoding="utf-8")
|
||||||
|
if err_msg:
|
||||||
|
return f"""{speak} \\n <span style=\"color:red\">ERROR!</span>{err_msg} \n {result.decode("utf-8")}"""
|
||||||
|
else:
|
||||||
|
return speak + "\n" + result.decode("utf-8")
|
Loading…
Reference in New Issue
Block a user