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

7.5 KiB

Complete Function Call Diagram

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

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