"""Enhanced export models for Story 4.4 Custom AI Models & Enhanced Export.""" from sqlalchemy import Column, String, Integer, Float, Text, Boolean, DateTime, JSON, ForeignKey from sqlalchemy.orm import relationship from datetime import datetime from backend.core.database_registry import registry from .base import Model class PromptExperiment(Model): """A/B testing experiments for prompt optimization.""" __tablename__ = "prompt_experiments" id = Column(String, primary_key=True) name = Column(String(200), nullable=False) description = Column(Text, nullable=True) baseline_template_id = Column(String, ForeignKey("prompt_templates.id"), nullable=False) variant_template_id = Column(String, ForeignKey("prompt_templates.id"), nullable=False) status = Column(String(20), default="active") # active, completed, paused success_metric = Column(String(50), default="quality_score") # quality_score, user_rating, processing_time statistical_significance = Column(Float, nullable=True) results = Column(JSON, nullable=True) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) # Relationships baseline_template = relationship("backend.models.prompt_models.PromptTemplate", foreign_keys=[baseline_template_id]) variant_template = relationship("backend.models.prompt_models.PromptTemplate", foreign_keys=[variant_template_id]) class ExportMetadata(Model): """Metadata for enhanced export operations.""" __tablename__ = "export_metadata" id = Column(String, primary_key=True) summary_id = Column(String, ForeignKey("summaries.id"), nullable=False) template_id = Column(String, ForeignKey("prompt_templates.id"), nullable=True) export_type = Column(String(20), nullable=False) # markdown, pdf, json, html executive_summary = Column(Text, nullable=True) section_count = Column(Integer, nullable=True) timestamp_count = Column(Integer, nullable=True) processing_time_seconds = Column(Float, nullable=True) quality_score = Column(Float, nullable=True) config_used = Column(JSON, nullable=True) # Export configuration used created_at = Column(DateTime, default=datetime.utcnow) # Relationships summary = relationship("backend.models.summary.Summary", back_populates="export_metadata") template = relationship("backend.models.prompt_models.PromptTemplate") class SummarySection(Model): """Detailed sections with timestamps for enhanced exports.""" __tablename__ = "summary_sections" id = Column(String, primary_key=True) summary_id = Column(String, ForeignKey("summaries.id"), nullable=False) section_index = Column(Integer, nullable=False) title = Column(String(300), nullable=False) start_timestamp = Column(Integer, nullable=False) # seconds end_timestamp = Column(Integer, nullable=False) # seconds content = Column(Text, nullable=True) summary = Column(Text, nullable=True) key_points = Column(JSON, nullable=True) # List of key points youtube_link = Column(String(500), nullable=True) # Timestamped YouTube link confidence_score = Column(Float, default=0.0) created_at = Column(DateTime, default=datetime.utcnow) # Relationships summary = relationship("backend.models.summary.Summary", back_populates="sections") # Register models with the database registry registry.register_model(PromptExperiment) registry.register_model(ExportMetadata) registry.register_model(SummarySection)