@@ -6,6 +6,10 @@ from typing import Any, Iterator import httpx from django.conf import settings +from tools.chats.models import Chat +from tools.copywrite.models import Copywrite +from tools.public_api.models import APIStore + from messages.models import Message from ml_model.services.base import SimpleService @@ -53,6 +57,8 @@ class Deepseek(SimpleService): info = input_message.info.copy() version = info.pop('version') start_time = time.time() + chat_history = self.get_chat_history() + message = f"История диалога:{chat_history}. Новое сообщение от пользователя: {input_message.content} AI:'" with httpx.Client( base_url='https://openrouter.ai/api/v1', headers={'Authorization': f'Bearer {settings.OPENROUTER_API_KEY}'}, @@ -61,7 +67,7 @@ class Deepseek(SimpleService): 'chat/completions', json={ 'model': version, - 'messages': [{'role': 'user', 'content': input_message.content}], + 'messages': [{'role': 'user', 'content': message}], }, ) if ( @@ -84,3 +90,37 @@ class Deepseek(SimpleService): msgs = self.save_results(result, process_time) return msgs raise Exception('No answer from Deepseek, please retry later') + + def get_chat_history(self, message_limit: int = 10, max_token_limit: int = 1500): + history = [] + if isinstance(self.store, Chat): + air_messages = list( + reversed( + Message.objects.filter( + chats_chats_messages=self.store, + is_deleted=False, + is_sent=True + ).order_by('-created_at')[:message_limit] + ) + ) + elif isinstance(self.store, APIStore): + air_messages = [] + elif isinstance(self.store, Copywrite): + air_messages = list( + reversed( + Message.objects.filter( + copywrite_copywrites_messages=self.store, + is_deleted=False, + is_sent=True, + ).order_by('-created_at')[:message_limit] + ) + ) + for msg in air_messages: + buffer = msg.content or '' + history.append(buffer) + total_length = sum(len(msg) for msg in history) + while total_length > max_token_limit and history: + removed_message = history.pop(0) + total_length -= len(removed_message) + message_history = '; '.join(history) + return message_history