Hasan Iqbal
Added json fix in factool and factcheckgpt
ad69f02 unverified
import os
import time
from openai import OpenAI
import openai
client = None
def json_fix(output):
return output.replace("```json\n", "").replace("\n```", "")
def init_client():
global client
if client is None:
if openai.api_key is None and "OPENAI_API_KEY" not in os.environ:
print("openai_key not presented, delay to initialize.")
return
client = OpenAI()
def request(
user_inputs,
model,
system_role,
temperature=1.0,
return_all=False,
):
init_client()
if type(user_inputs) == str:
chat_histories = [{"role": "user", "content": user_inputs}]
elif type(user_inputs) == list:
if all([type(x) == str for x in user_inputs]):
chat_histories = [
{"role": "user" if i % 2 == 0 else "assistant", "content": x} for i, x in enumerate(user_inputs)
]
elif all([type(x) == dict for x in user_inputs]):
chat_histories = user_inputs
else:
raise ValueError("Invalid input for OpenAI API calling")
else:
raise ValueError("Invalid input for OpenAI API calling")
messages = [{"role": "system", "content": system_role}] + chat_histories
response = client.chat.completions.create(model=model, messages=messages, temperature=temperature)
if return_all:
return response
response_str = ""
for choice in response.choices:
response_str += choice.message.content
response_str = json_fix(response_str)
return response_str
def gpt(user_inputs, model, system_role, temperature=1.0, num_retries=3, waiting=1):
response = None
for _ in range(num_retries):
try:
response = request(user_inputs, model, system_role, temperature=temperature)
break
except openai.OpenAIError as exception:
print(f"{exception}. Retrying...")
time.sleep(waiting)
return response