flowchart LR %% Define colors for modules classDef mainServiceAiStyle fill:#e3f2fd,stroke:#1976d2,stroke-width:3px classDef serviceExtractionStyle fill:#fce4ec,stroke:#c2185b,stroke-width:3px classDef serviceGenerationStyle fill:#e0f2f1,stroke:#00796b,stroke-width:3px classDef serviceUtilsStyle fill:#fff9e0,stroke:#f57f17,stroke-width:3px classDef interfacesStyle fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px %% Declare all function nodes first readImage[readImage] generateImage[generateImage] callAiPlanning[callAiPlanning] callAiDocuments[callAiDocuments] callAiText[callAiText] _ensureAiObjectsInitialized[_ensureAiObjectsInitialized] _initializeSubmodules[_initializeSubmodules] _buildPromptWithPlaceholders[_buildPromptWithPlaceholders] _analyzePromptAndCreateOptions[_analyzePromptAndCreateOptions] _callAiWithLooping[_callAiWithLooping] _extractSectionsFromResponse[_extractSectionsFromResponse] _shouldContinueGeneration[_shouldContinueGeneration] _buildFinalResultFromSections[_buildFinalResultFromSections] ExtractionServiceExtract[ExtractionService.extractContent] processDocumentsPerChunk[processDocumentsPerChunk] _processPartsWithMapping[_processPartsWithMapping] _mergePartResults[_mergePartResults] SubPipelineMerge[subPipeline._applyMerging] GenerationService[GenerationService.renderReport] buildGenerationPrompt[buildGenerationPrompt] sanitizePromptContent[sanitizePromptContent] AiObjectsCall[AiObjects.call] AiObjectsGenerateImage[AiObjects.generateImage] %% Module subgraphs with functions subgraph mainServiceAi[mainServiceAi] readImage generateImage callAiPlanning callAiDocuments callAiText _ensureAiObjectsInitialized _initializeSubmodules _buildPromptWithPlaceholders _analyzePromptAndCreateOptions _callAiWithLooping _extractSectionsFromResponse _shouldContinueGeneration _buildFinalResultFromSections end subgraph serviceExtraction[serviceExtraction] ExtractionServiceExtract processDocumentsPerChunk _processPartsWithMapping _mergePartResults SubPipelineMerge end subgraph serviceGeneration[serviceGeneration] GenerationService buildGenerationPrompt end subgraph serviceUtils[serviceUtils] sanitizePromptContent end subgraph interfaces[interfaces] AiObjectsCall AiObjectsGenerateImage end %% Apply colors to subgraphs class mainServiceAi mainServiceAiStyle class serviceExtraction serviceExtractionStyle class serviceGeneration serviceGenerationStyle class serviceUtils serviceUtilsStyle class interfaces interfacesStyle %% mainServiceAi function calls readImage --> _ensureAiObjectsInitialized readImage --> AiObjectsCall generateImage --> _ensureAiObjectsInitialized generateImage --> AiObjectsGenerateImage callAiPlanning --> _ensureAiObjectsInitialized callAiPlanning --> _buildPromptWithPlaceholders callAiPlanning --> AiObjectsCall callAiDocuments --> _ensureAiObjectsInitialized callAiDocuments --> _analyzePromptAndCreateOptions callAiDocuments --> generateImage callAiDocuments --> _callAiWithLooping callAiDocuments --> callAiText callAiDocuments --> buildGenerationPrompt callAiDocuments --> GenerationService callAiText --> _ensureAiObjectsInitialized callAiText --> processDocumentsPerChunk _ensureAiObjectsInitialized --> AiObjectsCall _initializeSubmodules --> ExtractionServiceExtract _analyzePromptAndCreateOptions --> AiObjectsCall _analyzePromptAndCreateOptions --> sanitizePromptContent _callAiWithLooping --> AiObjectsCall _callAiWithLooping --> _extractSectionsFromResponse _callAiWithLooping --> _shouldContinueGeneration _callAiWithLooping --> _buildFinalResultFromSections _buildPromptWithPlaceholders --> sanitizePromptContent %% serviceExtraction function calls processDocumentsPerChunk --> ExtractionServiceExtract processDocumentsPerChunk --> _processPartsWithMapping processDocumentsPerChunk --> _mergePartResults _processPartsWithMapping --> AiObjectsCall _mergePartResults --> SubPipelineMerge