Base code
This commit is contained in:
164
backend/models/enhanced_persona_models.py
Normal file
164
backend/models/enhanced_persona_models.py
Normal file
@@ -0,0 +1,164 @@
|
||||
"""
|
||||
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")
|
||||
Reference in New Issue
Block a user