@@ -75,3 +75,45 @@ 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 ():
81+ """FAILURE responses should expose the result string (stringified exception) from the server."""
82+ mock_client = MagicMock ()
83+ mock_client ._get_async_endpoint_response .return_value = {
84+ "status" : "FAILURE" ,
85+ "result" : "Out of memory" ,
86+ "traceback" : "Traceback (most recent call last): ...\n RuntimeError: Out of memory" ,
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 .result == "Out of memory"
98+ assert response .traceback == "Traceback (most recent call last): ...\n RuntimeError: Out of memory"
99+ assert response .result_url is None
100+
101+
102+ def test_endpoint_response_future_failure_no_result_body ():
103+ """FAILURE responses with no result body should still work (e.g. pod crash with no response)."""
104+ mock_client = MagicMock ()
105+ mock_client ._get_async_endpoint_response .return_value = {
106+ "status" : "FAILURE" ,
107+ "result" : None ,
108+ "traceback" : None ,
109+ "status_code" : 500 ,
110+ }
111+
112+ from launch .model_endpoint import EndpointResponseFuture
113+
114+ future = EndpointResponseFuture (mock_client , "test-endpoint" , "task-456" )
115+ response = future .get ()
116+
117+ assert response .status == "FAILURE"
118+ assert response .result is None
119+ assert response .traceback is None
0 commit comments