rsnarsna
first commit
667aacd
Raw
History Blame Contribute Delete
1.83 kB
"""
ChatSession and ChatMessage models.
Maps to AGENT.md DBML: `chat_sessions` (Lines 526-534) and `chat_messages` (Lines 536-543).
"""
from django.conf import settings
from django.db import models
from core.models import BaseModel
class ChatSession(BaseModel):
"""A conversation session between a user and an AI model."""
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name="chat_sessions",
)
org = models.ForeignKey(
"organizations.Organization",
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name="chat_sessions",
)
title = models.CharField(max_length=255, blank=True, default="")
model = models.ForeignKey(
"intelligence.AIModel",
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name="sessions",
)
system_prompt_snapshot = models.TextField(blank=True, default="")
class Meta:
db_table = "chat_sessions"
ordering = ["-created_at"]
def __str__(self) -> str:
return self.title or f"Session {self.pk}"
class ChatMessage(BaseModel):
"""A single message in a chat session."""
class Role(models.TextChoices):
USER = "user", "User"
ASSISTANT = "assistant", "Assistant"
SYSTEM = "system", "System"
session = models.ForeignKey(
ChatSession,
on_delete=models.CASCADE,
related_name="messages",
)
role = models.CharField(max_length=20, choices=Role.choices)
content = models.TextField()
tokens_used = models.PositiveIntegerField(default=0)
class Meta:
db_table = "chat_messages"
ordering = ["created_at"]
def __str__(self) -> str:
return f"{self.get_role_display()}: {self.content[:50]}"