@@ -75,3 +75,44 @@ def test_status_returns_updated_value(requests_mock): # noqa: F811
7575 response = HTTPResponse (body = json .dumps (resp ), status = 200 )
7676 )
7777 assert endpoint .status () == "SUCCESS"
78+
79+
80+ def test_endpoint_response_future_failure_preserves_result_body ():
81+ """FAILURE responses should expose the result body so callers can extract error details."""
82+ mock_client = MagicMock ()
83+ mock_client ._get_async_endpoint_response .return_value = {
84+ "status" : "FAILURE" ,
85+ "result" : {"result" : '{"error": "Out of memory"}' , "result_url" : None },
86+ "traceback" : None ,
87+ "status_code" : 500 ,
88+ }
89+
90+ from launch .model_endpoint import EndpointResponseFuture
91+
92+ future = EndpointResponseFuture (mock_client , "test-endpoint" , "task-123" )
93+ response = future .get ()
94+
95+ assert response .status == "FAILURE"
96+ assert response .status_code == 500
97+ assert response .traceback is None
98+ assert response .result == '{"error": "Out of memory"}'
99+
100+
101+ def test_endpoint_response_future_failure_no_result_body ():
102+ """FAILURE responses with no result body should still work (e.g. pod crash with no response)."""
103+ mock_client = MagicMock ()
104+ mock_client ._get_async_endpoint_response .return_value = {
105+ "status" : "FAILURE" ,
106+ "result" : None ,
107+ "traceback" : None ,
108+ "status_code" : 500 ,
109+ }
110+
111+ from launch .model_endpoint import EndpointResponseFuture
112+
113+ future = EndpointResponseFuture (mock_client , "test-endpoint" , "task-456" )
114+ response = future .get ()
115+
116+ assert response .status == "FAILURE"
117+ assert response .result is None
118+ assert response .traceback is None
0 commit comments