from sqlalchemy import Column, Integer, String, Float, Boolean, DateTime, Text, JSON from sqlalchemy.ext.declarative import declarative_base from datetime import datetime Base = declarative_base() class ConversationLog(Base): __tablename__ = "conversation_logs" id = Column(Integer, primary_key=True, index=True) session_id = Column(String(64), index=True) query = Column(Text, nullable=False) response = Column(Text, nullable=False) category = Column(String(64)) prompt_version = Column(String(32), default="standard") retry_count = Column(Integer, default=0) created_at = Column(DateTime, default=datetime.utcnow) class EvaluationResult(Base): __tablename__ = "evaluation_results" id = Column(Integer, primary_key=True, index=True) conversation_id = Column(Integer, index=True) session_id = Column(String(64), index=True) query = Column(Text, nullable=False) response = Column(Text, nullable=False) # Code eval code_eval_result = Column(String(16)) # PASS/FAIL code_eval_details = Column(Text) # LLM Judge scores policy_compliance = Column(Float, default=0.0) faithfulness = Column(Float, default=0.0) relevance = Column(Float, default=0.0) tone = Column(Float, default=0.0) correctness = Column(Float, default=0.0) judge_verdict = Column(String(16)) judge_reasoning = Column(Text) # Hallucination hallucination_detected = Column(Boolean, default=False) hallucination_details = Column(Text) hallucination_severity = Column(String(16), default="none") # Trust score trust_score = Column(Float, default=0.0) final_verdict = Column(String(16)) # PASS/FAIL # Retry is_retry = Column(Boolean, default=False) original_eval_id = Column(Integer, nullable=True) retry_trust_score = Column(Float, nullable=True) score_improvement = Column(Float, nullable=True) # Deployment deployment_ready = Column(Boolean, default=False) created_at = Column(DateTime, default=datetime.utcnow) class FailureLog(Base): __tablename__ = "failure_logs" id = Column(Integer, primary_key=True, index=True) eval_id = Column(Integer, index=True) session_id = Column(String(64)) query = Column(Text) response = Column(Text) primary_failure_reason = Column(Text) policy_violations = Column(JSON) hallucinations = Column(JSON) improvement_suggestions = Column(JSON) corrected_response = Column(Text) severity = Column(String(16)) created_at = Column(DateTime, default=datetime.utcnow) class PromptOptimizationLog(Base): __tablename__ = "prompt_optimization_logs" id = Column(Integer, primary_key=True, index=True) session_id = Column(String(64)) query = Column(Text) original_response = Column(Text) original_trust_score = Column(Float) optimized_response = Column(Text) optimized_trust_score = Column(Float) score_improvement = Column(Float) prompt_version_used = Column(String(32)) created_at = Column(DateTime, default=datetime.utcnow)