Files
moreminimore-marketing/backend/test/deploy_persona_system.py
Kunthawat Greethong c35fa52117 Base code
2026-01-08 22:39:53 +07:00

197 lines
6.8 KiB
Python

#!/usr/bin/env python3
"""
Deployment script for the Persona System.
Sets up database tables and validates the complete system.
"""
import sys
import os
# Add the backend directory to the Python path
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from loguru import logger
def deploy_persona_system():
"""Deploy the complete persona system."""
logger.info("🚀 Deploying Persona System")
try:
# Step 1: Create database tables
logger.info("📊 Step 1: Creating database tables...")
from scripts.create_persona_tables import create_persona_tables
create_persona_tables()
logger.info("✅ Database tables created")
# Step 2: Validate Gemini integration
logger.info("🤖 Step 2: Validating Gemini integration...")
from services.llm_providers.gemini_provider import gemini_structured_json_response
test_schema = {
"type": "object",
"properties": {
"status": {"type": "string"},
"timestamp": {"type": "string"}
},
"required": ["status"]
}
test_response = gemini_structured_json_response(
prompt="Return status='ready' and current timestamp",
schema=test_schema,
temperature=0.1,
max_tokens=1024
)
if "error" in test_response:
logger.warning(f"⚠️ Gemini test warning: {test_response['error']}")
else:
logger.info("✅ Gemini integration validated")
# Step 3: Test persona service
logger.info("🧠 Step 3: Testing persona service...")
from services.persona_analysis_service import PersonaAnalysisService
persona_service = PersonaAnalysisService()
logger.info("✅ Persona service initialized")
# Step 4: Test replication engine
logger.info("⚙️ Step 4: Testing replication engine...")
from services.persona_replication_engine import PersonaReplicationEngine
replication_engine = PersonaReplicationEngine()
logger.info("✅ Replication engine initialized")
# Step 5: Validate API endpoints
logger.info("🌐 Step 5: Validating API endpoints...")
from api.persona_routes import router
logger.info(f"✅ Persona router configured with {len(router.routes)} routes")
logger.info("🎉 Persona System deployed successfully!")
# Print deployment summary
print_deployment_summary()
return True
except Exception as e:
logger.error(f"❌ Deployment failed: {str(e)}")
return False
def print_deployment_summary():
"""Print deployment summary and next steps."""
logger.info("📋 PERSONA SYSTEM DEPLOYMENT SUMMARY")
logger.info("=" * 50)
logger.info("✅ Database Tables:")
logger.info(" - writing_personas")
logger.info(" - platform_personas")
logger.info(" - persona_analysis_results")
logger.info(" - persona_validation_results")
logger.info("✅ Services:")
logger.info(" - PersonaAnalysisService")
logger.info(" - PersonaReplicationEngine")
logger.info("✅ API Endpoints:")
logger.info(" - POST /api/personas/generate")
logger.info(" - GET /api/personas/user/{user_id}")
logger.info(" - GET /api/personas/platform/{platform}")
logger.info(" - GET /api/personas/export/{platform}")
logger.info("✅ Platform Support:")
logger.info(" - Twitter/X, LinkedIn, Instagram, Facebook")
logger.info(" - Blog, Medium, Substack")
logger.info("🔧 NEXT STEPS:")
logger.info("1. Complete onboarding with website analysis (Step 2)")
logger.info("2. Set research preferences (Step 3)")
logger.info("3. Generate persona in Final Step (Step 6)")
logger.info("4. Export hardened prompts for external AI systems")
logger.info("5. Use persona for consistent content generation")
logger.info("=" * 50)
def validate_deployment():
"""Validate that all components are working correctly."""
logger.info("🔍 Validating deployment...")
validation_results = {
"database": False,
"gemini": False,
"persona_service": False,
"replication_engine": False,
"api_routes": False
}
try:
# Test database
from services.database import get_db_session
session = get_db_session()
if session:
session.close()
validation_results["database"] = True
logger.info("✅ Database connection validated")
# Test Gemini
from services.llm_providers.gemini_provider import get_gemini_api_key
api_key = get_gemini_api_key()
if api_key and api_key != "your_gemini_api_key_here":
validation_results["gemini"] = True
logger.info("✅ Gemini API key configured")
else:
logger.warning("⚠️ Gemini API key not configured")
# Test services
from services.persona_analysis_service import PersonaAnalysisService
from services.persona_replication_engine import PersonaReplicationEngine
PersonaAnalysisService()
PersonaReplicationEngine()
validation_results["persona_service"] = True
validation_results["replication_engine"] = True
logger.info("✅ Services validated")
# Test API routes
from api.persona_routes import router
if len(router.routes) > 0:
validation_results["api_routes"] = True
logger.info("✅ API routes validated")
except Exception as e:
logger.error(f"❌ Validation error: {str(e)}")
# Summary
passed = sum(validation_results.values())
total = len(validation_results)
logger.info(f"📊 Validation Results: {passed}/{total} components validated")
if passed == total:
logger.info("🎉 All components validated successfully!")
return True
else:
logger.warning("⚠️ Some components failed validation")
for component, status in validation_results.items():
status_icon = "" if status else ""
logger.info(f" {status_icon} {component}")
return False
if __name__ == "__main__":
# Deploy system
deployment_success = deploy_persona_system()
if deployment_success:
# Validate deployment
validation_success = validate_deployment()
if validation_success:
logger.info("🎉 Persona System ready for production!")
sys.exit(0)
else:
logger.error("❌ Deployment validation failed")
sys.exit(1)
else:
logger.error("❌ Deployment failed")
sys.exit(1)