Mexar / backend /models /agent.py
devrajsinh2012's picture
feat: deploy Phase 1 architecture fixes and Phase 2 dataset collection & evaluation infrastructure
632bdc4 verified
Raw
History Blame Contribute Delete
2.65 kB
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)
# Phase 1 fix 1.1: TF-IDF weights and NER entities stored separately for inspection
domain_signature_weights = Column(JSONB, nullable=True) # {term: tfidf_weight} (Eq. 1)
domain_entities = Column(JSONB, nullable=True) # NER entity list (Section III-A)
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")