81 lines
3.5 KiB
Python
81 lines
3.5 KiB
Python
"""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) |