Spaces:
Runtime error
Runtime error
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 | |