joaomorossini/AI_Patent_Classification
2
1import openai2 3 4class MessageChatCompletion:5 def __init__(self,6 model: str = 'gpt-5-mini',7 message: str = '',8 api_key: str = '',9 temperature: float = 0.10,10 top_p: float = 0.95,11 n: int = 1,12 stream: bool = False,13 stop: str = "\n",14 max_tokens: int = 4096,15 presence_penalty: float = 0.0,16 frequency_penalty: float = 0.0,17 logit_bias: int = None,18 user: str = ''):19 20 self.api_key = api_key21 openai.api_key = self.api_key22 23 if model in ["gpt-4o","gpt-4o-mini","gpt-5-mini","gpt-5"]:24 self.endpoint = "https://api.openai.com/v1/chat/completions"25 else:26 self.endpoint = "https://api.openai.com/v1/completions"27 28 self.headers = {29 "Content-Type": "application/json",30 "Authorization": f"Bearer {self.api_key}",31 }32 33 self.prompt = {34 "model": model,35 "messages": [],36 "temperature": temperature,37 "top_p": top_p,38 "n": n,39 "stream": stream,40 "stop": stop,41 "presence_penalty": presence_penalty,42 "frequency_penalty": frequency_penalty43 }44 45 if max_tokens is not None:46 self.prompt["max_tokens"] = max_tokens47 48 if logit_bias is not None:49 self.prompt["logit_bias"] = logit_bias50 51 if user != '':52 self.prompt["user"] = user53 54 if message != '':55 self.new_user_message(content=message)56 57 self.response = ''58 59 self.error = False60 61 def new_message(self, role: str = 'user', content: str = '', name: str = ''):62 new_message = {"role": role, "content": f"{content}"}63 if name != '':64 new_message['name'] = name65 66 self.prompt['messages'].append(new_message)67 68 def new_user_message(self, content: str = '', name: str = ''):69 self.new_message(role='user', content=content, name=name)70 71 def new_system_message(self, content: str = '', name: str = ''):72 self.new_message(role='system', content=content, name=name)73 74 def new_assistant_message(self, content: str = '', name: str = ''):75 self.new_message(role='assistant', content=content, name=name)76 77 def get_last_message(self):78 return self.prompt['messages'][-1]['content']79 80 def send_message(self):81 82 try:83 self.error = False84 85 response = openai.chat.completions.create(86 model=self.prompt['model'],87 messages=self.prompt['messages'],88 frequency_penalty=self.prompt['frequency_penalty'],89 temperature=self.prompt['temperature'],90 max_tokens=self.prompt['max_tokens'],91 top_p=self.prompt['top_p'],92 presence_penalty=self.prompt['presence_penalty'],93 stream=self.prompt['stream']94 )95 96 full_response = response.choices[0].message.content97 98 # if stream = True99 # full_response = ""100 # for chunk in response:101 # chunk_message = chunk.choices[0].delta.content102 # if chunk_message != '':103 # full_response += chunk_message104 105 self.new_system_message(content=full_response)106 107 return self.response108 109 except Exception as e:110 self.error = True111 112 if self.api_key == '' or self.api_key is None:113 self.new_system_message(content="API key is missing")114 else:115 self.new_system_message(content=f"Unable to generate ChatCompletion response\nException: {e}")116 return e117 