|
| 1 | +import base64 |
1 | 2 | import copy |
| 3 | +import re |
2 | 4 | import time |
3 | 5 | from collections import deque |
| 6 | +from io import BytesIO |
4 | 7 |
|
| 8 | +import requests |
5 | 9 | import tiktoken |
6 | 10 | import torch |
7 | 11 | import torch.nn.functional as F |
| 12 | +from PIL import Image |
8 | 13 | from transformers import LogitsProcessor, LogitsProcessorList |
9 | 14 |
|
10 | 15 | from extensions.openai.errors import InvalidRequestError |
@@ -140,7 +145,25 @@ def convert_history(history): |
140 | 145 | system_message = "" |
141 | 146 |
|
142 | 147 | for entry in history: |
143 | | - content = entry["content"] |
| 148 | + if "image_url" in entry: |
| 149 | + image_url = entry['image_url'] |
| 150 | + if "base64" in image_url: |
| 151 | + image_url = re.sub('^data:image/.+;base64,', '', image_url) |
| 152 | + img = Image.open(BytesIO(base64.b64decode(image_url))) |
| 153 | + else: |
| 154 | + try: |
| 155 | + my_res = requests.get(image_url) |
| 156 | + img = Image.open(BytesIO(my_res.content)) |
| 157 | + except Exception: |
| 158 | + raise 'Image cannot be loaded from the URL!' |
| 159 | + |
| 160 | + buffered = BytesIO() |
| 161 | + img.save(buffered, format="JPEG") |
| 162 | + img_str = base64.b64encode(buffered.getvalue()).decode('utf-8') |
| 163 | + content = f'<img src="data:image/jpeg;base64,{img_str}">' |
| 164 | + else: |
| 165 | + content = entry["content"] |
| 166 | + |
144 | 167 | role = entry["role"] |
145 | 168 |
|
146 | 169 | if role == "user": |
@@ -182,7 +205,8 @@ def chat_completions_common(body: dict, is_legacy: bool = False, stream=False) - |
182 | 205 | raise InvalidRequestError(message="messages: missing role", param='messages') |
183 | 206 | elif m['role'] == 'function': |
184 | 207 | raise InvalidRequestError(message="role: function is not supported.", param='messages') |
185 | | - if 'content' not in m: |
| 208 | + |
| 209 | + if 'content' not in m and "image_url" not in m: |
186 | 210 | raise InvalidRequestError(message="messages: missing content", param='messages') |
187 | 211 |
|
188 | 212 | # Chat Completions |
|
0 commit comments