| """ |
| ByteAstra backend — MongoDB document wrapper models. |
| Behaves like SQLAlchemy ORM classes for seamless API compatibility. |
| """ |
| import enum |
| from datetime import datetime, timezone |
|
|
|
|
| class MessageRole(str, enum.Enum): |
| user = "user" |
| assistant = "assistant" |
| system = "system" |
|
|
|
|
| class Message: |
| """Wraps a MongoDB message document.""" |
| def __init__(self, doc: dict): |
| self.id = doc["_id"] |
| self.session_id = doc["session_id"] |
| self.role = MessageRole(doc["role"]) |
| self.content = doc["content"] |
| self.citations_json = doc.get("citations_json") |
| self.is_grounded = doc.get("is_grounded") |
| self.created_at = doc.get("created_at") or datetime.now(timezone.utc) |
|
|
|
|
| class Session: |
| """Wraps a MongoDB session document and its messages.""" |
| def __init__(self, doc: dict, messages: list[Message] = None): |
| self.id = doc["_id"] |
| self.domain = doc["domain"] |
| self.title = doc["title"] |
| self.user_id = doc.get("user_id") |
| self.subscription_tier = doc.get("subscription_tier", "free") |
| self.created_at = doc.get("created_at") or datetime.now(timezone.utc) |
| self.updated_at = doc.get("updated_at") or datetime.now(timezone.utc) |
| self.messages = messages or [] |
|
|