@@ -3,6 +3,8 @@ import itertools import logging import subprocess import time + +from django.utils.translation import gettext_lazy as _ from datetime import timedelta from decimal import Decimal from io import BufferedReader, BytesIO @@ -30,7 +32,7 @@ from langchain_core.prompts.prompt import PromptTemplate from langchain_core.runnables import RunnableWithMessageHistory from langchain_openai.chat_models import ChatOpenAI from langchain_text_splitters import RecursiveCharacterTextSplitter -from PIL import Image +from PIL import Image, UnidentifiedImageError from PyPDF2 import PdfReader from backend import settings @@ -109,16 +111,19 @@ class Chatgpt(SimpleService): else: image = file if image: - kind = filetype.guess(input_message.file.read(20)) - mime = kind.mime if kind else 'application/octet-stream' - normalized_image = Image.open(image) - format = 'jpeg' if kind.extension == 'jpg' else kind.extension - buf = BytesIO() - normalized_image.save(buf, format=format) - image_url = f'data:{mime},base64,{base64.b64encode(buf.getvalue()).decode("utf-8")}' - buf.close() - image_size = normalized_image.size - input_content.append({'type': 'image_url', 'image_url': {'url': image_url}}) + try: + kind = filetype.guess(input_message.file.read(20)) + mime = kind.mime if kind else 'application/octet-stream' + normalized_image = Image.open(image) + format = 'jpeg' if kind.extension == 'jpg' else kind.extension + buf = BytesIO() + normalized_image.save(buf, format=format) + image_url = f'data:{mime},base64,{base64.b64encode(buf.getvalue()).decode("utf-8")}' + buf.close() + image_size = normalized_image.size + input_content.append({'type': 'image_url', 'image_url': {'url': image_url}}) + except UnidentifiedImageError: + raise Exception(_('Unable to recognize the image. (Supported formats are PNG, JPG, JPEG)')) for proxy in Proxy.objects.all(): self.llm = ChatOpenAI( model=model_name, @@ -18,6 +18,7 @@ class Midjourney(SimpleService): """ _CALLBACK = 'minimax/image-01' + price = Decimal('2') def __init__(self, store): super().__init__(store) @@ -43,7 +43,7 @@ services: labels: - traefik.enable=true - traefik.docker.network=infrastructure - - traefik.http.routers.backend.rule=Host(`$DOMAIN`) + - traefik.http.routers.backend.rule=Host(`$DOMAIN`) || Host(`backend.air.fail`) - traefik.http.routers.backend.entrypoints=web,websecure - traefik.http.routers.backend.tls=true - traefik.http.routers.backend.tls.certresolver=defaultresolver