gateway/function_call_diagram.md
2025-10-28 00:14:24 +01:00

254 lines
7.5 KiB
Markdown

# Complete Function Call Diagram
```mermaid
graph TB
subgraph AI_Service["AI Service Modules"]
MA[mainServiceAi<br/>AiService]
SC[subCoreAi<br/>SubCoreAi]
SDG[subDocumentGeneration<br/>SubDocumentGeneration]
SDP[subDocumentProcessing<br/>SubDocumentProcessing]
SU[subSharedAiUtils<br/>Utilities]
end
subgraph EXT_Service["Extraction Service Modules"]
MSE[mainServiceExtraction<br/>ExtractionService]
SPE[subPromptBuilderExtraction<br/>buildExtractionPrompt]
SP[subPipeline<br/>runExtraction]
end
subgraph GEN_Service["Generation Service Modules"]
MSG[mainServiceGeneration<br/>GenerationService]
SPG[subPromptBuilderGeneration<br/>buildGenerationPrompt]
SJ[subJsonSchema<br/>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()<br/>calls"| SPG
SC -->|"callAiDocuments()<br/>calls callAiText()"| SDP
SC -->|"sanitizePromptContent()"| SU
%% subDocumentGeneration function calls
SDG -->|"_processDocumentsUnified()<br/>calls"| SDP
SDG -->|"_processDocument()<br/>calls"| SPG
SDG -->|"_processDocument()<br/>calls"| MSG
SDG -->|"sanitizePromptContent()"| SU
%% subDocumentProcessing function calls
SDP -->|"extractContent()"| MSE
SDP -->|"_mergePartResults()<br/>_convertPartResultsToJson()<br/>_mergeChunkResultsJson()<br/>all call"| SP
SDP -->|"_processChunksWithMapping()<br/>calls readImage()"| SC
%% Extraction service calls
MSE -->|"extractContent()<br/>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()
```