# Complete Function Call Diagram ```mermaid graph TB subgraph AI_Service["AI Service Modules"] MA[mainServiceAi
AiService] SC[subCoreAi
SubCoreAi] SDG[subDocumentGeneration
SubDocumentGeneration] SDP[subDocumentProcessing
SubDocumentProcessing] SU[subSharedAiUtils
Utilities] end subgraph EXT_Service["Extraction Service Modules"] MSE[mainServiceExtraction
ExtractionService] SPE[subPromptBuilderExtraction
buildExtractionPrompt] SP[subPipeline
runExtraction] end subgraph GEN_Service["Generation Service Modules"] MSG[mainServiceGeneration
GenerationService] SPG[subPromptBuilderGeneration
buildGenerationPrompt] SJ[subJsonSchema
Schemas] end %% subCoreAi calls SC -->|_buildGenerationPrompt| SPG SC -->|callAiDocuments| SDP SC -->|sanitizePromptContent| SU %% subDocumentGeneration calls SDG -->|processDocumentsWithContinuation| SDP SDG -->|buildGenerationPrompt| SPG SDG -->|renderReport| MSG SDG -->|sanitizePromptContent| SU %% subDocumentProcessing calls SDP -->|extractContent 3x| MSE SDP -->|_applyMerging 3x| SP SDP -->|readImage| SC %% mainServiceExtraction calls MSE -->|runExtraction| SP %% subPromptBuilderExtraction calls SPE -->|get_document_subJsonSchema| SJ SPE -->|sanitizePromptContent| SU %% mainServiceGeneration calls utilities MSG -->|utility functions| SU %% subCoreAi detailed calls SC -.->|aiObjects.call| AI_Interface["AiObjects Interface"] SDP -.->|aiObjects.call| AI_Interface %% Style classDef aiClass fill:#e1f5ff,stroke:#0066cc,stroke-width:2px classDef extClass fill:#fff5e1,stroke:#cc6600,stroke-width:2px classDef genClass fill:#e1ffe1,stroke:#006600,stroke-width:2px classDef utilClass fill:#f0f0f0,stroke:#666,stroke-width:2px classDef interfaceClass fill:#ffe1f5,stroke:#cc0066,stroke-width:2px class MA,SC,SDG,SDP,SU aiClass class MSE,SPE,SP extClass class MSG,SPG,SJ genClass class AI_Interface interfaceClass ``` ## Detailed Call Map with Function Names ```mermaid graph LR %% Nodes SC[subCoreAi] SDG[subDocumentGeneration] SDP[subDocumentProcessing] SU[subSharedAiUtils] SPE[subPromptBuilderExtraction] SPG[subPromptBuilderGeneration] MSE[mainServiceExtraction] MSG[mainServiceGeneration] SP[subPipeline] SJ[subJsonSchema] %% subCoreAi function calls SC -->|"_buildGenerationPrompt()
calls"| SPG SC -->|"callAiDocuments()
calls callAiText()"| SDP SC -->|"sanitizePromptContent()"| SU %% subDocumentGeneration function calls SDG -->|"_processDocumentsUnified()
calls"| SDP SDG -->|"_processDocument()
calls"| SPG SDG -->|"_processDocument()
calls"| MSG SDG -->|"sanitizePromptContent()"| SU %% subDocumentProcessing function calls SDP -->|"extractContent()"| MSE SDP -->|"_mergePartResults()
_convertPartResultsToJson()
_mergeChunkResultsJson()
all call"| SP SDP -->|"_processChunksWithMapping()
calls readImage()"| SC %% Extraction service calls MSE -->|"extractContent()
calls"| SP %% Prompt builder calls SPE -->|"get_document_subJsonSchema()"| SJ SPE -->|"sanitizePromptContent()"| SU %% Generation service calls MSG -->|"uses utility functions"| SU classDef aiModule fill:#e1f5ff,stroke:#0066cc classDef extModule fill:#fff5e1,stroke:#cc6600 classDef genModule fill:#e1ffe1,stroke:#006600 class SC,SDG,SDP,SU aiModule class MSE,SPE,SP extModule class MSG,SPG,SJ genModule ``` ## Call Flow by Module ### 1. subCoreAi (SubCoreAi Class) **Calls Out:** - `buildGenerationPrompt()` → subPromptBuilderGeneration (line 363-366) - `callAiText()` → subDocumentProcessing (line 453) - `renderReport()` → mainServiceGeneration (line 478-482) - `sanitizePromptContent()` → subSharedAiUtils (line 61, via services.ai) **Called By:** - mainServiceAi (creates instance) - subDocumentProcessing._processChunksWithMapping (calls readImage at line 672-675) --- ### 2. subDocumentGeneration (SubDocumentGeneration Class) **Calls Out:** - `processDocumentsWithContinuation()` → subDocumentProcessing (line 110) - `buildGenerationPrompt()` → subPromptBuilderGeneration (line 330) - `renderReport()` → mainServiceGeneration (line 392) - `sanitizePromptContent()` → subSharedAiUtils (line 466) **Called By:** - mainServiceAi (creates instance) --- ### 3. subDocumentProcessing (SubDocumentProcessing Class) **Calls Out:** - `extractContent()` → mainServiceExtraction (lines 78, 131, 220) - `_applyMerging()` → subPipeline (lines 1044, 1095, 1232, 1293, 1345) - `readImage()` → subCoreAi (line 672-675) - `sanitizePromptContent()` → subSharedAiUtils (via self.services.ai) **Called By:** - mainServiceAi (creates instance) - subCoreAi.callAiDocuments (calls callAiText at line 453) - subDocumentGeneration._processDocumentsUnified (calls processDocumentsWithContinuation) --- ### 4. mainServiceExtraction (ExtractionService Class) **Calls Out:** - `runExtraction()` → subPipeline (line 61) - Uses ExtractorRegistry from subRegistry **Called By:** - subDocumentProcessing.extractContent (3 times) --- ### 5. subPromptBuilderExtraction **Calls Out:** - `get_document_subJsonSchema()` → subJsonSchema (line 172) - `sanitizePromptContent()` → subSharedAiUtils (via services.ai) **Called By:** - mainServiceGeneration (indirectly via getAdaptiveExtractionPrompt) --- ### 6. mainServiceGeneration (GenerationService Class) **Calls Out:** - `get_renderer()` → renderers.registry (line 501) - Utility functions from subDocumentUtility - Uses modelRegistry (external) **Called By:** - subCoreAi.callAiDocuments (calls renderReport) - subDocumentGeneration._processDocument (calls renderReport) --- ### 7. subPromptBuilderGeneration **Calls Out:** - Returns prompt template string **Called By:** - subCoreAi._buildGenerationPrompt (line 363-366) - subDocumentGeneration._processDocument (line 330) --- ### 8. subPipeline **Calls Out:** - Creates IntelligentTokenAwareMerger from subMerger (line 96) - Uses mergers from merging submodules **Called By:** - mainServiceExtraction.extractContent (calls runExtraction) - subDocumentProcessing (calls _applyMerging 5 times) --- ### 9. subSharedAiUtils **Functions Provided:** - `buildPromptWithPlaceholders()` - `sanitizePromptContent()` - `extractTextFromContentParts()` - `reduceText()` - `determineCallType()` **Called By:** - subCoreAi (imports and calls functions) - subDocumentGeneration (via services.ai.sanitizePromptContent) - subPromptBuilderExtraction (via services.ai.sanitizePromptContent) --- ### 10. subJsonSchema **Functions Provided:** - `get_document_subJsonSchema()` - `get_multi_document_subJsonSchema()` **Called By:** - subPromptBuilderExtraction.buildExtractionPrompt (line 172) --- ## Circular Dependencies **AI Service Loop:** 1. subDocumentProcessing → subCoreAi.readImage() (for image processing) 2. subDocumentProcessing → mainServiceExtraction (for extraction) 3. mainServiceExtraction → subPipeline (for processing) 4. subPipeline creates IntelligentTokenAwareMerger **Flow:** ``` subDocumentProcessing.extractContent() → mainServiceExtraction.extractContent() → subPipeline.runExtraction() → returns ContentExtracted → processed by subDocumentProcessing → calls subPipeline._applyMerging() ```