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")
|
||||
return mcp_tools
|
||||
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"Full traceback: {error_details}")
|
||||
logger.error(f"get_tools_from_mcp: error {e}, elapsed: {time.time() - start_time:.3f}s")
|
||||
return []
|
||||
|
||||
async def init_agent(config: AgentConfig):
|
||||
@ -142,12 +139,8 @@ async def init_agent(config: AgentConfig):
|
||||
config.mcp_settings = system_prompt
|
||||
|
||||
# 获取 mcp_tools(缓存逻辑已内置到 get_tools_from_mcp 中)
|
||||
try:
|
||||
mcp_tools = await get_tools_from_mcp(mcp_settings)
|
||||
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 = []
|
||||
logger.info(f"Loaded {len(mcp_tools)} MCP tools")
|
||||
|
||||
# 检测或使用指定的提供商
|
||||
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))
|
||||
|
||||
except Exception as e:
|
||||
import traceback
|
||||
error_details = traceback.format_exc()
|
||||
logger.error(f"Error in agent task: {str(e)}")
|
||||
logger.error(f"Full traceback: {error_details}")
|
||||
|
||||
logger.error(f"Error in agent task: {e}")
|
||||
# 发送错误信息给客户端
|
||||
error_data = {
|
||||
"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", f'data: {{"error": "{str(e)}"}}\n\n'))
|
||||
# 发送完成信号,确保输出控制器能正常结束
|
||||
await output_queue.put(("agent_done", None))
|
||||
|
||||
@ -189,18 +177,8 @@ async def enhanced_generate_stream_response(
|
||||
logger.info(f"Enhanced stream response completed")
|
||||
|
||||
except Exception as e:
|
||||
import traceback
|
||||
error_details = traceback.format_exc()
|
||||
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"
|
||||
logger.error(f"Error in enhanced_generate_stream_response: {e}")
|
||||
yield f'data: {{"error": "{str(e)}"}}\n\n'
|
||||
yield "data: [DONE]\n\n"
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user