diff --git a/aider/coder.py b/aider/coder.py index 2252ba669..576c0ad94 100755 --- a/aider/coder.py +++ b/aider/coder.py @@ -2,8 +2,8 @@ import os import sys -import time import traceback +import backoff from pathlib import Path import git @@ -391,23 +391,19 @@ class Coder: return prompts.added_files.format(fnames=", ".join(mentioned_rel_fnames)) + @backoff.on_exception( + backoff.expo, + (RateLimitError, requests.exceptions.ConnectionError), + max_tries=5, + on_backoff=lambda details: self.io.tool_error(f"Retry in {details['wait']} seconds."), + ) def send_with_retries(self, model, messages): - while True: - try: - return openai.ChatCompletion.create( - model=model, - messages=messages, - temperature=0, - stream=True, - ) - except RateLimitError as err: - self.io.tool_error(f"RateLimitError: {err}") - except requests.exceptions.ConnectionError as err: - self.io.tool_error(f"ConnectionError: {err}") - - retry_after = 1 - self.io.tool_error(f"Retry in {retry_after} seconds.") - time.sleep(retry_after) + return openai.ChatCompletion.create( + model=model, + messages=messages, + temperature=0, + stream=True, + ) def send(self, messages, model=None, silent=False): if not model: