# 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()
```