UI2Code / chatbots /chatbot_base.py
3v324v23's picture
Initial commit with latest files
d5d3bd0
from typing import Literal
from chatAPI import chat
from typing import Union
class ChatbotBase:
def __init__(self,system_prompt) -> None:
self.history=[]
self.system_prompt=''
self.set_system_prompt(system_prompt)
def set_system_prompt(self,prompt):
'''set system prompt. MUST BE used after reset_bot()'''
self.system_prompt=prompt
self.add_message(prompt,image=None,role='system')
def reset_bot(self):
self.history=[]
self.system_prompt=''
def add_message(self,message,image:Union[str,list[str]],role:Literal['user','assistant','system']):
'''add new message to history
image: base64 string of image
'''
if isinstance(image,list):
content=[]
content.append({'type':'text','text':message})
for img in image:
content.append({
'type':'image_url',
"image_url": {
"url": f"data:image/jpeg;base64,{image}",
"detail": "high"
}})
self.history.append({
'role':role,
'content':content})
elif image:
self.history.append({
'role':role,
'content':[
{'type':'text','text':message},
{'type':'image_url',"image_url": {
"url": f"data:image/jpeg;base64,{image}",
"detail": "high"
}}
]})
else:
self.history.append({
'role':role,
'content':message})
def pop_history(self):
'''remove last history message'''
self.history.pop()
def get_history(self):
return self.history
def generate(self):
'''generate new response and store to history'''
print('code generating')
rsp=chat(self.history)
self.add_message(rsp,image=None,role='assistant')
print(self.history)
return rsp