Stage 3 - AI refactor

This commit is contained in:
alorig
2025-11-09 19:30:22 +05:00
parent 375473308d
commit c04c688aa0
6 changed files with 333 additions and 29 deletions

View File

@@ -11,6 +11,7 @@ from igny8_core.modules.planner.models import Clusters, ContentIdeas
from igny8_core.modules.system.utils import get_prompt_value
from igny8_core.ai.ai_core import AICore
from igny8_core.ai.validators import validate_cluster_exists, validate_cluster_limits
from igny8_core.ai.tracker import ConsoleStepTracker
logger = logging.getLogger(__name__)
@@ -195,6 +196,9 @@ def generate_ideas_core(cluster_id: int, account_id: int = None, progress_callba
Returns:
Dict with 'success', 'idea_created', 'message', etc.
"""
tracker = ConsoleStepTracker('generate_ideas')
tracker.init("Task started")
try:
from igny8_core.auth.models import Account
@@ -202,6 +206,8 @@ def generate_ideas_core(cluster_id: int, account_id: int = None, progress_callba
if account_id:
account = Account.objects.get(id=account_id)
tracker.prep("Loading account and cluster data...")
# Use the new function class
fn = GenerateIdeasFunction()
# Store account for use in methods
@@ -211,14 +217,18 @@ def generate_ideas_core(cluster_id: int, account_id: int = None, progress_callba
payload = {'ids': [cluster_id]}
# Validate
tracker.prep("Validating input...")
validated = fn.validate(payload, account)
if not validated['valid']:
tracker.error('ValidationError', validated['error'])
return {'success': False, 'error': validated['error']}
# Prepare data
tracker.prep("Loading cluster with keywords...")
data = fn.prepare(payload, account)
# Build prompt
tracker.prep("Building prompt...")
prompt = fn.build_prompt(data, account)
# Call AI using centralized request handler
@@ -226,23 +236,32 @@ def generate_ideas_core(cluster_id: int, account_id: int = None, progress_callba
result = ai_core.run_ai_request(
prompt=prompt,
max_tokens=4000,
function_name='generate_ideas'
function_name='generate_ideas',
tracker=tracker
)
if result.get('error'):
return {'success': False, 'error': result['error']}
# Parse response
tracker.parse("Parsing AI response...")
ideas_data = fn.parse_response(result['content'])
if not ideas_data:
tracker.error('ParseError', 'No ideas generated by AI')
return {'success': False, 'error': 'No ideas generated by AI'}
tracker.parse(f"Parsed {len(ideas_data)} idea(s)")
# Take first idea
idea_data = ideas_data[0]
# Save output
tracker.save("Saving idea to database...")
save_result = fn.save_output(ideas_data, data, account)
tracker.save(f"Saved {save_result['ideas_created']} idea(s)")
tracker.done(f"Idea '{idea_data.get('title', 'Untitled')}' created successfully")
return {
'success': True,
@@ -251,6 +270,7 @@ def generate_ideas_core(cluster_id: int, account_id: int = None, progress_callba
}
except Exception as e:
tracker.error('Exception', str(e), e)
logger.error(f"Error in generate_ideas_core: {str(e)}", exc_info=True)
return {'success': False, 'error': str(e)}