refactor(sse): simplify error handling and remove __debug__ security issue
- Remove __debug__ conditional that exposed tracebacks in production
- Simplify error response structure to {"error": str(e)}
- Remove redundant exception handling in init_agent()
- Remove unnecessary traceback logging
- Reduce code from ~30 lines to ~10 lines
Fixes security vulnerability where __debug__ is always True
unless Python runs with -O flag, causing full tracebacks
to be sent to clients in production.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
342932030f
commit
b3303ef8e6
@ -102,11 +102,8 @@ async def get_tools_from_mcp(mcp):
|
|||||||
logger.info(f"get_tools_from_mcp: loaded {len(mcp_tools)} tools, elapsed: {time.time() - start_time:.3f}s")
|
logger.info(f"get_tools_from_mcp: loaded {len(mcp_tools)} tools, elapsed: {time.time() - start_time:.3f}s")
|
||||||
return mcp_tools
|
return mcp_tools
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
import traceback
|
|
||||||
error_details = traceback.format_exc()
|
|
||||||
# 发生异常时返回空列表,避免上层调用报错
|
# 发生异常时返回空列表,避免上层调用报错
|
||||||
logger.error(f"get_tools_from_mcp: error {str(e)}, elapsed: {time.time() - start_time:.3f}s")
|
logger.error(f"get_tools_from_mcp: error {e}, elapsed: {time.time() - start_time:.3f}s")
|
||||||
logger.error(f"Full traceback: {error_details}")
|
|
||||||
return []
|
return []
|
||||||
|
|
||||||
async def init_agent(config: AgentConfig):
|
async def init_agent(config: AgentConfig):
|
||||||
@ -142,12 +139,8 @@ async def init_agent(config: AgentConfig):
|
|||||||
config.mcp_settings = system_prompt
|
config.mcp_settings = system_prompt
|
||||||
|
|
||||||
# 获取 mcp_tools(缓存逻辑已内置到 get_tools_from_mcp 中)
|
# 获取 mcp_tools(缓存逻辑已内置到 get_tools_from_mcp 中)
|
||||||
try:
|
mcp_tools = await get_tools_from_mcp(mcp_settings)
|
||||||
mcp_tools = await get_tools_from_mcp(mcp_settings)
|
logger.info(f"Loaded {len(mcp_tools)} MCP tools")
|
||||||
logger.info(f"Successfully loaded {len(mcp_tools)} MCP tools")
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"Failed to load MCP tools: {str(e)}, using empty tool list")
|
|
||||||
mcp_tools = []
|
|
||||||
|
|
||||||
# 检测或使用指定的提供商
|
# 检测或使用指定的提供商
|
||||||
model_provider, base_url = detect_provider(config.model_name, config.model_server)
|
model_provider, base_url = detect_provider(config.model_name, config.model_server)
|
||||||
|
|||||||
@ -114,21 +114,9 @@ async def enhanced_generate_stream_response(
|
|||||||
await output_queue.put(("agent_done", None))
|
await output_queue.put(("agent_done", None))
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
import traceback
|
logger.error(f"Error in agent task: {e}")
|
||||||
error_details = traceback.format_exc()
|
|
||||||
logger.error(f"Error in agent task: {str(e)}")
|
|
||||||
logger.error(f"Full traceback: {error_details}")
|
|
||||||
|
|
||||||
# 发送错误信息给客户端
|
# 发送错误信息给客户端
|
||||||
error_data = {
|
await output_queue.put(("agent", f'data: {{"error": "{str(e)}"}}\n\n'))
|
||||||
"error": {
|
|
||||||
"message": f"Agent execution failed: {str(e)}",
|
|
||||||
"type": "agent_error",
|
|
||||||
"details": error_details if __debug__ else str(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
error_chunk = create_stream_chunk(f"chatcmpl-error", config.model_name, json.dumps(error_data, ensure_ascii=False))
|
|
||||||
await output_queue.put(("agent", f"data: {json.dumps(error_chunk, ensure_ascii=False)}\n\n"))
|
|
||||||
# 发送完成信号,确保输出控制器能正常结束
|
# 发送完成信号,确保输出控制器能正常结束
|
||||||
await output_queue.put(("agent_done", None))
|
await output_queue.put(("agent_done", None))
|
||||||
|
|
||||||
@ -189,18 +177,8 @@ async def enhanced_generate_stream_response(
|
|||||||
logger.info(f"Enhanced stream response completed")
|
logger.info(f"Enhanced stream response completed")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
import traceback
|
logger.error(f"Error in enhanced_generate_stream_response: {e}")
|
||||||
error_details = traceback.format_exc()
|
yield f'data: {{"error": "{str(e)}"}}\n\n'
|
||||||
logger.error(f"Error in enhanced_generate_stream_response: {str(e)}")
|
|
||||||
logger.error(f"Full traceback: {error_details}")
|
|
||||||
|
|
||||||
error_data = {
|
|
||||||
"error": {
|
|
||||||
"message": f"Stream error: {str(e)}",
|
|
||||||
"type": "internal_error"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
yield f"data: {json.dumps(error_data, ensure_ascii=False)}\n\n"
|
|
||||||
yield "data: [DONE]\n\n"
|
yield "data: [DONE]\n\n"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user