From 89eb46e35ba055dca3538c5c1f21961d5f85e44d Mon Sep 17 00:00:00 2001 From: MoeexT Date: Wed, 13 May 2026 17:17:31 +0800 Subject: [PATCH 1/2] :bug: Add detail error message in debug mode --- backend/apps/agent_app.py | 5 ++- test/backend/app/test_agent_app.py | 50 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/backend/apps/agent_app.py b/backend/apps/agent_app.py index 0a97f3845..9b6dc2b7b 100644 --- a/backend/apps/agent_app.py +++ b/backend/apps/agent_app.py @@ -61,8 +61,11 @@ async def agent_run_api(agent_request: AgentRequest, http_request: Request, auth ) except Exception as e: logger.error(f"Agent run error: {str(e)}") + # Only expose actual error in debug mode for better diagnosis + # Keep generic message in normal mode for user experience + error_detail = str(e) if agent_request.is_debug else "Agent run error." raise HTTPException( - status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Agent run error.") + status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=error_detail) @agent_runtime_router.get("/stop/{conversation_id}") diff --git a/test/backend/app/test_agent_app.py b/test/backend/app/test_agent_app.py index 427d7cc58..bb6d1de54 100644 --- a/test/backend/app/test_agent_app.py +++ b/test/backend/app/test_agent_app.py @@ -187,6 +187,56 @@ async def mock_stream(): assert "data: chunk2" in content +async def test_agent_run_api_error_debug_mode(mocker, mock_auth_header): + """Test agent_run_api error case in debug mode - should expose actual error.""" + mock_run_agent_stream = mocker.patch( + "apps.agent_app.run_agent_stream", new_callable=mocker.AsyncMock) + mock_run_agent_stream.side_effect = Exception("Test error") + + response = runtime_client.post( + "/agent/run", + json={ + "agent_id": 1, + "conversation_id": 123, + "query": "test query", + "history": [], + "minio_files": [], + "is_debug": True, # Debug mode + }, + headers=mock_auth_header + ) + + assert response.status_code == 500 + # In debug mode, actual error should be exposed + assert "Test error" in response.json()["detail"] + + +async def test_agent_run_api_error_normal_mode(mocker, mock_auth_header): + """Test agent_run_api error case in normal mode - should show generic error.""" + mock_run_agent_stream = mocker.patch( + "apps.agent_app.run_agent_stream", new_callable=mocker.AsyncMock) + mock_run_agent_stream.side_effect = Exception("Test internal error") + + response = runtime_client.post( + "/agent/run", + json={ + "agent_id": 1, + "conversation_id": 123, + "query": "test query", + "history": [], + "minio_files": [], + "is_debug": False, # Normal mode + }, + headers=mock_auth_header + ) + + assert response.status_code == 500 + # In normal mode, generic error message should be shown + assert response.json()["detail"] == "Agent run error." + # Actual error should NOT be exposed in normal mode + assert "Test internal error" not in response.json()["detail"] + + def test_agent_run_api_exception(mocker, mock_auth_header): """Test agent_run_api exception handling.""" mock_run_agent_stream = mocker.patch( From 412dfb45a2fc7d1372bdc506289c68fa1ed005fe Mon Sep 17 00:00:00 2001 From: MoeexT Date: Thu, 28 May 2026 10:43:14 +0800 Subject: [PATCH 2/2] :bug: Fix test --- test/backend/app/test_agent_app.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/backend/app/test_agent_app.py b/test/backend/app/test_agent_app.py index bb6d1de54..55a21dfa3 100644 --- a/test/backend/app/test_agent_app.py +++ b/test/backend/app/test_agent_app.py @@ -190,7 +190,7 @@ async def mock_stream(): async def test_agent_run_api_error_debug_mode(mocker, mock_auth_header): """Test agent_run_api error case in debug mode - should expose actual error.""" mock_run_agent_stream = mocker.patch( - "apps.agent_app.run_agent_stream", new_callable=mocker.AsyncMock) + "apps.agent_app.run_agent_stream", new_callable=AsyncMock) mock_run_agent_stream.side_effect = Exception("Test error") response = runtime_client.post( @@ -214,7 +214,7 @@ async def test_agent_run_api_error_debug_mode(mocker, mock_auth_header): async def test_agent_run_api_error_normal_mode(mocker, mock_auth_header): """Test agent_run_api error case in normal mode - should show generic error.""" mock_run_agent_stream = mocker.patch( - "apps.agent_app.run_agent_stream", new_callable=mocker.AsyncMock) + "apps.agent_app.run_agent_stream", new_callable=AsyncMock) mock_run_agent_stream.side_effect = Exception("Test internal error") response = runtime_client.post(