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 | |