"""Standalone AI assistant chat model. Persistent conversation history for general IT questions with RAG context. """ import uuid from datetime import datetime, timezone from typing import Optional, Any from sqlalchemy import String, DateTime, ForeignKey, Integer, Boolean from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.dialects.postgresql import UUID, JSONB from app.core.database import Base class AssistantChat(Base): __tablename__ = "assistant_chats" id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), primary_key=True, default=uuid.uuid4 ) user_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True, ) account_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("accounts.id", ondelete="CASCADE"), nullable=False, index=True, ) title: Mapped[str] = mapped_column( String(255), nullable=False, default="New Chat" ) messages: Mapped[list[dict[str, Any]]] = mapped_column( JSONB, nullable=False, default=list ) message_count: Mapped[int] = mapped_column( Integer, nullable=False, default=0 ) total_input_tokens: Mapped[int] = mapped_column( Integer, nullable=False, default=0 ) total_output_tokens: Mapped[int] = mapped_column( Integer, nullable=False, default=0 ) pinned: Mapped[bool] = mapped_column( Boolean, nullable=False, default=False ) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc) ) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc), )