From 51b54b58a4504054297e79627e2f1070d4367b31 Mon Sep 17 00:00:00 2001 From: Hassieb Pakzad <68423100+hassiebp@users.noreply.github.com> Date: Mon, 3 Feb 2025 10:45:17 +0100 Subject: [PATCH 1/3] fix(media): retry requests upload errors --- langfuse/_task_manager/media_manager.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/langfuse/_task_manager/media_manager.py b/langfuse/_task_manager/media_manager.py index 09f459de3..10ad0cd21 100644 --- a/langfuse/_task_manager/media_manager.py +++ b/langfuse/_task_manager/media_manager.py @@ -283,8 +283,15 @@ def execute_task_with_backoff() -> T: and (e.status_code) != 429 ): raise e - except Exception as e: - raise e + except requests.exceptions.RequestException as e: + if ( + e.response + and hasattr(e.response, "status_code") + and (e.response.status_code >= 500 or e.response.status_code == 429) + ): + raise + + raise e # break retries for all other status codes raise Exception("Failed to execute task") From 5af273d27ab1789a3ecb9209598fcf8a5cc68e75 Mon Sep 17 00:00:00 2001 From: Hassieb Pakzad <68423100+hassiebp@users.noreply.github.com> Date: Mon, 3 Feb 2025 13:29:40 +0100 Subject: [PATCH 2/3] Update langfuse/_task_manager/media_manager.py Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- langfuse/_task_manager/media_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/langfuse/_task_manager/media_manager.py b/langfuse/_task_manager/media_manager.py index 10ad0cd21..dcc424546 100644 --- a/langfuse/_task_manager/media_manager.py +++ b/langfuse/_task_manager/media_manager.py @@ -285,7 +285,7 @@ def execute_task_with_backoff() -> T: raise e except requests.exceptions.RequestException as e: if ( - e.response + e.response is not None and hasattr(e.response, "status_code") and (e.response.status_code >= 500 or e.response.status_code == 429) ): From aeb5e61ea353ff72f164678ec24b331cd9b2cb26 Mon Sep 17 00:00:00 2001 From: Hassieb Pakzad <68423100+hassiebp@users.noreply.github.com> Date: Mon, 3 Feb 2025 13:44:11 +0100 Subject: [PATCH 3/3] simplify --- langfuse/_task_manager/media_manager.py | 40 ++++++++++++------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/langfuse/_task_manager/media_manager.py b/langfuse/_task_manager/media_manager.py index dcc424546..376044542 100644 --- a/langfuse/_task_manager/media_manager.py +++ b/langfuse/_task_manager/media_manager.py @@ -270,29 +270,29 @@ def _process_upload_media_job( def _request_with_backoff( self, func: Callable[P, T], *args: P.args, **kwargs: P.kwargs ) -> T: - @backoff.on_exception( - backoff.expo, Exception, max_tries=self._max_retries, logger=None - ) - def execute_task_with_backoff() -> T: - try: - return func(*args, **kwargs) - except ApiError as e: - if ( + def _should_give_up(e: Exception) -> bool: + if isinstance(e, ApiError): + return ( e.status_code is not None and 400 <= e.status_code < 500 - and (e.status_code) != 429 - ): - raise e - except requests.exceptions.RequestException as e: - if ( + and e.status_code != 429 + ) + if isinstance(e, requests.exceptions.RequestException): + return ( e.response is not None - and hasattr(e.response, "status_code") - and (e.response.status_code >= 500 or e.response.status_code == 429) - ): - raise - - raise e # break retries for all other status codes + and e.response.status_code < 500 + and e.response.status_code != 429 + ) + return False - raise Exception("Failed to execute task") + @backoff.on_exception( + backoff.expo, + Exception, + max_tries=self._max_retries, + giveup=_should_give_up, + logger=None, + ) + def execute_task_with_backoff() -> T: + return func(*args, **kwargs) return execute_task_with_backoff()