feat: Add Content Generation Engine v2 with quality scoring
Major improvements to AI content generation: ## New Components (app/services/ai/) - PromptLibrary: YAML-based prompt templates with inheritance - ContextEngine: Anti-repetition and best performers tracking - ContentGeneratorV2: Enhanced generation with dynamic parameters - PlatformAdapter: Platform-specific content adaptation - ContentValidator: AI-powered quality scoring (0-100) ## Prompt Library (app/prompts/) - 3 personalities: default, educational, promotional - 5 templates: tip_tech, product_post, service_post, thread, response - 4 platform configs: x, threads, instagram, facebook - Few-shot examples by category: ia, productividad, seguridad ## Database Changes - New table: content_memory (tracks generated content) - New columns in posts: quality_score, score_breakdown, generation_attempts ## New API Endpoints (/api/v2/generate/) - POST /generate - Generation with quality check - POST /generate/batch - Batch generation - POST /quality/evaluate - Evaluate content quality - GET /templates, /personalities, /platforms - List configs ## Celery Tasks - update_engagement_scores (every 6h) - cleanup_old_memory (monthly) - refresh_best_posts_yaml (weekly) ## Tests - Comprehensive tests for all AI engine components Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -102,6 +102,11 @@ class Post(Base):
|
||||
recycled_from_id = Column(Integer, ForeignKey("posts.id"), nullable=True)
|
||||
recycle_count = Column(Integer, default=0) # Times this post has been recycled
|
||||
|
||||
# AI Generation Quality
|
||||
quality_score = Column(Integer, nullable=True, index=True) # 0-100 score from validator
|
||||
score_breakdown = Column(JSON, nullable=True) # Detailed scoring breakdown
|
||||
generation_attempts = Column(Integer, default=1) # Times regenerated before acceptance
|
||||
|
||||
# Timestamps
|
||||
created_at = Column(DateTime, default=datetime.utcnow)
|
||||
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
@@ -136,7 +141,10 @@ class Post(Base):
|
||||
"ab_test_id": self.ab_test_id,
|
||||
"is_recyclable": self.is_recyclable,
|
||||
"recycled_from_id": self.recycled_from_id,
|
||||
"recycle_count": self.recycle_count
|
||||
"recycle_count": self.recycle_count,
|
||||
"quality_score": self.quality_score,
|
||||
"score_breakdown": self.score_breakdown,
|
||||
"generation_attempts": self.generation_attempts
|
||||
}
|
||||
|
||||
def get_content_for_platform(self, platform: str) -> str:
|
||||
|
||||
Reference in New Issue
Block a user