from mongoengine import * from datetime import datetime MONGODB_URI="mongodb+srv://brijrvl:igbot567@orderbot.obb7gan.mongodb.net/?retryWrites=true&w=majority&appName=orderbot" DATABASE_NAME="analyticsbot" connect( db=DATABASE_NAME, host=MONGODB_URI, ) class ChatManager: def __init__(self): self.connect_to_db() def connect_to_db(self): # Connection to MongoDB connect(db=DATABASE_NAME, host=MONGODB_URI) class Session(Document): phone_number_id = StringField(required=True, unique=True) chat_history = StringField(default="") meta = { 'collection': 'sessions', 'db_alias': 'default' } class Message(Document): session_id = ReferenceField('ChatManager.Session', required=True) phone_number_id = StringField(required=True) role = StringField(choices=['USER', 'ASSISTANT'], required=True) content = StringField(required=True) timestamp = DateTimeField(default=datetime.utcnow, required=True) meta = { 'collection': 'messages', 'db_alias': 'default' } def get_or_create_session(self, phone_number): session = self.Session.objects(phone_number_id=phone_number).first() if not session: session = self.Session(phone_number_id=phone_number).save() return session def save_message(self, session_id, phone_number, role, content): print("Here 3") message = self.Message( session_id=session_id, phone_number_id=phone_number, role=role, content=content, timestamp=datetime.utcnow() ) message.save() print("Here 4") return message def get_last_n_messages(self, session, n=10): # Retrieve the last `n` messages for the given session messages = self.Message.objects(session_id=session.id).order_by('-timestamp')[:n] return messages def build_chat_history(self, messages): # Build chat history string from the retrieved messages chat_history = [] for message in messages: chat_history.append(f"{message.role}: {message.content}") return "\n".join(reversed(chat_history)) def handle_message(self, phone_number, content): session = self.get_or_create_session(phone_number) self.save_message(session.id, phone_number, 'USER', content) last_messages = self.get_last_n_messages(session) if len(last_messages) >= 10: last_three_messages = last_messages[:10] else: last_three_messages = last_messages str_chat_history = self.build_chat_history(last_three_messages) return str_chat_history