@@ -141,11 +141,10 @@ class Chatgpt(SimpleService): chunks = self._get_file_data(file_extension, file_bytes) else: image = file - mime = kind.mime if kind else 'application/octet-stream' - normalized_image, image_size, image_data = self._get_image_data(mime, file_bytes, file_extension) + normalized_image, image_size, image_data = self._get_image_data(file_bytes, file_extension) input_content.append(image_data) except: - raise FileExtensionNotSupported(['PDF', 'DOC', 'DOCX', 'XLSX', 'JPG', 'JPEG', 'PNG']) + raise FileExtensionNotSupported(['PDF', 'DOC', 'DOCX', 'XLSX', 'JPG', 'JPEG', 'PNG', 'WEBP']) for proxy in Proxy.objects.all(): self.llm = ChatOpenAI( model=model_name, @@ -476,12 +475,12 @@ class Chatgpt(SimpleService): raise return raw_file_extension - def _get_image_data(self, mime: str, file_bytes: bytes, file_extension: str) -> Tuple: - normalized_image = Image.open(BytesIO(file_bytes)) - format = 'jpeg' if file_extension == 'jpg' else file_extension + def _get_image_data(self, file_bytes: bytes, file_extension: str) -> Tuple: + normalized_image = Image.open(BytesIO(file_bytes)).convert('RGB') buf = BytesIO() + format = 'jpeg' if file_extension not in ('png', 'jpeg', 'webp') else file_extension normalized_image.save(buf, format=format) - image_url = f'data:{mime};base64,{base64.b64encode(buf.getvalue()).decode("utf-8")}' + image_url = f'data:image/{format};base64,{base64.b64encode(buf.getvalue()).decode("utf-8")}' buf.close() image_size = normalized_image.size image_data = {'type': 'image_url', 'image_url': {'url': image_url}} @@ -113,10 +113,9 @@ class Chatgpt_5(Chatgpt): chunks = self._get_file_data(file_extension, file_bytes) else: image = file - mime = kind.mime if kind else 'application/octet-stream' - _, image_size, image_data = self._get_image_data(mime, file_bytes, file_extension) + _, image_size, image_data = self._get_image_data(file_bytes, file_extension) except Exception: - raise FileExtensionNotSupported(['PDF', 'DOC', 'DOCX', 'XLSX', 'JPG', 'JPEG', 'PNG']) + raise FileExtensionNotSupported(['PDF', 'DOC', 'DOCX', 'XLSX', 'JPG', 'JPEG', 'PNG', 'WEBP']) chat_history = self.get_chat_history(model_name=model_name) chat_history.add_message(HumanMessage(content=input_message.content)) llm_input = [SystemMessage(content=user_system_prompt), HumanMessage(content=input_content)]