18 KiB
IGNY8 AI Functions Documentation
Version: 1.0
Last Updated: 2025-01-XX
Purpose: Complete documentation of all AI functions in the IGNY8 system, their workflows, dependencies, and integration points.
Table of Contents
- AI Functions Overview
- AIProcessor Class
- Planner Module AI Functions
- Writer Module AI Functions
- System Module AI Functions
- Progress Tracking
- Error Handling
- Dependencies
AI Functions Overview
The IGNY8 system includes 8 primary AI functions across 3 modules:
-
Planner Module (2 functions):
- Auto Cluster Keywords (
auto_cluster) - Auto Generate Ideas (
auto_generate_ideas)
- Auto Cluster Keywords (
-
Writer Module (3 functions):
- Auto Generate Content (
auto_generate_content) - Auto Generate Images (
auto_generate_images) - Extract Image Prompts (
extract_image_prompts)
- Auto Generate Content (
-
System Module (3 functions):
- Test OpenAI Integration (
test_openai) - Test Runware Integration (
test_runware) - Generate Image (Test) (
generate_image)
- Test OpenAI Integration (
All AI functions use the unified AIProcessor class as the core interface for AI operations.
AIProcessor Class
Location: backend/igny8_core/utils/ai_processor.py
Purpose: Unified AI interface for all AI operations.
Initialization
Method: AIProcessor.__init__()
Parameters:
account(optional): Account object for loading account-specific settings
Dependencies:
IntegrationSettingsmodel (for API keys and model configuration)- Django settings (fallback for API keys)
Initializes:
self.openai_api_key: Loaded from IntegrationSettings or Django settingsself.runware_api_key: Loaded from IntegrationSettings or Django settingsself.default_model: Loaded from IntegrationSettings or Django settingsself.model_rates: Model pricing rates (per 1M tokens)self.image_model_rates: Image model pricing rates (per image)
Core Methods
cluster_keywords()
Purpose: Cluster keywords using AI-based semantic similarity.
Parameters:
keywords: List of keyword dictionariessector_name: Optional sector name for contextaccount: Optional account objectresponse_steps: Optional list for step trackingprogress_callback: Optional callback function
Dependencies:
AIPromptmodel (for clustering prompt template)get_default_prompt()utility function_call_openai()method_extract_json_from_response()method
Returns: Dictionary with clusters array and response_steps
generate_ideas()
Purpose: Generate content ideas for clusters using AI.
Parameters:
clusters: List of cluster dictionariesaccount: Optional account object
Dependencies:
AIPromptmodel (for ideas prompt template)get_default_prompt()utility function_call_openai()method_extract_json_from_response()method
Returns: Dictionary with ideas array
generate_content()
Purpose: Generate text content using OpenAI GPT models.
Parameters:
prompt: The prompt textmodel: Optional model name (defaults to self.default_model)max_tokens: Maximum tokens to generatetemperature: Sampling temperature
Dependencies:
_call_openai()method
Returns: Dictionary with content, tokens_used, model, cost, error
extract_image_prompts()
Purpose: Extract image prompts from content using AI.
Parameters:
content: Article content texttitle: Article titlemax_images: Maximum number of images to extract prompts foraccount: Optional account object
Dependencies:
AIPromptmodel (for image prompt extraction template)get_default_prompt()utility function_call_openai()method_extract_json_from_response()method
Returns: Dictionary with featured_prompt and in_article_prompts array
generate_image()
Purpose: Generate images using OpenAI DALL-E or Runware.
Parameters:
prompt: Image generation promptmodel: Image model name (dall-e-3, dall-e-2, or runware model)size: Image size (e.g., "1024x1024")n: Number of images to generateaccount: Optional account object
Dependencies:
IntegrationSettingsmodel (for API keys)- OpenAI API or Runware API
Returns: Dictionary with image_url, revised_prompt, cost, provider, model
Internal Methods
_call_openai()
Purpose: Make HTTP request to OpenAI API.
Parameters:
prompt: The prompt textmodel: Model namemax_tokens: Maximum tokenstemperature: Sampling temperatureresponse_format: Optional JSON response formatresponse_steps: Optional list for step tracking
Dependencies:
requestslibrary- OpenAI API endpoint
Returns: Dictionary with content, input_tokens, output_tokens, total_tokens, model, cost, error, api_id
_extract_json_from_response()
Purpose: Extract JSON from OpenAI response (handles various formats).
Parameters:
response_text: Raw response text from OpenAI
Dependencies:
jsonlibraryrelibrary (for regex patterns)
Returns: Parsed JSON dictionary or None
_get_api_key()
Purpose: Get API key from IntegrationSettings or Django settings.
Parameters:
integration_type: Type of integration ('openai' or 'runware')account: Optional account object
Dependencies:
IntegrationSettingsmodel- Django settings
Returns: API key string or None
_get_model()
Purpose: Get default model from IntegrationSettings or Django settings.
Parameters:
integration_type: Type of integration ('openai')account: Optional account object
Dependencies:
IntegrationSettingsmodel- Django settings
Returns: Model name string or default
get_prompt()
Purpose: Get prompt template from AIPrompt model or default.
Parameters:
prompt_type: Type of prompt ('clustering', 'ideas', 'content_generation', etc.)account: Optional account object
Dependencies:
AIPromptmodelget_default_prompt()utility function
Returns: Prompt template string
Planner Module AI Functions
1. Auto Cluster Keywords
Function Name: auto_cluster
API Endpoint: POST /v1/planner/keywords/auto_cluster/
ViewSet Action: KeywordViewSet.auto_cluster()
Celery Task: auto_cluster_keywords_task()
Core Function: _auto_cluster_keywords_core()
AIProcessor Method: AIProcessor.cluster_keywords()
Purpose: Automatically group related keywords into semantic clusters using AI.
Complete Workflow (16 Steps)
Request Phase (Steps 1-7):
- API Endpoint Validation: Validate keyword IDs array
- Account/Site Extraction: Extract account and site from request
- Task Queuing: Queue Celery task
- Keyword Loading & Validation: Load keywords from database
- Relationship Validation: Validate account, site, sector relationships
- AIProcessor Creation: Create AIProcessor instance
- AI Call Preparation: Format keywords for AI processing
AI Processing Phase (Steps 8-12): 8. HTTP Response Validation: Validate OpenAI API response 9. Content Extraction: Extract content from response 10. Cost Calculation: Calculate API cost 11. JSON Extraction & Parsing: Extract and parse JSON from response 12. Cluster Data Validation: Validate cluster data structure
Database Phase (Steps 13-16): 13. Database Transaction Start: Begin atomic transaction 14. Cluster Creation/Update: Create or update clusters 15. Keyword Matching & Assignment: Match keywords to clusters 16. Metrics Recalculation & Commit: Recalculate cluster metrics and commit
Dependencies
Models:
KeywordsmodelClustersmodelAccountmodelSitemodelSectormodelIntegrationSettingsmodel (for OpenAI API key)AIPromptmodel (for clustering prompt template)Planmodel (for plan limits)
Functions:
KeywordViewSet.auto_cluster()(API endpoint)auto_cluster_keywords_task()(Celery task)_auto_cluster_keywords_core()(core function)AIProcessor.cluster_keywords()(AI processing)
Files:
backend/igny8_core/modules/planner/views.pybackend/igny8_core/modules/planner/tasks.pybackend/igny8_core/utils/ai_processor.py
2. Auto Generate Ideas
Function Name: auto_generate_ideas
API Endpoint: POST /v1/planner/clusters/auto_generate_ideas/
ViewSet Action: ClusterViewSet.auto_generate_ideas()
Celery Task: auto_generate_ideas_task()
Core Function: _generate_single_idea_core()
AIProcessor Method: AIProcessor.generate_ideas()
Purpose: Generate content ideas for keyword clusters using AI.
Workflow
- API Endpoint: Validate cluster IDs, extract account
- Task Queuing: Queue Celery task
- Cluster Loading: Load clusters from database
- AI Processing: Call
AIProcessor.generate_ideas() - Idea Creation: Create ContentIdeas records
Dependencies
Models:
ClustersmodelContentIdeasmodelKeywordsmodelAccountmodelSitemodelSectormodelIntegrationSettingsmodel (for OpenAI API key)AIPromptmodel (for ideas prompt template)Planmodel (for plan limits)
Functions:
ClusterViewSet.auto_generate_ideas()(API endpoint)auto_generate_ideas_task()(Celery task)_generate_single_idea_core()(core function)AIProcessor.generate_ideas()(AI processing)
Files:
backend/igny8_core/modules/planner/views.pybackend/igny8_core/modules/planner/tasks.pybackend/igny8_core/utils/ai_processor.py
Writer Module AI Functions
3. Auto Generate Content
Function Name: auto_generate_content
API Endpoint: POST /v1/writer/tasks/auto_generate_content/
ViewSet Action: TasksViewSet.auto_generate_content()
Celery Task: auto_generate_content_task()
AIProcessor Method: AIProcessor.generate_content()
Purpose: Generate complete blog post/article content using AI.
Workflow
- API Endpoint: Validate task IDs, extract account
- Task Queuing: Queue Celery task
- Task Loading: Load tasks with relationships
- Content Generation: Call
AIProcessor.generate_content()for each task - Content Saving: Save generated content to Content model
Dependencies
Models:
TasksmodelContentmodelContentIdeasmodelClustersmodelKeywordsmodelAccountmodelSitemodelSectormodelIntegrationSettingsmodel (for OpenAI API key)AIPromptmodel (for content generation prompt template)AuthorProfilemodel (for writing style)Planmodel (for plan limits)
Functions:
TasksViewSet.auto_generate_content()(API endpoint)auto_generate_content_task()(Celery task)AIProcessor.generate_content()(AI processing)
Files:
backend/igny8_core/modules/writer/views.pybackend/igny8_core/modules/writer/tasks.pybackend/igny8_core/utils/ai_processor.py
4. Auto Generate Images
Function Name: auto_generate_images
API Endpoint: POST /v1/writer/tasks/auto_generate_images/
ViewSet Action: TasksViewSet.auto_generate_images()
Celery Task: auto_generate_images_task()
AIProcessor Methods: AIProcessor.extract_image_prompts(), AIProcessor.generate_image()
Purpose: Generate images for content tasks using AI (OpenAI DALL-E or Runware).
Workflow
- API Endpoint: Validate task IDs, extract account
- Task Queuing: Queue Celery task
- Task Loading: Load tasks with content
- Image Prompt Extraction: Call
AIProcessor.extract_image_prompts() - Image Generation: Call
AIProcessor.generate_image()for each prompt - Image Saving: Save generated images to Images model
Dependencies
Models:
TasksmodelImagesmodelContentmodelAccountmodelIntegrationSettingsmodel (for OpenAI/Runware API keys)AIPromptmodel (for image prompt templates)Planmodel (for plan limits and image model choices)
Functions:
TasksViewSet.auto_generate_images()(API endpoint)auto_generate_images_task()(Celery task)AIProcessor.extract_image_prompts()(prompt extraction)AIProcessor.generate_image()(image generation)
Files:
backend/igny8_core/modules/writer/views.pybackend/igny8_core/modules/writer/tasks.pybackend/igny8_core/utils/ai_processor.py
5. Extract Image Prompts
Function Name: extract_image_prompts
AIProcessor Method: AIProcessor.extract_image_prompts()
Purpose: Extract image prompts from generated content for image generation.
Note: This is typically called internally by auto_generate_images, but can be called directly.
Dependencies
Models:
ContentmodelAIPromptmodel (for image prompt extraction template)IntegrationSettingsmodel (for OpenAI API key)
Functions:
AIProcessor.extract_image_prompts()(AI processing)
Files:
backend/igny8_core/utils/ai_processor.py
System Module AI Functions
6. Test OpenAI Integration
Function Name: test_openai
API Endpoint: POST /v1/system/settings/integrations/{id}/test_openai/
ViewSet Action: IntegrationSettingsViewSet.test_openai()
Purpose: Test OpenAI API connection and validate API key.
Workflow
- Get API Key: From request or saved IntegrationSettings
- Test Connection: Call OpenAI API (
/v1/modelsor/v1/chat/completions) - Return Result: Success or error message
Dependencies
Models:
IntegrationSettingsmodelAccountmodel
Functions:
IntegrationSettingsViewSet.test_openai()(API endpoint)AIProcessorclass (for API key loading)
Files:
backend/igny8_core/modules/system/integration_views.pybackend/igny8_core/utils/ai_processor.py
7. Test Runware Integration
Function Name: test_runware
API Endpoint: POST /v1/system/settings/integrations/{id}/test_runware/
ViewSet Action: IntegrationSettingsViewSet.test_runware()
Purpose: Test Runware API connection and validate API key.
Workflow
- Get API Key: From request or saved IntegrationSettings
- Test Connection: Call Runware API (
/v1) - Return Result: Success or error message
Dependencies
Models:
IntegrationSettingsmodelAccountmodel
Functions:
IntegrationSettingsViewSet.test_runware()(API endpoint)AIProcessorclass (for API key loading)
Files:
backend/igny8_core/modules/system/integration_views.pybackend/igny8_core/utils/ai_processor.py
8. Generate Image (Test)
Function Name: generate_image
API Endpoint: POST /v1/system/settings/integrations/{id}/generate_image/
ViewSet Action: IntegrationSettingsViewSet.generate_image()
Purpose: Test image generation with OpenAI DALL-E or Runware.
Workflow
- Get Configuration: From request or saved IntegrationSettings
- Generate Image: Call
AIProcessor.generate_image() - Return Result: Image URL or error message
Dependencies
Models:
IntegrationSettingsmodelAccountmodel
Functions:
IntegrationSettingsViewSet.generate_image()(API endpoint)AIProcessor.generate_image()(image generation)
Files:
backend/igny8_core/modules/system/integration_views.pybackend/igny8_core/utils/ai_processor.py
Progress Tracking
Task Progress Endpoint
Endpoint: GET /v1/system/settings/task_progress/{task_id}/
ViewSet Action: IntegrationSettingsViewSet.task_progress()
Purpose: Get Celery task status and progress.
Response Format:
{
"state": "PROGRESS",
"meta": {
"current": 2,
"total": 10,
"percentage": 20,
"message": "Processing...",
"request_steps": [...],
"response_steps": [...]
}
}
States:
PENDING: Task is queued but not startedPROGRESS: Task is in progressSUCCESS: Task completed successfullyFAILURE: Task failed with error
Frontend Integration
Hook: useProgressModal
Functionality:
- Polls task progress endpoint every 2 seconds
- Displays progress percentage and message
- Shows step-by-step logs (request_steps and response_steps)
- Auto-closes on completion
Store: aiRequestLogsStore
Functionality:
- Stores AI request/response logs
- Tracks step-by-step execution
- Displays logs in UI
Error Handling
Error Types
- API Errors: OpenAI/Runware API errors
- Validation Errors: Input validation failures
- Database Errors: Database operation failures
- Connection Errors: Celery/Redis connection issues
Error Propagation
- API Endpoint: Catches errors, returns error response with request_steps
- Celery Task: Catches errors, updates task state to FAILURE with error details
- Core Function: Catches errors, logs to request_steps/response_steps
- AIProcessor: Catches errors, returns error in result dictionary
Error Logging
- All errors logged to
request_stepsorresponse_steps - Error details include: error type, message, function name, step number
- Frontend displays errors in AI Request/Response Logs section
Dependencies
Database Models
Account: Account isolationSite,Sector: Site/sector hierarchyKeywords,Clusters,ContentIdeas: Planner dataTasks,Content,Images: Writer dataIntegrationSettings: API keys and configurationAIPrompt: Prompt templatesPlan: Plan limits
External Services
- OpenAI API: GPT models for text generation
- OpenAI DALL-E: Image generation
- Runware API: Alternative image generation
Utilities
get_default_prompt(): Default prompt templatesAIProcessor: Unified AI interface- Celery: Asynchronous task processing
- Redis: Celery broker
Summary
The IGNY8 AI functions system provides:
- Unified Interface: Single AIProcessor class for all AI operations
- Account Isolation: All AI functions respect account boundaries
- Progress Tracking: Real-time progress updates with step-by-step logs
- Error Handling: Comprehensive error logging and propagation
- Flexible Configuration: Account-specific API keys and prompts
- Asynchronous Processing: Celery tasks for long-running operations
- Multiple Providers: Support for OpenAI and Runware
- Complete Workflows: End-to-end workflows from API to database
All AI functions integrate seamlessly with the account/site/user/plan architecture and provide detailed logging for debugging and monitoring.