""" 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]}"