joaomorossini's picture
First commit for new HF Space. Adapted from https://huggingface.co/spaces/tseronni/startup_genome
f11dfb5
import openai
class MessageChatCompletion:
def __init__(self,
model: str = 'gpt-3.5-turbo-0125',
message: str = '',
api_key: str = '',
temperature: float = 0.10,
top_p: float = 0.95,
n: int = 1,
stream: bool = False,
stop: str = "\n",
max_tokens: int = 4096,
presence_penalty: float = 0.0,
frequency_penalty: float = 0.0,
logit_bias: int = None,
user: str = ''):
self.api_key = api_key
openai.api_key = self.api_key
if model in ["gpt-4", "gpt-4-turbo-preview", "gpt-3.5-turbo", "gpt-3.5-turbo-0125"]:
self.endpoint = "https://api.openai.com/v1/chat/completions"
else:
self.endpoint = "https://api.openai.com/v1/completions"
self.headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {self.api_key}",
}
self.prompt = {
"model": model,
"messages": [],
"temperature": temperature,
"top_p": top_p,
"n": n,
"stream": stream,
"stop": stop,
"presence_penalty": presence_penalty,
"frequency_penalty": frequency_penalty
}
if max_tokens is not None:
self.prompt["max_tokens"] = max_tokens
if logit_bias is not None:
self.prompt["logit_bias"] = logit_bias
if user != '':
self.prompt["user"] = user
if message != '':
self.new_user_message(content=message)
self.response = ''
self.error = False
def new_message(self, role: str = 'user', content: str = '', name: str = ''):
new_message = {"role": role, "content": f"{content}"}
if name != '':
new_message['name'] = name
self.prompt['messages'].append(new_message)
def new_user_message(self, content: str = '', name: str = ''):
self.new_message(role='user', content=content, name=name)
def new_system_message(self, content: str = '', name: str = ''):
self.new_message(role='system', content=content, name=name)
def new_assistant_message(self, content: str = '', name: str = ''):
self.new_message(role='assistant', content=content, name=name)
def get_last_message(self):
return self.prompt['messages'][-1]['content']
def send_message(self):
try:
self.error = False
response = openai.chat.completions.create(
model=self.prompt['model'],
messages=self.prompt['messages'],
frequency_penalty=self.prompt['frequency_penalty'],
temperature=self.prompt['temperature'],
max_tokens=self.prompt['max_tokens'],
top_p=self.prompt['top_p'],
presence_penalty=self.prompt['presence_penalty'],
stream=self.prompt['stream']
)
full_response = response.choices[0].message.content
# if stream = True
# full_response = ""
# for chunk in response:
# chunk_message = chunk.choices[0].delta.content
# if chunk_message != '':
# full_response += chunk_message
self.new_system_message(content=full_response)
return self.response
except Exception as e:
self.error = True
if self.api_key == '' or self.api_key is None:
self.new_system_message(content="API key is missing")
else:
self.new_system_message(content=f"Unable to generate ChatCompletion response\nException: {e}")
return e