From 2f9546e14430d1be2e2c446e2bc41358a24f90dd Mon Sep 17 00:00:00 2001 From: Ori Kotek Date: Thu, 20 Jul 2023 15:01:12 +0300 Subject: [PATCH 1/2] Retry on rate limit error on OpenAI calls --- pr_agent/algo/ai_handler.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pr_agent/algo/ai_handler.py b/pr_agent/algo/ai_handler.py index a97b97ac..085d9ba6 100644 --- a/pr_agent/algo/ai_handler.py +++ b/pr_agent/algo/ai_handler.py @@ -1,12 +1,12 @@ import logging import openai -from openai.error import APIError, Timeout, TryAgain +from openai.error import APIError, Timeout, TryAgain, RateLimitError from retry import retry from pr_agent.config_loader import settings -OPENAI_RETRIES=2 +OPENAI_RETRIES=5 class AiHandler: """ @@ -34,7 +34,7 @@ class AiHandler: except AttributeError as e: raise ValueError("OpenAI key is required") from e - @retry(exceptions=(APIError, Timeout, TryAgain, AttributeError), + @retry(exceptions=(APIError, Timeout, TryAgain, AttributeError, RateLimitError), tries=OPENAI_RETRIES, delay=2, backoff=2, jitter=(1, 3)) async def chat_completion(self, model: str, temperature: float, system: str, user: str): """ @@ -69,6 +69,9 @@ class AiHandler: except (APIError, Timeout, TryAgain) as e: logging.error("Error during OpenAI inference: ", e) raise + except (RateLimitError) as e: + logging.error("Rate limit error during OpenAI inference: ", e) + raise if response is None or len(response.choices) == 0: raise TryAgain resp = response.choices[0]['message']['content'] From 2e246869d07929f5dcd841c50cf7d3b1ade96282 Mon Sep 17 00:00:00 2001 From: Ori Kotek Date: Thu, 20 Jul 2023 15:02:34 +0300 Subject: [PATCH 2/2] Retry on rate limit error on OpenAI calls --- pr_agent/algo/ai_handler.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pr_agent/algo/ai_handler.py b/pr_agent/algo/ai_handler.py index 085d9ba6..8ab22e05 100644 --- a/pr_agent/algo/ai_handler.py +++ b/pr_agent/algo/ai_handler.py @@ -72,6 +72,9 @@ class AiHandler: except (RateLimitError) as e: logging.error("Rate limit error during OpenAI inference: ", e) raise + except (Exception) as e: + logging.error("Unknown error during OpenAI inference: ", e) + raise TryAgain from e if response is None or len(response.choices) == 0: raise TryAgain resp = response.choices[0]['message']['content']