Mexar / backend /models /agent.py
Devrajsinh bharatsinh gohil
Initial commit of MEXAR Ultimate - Phase 2 cleanup complete
b0b150b
from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship
from sqlalchemy.dialects.postgresql import JSONB
from core.database import Base
class Agent(Base):
"""AI Agent with all metadata stored in Supabase"""
__tablename__ = "agents"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False)
name = Column(String, nullable=False)
domain = Column(String, nullable=True)
system_prompt = Column(Text, nullable=False)
# All metadata stored in Supabase (no filesystem)
domain_keywords = Column(JSONB, nullable=True)
domain_signature = Column(JSONB, nullable=True)
prompt_analysis = Column(JSONB, nullable=True)
knowledge_graph_json = Column(JSONB, nullable=True)
compilation_stats = Column(JSONB, nullable=True)
status = Column(String, default="initializing") # initializing, compiling, ready, failed
storage_path = Column(String, nullable=True) # Deprecated, kept for compatibility
chunk_count = Column(Integer, default=0)
entity_count = Column(Integer, default=0)
created_at = Column(DateTime(timezone=True), server_default=func.now())
# Relationships
user = relationship("User", backref="agents")
compilation_jobs = relationship("CompilationJob", back_populates="agent", cascade="all, delete-orphan")
conversations = relationship("Conversation", back_populates="agent", cascade="all, delete-orphan")
chunks = relationship("DocumentChunk", back_populates="agent", cascade="all, delete-orphan")
class CompilationJob(Base):
"""Background job for agent compilation"""
__tablename__ = "compilation_jobs"
id = Column(Integer, primary_key=True, index=True)
agent_id = Column(Integer, ForeignKey("agents.id", ondelete="CASCADE"), nullable=False)
status = Column(String, default="queued") # queued, processing, completed, failed
progress = Column(Integer, default=0)
current_step = Column(String, nullable=True)
error_message = Column(Text, nullable=True)
created_at = Column(DateTime(timezone=True), server_default=func.now())
completed_at = Column(DateTime(timezone=True), nullable=True)
agent = relationship("Agent", back_populates="compilation_jobs")