@@ -187,6 +187,60 @@ def test_init_with_saved_parameters_attaches_reference(self):
187187 assert payload ["parameters_version" ] == "v1"
188188
189189
190+ class TestHTTPBackgroundLoggerLogs3 (TestCase ):
191+ def test_submit_logs_request_413_skips_retries (self ) -> None :
192+ """Any 413 while publishing ``/logs3`` cannot succeed on retry with the same payload.
193+
194+ ``sync_flush`` controls whether the terminal failure raises instead of printing.
195+ """
196+ from braintrust .logger import (
197+ LogItemWithMeta ,
198+ Logs3OverflowInputRow ,
199+ _HTTPBackgroundLogger ,
200+ )
201+
202+ item = LogItemWithMeta (
203+ str_value = "{}" ,
204+ overflow_meta = Logs3OverflowInputRow (
205+ object_ids = {},
206+ has_comment = False ,
207+ is_delete = False ,
208+ byte_size = 2 ,
209+ ),
210+ )
211+ max_result = {"max_request_size" : 10 ** 9 , "can_use_overflow" : True }
212+
213+ for response_text in ("Request Too Long" , "" , "Payload Too Large" ):
214+ for sync_flush in (False , True ):
215+ with self .subTest (response_text = response_text , sync_flush = sync_flush ):
216+ mock_resp = MagicMock ()
217+ mock_resp .ok = False
218+ mock_resp .status_code = 413
219+ mock_resp .text = response_text
220+
221+ mock_conn = MagicMock ()
222+ mock_conn .post .return_value = mock_resp
223+
224+ bg = _HTTPBackgroundLogger (LazyValue (lambda : mock_conn , use_mutex = False ))
225+ bg .num_tries = 5
226+ bg .sync_flush = sync_flush
227+ bg .failed_publish_payloads_dir = "/tmp/failed-payloads"
228+
229+ with patch .object (_HTTPBackgroundLogger , "_write_payload_to_dir" ) as mock_write_payload :
230+ if sync_flush :
231+ with self .assertRaises (Exception ) as cm :
232+ bg ._submit_logs_request ([item ], max_result )
233+ self .assertIn ("413" , str (cm .exception ))
234+ else :
235+ bg ._submit_logs_request ([item ], max_result )
236+
237+ self .assertEqual (mock_conn .post .call_count , 1 )
238+ mock_write_payload .assert_called_once ()
239+ self .assertEqual (
240+ mock_write_payload .call_args .kwargs ["payload_dir" ], bg .failed_publish_payloads_dir
241+ )
242+
243+
190244class TestLogger (TestCase ):
191245 def test_load_prompt_prefers_version_over_environment_for_project_slug (self ):
192246 mock_api_conn = MagicMock ()
0 commit comments