gateway/modules/workflows/methods/methodContext/methodContext.py
2025-12-17 22:03:58 +01:00

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