From e26a7859a8900b152e10961d91fa6ad19a8deb9c Mon Sep 17 00:00:00 2001 From: zhaoqingang <zhaoqg0118@163.com> Date: 星期四, 06 三月 2025 14:41:27 +0800 Subject: [PATCH] 首页通用对话增加 --- app/api/chat.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 46 insertions(+), 8 deletions(-) diff --git a/app/api/chat.py b/app/api/chat.py index f6153df..d4b6dae 100644 --- a/app/api/chat.py +++ b/app/api/chat.py @@ -71,11 +71,12 @@ chat_history = message.get('chatHistory', []) message["role"] = "user" if len(chat_history) == 0: + print("----------------------", token) chat_history = await ragflow_service.get_session_history(token, chat_id) if len(chat_history) == 0: chat_history = await ragflow_service.set_session(token, agent_id, message, chat_id, True) - # print("chat_history------------------------", chat_history) + print("chat_history------------------------", chat_history) if len(chat_history) == 0: result = {"message": "鍐呴儴閿欒锛氬垱寤轰細璇濆け璐�", "type": "close"} await websocket.send_json(result) @@ -819,6 +820,8 @@ token = DfTokenDao(db).get_token_by_id(token_dict[chat_type]) # print(token) node_list = [] + workflow_list = [] + workflow_dict = {} if not token: await websocket.send_json({"message": "Invalid token", "type": "error"}) @@ -879,8 +882,7 @@ node_data["data"]["inputs"] = {} # print(node_data) node_list.append(node_data) - if data.get("event") == "node_started" or data.get( - "event") == "node_finished": # "event": "message_end" + if data.get("event") == "node_started": if "data" not in data or not data["data"]: # 淇℃伅杩囨护 logger.error("闈炴硶鏁版嵁--------------------") logger.error(data) @@ -897,16 +899,43 @@ else: message = answer.get("title", "") - result = {"message": message, "type": "system"} - # continue + result = {"message": message, "type": "system", "workflow": {"node_data": workflow_list}} + elif data.get("event") == "node_finished": + workflow_list.append({ + "title": data.get("data", {}).get("title", ""), + "status": data.get("data", {}).get("status", ""), + "created_at": data.get("data", {}).get("created_at", 0), + "finished_at": data.get("data", {}).get("finished_at", 0), + "node_type": data.get("data", {}).get("node_type", 0), + "elapsed_time": data.get("data", {}).get("elapsed_time", 0), + "error": data.get("data", {}).get("error", ""), + }) + if "data" not in data or not data["data"]: # 淇℃伅杩囨护 + logger.error("闈炴硶鏁版嵁--------------------") + logger.error(data) + continue + else: # 姝e父杈撳嚭 + answer = data.get("data", "") + if isinstance(answer, str): + logger.error("----------------鏈煡鏁版嵁--------------------") + logger.error(data) + continue + elif isinstance(answer, dict): + if answer.get("status") == "failed": + message = answer.get("error", "") + else: + message = answer.get("title", "") + + result = {"message": message, "type": "system", + "workflow": {"node_data": workflow_list}} elif data.get("event") == "message": # "event": "message_end" # 姝e父杈撳嚭 answer = data.get("answer", "") - result = {"message": answer, "type": "stream"} + result = {"message": answer, "type": "stream", "workflow": {"node_data": workflow_list}} elif data.get("event") == "error": # "event": "message_end" # 姝e父杈撳嚭 answer = data.get("message", "") - result = {"message": answer, "type": "system"} + result = {"message": answer, "type": "system", "workflow": {"node_data": workflow_list}} elif data.get("event") == "workflow_finished": answer = data.get("data", "") if isinstance(answer, str): @@ -938,9 +967,18 @@ logger.error("淇濆瓨dify鐨勪細璇濆紓甯革紒") logger.error(e) # await websocket.send_json(result) + workflow_dict = { + "node_data": workflow_list, + "total_tokens": data.get("data", {}).get("total_tokens", 0), + "created_at": data.get("data", {}).get("created_at", 0), + "finished_at": data.get("data", {}).get("finished_at", 0), + "status": data.get("data", {}).get("status", ""), + "error": data.get("data", {}).get("error", ""), + "elapsed_time": data.get("data", {}).get("elapsed_time", 0) + } continue elif data.get("event") == "message_end": - result = {"message": "", "type": "close"} + result = {"message": "", "type": "close","workflow": workflow_dict} else: continue -- Gitblit v1.8.0