result.py 8.3 KB

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