Spaces:
Runtime error
Runtime error
''' | |
@Description: | |
@Author: jiajunlong | |
@Date: 2024-06-19 19:30:17 | |
@LastEditTime: 2024-06-19 19:32:47 | |
@LastEditors: jiajunlong | |
''' | |
class Message: | |
def __init__(self, msg=None): | |
self._messages = msg if msg else [] | |
self._images = [] | |
self.skip_next = False | |
def add_message(self, question, answer=None): | |
quension_msg_dict = {'from': 'human'} | |
quension_msg_dict['value'] = question | |
answer_msg_dict = {'from': 'gpt'} | |
answer_msg_dict['value'] = answer | |
self._messages.append(quension_msg_dict) | |
self._messages.append(answer_msg_dict) | |
def add_image(self, image, index=0): | |
self._images.append((image, index)) | |
def images(self): | |
return self._images | |
def messages(self): | |
return self._messages | |
def copy(self): | |
return Message(self._messages) | |
def to_gradio_chatbot(self): | |
ret = [] | |
for i, msg in enumerate(self.messages): | |
if i % 2 == 0: | |
if len(self.images) != 0 and i == self.images[0][1]: | |
image = self.images[0][0] | |
import base64 | |
from io import BytesIO | |
msg = msg['value'] | |
max_hw, min_hw = max(image.size), min(image.size) | |
aspect_ratio = max_hw / min_hw | |
max_len, min_len = 800, 400 | |
shortest_edge = int(min(max_len / aspect_ratio, min_len, min_hw)) | |
longest_edge = int(shortest_edge * aspect_ratio) | |
W, H = image.size | |
if H > W: | |
H, W = longest_edge, shortest_edge | |
else: | |
H, W = shortest_edge, longest_edge | |
image = image.resize((W, H)) | |
buffered = BytesIO() | |
image.save(buffered, format="JPEG") | |
img_b64_str = base64.b64encode(buffered.getvalue()).decode() | |
img_str = f'<img src="data:image/png;base64,{img_b64_str}" alt="user upload image" />' | |
msg = img_str + msg.replace('<image>', '').strip() | |
ret.append([msg, None]) | |
else: | |
ret.append([msg['value'], None]) | |
else: | |
ret[-1][-1] = msg['value'] | |
return ret |