165 lines
7.1 KiB
Python
165 lines
7.1 KiB
Python
"""
|
|
Enhanced Persona Database Models
|
|
Improved schema for better writing style mimicry and quality tracking.
|
|
"""
|
|
|
|
from sqlalchemy import Column, Integer, String, Text, DateTime, Float, JSON, ForeignKey, Boolean, Index
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
from sqlalchemy.orm import relationship
|
|
from datetime import datetime
|
|
|
|
Base = declarative_base()
|
|
|
|
class EnhancedWritingPersona(Base):
|
|
"""Enhanced writing persona model with improved linguistic analysis."""
|
|
|
|
__tablename__ = "enhanced_writing_personas"
|
|
|
|
# Primary fields
|
|
id = Column(Integer, primary_key=True)
|
|
user_id = Column(Integer, nullable=False, index=True)
|
|
persona_name = Column(String(255), nullable=False)
|
|
|
|
# Core Identity
|
|
archetype = Column(String(100), nullable=True)
|
|
core_belief = Column(Text, nullable=True)
|
|
brand_voice_description = Column(Text, nullable=True)
|
|
|
|
# Enhanced Linguistic Fingerprint
|
|
linguistic_fingerprint = Column(JSON, nullable=True) # More detailed analysis
|
|
writing_style_signature = Column(JSON, nullable=True) # Unique style markers
|
|
vocabulary_profile = Column(JSON, nullable=True) # Detailed vocabulary analysis
|
|
sentence_patterns = Column(JSON, nullable=True) # Sentence structure patterns
|
|
rhetorical_style = Column(JSON, nullable=True) # Rhetorical device preferences
|
|
|
|
# Quality Metrics
|
|
style_consistency_score = Column(Float, nullable=True) # 0-100
|
|
authenticity_score = Column(Float, nullable=True) # 0-100
|
|
readability_score = Column(Float, nullable=True) # 0-100
|
|
engagement_potential = Column(Float, nullable=True) # 0-100
|
|
|
|
# Learning & Adaptation
|
|
feedback_history = Column(JSON, nullable=True) # User feedback over time
|
|
performance_metrics = Column(JSON, nullable=True) # Content performance data
|
|
adaptation_history = Column(JSON, nullable=True) # How persona evolved
|
|
|
|
# Source data tracking
|
|
onboarding_session_id = Column(Integer, nullable=True)
|
|
source_website_analysis = Column(JSON, nullable=True)
|
|
source_research_preferences = Column(JSON, nullable=True)
|
|
|
|
# AI Analysis metadata
|
|
ai_analysis_version = Column(String(50), nullable=True)
|
|
confidence_score = Column(Float, nullable=True)
|
|
analysis_date = Column(DateTime, default=datetime.utcnow)
|
|
|
|
# Metadata
|
|
created_at = Column(DateTime, default=datetime.utcnow)
|
|
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
|
is_active = Column(Boolean, default=True)
|
|
|
|
# Indexes for performance
|
|
__table_args__ = (
|
|
Index('idx_user_active', 'user_id', 'is_active'),
|
|
Index('idx_created_at', 'created_at'),
|
|
)
|
|
|
|
class EnhancedPlatformPersona(Base):
|
|
"""Enhanced platform-specific persona with detailed optimization."""
|
|
|
|
__tablename__ = "enhanced_platform_personas"
|
|
|
|
# Primary fields
|
|
id = Column(Integer, primary_key=True)
|
|
writing_persona_id = Column(Integer, ForeignKey("enhanced_writing_personas.id"), nullable=False)
|
|
platform_type = Column(String(50), nullable=False, index=True)
|
|
|
|
# Enhanced Platform-specific Analysis
|
|
platform_linguistic_adaptation = Column(JSON, nullable=True) # How language adapts to platform
|
|
platform_engagement_patterns = Column(JSON, nullable=True) # Detailed engagement analysis
|
|
platform_content_optimization = Column(JSON, nullable=True) # Content optimization rules
|
|
platform_algorithm_insights = Column(JSON, nullable=True) # Algorithm-specific insights
|
|
|
|
# Performance Tracking
|
|
content_performance_history = Column(JSON, nullable=True) # Historical performance data
|
|
engagement_metrics = Column(JSON, nullable=True) # Engagement statistics
|
|
optimization_suggestions = Column(JSON, nullable=True) # AI-generated optimization tips
|
|
|
|
# Quality Assurance
|
|
platform_compliance_score = Column(Float, nullable=True) # 0-100
|
|
optimization_effectiveness = Column(Float, nullable=True) # 0-100
|
|
|
|
# Metadata
|
|
created_at = Column(DateTime, default=datetime.utcnow)
|
|
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
|
is_active = Column(Boolean, default=True)
|
|
|
|
# Relationships
|
|
writing_persona = relationship("EnhancedWritingPersona", back_populates="platform_personas")
|
|
|
|
# Indexes
|
|
__table_args__ = (
|
|
Index('idx_platform_active', 'platform_type', 'is_active'),
|
|
Index('idx_persona_platform', 'writing_persona_id', 'platform_type'),
|
|
)
|
|
|
|
class PersonaQualityMetrics(Base):
|
|
"""Tracks persona quality and improvement over time."""
|
|
|
|
__tablename__ = "persona_quality_metrics"
|
|
|
|
id = Column(Integer, primary_key=True)
|
|
writing_persona_id = Column(Integer, ForeignKey("enhanced_writing_personas.id"), nullable=False)
|
|
platform_persona_id = Column(Integer, ForeignKey("enhanced_platform_personas.id"), nullable=True)
|
|
|
|
# Quality Scores
|
|
style_accuracy = Column(Float, nullable=True) # How well it mimics user style
|
|
content_quality = Column(Float, nullable=True) # Overall content quality
|
|
engagement_rate = Column(Float, nullable=True) # Engagement performance
|
|
consistency_score = Column(Float, nullable=True) # Consistency across content
|
|
|
|
# User Feedback
|
|
user_satisfaction = Column(Float, nullable=True) # User rating
|
|
user_feedback = Column(Text, nullable=True) # Qualitative feedback
|
|
improvement_requests = Column(JSON, nullable=True) # Specific improvement requests
|
|
|
|
# AI Analysis
|
|
ai_quality_assessment = Column(JSON, nullable=True) # AI's quality analysis
|
|
improvement_suggestions = Column(JSON, nullable=True) # AI suggestions for improvement
|
|
|
|
# Metadata
|
|
assessment_date = Column(DateTime, default=datetime.utcnow)
|
|
assessor_type = Column(String(50), nullable=True) # user, ai, automated
|
|
|
|
# Relationships
|
|
writing_persona = relationship("EnhancedWritingPersona")
|
|
platform_persona = relationship("EnhancedPlatformPersona")
|
|
|
|
class PersonaLearningData(Base):
|
|
"""Stores learning data for persona improvement."""
|
|
|
|
__tablename__ = "persona_learning_data"
|
|
|
|
id = Column(Integer, primary_key=True)
|
|
writing_persona_id = Column(Integer, ForeignKey("enhanced_writing_personas.id"), nullable=False)
|
|
|
|
# Learning Inputs
|
|
user_writing_samples = Column(JSON, nullable=True) # Additional user writing samples
|
|
successful_content_examples = Column(JSON, nullable=True) # High-performing content
|
|
user_preferences = Column(JSON, nullable=True) # User preferences and adjustments
|
|
|
|
# Learning Outputs
|
|
style_refinements = Column(JSON, nullable=True) # Refinements made to persona
|
|
vocabulary_updates = Column(JSON, nullable=True) # Vocabulary additions/removals
|
|
pattern_adjustments = Column(JSON, nullable=True) # Pattern adjustments
|
|
|
|
# Metadata
|
|
learning_date = Column(DateTime, default=datetime.utcnow)
|
|
learning_type = Column(String(50), nullable=True) # feedback, sample, preference
|
|
|
|
# Relationships
|
|
writing_persona = relationship("EnhancedWritingPersona")
|
|
|
|
# Add relationships
|
|
EnhancedWritingPersona.platform_personas = relationship("EnhancedPlatformPersona", back_populates="writing_persona", cascade="all, delete-orphan")
|