Unverified Commit e2bf732b authored by LiviaSun's avatar LiviaSun Committed by GitHub
Browse files

add openai error handler with retry and logger (#148)

parent 322421fa
import logging
import time
from typing import Callable, List, Optional, Union
import numpy as np
......@@ -13,6 +15,9 @@ except ImportError as e:
openai = tiktoken = e
logger = logging.getLogger("openai")
def create_logit_bias_int(tokenizer):
"""Get logit bias for integer numbers."""
int_token_ids = []
......@@ -199,10 +204,11 @@ class OpenAI(BaseBackend):
return decision, scores, scores
def openai_completion(client, is_chat=None, prompt=None, **kwargs):
def openai_completion(client, retries=3, is_chat=None, prompt=None, **kwargs):
for attempt in range(retries):
try:
if is_chat:
if kwargs["stop"] is None:
if "stop" in kwargs and kwargs["stop"] is None:
kwargs.pop("stop")
ret = client.chat.completions.create(messages=prompt, **kwargs)
comp = ret.choices[0].message.content
......@@ -212,17 +218,24 @@ def openai_completion(client, is_chat=None, prompt=None, **kwargs):
comp = [c.text for c in ret.choices]
else:
comp = ret.choices[0].text
except openai.OpenAIError as e:
print(f"OpenAI Error: {e}")
break
except (openai.APIError, openai.APIConnectionError, openai.RateLimitError) as e:
logger.error(f"OpenAI Error: {e}. Waiting 5 seconds...")
time.sleep(5)
if attempt == retries - 1:
raise e
except Exception as e:
logger.error(f"RuntimeError {e}.")
raise e
return comp
def openai_completion_stream(client, is_chat=None, prompt=None, **kwargs):
def openai_completion_stream(client, retries=3, is_chat=None, prompt=None, **kwargs):
for attempt in range(retries):
try:
if is_chat:
if kwargs["stop"] is None:
if "stop" in kwargs and kwargs["stop"] is None:
kwargs.pop("stop")
generator = client.chat.completions.create(
messages=prompt, stream=True, **kwargs
......@@ -231,10 +244,18 @@ def openai_completion_stream(client, is_chat=None, prompt=None, **kwargs):
content = ret.choices[0].delta.content
yield content or "", {}
else:
generator = client.completions.create(prompt=prompt, stream=True, **kwargs)
generator = client.completions.create(
prompt=prompt, stream=True, **kwargs
)
for ret in generator:
content = ret.choices[0].text
yield content or "", {}
except openai.OpenAIError as e:
print(f"OpenAI Error: {e}")
break
except (openai.APIError, openai.APIConnectionError, openai.RateLimitError) as e:
logger.error(f"OpenAI Error: {e}. Waiting 5 seconds...")
time.sleep(5)
if attempt == retries - 1:
raise e
except Exception as e:
logger.error(f"RuntimeError {e}.")
raise e
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment