""" AI Agent Models Database models for AI agent drafts and approvals. """ from datetime import datetime from uuid import uuid4 from sqlalchemy import JSON, Column, DateTime, Float, String, Text from core.models.base import Base class AgentDraft(Base): """Model for AI-generated agent drafts""" __tablename__ = "agent_drafts" id = Column(String(36), primary_key=True, default=lambda: str(uuid4())) agent_name = Column(String(100), nullable=False) draft_type = Column(String(50), nullable=False) title = Column(Text, nullable=False) content = Column(Text, nullable=False) target_entity = Column(String(255)) confidence = Column(Float, default=0.0) status = Column(String(50), default="draft") reviewer = Column(String(100)) tags = Column(JSON, default=list) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) def to_dict(self): return { "id": self.id, "agentName": self.agent_name, "draftType": self.draft_type, "title": self.title, "content": self.content, "targetEntity": self.target_entity, "confidence": self.confidence, "status": self.status, "reviewer": self.reviewer, "tags": self.tags, "createdAt": self.created_at.isoformat() if self.created_at else None, "lastModified": self.updated_at.isoformat() if self.updated_at else None, } class AgentApproval(Base): """Model for AI agent approval requests""" __tablename__ = "agent_approvals" id = Column(String(36), primary_key=True, default=lambda: str(uuid4())) agent_name = Column(String(100), nullable=False) action = Column(String(100), nullable=False) target = Column(String(255), nullable=False) confidence = Column(Float, nullable=False) status = Column(String(50), default="pending") risk = Column(String(20)) details = Column(Text) approved_by = Column(String(100)) approved_at = Column(DateTime) created_at = Column(DateTime, default=datetime.utcnow) def to_dict(self): return { "id": self.id, "agentName": self.agent_name, "action": self.action, "target": self.target, "confidence": self.confidence, "status": self.status, "risk": self.risk, "details": self.details, "approvedBy": self.approved_by, "approvedAt": self.approved_at.isoformat() if self.approved_at else None, "timestamp": self.created_at.isoformat() if self.created_at else None, }