Files
LongCodeZip/repoqa/provider/request/anthropic.py
yerbapage 1dc9bf714c init
2025-05-31 09:20:21 -07:00

72 lines
2.0 KiB
Python

# SPDX-FileCopyrightText: (c) 2024 EvalPlus Team
#
# SPDX-License-Identifier: Apache-2.0
import signal
import time
import anthropic
from anthropic.types import Message
from repoqa.provider.request import construct_message_list
def make_request(
client: anthropic.Client,
message: str,
model: str,
max_tokens: int = 512,
temperature: float = 1,
system_msg="You are a helpful assistant good at coding.",
**kwargs,
) -> Message:
return client.messages.create(
model=model,
messages=construct_message_list(message, system_message=system_msg),
max_tokens=max_tokens,
temperature=temperature,
**kwargs,
)
def handler(signum, frame):
# swallow signum and frame
raise Exception("end of time")
def make_auto_request(client: anthropic.Client, *args, **kwargs) -> Message:
ret = None
while ret is None:
try:
signal.signal(signal.SIGALRM, handler)
signal.alarm(100)
ret = make_request(client, *args, **kwargs)
signal.alarm(0)
except anthropic.RateLimitError:
print("Rate limit exceeded. Waiting...")
signal.alarm(0)
time.sleep(10)
except anthropic.APIConnectionError:
print("API connection error. Waiting...")
signal.alarm(0)
time.sleep(5)
except anthropic.InternalServerError:
print("Internal server error. Waiting...")
signal.alarm(0)
time.sleep(5)
except anthropic.APIError as e:
print("Unknown API error")
print(e)
if (
e.body["error"]["message"]
== "Output blocked by content filtering policy"
):
raise Exception("Content filtering policy blocked output")
signal.alarm(0)
except Exception as e:
print("Unknown error. Waiting...")
print(e)
signal.alarm(0)
time.sleep(1)
return ret