# AI Functions Deep Audit Report ## Clustering, Idea Generation, and Content Generation **Date:** 2025-01-XX **Scope:** Complete audit of AI functions for clustering, idea generation, and content generation to identify unused code and files safe to remove. --- ## Executive Summary This audit identifies **legacy code, deprecated functions, and unused implementations** that are safe to remove from the codebase. The current system uses a unified AI framework through `run_ai_task` → `AIEngine` → `BaseAIFunction` implementations. --- ## 1. CURRENT ACTIVE ARCHITECTURE ### 1.1 Active Flow (What's Actually Used) ``` Frontend API Call ↓ views.py (auto_cluster/auto_generate_ideas/auto_generate_content) ↓ run_ai_task (ai/tasks.py) - Unified Celery task entrypoint ↓ AIEngine (ai/engine.py) - Orchestrator ↓ BaseAIFunction implementations: - AutoClusterFunction (ai/functions/auto_cluster.py) - GenerateIdeasFunction (ai/functions/generate_ideas.py) - GenerateContentFunction (ai/functions/generate_content.py) ↓ AICore (ai/ai_core.py) - Centralized AI request handler ↓ AIProvider (OpenAI/Runware) ``` ### 1.2 Active Files (KEEP) #### Core Framework - ✅ `backend/igny8_core/ai/tasks.py` - Unified Celery task (`run_ai_task`) - ✅ `backend/igny8_core/ai/engine.py` - AIEngine orchestrator - ✅ `backend/igny8_core/ai/base.py` - BaseAIFunction abstract class - ✅ `backend/igny8_core/ai/ai_core.py` - AICore centralized handler - ✅ `backend/igny8_core/ai/registry.py` - Function registry - ✅ `backend/igny8_core/ai/prompts.py` - PromptRegistry - ✅ `backend/igny8_core/ai/settings.py` - Model configurations - ✅ `backend/igny8_core/ai/constants.py` - AI constants - ✅ `backend/igny8_core/ai/tracker.py` - Progress tracking - ✅ `backend/igny8_core/ai/validators.py` - Validation functions #### Function Implementations - ✅ `backend/igny8_core/ai/functions/auto_cluster.py` - AutoClusterFunction - ✅ `backend/igny8_core/ai/functions/generate_ideas.py` - GenerateIdeasFunction - ✅ `backend/igny8_core/ai/functions/generate_content.py` - GenerateContentFunction - ✅ `backend/igny8_core/ai/functions/__init__.py` - Exports #### API Endpoints - ✅ `backend/igny8_core/modules/planner/views.py` - KeywordViewSet.auto_cluster(), ClusterViewSet.auto_generate_ideas() - ✅ `backend/igny8_core/modules/writer/views.py` - TasksViewSet.auto_generate_content() --- ## 2. DEPRECATED / UNUSED CODE (SAFE TO REMOVE) ### 2.1 Legacy Wrapper Functions (NOT USED) #### ❌ `generate_ideas_core()` - **SAFE TO REMOVE** - **Location:** `backend/igny8_core/ai/functions/generate_ideas.py:234` - **Status:** Legacy wrapper function for backward compatibility - **Usage:** ❌ **NOT CALLED ANYWHERE** (only in commented test code) - **Purpose:** Was meant for direct calls without Celery, but all calls now go through `run_ai_task` - **Action:** **REMOVE** - Function and export from `__init__.py` #### ❌ `generate_content_core()` - **SAFE TO REMOVE** - **Location:** `backend/igny8_core/ai/functions/generate_content.py:303` - **Status:** Legacy wrapper function for backward compatibility - **Usage:** ❌ **NOT CALLED ANYWHERE** (only in commented test code) - **Purpose:** Was meant for direct calls without Celery, but all calls now go through `run_ai_task` - **Action:** **REMOVE** - Function and export from `__init__.py` ### 2.2 AIProcessor Deprecated Methods (NOT USED) #### ❌ `AIProcessor.cluster_keywords()` - **SAFE TO REMOVE** - **Location:** `backend/igny8_core/utils/ai_processor.py:1049-1282` - **Status:** ⚠️ **DEPRECATED** (marked with deprecation warning) - **Usage:** ❌ **NOT CALLED ANYWHERE** - **Lines:** ~233 lines of code - **Action:** **REMOVE** entire method #### ❌ `AIProcessor.generate_ideas()` - **SAFE TO REMOVE** - **Location:** `backend/igny8_core/utils/ai_processor.py:1284-1363` - **Status:** Legacy method - **Usage:** ❌ **NOT CALLED ANYWHERE** - **Lines:** ~80 lines of code - **Action:** **REMOVE** entire method #### ❌ `AIProcessor.generate_content()` - **SAFE TO REMOVE** - **Location:** `backend/igny8_core/utils/ai_processor.py:433-531` - **Status:** Legacy method - **Usage:** ❌ **NOT CALLED ANYWHERE** (only called internally by `extract_image_prompts`, which is also unused) - **Lines:** ~98 lines of code - **Action:** **REMOVE** entire method #### ❌ `AIProcessor.extract_image_prompts()` - **SAFE TO REMOVE** - **Location:** `backend/igny8_core/utils/ai_processor.py:471-580` - **Status:** Legacy method - **Usage:** ❌ **NOT CALLED ANYWHERE** (new framework uses `GenerateImagesFunction` which uses `AICore.run_ai_request` directly) - **Lines:** ~110 lines of code - **Action:** **REMOVE** entire method **Note:** `AIProcessor.generate_image()` is **STILL USED** in `integration_views.py` for image generation, so keep the class and that method. ### 2.3 Unused Exports #### ❌ `generate_ideas_core` export - **SAFE TO REMOVE** - **Location:** `backend/igny8_core/ai/functions/__init__.py:5,12` - **Action:** Remove from imports and `__all__` #### ❌ `generate_content_core` export - **SAFE TO REMOVE** - **Location:** `backend/igny8_core/ai/functions/__init__.py:6,14` - **Action:** Remove from imports and `__all__` ### 2.4 Test File Cleanup #### ⚠️ `backend/igny8_core/ai/tests/test_run.py` - **Status:** Contains commented-out code referencing removed functions - **Action:** Clean up commented code (lines 16, 63, 75, 126-127) --- ## 3. AIProcessor - PARTIAL CLEANUP ### 3.1 What to KEEP in AIProcessor ✅ **KEEP:** - `AIProcessor.__init__()` - Initialization - `AIProcessor._get_api_key()` - API key retrieval - `AIProcessor._get_model()` - Model retrieval - `AIProcessor._call_openai()` - OpenAI API calls (used by generate_image) - `AIProcessor._extract_json_from_response()` - JSON extraction - `AIProcessor.generate_image()` - **STILL USED** in `integration_views.py` - `AIProcessor.get_prompt()` - May be used by generate_image - Constants imports (MODEL_RATES, etc.) - Used by AICore ### 3.2 What to REMOVE from AIProcessor ❌ **REMOVE:** - `AIProcessor.cluster_keywords()` - ~233 lines - `AIProcessor.generate_ideas()` - ~80 lines - `AIProcessor.generate_content()` - ~98 lines - `AIProcessor.extract_image_prompts()` - ~110 lines - **Total:** ~521 lines of unused code --- ## 4. FILES ALREADY DELETED (Good!) ✅ **Already Removed:** - `backend/igny8_core/modules/planner/tasks.py` - ✅ Already deleted - `backend/igny8_core/modules/writer/tasks.py` - ✅ Already deleted --- ## 5. SUMMARY OF REMOVALS ### 5.1 Functions to Remove | Function | Location | Lines | Status | |----------|----------|-------|--------| | `generate_ideas_core()` | `ai/functions/generate_ideas.py:234` | ~100 | ❌ Remove | | `generate_content_core()` | `ai/functions/generate_content.py:303` | ~85 | ❌ Remove | | `AIProcessor.cluster_keywords()` | `utils/ai_processor.py:1049` | ~233 | ❌ Remove | | `AIProcessor.generate_ideas()` | `utils/ai_processor.py:1284` | ~80 | ❌ Remove | | `AIProcessor.generate_content()` | `utils/ai_processor.py:433` | ~98 | ❌ Remove | | `AIProcessor.extract_image_prompts()` | `utils/ai_processor.py:471` | ~110 | ❌ Remove | **Total Lines to Remove:** ~706 lines ### 5.2 Exports to Remove | Export | Location | |--------|----------| | `generate_ideas_core` | `ai/functions/__init__.py:5,12` | | `generate_content_core` | `ai/functions/__init__.py:6,14` | ### 5.3 Test Cleanup | File | Action | |------|--------| | `ai/tests/test_run.py` | Remove commented code (lines 16, 63, 75, 126-127) | --- ## 6. VERIFICATION CHECKLIST Before removing, verify: - [ ] ✅ No imports of `generate_ideas_core` or `generate_content_core` anywhere - [ ] ✅ No calls to `AIProcessor.cluster_keywords()`, `generate_ideas()`, or `generate_content()` - [ ] ✅ All active code paths use `run_ai_task` → `AIEngine` → `BaseAIFunction` - [ ] ✅ `AIProcessor.generate_image()` is still used (verify in `integration_views.py`) - [ ] ✅ Constants from `ai_processor.py` are still imported by `AICore` (verify) --- ## 7. RECOMMENDED REMOVAL ORDER 1. **Phase 1: Remove Legacy Wrapper Functions** - Remove `generate_ideas_core()` from `generate_ideas.py` - Remove `generate_content_core()` from `generate_content.py` - Remove exports from `__init__.py` 2. **Phase 2: Remove AIProcessor Deprecated Methods** - Remove `AIProcessor.cluster_keywords()` - Remove `AIProcessor.generate_ideas()` - Remove `AIProcessor.generate_content()` - Remove `AIProcessor.extract_image_prompts()` (depends on generate_content, so remove after) 3. **Phase 3: Cleanup Tests** - Clean up commented code in `test_run.py` 4. **Phase 4: Verification** - Run full test suite - Verify all AI functions still work - Check for any broken imports --- ## 8. IMPACT ANALYSIS ### 8.1 No Breaking Changes Expected - ✅ All active code paths use the new framework - ✅ No external dependencies on removed functions - ✅ Views only use `run_ai_task` (verified) ### 8.2 Benefits - 🎯 **~706 lines of dead code removed** - 🎯 **Clearer codebase** - Only active code remains - 🎯 **Easier maintenance** - No confusion about which path to use - 🎯 **Reduced technical debt** --- ## 9. FILES TO MODIFY ### 9.1 Files to Edit 1. `backend/igny8_core/ai/functions/generate_ideas.py` - Remove `generate_ideas_core()` function (lines 234-333) 2. `backend/igny8_core/ai/functions/generate_content.py` - Remove `generate_content_core()` function (lines 303-386) 3. `backend/igny8_core/ai/functions/__init__.py` - Remove `generate_ideas_core` import and export - Remove `generate_content_core` import and export 4. `backend/igny8_core/utils/ai_processor.py` - Remove `cluster_keywords()` method (lines 1049-1282) - Remove `generate_ideas()` method (lines 1284-1363) - Remove `generate_content()` method (lines 433-531) - Remove `extract_image_prompts()` method (lines 471-580) 5. `backend/igny8_core/ai/tests/test_run.py` - Remove commented code referencing removed functions --- ## 10. CONCLUSION This audit identifies **~706 lines of unused legacy code** that can be safely removed without impacting functionality. All active code paths use the unified AI framework (`run_ai_task` → `AIEngine` → `BaseAIFunction`), making these legacy functions obsolete. **Recommendation:** Proceed with removal in phases as outlined above, with thorough testing after each phase.