wiki/implementation/implementation_ai_processing_flows.md

5.9 KiB

AI process with prompt, documents, and outputFormat

flowchart TD
    start[Workflow ai.process]
    callAi[services.ai.callAi prompt documents outputFormat]
    getPrompt[GenerationService.getExtractionPrompt]
    aiText[_callAiText with extractionPrompt documents options]
    extract[ExtractionService.extractContent]
    readFile[Db.getFileData]
    llmCall[AiObjects.call]
    hasImages{Any image parts}
    llmImg[AiObjects.callImage]
    render[GenerationService.renderReport]
    pickRenderer[renderers.registry.get_renderer]
    renderer[Format specific renderer]
    rendered[Rendered content + mimeType]
    result[ActionResult documents]

    start --> callAi
    callAi --> getPrompt
    callAi --> aiText

    aiText --> extract
    extract --> readFile

    aiText --> llmCall
    aiText --> hasImages
    hasImages -->|yes| llmImg
    hasImages -->|no| llmCall

    aiText --> render
    render --> pickRenderer
    pickRenderer --> renderer
    renderer --> rendered
    rendered --> result

method.document.extract with prompt and documents

flowchart TD
    start[MethodDocument.extract]
    callAi[services.ai.callAi prompt documents]
    aiText[_callAiText with prompt documents options]
    extract[ExtractionService.extractContent]
    readFile[Db.getFileData]
    llmCall[AiObjects.call]
    hasImages{Any image parts?}
    llmImg[AiObjects.callImage]
    textOut[Aggregated AI response text]
    buildDocs[Create ActionDocument txt]
    result[ActionResult documents]

    start --> callAi
    callAi --> aiText

    aiText --> extract
    extract --> readFile

    aiText --> llmCall
    aiText --> hasImages
    hasImages -->|yes| llmImg
    hasImages -->|no| llmCall

    llmCall --> textOut
    llmImg --> textOut
    textOut --> buildDocs
    buildDocs --> result

Common flow between ai.process and document.extract

flowchart TD
    userInput[User Input Parameters]
    workflow[Workflow Engine]
    method[Method Handler]
    start[Workflow Action]
    callAi[services.ai.callAi]
    aiText[_callAiText]
    extract[ExtractionService.extractContent]
    readFile[Db.getFileData]
    llmCall[AiObjects.call]
    hasImages{Any image parts?}
    llmImg[AiObjects.callImage]
    aiResponse[AI Response]
    
    %% ai.process specific
    getPrompt[GenerationService.getExtractionPrompt]
    render[GenerationService.renderReport]
    pickRenderer[renderers.registry.get_renderer]
    renderer[Format specific renderer]
    rendered[Rendered content + mimeType]
    
    %% document.extract specific
    buildDocs[Create ActionDocument txt]
    
    %% Common result
    actionResult[ActionResult with documents]
    workflowResult[Workflow Result]
    userOutput[User Output]

    userInput --> workflow
    workflow --> method
    method --> start
    start --> callAi
    callAi --> aiText

    aiText --> extract
    extract --> readFile

    aiText --> llmCall
    aiText --> hasImages
    hasImages -->|yes| llmImg
    hasImages -->|no| llmCall

    llmCall --> aiResponse
    llmImg --> aiResponse
    
    %% ai.process path
    callAi --> getPrompt
    aiResponse --> render
    render --> pickRenderer
    pickRenderer --> renderer
    renderer --> rendered
    rendered --> actionResult
    
    %% document.extract path
    aiResponse --> buildDocs
    buildDocs --> actionResult
    
    %% Common result path
    actionResult --> workflowResult
    workflowResult --> userOutput

    classDef common fill:#e1f5fe
    classDef aiProcess fill:#fff3e0
    classDef extract fill:#f3e5f5
    classDef io fill:#e8f5e8

    class start,callAi,aiText,extract,readFile,llmCall,hasImages,llmImg,aiResponse,actionResult,workflowResult,userOutput common
    class getPrompt,render,pickRenderer,renderer,rendered aiProcess
    class buildDocs extract
    class userInput,workflow,method,userOutput io

Input points for ai.process and document.extract

flowchart TD
    user[User]
    
    %% ai.process input
    aiProcess[ai.process Action]
    aiPrompt[prompt: string]
    aiDocuments[documents: ChatDocument[]]
    aiOutputFormat[outputFormat: string]
    aiTitle[title: string optional]
    
    %% document.extract input  
    docExtract[document.extract Action]
    docPrompt[prompt: string]
    docDocuments[documentList: string[]]
    docOperationType[operationType: string optional]
    docProcessIndividually[processDocumentsIndividually: bool optional]
    docChunkAllowed[chunkAllowed: bool optional]
    docMergeStrategy[mergeStrategy: dict optional]
    docExpectedFormats[expectedDocumentFormats: list optional]
    docIncludeMetadata[includeMetadata: bool optional]
    
    %% Common processing
    commonAI[services.ai.callAi]
    
    user --> aiProcess
    user --> docExtract
    
    aiProcess --> aiPrompt
    aiProcess --> aiDocuments
    aiProcess --> aiOutputFormat
    aiProcess --> aiTitle
    
    docExtract --> docPrompt
    docExtract --> docDocuments
    docExtract --> docOperationType
    docExtract --> docProcessIndividually
    docExtract --> docChunkAllowed
    docExtract --> docMergeStrategy
    docExtract --> docExpectedFormats
    docExtract --> docIncludeMetadata
    
    aiPrompt --> commonAI
    aiDocuments --> commonAI
    aiOutputFormat --> commonAI
    aiTitle --> commonAI
    
    docPrompt --> commonAI
    docDocuments --> commonAI
    docOperationType --> commonAI
    docProcessIndividually --> commonAI
    docChunkAllowed --> commonAI
    docMergeStrategy --> commonAI
    docExpectedFormats --> commonAI
    docIncludeMetadata --> commonAI

    classDef aiProcess fill:#fff3e0
    classDef docExtract fill:#f3e5f5
    classDef common fill:#e1f5fe
    classDef input fill:#e8f5e8

    class aiProcess,aiPrompt,aiDocuments,aiOutputFormat,aiTitle aiProcess
    class docExtract,docPrompt,docDocuments,docOperationType,docProcessIndividually,docChunkAllowed,docMergeStrategy,docExpectedFormats,docIncludeMetadata docExtract
    class commonAI common
    class user input