124 lines
5.7 KiB
Python
124 lines
5.7 KiB
Python
# Copyright (c) 2025 Patrick Motsch
|
|
# All rights reserved.
|
|
|
|
import logging
|
|
from modules.workflows.methods.methodBase import MethodBase
|
|
from modules.datamodels.datamodelWorkflowActions import WorkflowActionDefinition, WorkflowActionParameter
|
|
from modules.shared.frontendTypes import FrontendType
|
|
|
|
# Import helpers
|
|
from .helpers.documentIndex import DocumentIndexHelper
|
|
from .helpers.formatting import FormattingHelper
|
|
|
|
# Import actions
|
|
from .actions.getDocumentIndex import getDocumentIndex
|
|
from .actions.extractContent import extractContent
|
|
from .actions.neutralizeData import neutralizeData
|
|
from .actions.triggerPreprocessingServer import triggerPreprocessingServer
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
class MethodContext(MethodBase):
|
|
"""Context and workflow information methods."""
|
|
|
|
def __init__(self, services):
|
|
super().__init__(services)
|
|
self.name = "context"
|
|
self.description = "Context and workflow information methods"
|
|
|
|
# Initialize helper modules
|
|
self.documentIndex = DocumentIndexHelper(self)
|
|
self.formatting = FormattingHelper(self)
|
|
|
|
# RBAC-Integration: Action-Definitionen mit actionId
|
|
self._actions = {
|
|
"getDocumentIndex": WorkflowActionDefinition(
|
|
actionId="context.getDocumentIndex",
|
|
description="Generate a comprehensive index of all documents available in the current workflow",
|
|
parameters={
|
|
"resultType": WorkflowActionParameter(
|
|
name="resultType",
|
|
type="str",
|
|
frontendType=FrontendType.SELECT,
|
|
frontendOptions=["json", "txt", "md"],
|
|
required=False,
|
|
default="json",
|
|
description="Output format"
|
|
)
|
|
},
|
|
execute=getDocumentIndex.__get__(self, self.__class__)
|
|
),
|
|
"extractContent": WorkflowActionDefinition(
|
|
actionId="context.extractContent",
|
|
description="Extract content from documents (separate from AI calls)",
|
|
parameters={
|
|
"documentList": WorkflowActionParameter(
|
|
name="documentList",
|
|
type="List[str]",
|
|
frontendType=FrontendType.DOCUMENT_REFERENCE,
|
|
required=True,
|
|
description="Document reference(s) to extract content from"
|
|
),
|
|
"extractionOptions": WorkflowActionParameter(
|
|
name="extractionOptions",
|
|
type="dict",
|
|
frontendType=FrontendType.JSON,
|
|
required=False,
|
|
description="Extraction options (if not provided, defaults are used)"
|
|
)
|
|
},
|
|
execute=extractContent.__get__(self, self.__class__)
|
|
),
|
|
"neutralizeData": WorkflowActionDefinition(
|
|
actionId="context.neutralizeData",
|
|
description="Neutralize extracted data from ContentExtracted documents (for use after extractContent)",
|
|
parameters={
|
|
"documentList": WorkflowActionParameter(
|
|
name="documentList",
|
|
type="List[str]",
|
|
frontendType=FrontendType.DOCUMENT_REFERENCE,
|
|
required=True,
|
|
description="Document reference(s) containing ContentExtracted objects to neutralize"
|
|
)
|
|
},
|
|
execute=neutralizeData.__get__(self, self.__class__)
|
|
),
|
|
"triggerPreprocessingServer": WorkflowActionDefinition(
|
|
actionId="context.triggerPreprocessingServer",
|
|
description="Trigger preprocessing server at customer tenant to update database with configuration",
|
|
parameters={
|
|
"endpoint": WorkflowActionParameter(
|
|
name="endpoint",
|
|
type="str",
|
|
frontendType=FrontendType.TEXT,
|
|
required=True,
|
|
description="The full URL endpoint for the preprocessing server API"
|
|
),
|
|
"configJson": WorkflowActionParameter(
|
|
name="configJson",
|
|
type="str",
|
|
frontendType=FrontendType.JSON,
|
|
required=True,
|
|
description="Configuration JSON object to send to the preprocessing server. Can be provided as a dict or as a JSON string"
|
|
),
|
|
"authSecretConfigKey": WorkflowActionParameter(
|
|
name="authSecretConfigKey",
|
|
type="str",
|
|
frontendType=FrontendType.TEXT,
|
|
required=True,
|
|
description="The APP_CONFIG key name to retrieve the authorization secret from"
|
|
)
|
|
},
|
|
execute=triggerPreprocessingServer.__get__(self, self.__class__)
|
|
)
|
|
}
|
|
|
|
# Validate actions after definition
|
|
self._validateActions()
|
|
|
|
# Register actions as methods (optional, für direkten Zugriff)
|
|
self.getDocumentIndex = getDocumentIndex.__get__(self, self.__class__)
|
|
self.extractContent = extractContent.__get__(self, self.__class__)
|
|
self.neutralizeData = neutralizeData.__get__(self, self.__class__)
|
|
self.triggerPreprocessingServer = triggerPreprocessingServer.__get__(self, self.__class__)
|
|
|