@@ -338,10 +338,6 @@ OPENAI_PROXY_HOST = env.str('OPENAI_PROXY_HOST', 'neuron-proxy:8080') UPSCALE_MULTIPLIER_HOST = env.str('UPSCALE_MULTIPLIER_HOST', 'packet:8080') # FILES -MAX_UPLOAD_SIZE_PER_MODEL = { - 'raifgpt': 50, - 'default': 8, -} ImageFile.LOAD_TRUNCATED_IMAGES = True @@ -1,6 +1,5 @@ from typing import Dict, Any -from backend import settings from django.utils.translation import gettext_lazy as _ from rest_framework import serializers @@ -40,15 +39,9 @@ class MessageSerializer(serializers.ModelSerializer): def validate(self, data: Dict[str, Any]) -> Dict[str, Any]: file = data.get('file') - version = data.get('info', {}).get('version', 'default') - max_mb_size = settings.MAX_UPLOAD_SIZE_PER_MODEL.get( - version, - settings.MAX_UPLOAD_SIZE_PER_MODEL['default'] - ) + max_mb_size = 50 if file and file.size > (max_mb_size << 10 << 10): - raise ValidationError( - _('The file size cannot exceed %(max_mb_size)d MB') % {'max_mb_size': max_mb_size} - ) + raise ValidationError(_('The file size cannot exceed %(max_mb_size)d MB') % {'max_mb_size': max_mb_size}) return data def to_representation(self, instance): @@ -274,16 +274,20 @@ class Chatgpt(SimpleService): 'model': model_name, 'input': messages, 'tools': [], - 'instructions': 'Форматирование — обязательное требование. Выполняй строго по правилам:\\n\\n1) ' - 'Используй реальные символы новой строки. Не выводи "\\\\n" как текст — вставляй ' - 'переносы (символ новой строки).\\n2) Между абзацами ставь ОДНУ пустую строку ' - '(то есть два символа новой строки подряд: \\\\n\\\\n).\\n3) Для списков — каждый пункт на ' - 'отдельной строке; между списком и текстом — пустая строка.\\n4) ' - 'Любые блоки/куски/фрагменты кода СТРОГО ' - 'в тройных бэктиках (```) с указанием наименования языка программирования, ' - 'с пустой строкой перед и после блока/куска/фрагмента кода.' - '5) Не используй HTML.\\n6) Если формат неверный — перепиши ответ и ' - 'верни исправленный вариант.' + 'instructions': "Форматирование — обязательное требование. Выполняй строго по правилам: " + "1) Используй реальные символы новой строки, не выводи '\\n' как текст — " + "вставляй переносы. 2) Абзацы: между абзацами ставь ОДНУ пустую строку " + "(два символа новой строки подряд). 3) Нумерованные и маркированные списки: " + "каждый пункт на отдельной строке; между списком и текстом оставляй пустую строку. " + "4) Блоки кода: любые фрагменты кода выделяй тройными бэктиками (```) с " + "указанием языка программирования; перед и после блока оставляй одну пустую строку. " + "5) Заголовки абзацев выделяй жирным (**Заголовок**). " + "6) Используй Markdown для всего форматирования, не используй HTML. " + "7) Исправление формата: если формат неверный, перепиши ответ и верни " + "исправленный вариант. Cтрого разделяй текст на абзацы с жирными заголовками, " + "нумерованные и маркированные списки выводи с переносами строк, " + "блоки кода — с тройными бэктиками и указанием языка, не выводи '\\n' " + "как текст, используйте реальные переносы строк." } if info.get('reasoning'): json_data['reasoning'] = {} @@ -187,7 +187,7 @@ class MessagesAPIView(APIView): output_messages.insert(0, input_message) return Response(MessageSerializer(output_messages, many=True).data, 201) else: - return Response(data=serializer.errors, status=400) + return Response({'detail': '; '.join(serializer.errors['non_field_errors'])}, 400) class MessageAPIView(APIView): @@ -164,7 +164,7 @@ class MediaAPIView(APIView): ) return Response(MessageSerializer(output_messages, many=True).data, 201) else: - return Response(data=serializer.errors, status=400) + return Response({'detail': '; '.join(serializer.errors['non_field_errors'])}, 400) class ModelImagesAPIView(MediaAPIView):