result.py 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. # 给dataops对话助手返回结果
  2. from datetime import datetime
  3. from .messages import MessageTemplate, ErrorType
  4. def success(data=None, message="操作成功", code=200):
  5. """
  6. Return a standardized success response
  7. Args:
  8. data: The data to return
  9. message: A success message
  10. code: HTTP status code
  11. Returns:
  12. dict: A standardized success response
  13. """
  14. return {
  15. "code": code,
  16. "success": True,
  17. "message": message,
  18. "data": data
  19. }
  20. def failed(message="操作失败", code=500, data=None):
  21. """
  22. Return a standardized error response
  23. Args:
  24. message: An error message
  25. code: HTTP status code
  26. data: Optional data to return
  27. Returns:
  28. dict: A standardized error response
  29. """
  30. return {
  31. "code": code,
  32. "success": False,
  33. "message": message,
  34. "data": data
  35. }
  36. # ===== 标准化响应方法 =====
  37. def success_response(response_text=None, data=None, message=MessageTemplate.SUCCESS, code=200):
  38. """
  39. 标准化成功响应,将具体内容放在data.response中
  40. Args:
  41. response_text: 用户看到的具体内容
  42. data: 其他业务数据
  43. message: 高层级描述信息
  44. code: HTTP状态码
  45. Returns:
  46. dict: 标准化成功响应
  47. """
  48. response_data = data or {}
  49. if response_text is not None:
  50. response_data["response"] = response_text
  51. return {
  52. "code": code,
  53. "success": True,
  54. "message": message,
  55. "data": response_data
  56. }
  57. def error_response(response_text, error_type=None, message=MessageTemplate.PROCESSING_FAILED,
  58. code=500, data=None, can_retry=None):
  59. """
  60. 标准化错误响应,将具体错误信息放在data.response中
  61. Args:
  62. response_text: 用户看到的具体错误信息
  63. error_type: 错误类型标识
  64. message: 高层级描述信息
  65. code: HTTP状态码
  66. data: 其他业务数据
  67. can_retry: 是否可以重试
  68. Returns:
  69. dict: 标准化错误响应
  70. """
  71. response_data = data or {}
  72. response_data["response"] = response_text
  73. response_data["timestamp"] = datetime.now().isoformat()
  74. if error_type:
  75. response_data["error_type"] = error_type
  76. if can_retry is not None:
  77. response_data["can_retry"] = can_retry
  78. return {
  79. "code": code,
  80. "success": False,
  81. "message": message,
  82. "data": response_data
  83. }
  84. # ===== Ask Agent API 专用响应方法 =====
  85. def agent_success_response(response_type, session_id=None, execution_path=None,
  86. classification_info=None, agent_version="langgraph_v1", **kwargs):
  87. """
  88. Ask Agent API 成功响应格式
  89. Args:
  90. response_type: 响应类型 ("DATABASE" 或 "CHAT")
  91. session_id: 会话ID
  92. execution_path: 执行路径
  93. classification_info: 分类信息
  94. agent_version: Agent版本
  95. **kwargs: 其他字段 (response, sql, query_result, summary等)
  96. Returns:
  97. dict: Ask Agent API 标准成功响应
  98. """
  99. data = {
  100. "type": response_type,
  101. "session_id": session_id,
  102. "execution_path": execution_path or [],
  103. "classification_info": classification_info or {},
  104. "agent_version": agent_version,
  105. "timestamp": datetime.now().isoformat()
  106. }
  107. # 添加其他字段
  108. for key, value in kwargs.items():
  109. if value is not None: # 只添加非None值
  110. data[key] = value
  111. return {
  112. "code": 200,
  113. "success": True,
  114. "message": MessageTemplate.SUCCESS,
  115. "data": data
  116. }
  117. def agent_error_response(response_text, error_type=None, message=MessageTemplate.PROCESSING_FAILED,
  118. code=500, session_id=None, execution_path=None,
  119. classification_info=None, agent_version="langgraph_v1", **kwargs):
  120. """
  121. Ask Agent API 错误响应格式
  122. Args:
  123. response_text: 用户看到的具体错误信息
  124. error_type: 错误类型标识
  125. message: 高层级描述信息
  126. code: HTTP状态码
  127. session_id: 会话ID
  128. execution_path: 执行路径
  129. classification_info: 分类信息
  130. agent_version: Agent版本
  131. **kwargs: 其他错误相关字段
  132. Returns:
  133. dict: Ask Agent API 标准错误响应
  134. """
  135. data = {
  136. "response": response_text,
  137. "session_id": session_id,
  138. "execution_path": execution_path or [],
  139. "classification_info": classification_info or {},
  140. "agent_version": agent_version,
  141. "timestamp": datetime.now().isoformat()
  142. }
  143. if error_type:
  144. data["error_type"] = error_type
  145. # 添加其他错误相关字段
  146. for key, value in kwargs.items():
  147. if value is not None:
  148. data[key] = value
  149. return {
  150. "code": code,
  151. "success": False,
  152. "message": message,
  153. "data": data
  154. }
  155. # ===== 健康检查专用响应方法 =====
  156. def health_success_response(status="healthy", test_result=True, **kwargs):
  157. """
  158. 健康检查成功响应格式
  159. Args:
  160. status: 健康状态
  161. test_result: 测试结果
  162. **kwargs: 其他健康检查数据
  163. Returns:
  164. dict: 健康检查成功响应
  165. """
  166. data = {
  167. "status": status,
  168. "test_result": test_result,
  169. "response": "Agent健康检查完成",
  170. "timestamp": datetime.now().isoformat()
  171. }
  172. # 添加其他字段
  173. for key, value in kwargs.items():
  174. if value is not None:
  175. data[key] = value
  176. return {
  177. "code": 200,
  178. "success": True,
  179. "message": MessageTemplate.SUCCESS,
  180. "data": data
  181. }
  182. def health_error_response(status="unhealthy", test_result=False, message=MessageTemplate.SERVICE_UNAVAILABLE, **kwargs):
  183. """
  184. 健康检查错误响应格式
  185. Args:
  186. status: 健康状态
  187. test_result: 测试结果
  188. message: 高层级错误描述
  189. **kwargs: 其他健康检查数据
  190. Returns:
  191. dict: 健康检查错误响应
  192. """
  193. data = {
  194. "status": status,
  195. "test_result": test_result,
  196. "response": "部分组件异常" if status == "degraded" else "Agent健康检查失败",
  197. "timestamp": datetime.now().isoformat()
  198. }
  199. # 添加其他字段
  200. for key, value in kwargs.items():
  201. if value is not None:
  202. data[key] = value
  203. return {
  204. "code": 503,
  205. "success": False,
  206. "message": message,
  207. "data": data
  208. }
  209. # ===== 便捷方法 =====
  210. def bad_request_response(response_text, missing_params=None):
  211. """请求参数错误响应"""
  212. data = {}
  213. if missing_params:
  214. data["missing_params"] = missing_params
  215. return error_response(
  216. response_text=response_text,
  217. error_type=ErrorType.MISSING_REQUIRED_PARAMS,
  218. message=MessageTemplate.BAD_REQUEST,
  219. code=400,
  220. data=data
  221. )
  222. def validation_failed_response(response_text):
  223. """参数验证失败响应"""
  224. return error_response(
  225. response_text=response_text,
  226. error_type=ErrorType.INVALID_PARAMS,
  227. message=MessageTemplate.VALIDATION_FAILED,
  228. code=422
  229. )
  230. def internal_error_response(response_text, can_retry=True):
  231. """系统内部错误响应"""
  232. return error_response(
  233. response_text=response_text,
  234. error_type=ErrorType.DATABASE_ERROR,
  235. message=MessageTemplate.INTERNAL_ERROR,
  236. code=500,
  237. can_retry=can_retry
  238. )
  239. def service_unavailable_response(response_text, can_retry=True):
  240. """服务不可用响应"""
  241. return error_response(
  242. response_text=response_text,
  243. error_type=ErrorType.AGENT_INITIALIZATION_FAILED,
  244. message=MessageTemplate.SERVICE_UNAVAILABLE,
  245. code=503,
  246. can_retry=can_retry
  247. )
  248. def not_found_response(response_text):
  249. """资源未找到响应"""
  250. return error_response(
  251. response_text=response_text,
  252. error_type=ErrorType.RESOURCE_NOT_FOUND,
  253. message=MessageTemplate.NOT_FOUND,
  254. code=404
  255. )