Skip to content

Commit d37d7fb

Browse files
committed
fix: added retry_anthropic decorator for rate limits
1 parent 123344f commit d37d7fb

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

gptme/llm.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
import shutil
33
import sys
44
from collections.abc import Generator, Iterator
5+
from functools import wraps
6+
from time import sleep
57

8+
import anthropic
69
from anthropic import Anthropic
710
from openai import AzureOpenAI, OpenAI
811
from rich import print
@@ -88,6 +91,24 @@ def _chat_complete_openai(messages: list[Message], model: str) -> str:
8891
return content
8992

9093

94+
def retry_anthropic(func):
95+
@wraps(func)
96+
def wrapper(*args, _retries=0, **kwargs):
97+
try:
98+
return func(*args, **kwargs)
99+
except anthropic.RateLimitError:
100+
if _retries >= 5:
101+
raise
102+
# exponential backoff
103+
backoff = 5 + 2**_retries
104+
print(f"Rate limit exceeded. Retrying in {backoff} seconds...")
105+
sleep(backoff)
106+
return wrapper(*args, **kwargs, _retries=_retries + 1)
107+
108+
return wrapper
109+
110+
111+
@retry_anthropic
91112
def _chat_complete_anthropic(messages: list[Message], model: str) -> str:
92113
assert anthropic_client, "LLM not initialized"
93114
messages, system_message = _transform_system_messages_anthropic(messages)
@@ -179,6 +200,7 @@ def _stream_openai(messages: list[Message], model: str) -> Generator[str, None,
179200
logger.debug(f"Stop reason: {stop_reason}")
180201

181202

203+
@retry_anthropic
182204
def _stream_anthropic(
183205
messages: list[Message], model: str
184206
) -> Generator[str, None, None]:

0 commit comments

Comments
 (0)