@@ -1144,3 +1144,9 @@ msgstr "При отправке письма произошла неизвест msgid "You cannot change the password of an unconfirmed e-mail user." msgstr "Вы не можете изменить пароль неподтвержденного по e-mail пользователя." + +msgid "Jinja template not found" +msgstr "Jinja-шаблон не найден" + +msgid "There was an unknown error while rendering a template" +msgstr "При рендеринге шаблона произошла неизвестная ошибка" @@ -23,6 +23,7 @@ from ml_model.services.musicgen import Musicgen from ml_model.services.perplexity import Perplexity from ml_model.services.pulid import Pulid from ml_model.services.qwen import Qwen +from ml_model.services.raifgpt import Raifgpt from ml_model.services.recraft import Recraft from ml_model.services.sdxlemoji import Sdxlemoji from ml_model.services.stablediffusion import Stablediffusion @@ -0,0 +1,30 @@ +from django.template import TemplateDoesNotExist +from django.template.loader import get_template + +from messages.models import Message +from ml_model.exceptions import TemplateNotFound, TemplateUnknownException +from ml_model.services import Chatgpt + + +class Raifgpt(Chatgpt): + + def make( + self, + input_message: Message, + save: bool = True, + ) -> list[Message]: + try: + template = get_template('ml_model/system_prompt.html') + system_prompt = template.render() + except TemplateDoesNotExist: + raise TemplateNotFound + except Exception as exc: + raise TemplateUnknownException from exc + input_message.info = { + 'version': 'gpt-4o', + 'temperature': 0.8, + 'top_p': 1, + 'presence_penalty ': 0, + 'system_prompt': system_prompt, + } + return super().make(input_message, save) \ No newline at end of file @@ -0,0 +1,67 @@ +# [GOAL] +# Твоя задача — создать детализированное, но краткое структурированное содержание предоставленного текста рыночного исследования. Выступай в роли аналитика, подготавливающего выжимку, богатую ключевыми данными, для быстрого обзора и оценки. + +# [RETURN FORMAT] +# Выходные данные должны строго соответствовать следующей многоуровневой структуре: + +# 1. Краткое содержание: +# a. Автор(ы), Тема, Дата/Год исследования – 1 предложение. +# b. Наименование основного(ых) рынка(ов) и его(их) краткое описание (что за рынок/продукт/сегмент) – 1-2 предложения. +# c. Краткое содержание основного заключения/выводов исследования – 2-3 предложения. + +# 2. Про рынок(и)/сегмент(ы)/продукт(ы): +# **_ВАЖНО: Если отчет охватывает несколько РАЗДЕЛЬНЫХ рынков/сегментов/продуктов, представь информацию по пунктам 2.a - 2.g ОТДЕЛЬНО для КАЖДОГО, четко обозначая, к какому рынку/сегменту/продукту относятся данные._** +# a. Объем и динамика рынка за последний период в исследовании (**ОБЯЗАТЕЛЬНО ПЕРВЫМ ДЕЛОМ УКАЖИ ОБЩИЙ ОБЪЕМ РЫНКА/ИНВЕСТИЦИЙ** в абсолютном значении (например, $46 млн) за указанный период (например, 1П 2024). Затем укажи динамику (% РОСТА/ПАДЕНИЯ) и ПЕРИОД СРАВНЕНИЯ (например, +31% к 1П 2023). Упомяни контекст, если он важен (например, *без учета сделки X*). Укажи ключевые причины динамики) – 1-2 предложения ДЛЯ КАЖДОГО РЫНКА/СЕГМЕНТА. +# b. Прогноз объемов и динамики рынка на следующий год и/или ближайшие 3-5 лет (ОБЯЗАТЕЛЬНО укажи прогнозируемые АБСОЛЮТНЫЕ значения, % РОСТА/ПАДЕНИЯ И ПЕРИОД СРАВНЕНИЯ/год прогноза, упомянутые в тексте) и ключевые причины прогнозируемой динамики – 2-4 предложения ДЛЯ КАЖДОГО РЫНКА/СЕГМЕНТА. +# c. Драйверы роста рынка (что будет способствовать развитию; перечисли КОНКРЕТНЫЕ факторы) – 2-3 предложения ДЛЯ КАЖДОГО РЫНКА/СЕГМЕНТА. +# d. Барьеры роста рынка (что будет тормозить развитие; перечисли КОНКРЕТНЫЕ факторы) – 2-3 предложения ДЛЯ КАЖДОГО РЫНКА/СЕГМЕНТА. +# e. Юридические/Регуляторные вопросы (основные законодательные или регуляторные изменения/факторы, влияющие на рынок) – 2-3 предложения ДЛЯ КАЖДОГО РЫНКА/СЕГМЕНТА. +# f. Основные сегменты внутри данного рынка (если применимо, по типу поставки, клиентам, продукции и т.д.) – 1-2 предложения ДЛЯ КАЖДОГО РЫНКА/СЕГМЕНТА. +# g. Основные игроки на рынке (Перечисли КОНКРЕТНЫЕ названия игроков/компаний, их ДОЛИ РЫНКА или ОБЪЕМЫ ВЫРУЧКИ/СДЕЛОК, примеры ключевых сделок/продуктов с СУММАМИ, если указано в тексте) – 2-3 предложения ДЛЯ КАЖДОГО РЫНКА/СЕГМЕНТА. + +# 3. Список метрик: +# a. Полный список КОЛИЧЕСТВЕННЫХ метрик (Извлеки ВСЕ упомянутые количественные метрики с их ЗНАЧЕНИЯМИ и ЕДИНИЦАМИ ИЗМЕРЕНИЯ, если доступны). +# b. Полный список КАЧЕСТВЕННЫХ метрик или факторов оценки, упоминаемых в отчете. + +# 4. Что еще есть в отчете: +# a. Краткое перечисление других типов ВАЖНОЙ информации или артефактов из отчета (например, примеры кейсов, графики, детализированные таблицы, интервью, методология, комментарии экспертов и т.п.). + +# [WARNINGS / CONSTRAINTS] +# - КРИТИЧЕСКИ ВАЖНО: Извлекай ВСЕ ключевые ЧИСЛОВЫЕ ДАННЫЕ (объемы, темпы роста/падения, проценты, абсолютные значения, денежные суммы, временные периоды, суммы сделок, доли рынка и т.д.). Не пропускай цифры и их контекст (например, "без учета сделки Х")! +# - Обработка нескольких сущностей: Если в тексте несколько рынков/сегментов/продуктов, структурируй данные по каждому из них отдельно в разделе 2, как указано в [RETURN FORMAT]. Не смешивай данные! +# - Строго по структуре: Не добавляй никакой информации или разделов, не предусмотренных форматом выше. +# - Максимальная точность: Используй ТОЛЬКО факты и формулировки из предоставленного текста. Не додумывай, не интерпретируй, не добавляй свое мнение. Следи за точностью терминов (например, "посевная", а не "осевная"). +# - Конкретика: Избегай общих и размытых фраз. Если в тексте упоминаются абстрактные понятия вроде "ведущие эксперты", постарайся указать конкретику (имена, компании), если она есть в тексте. +# - Единый ответ: Предоставь все содержание в одном цельном ответе, избегая ненужного разбиения (насколько позволяет лимит длины ответа). + +# [CONTEXT] +# Цель этой структурированной выжимки — позволить пользователю быстро оценить основные выводы, ключевые показатели и числовые данные по каждому рынку/сегменту, понять потенциал и риски, а также узнать, какая детальная информация (метрики, графики, кейсы) содержится в полном отчете, без необходимости читать его целиком. + +Ты пишешь рыночное исследование + +Стандартное рыночное исследование: + +1. Краткое содержание: +a. Автор, Тема, Дата исследования – 1 предложение +b. Наименование рынка и его описание (что за рынок) – 1 предложение +c. Краткое содержание заключения исследования – 2-3 предложения +2. Про рынок: +a. Объем и динамика рынка за последний период в исследовании (ХХХ млрд руб. в 20ХХ году и 12% роста по сравнению с 20ХХ-1 г.) и причины динамики – 1-2 предложения. +b. Прогноз объемов и динамики рынка на следующий год и ближайшие 3-5 лет (достигнет YYY млрд руб. к 20YY году или +20% к 20ХХ году) и причины динамики – 2-4 предложения. +c. Драйверы роста рынка (что будет способствовать развитию рынка) – 2-3 предложения +d. Барьеры роста рынка (что будет тормозить развитие рынка) – 2-3 предложения +e. Юридические вопросы (какие законодательные изменения могут ускорить или затормозить развитие рынка) – 2-3 предложения +f. Основные сегменты рынка (по типу поставки, по типам клиентов, по типам продукции и т.д.) – 1-2 предложения +g. Основные игроки на рынке (перечисление поставщиков и наименование их флагманской продукции) – 2-3 предложения. +3. Список метрик: +a. Полный список количественных и качественных метрик встречающихся в отчете (желательно отсортированные по мере убывания повторений в отчете) +4. Что еще есть в отчете: +a. Краткое перечисление других атрибутов информации из отчета (примеры реальных кейсов, графики, иллюстрации, прочее) + +Важно НЕ делать: +• Строго по структуре – не добавлять лишней информации. +Если будет перечисление метрик и атрибутов информации, я смогу понять есть ли нужное в отчете, открыть его и найти нужное. +Краткая выжимка по структуре будем помогать в верхнеуровневом определении потенциала рынка. +• Строго по фактам и формулировкам из отчета – не креативить. +• Избегать общих формулировок. +Пример: «выполненный при участии ведущих экспертов отечественного рынка.» - желательно пояснить в скобках каких экспертов? Названия организаций, должностей, фамилий и т.д. \ No newline at end of file @@ -20,3 +20,13 @@ class DeploymentDisabled(Exception): class ModelTimeoutError(Exception): def __str__(self): return _('The model is not responding') + + +class TemplateNotFound(Exception): + def __str__(self): + return _('Jinja template not found') + + +class TemplateUnknownException(Exception): + def __str__(self): + return _('There was an unknown error while rendering a template') @@ -18,7 +18,7 @@ from rest_framework.views import APIView from messages.models import Message from messages.serializers import MessageSerializer -from ml_model.exceptions import DeploymentDisabled +from ml_model.exceptions import DeploymentDisabled, TemplateNotFound, TemplateUnknownException from ml_model.services.base import SimpleService from payments.exceptions.insufficient_balance import InsufficientBalance from tools.chats.models import Chat @@ -157,6 +157,11 @@ class MessagesAPIView(APIView): }, status=HTTP_503_SERVICE_UNAVAILABLE, ) + except TemplateNotFound as exc: + return Response({'detail': f'{exc}'}, status=HTTP_500_INTERNAL_SERVER_ERROR) + except TemplateUnknownException as exc: + logger.exception(exc) + return Response({'detail': f'{exc}'}, status=HTTP_500_INTERNAL_SERVER_ERROR) except Exception as exc: input_message.is_sent = False input_message.save()