From 966f9e7367684f93349a347c9dbd69c763d3ae7b Mon Sep 17 00:00:00 2001 From: zhaoqingang <zhaoqg0118@163.com> Date: 星期三, 08 一月 2025 14:24:40 +0800 Subject: [PATCH] 出错时返回错误信息 --- app/api/chat.py | 61 +++++++++++++++++++++++++++--- 1 files changed, 54 insertions(+), 7 deletions(-) diff --git a/app/api/chat.py b/app/api/chat.py index d223c69..00aa7f8 100644 --- a/app/api/chat.py +++ b/app/api/chat.py @@ -1,6 +1,7 @@ import json import re import uuid +from copy import deepcopy from fastapi import WebSocket, WebSocketDisconnect, APIRouter, Depends import asyncio @@ -423,9 +424,7 @@ print(f"Error process message of ragflow: {e2}") elif agent.type == "reportWorkflow": - token = DfTokenDao(db).get_token_by_id(DOCUMENT_TO_CLEANING) - if not token: - await websocket.send_json({"message": "Invalid token document_to_cleaning", "type": "error"}) + while True: receive_message = await websocket.receive_json() print(f"Received from client {chat_id}: {receive_message}") @@ -479,6 +478,10 @@ inputs_list = [] is_next = 0 if workflow_type == 1: + token = DfTokenDao(db).get_token_by_id(DOCUMENT_TO_CLEANING) + if not token: + await websocket.send_json( + {"message": "Invalid token document_to_cleaning", "type": "error"}) inputs["input_files"] = files inputs["Completion_of_main_indicators"] = title inputs_list.append({"inputs": inputs, "token": token, "workflow_type": workflow_type}) @@ -501,6 +504,10 @@ {"message": "Invalid token document_to_title", "type": "error"}) inputs_list.append({"inputs": inputs, "token": token, "workflow_type": workflow_type}) elif workflow_type == 3 and is_clean == 1 or tokens >= max_token: + token = DfTokenDao(db).get_token_by_id(DOCUMENT_TO_CLEANING) + if not token: + await websocket.send_json( + {"message": "Invalid token document_to_cleaning", "type": "error"}) inputs["input_files"] = files inputs["Completion_of_main_indicators"] = title inputs_list.append({"inputs": inputs, "token": token, "workflow_type": 1}) @@ -544,7 +551,15 @@ try: data = json.loads(complete_response) # print(data) - node_list.append(data) + node_data = deepcopy(data) + if "data" in node_data: + if "outputs" in node_data["data"]: + node_data["data"]["outputs"] = {} + if "inputs" in node_data["data"]: + node_data["data"]["inputs"] = {} + # print(node_data) + node_list.append(node_data) + complete_response = "" if data.get("event") == "node_started": # "event": "message_end" @@ -562,6 +577,7 @@ message = answer.get("title", "") + result = {"message": message, "type": "system"} elif data.get("event") == "node_finished": workflow_list.append({ @@ -573,6 +589,18 @@ "elapsed_time":data.get("data", {}).get("elapsed_time", 0), "error":data.get("data", {}).get("error", ""), }) + answer = data.get("data", "") + if isinstance(answer, str): + logger.error("----------------鏈煡鏁版嵁--------------------") + logger.error(data) + continue + elif isinstance(answer, dict): + + message = answer.get("title", "") + if answer.get("status") == "failed": + message = answer.get("error", "") + result = {"message": message, "type": "system"} + elif data.get("event") == "workflow_finished": answer = data.get("data", "") if isinstance(answer, str): @@ -623,7 +651,7 @@ logger.error(e) logger.error("杩斿洖瀹㈡埛绔秷鎭紓甯�!") - result = {"message": "", "type": "close", "workflow": workflow_dict, "is_next": is_next} + result = {"message": "", "type": "close", "workflow": workflow_dict, "is_next": is_next, "download_url": download_url} else: @@ -634,6 +662,7 @@ logger.error(e) logger.error("杩斿洖瀹㈡埛绔秷鎭紓甯�!") complete_response = "" + except json.JSONDecodeError as e: print(f"Error decoding JSON: {e}") # print(f"Response text: {text}") @@ -660,8 +689,14 @@ complete_response += rag_response try: data = json.loads(complete_response) - node_list.append(data) - # print(data) + node_data = deepcopy(data) + if "data" in node_data: + if "outputs" in node_data["data"]: + node_data["data"]["outputs"] = {} + if "inputs" in node_data["data"]: + node_data["data"]["inputs"] = {} + # print(node_data) + node_list.append(node_data) complete_response = "" if data.get("event") == "node_started": # "event": "message_end" if "data" not in data or not data["data"]: # 淇℃伅杩囨护 @@ -689,6 +724,18 @@ "elapsed_time":data.get("data", {}).get("elapsed_time", 0), "error":data.get("data", {}).get("error", ""), }) + + answer = data.get("data", "") + if isinstance(answer, str): + logger.error("----------------鏈煡鏁版嵁--------------------") + logger.error(data) + continue + elif isinstance(answer, dict): + + message = answer.get("title", "") + if answer.get("status") == "failed": + message = answer.get("error", "") + result = {"message": message, "type": "system"} elif data.get("event") == "message": answer_str = data.get("answer", "") # try: -- Gitblit v1.8.0