Files
Consultoría AS 11b0ba46fa 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>
2026-01-28 20:55:28 +00:00

100 lines
3.7 KiB
Python

"""
Social Media Automation - Consultoría AS
=========================================
Sistema automatizado para la creación y publicación de contenido
en redes sociales (X, Threads, Instagram, Facebook).
"""
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.middleware.cors import CORSMiddleware
from app.api.routes import posts, products, services, calendar, dashboard, interactions, auth, publish, generate, generate_v2, notifications, analytics, odoo, leads, ab_testing, recycling, threads, image_templates
from app.core.config import settings
from app.core.database import engine
from app.models import Base
@asynccontextmanager
async def lifespan(app: FastAPI):
"""Lifecycle manager - crea tablas al iniciar si hay conexión a BD."""
try:
Base.metadata.create_all(bind=engine)
except Exception as e:
print(f"⚠️ No se pudo conectar a BD: {e}")
print(" La app funcionará pero sin persistencia hasta configurar BD")
yield
# Inicializar aplicación FastAPI
app = FastAPI(
title="Social Media Automation",
description="Sistema de automatización de redes sociales para Consultoría AS",
version="1.0.0",
docs_url="/api/docs",
redoc_url="/api/redoc",
lifespan=lifespan,
)
# Configurar CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # En producción, especificar dominios
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Montar archivos estáticos
app.mount("/static", StaticFiles(directory="dashboard/static"), name="static")
# Montar directorio de uploads para imágenes públicas
import os
os.makedirs("uploads/images", exist_ok=True)
app.mount("/uploads", StaticFiles(directory="uploads"), name="uploads")
# Registrar rutas
app.include_router(auth.router, prefix="", tags=["Auth"])
app.include_router(dashboard.router, prefix="", tags=["Dashboard"])
app.include_router(posts.router, prefix="/api/posts", tags=["Posts"])
app.include_router(products.router, prefix="/api/products", tags=["Products"])
app.include_router(services.router, prefix="/api/services", tags=["Services"])
app.include_router(calendar.router, prefix="/api/calendar", tags=["Calendar"])
app.include_router(interactions.router, prefix="/api/interactions", tags=["Interactions"])
app.include_router(publish.router, prefix="/api/publish", tags=["Publish"])
app.include_router(generate.router, prefix="/api/generate", tags=["AI Generation"])
app.include_router(generate_v2.router, prefix="/api/v2/generate", tags=["AI Generation v2"])
app.include_router(notifications.router, prefix="/api/notifications", tags=["Notifications"])
app.include_router(analytics.router, prefix="/api/analytics", tags=["Analytics"])
app.include_router(odoo.router, prefix="/api/odoo", tags=["Odoo"])
app.include_router(leads.router, prefix="/api/leads", tags=["Leads"])
app.include_router(ab_testing.router, prefix="/api/ab-tests", tags=["A/B Testing"])
app.include_router(recycling.router, prefix="/api/recycling", tags=["Recycling"])
app.include_router(threads.router, prefix="/api/threads", tags=["Thread Series"])
app.include_router(image_templates.router, prefix="/api/templates", tags=["Image Templates"])
@app.get("/api/health")
async def health_check():
"""Verificar estado del sistema."""
return {
"status": "healthy",
"app": settings.APP_NAME,
"version": "1.0.0"
}
@app.get("/api/stats")
async def get_stats():
"""Obtener estadísticas generales del sistema."""
# TODO: Implementar estadísticas reales desde la BD
return {
"posts_today": 0,
"posts_week": 0,
"posts_month": 0,
"pending_approval": 0,
"scheduled": 0,
"interactions_pending": 0
}