From 280cafd54a8e2656474c924641afbd4cb7f28d6a Mon Sep 17 00:00:00 2001
From: ValueOn AG
Date: Fri, 23 Jan 2026 01:10:00 +0100
Subject: [PATCH] refactored features phase II
---
app.py | 3 +
modules/{aichat => }/aicore/aicoreBase.py | 0
.../aicore/aicoreModelRegistry.py | 0
.../aicore/aicoreModelSelector.py | 0
.../aicore/aicorePluginAnthropic.py | 0
.../aicore/aicorePluginInternal.py | 0
.../{aichat => }/aicore/aicorePluginOpenai.py | 1 -
.../aicore/aicorePluginPerplexity.py | 1 -
.../{aichat => }/aicore/aicorePluginTavily.py | 0
.../datamodelChat.py} | 37 -
.../datamodels/datamodelWorkflowActions.py | 2 +-
.../automation/datamodelFeatureAutomation.py | 45 +
.../automation/routeFeatureAutomation.py | 5 +-
.../chatbot/datamodelFeatureChatbot.py | 37 -
.../chatbot/interfaceFeatureChatbot.py | 2 +-
modules/features/chatbot/mainChatbot.py | 4 +-
.../features/chatbot/routeFeatureChatbot.py | 1 -
.../neutralizer/mainNeutralizePlayground.py | 1 -
modules/interfaces/interfaceAiObjects.py | 4 +-
.../interfaceDbChat.py} | 4 +-
modules/routes/routeAdminAutomationEvents.py | 3 +-
modules/routes/routeAdminFeatures.py | 2 -
modules/routes/routeAdminRbacRoles.py | 2 -
.../routeChat.py} | 2 +-
modules/routes/routeDataConnections.py | 1 -
modules/routes/routeDataMandates.py | 1 -
modules/routes/routeDataUsers.py | 5 -
modules/routes/routeDataWorkflows.py | 6 +-
modules/routes/routeGdpr.py | 3 -
modules/routes/routeSecurityGoogle.py | 5 -
modules/routes/routeSecurityLocal.py | 2 -
modules/routes/routeSecurityMsft.py | 3 -
modules/services/__init__.py | 25 +-
.../serviceAi}/mainAiChat.py | 2 +-
.../serviceAi/mainServiceAi.py | 12 +-
.../serviceAi/merge_1.txt | 0
.../serviceAi/subAiCallLooping-flow.md | 0
.../serviceAi/subAiCallLooping.py | 0
.../serviceAi/subContentExtraction.py | 3 +-
.../serviceAi/subDocumentIntents.py | 3 +-
.../serviceAi/subJsonMerger.py | 0
.../serviceAi/subJsonResponseHandling.py | 13 -
.../serviceAi/subLoopingUseCases.py | 0
.../serviceAi/subResponseParsing.py | 0
.../serviceAi/subStructureFilling.py | 2 +-
.../serviceAi/subStructureGeneration.py | 2 +-
.../services/serviceChat/mainServiceChat.py | 2 +-
.../serviceExtraction/__init__.py | 0
.../serviceExtraction/chunking/__init__.py | 0
.../chunking/chunkerImage.py | 0
.../chunking/chunkerStructure.py | 0
.../chunking/chunkerTable.py | 0
.../serviceExtraction/chunking/chunkerText.py | 0
.../serviceExtraction/extractors/__init__.py | 0
.../extractors/extractorBinary.py | 0
.../extractors/extractorCsv.py | 0
.../extractors/extractorDocx.py | 0
.../extractors/extractorHtml.py | 0
.../extractors/extractorImage.py | 0
.../extractors/extractorJson.py | 0
.../extractors/extractorPdf.py | 0
.../extractors/extractorPptx.py | 0
.../extractors/extractorSql.py | 0
.../extractors/extractorText.py | 0
.../extractors/extractorXlsx.py | 0
.../extractors/extractorXml.py | 0
.../mainServiceExtraction.py | 7 +-
.../serviceExtraction/merging/__init__.py | 0
.../merging/mergerDefault.py | 0
.../serviceExtraction/merging/mergerTable.py | 0
.../serviceExtraction/merging/mergerText.py | 0
.../serviceExtraction/subMerger.py | 0
.../serviceExtraction/subPipeline.py | 0
.../subPromptBuilderExtraction.py | 2 +-
.../serviceExtraction/subRegistry.py | 2 +-
.../serviceExtraction/subUtils.py | 0
.../mainServiceGeneration.py | 12 +-
.../serviceGeneration/paths/codePath.py | 2 +-
.../serviceGeneration/paths/documentPath.py | 0
.../serviceGeneration/paths/imagePath.py | 0
.../renderers/codeRendererBaseTemplate.py | 0
.../renderers/documentRendererBaseTemplate.py | 1 -
.../serviceGeneration/renderers/registry.py | 0
.../renderers/rendererCodeCsv.py | 0
.../renderers/rendererCodeJson.py | 0
.../renderers/rendererCodeXml.py | 0
.../renderers/rendererCsv.py | 0
.../renderers/rendererDocx.py | 0
.../renderers/rendererHtml.py | 0
.../renderers/rendererImage.py | 0
.../renderers/rendererJson.py | 0
.../renderers/rendererMarkdown.py | 0
.../renderers/rendererPdf.py | 0
.../renderers/rendererPptx.py | 0
.../renderers/rendererText.py | 0
.../renderers/rendererXlsx.py | 0
.../serviceGeneration/subContentGenerator.py | 2 +-
.../serviceGeneration/subContentIntegrator.py | 0
.../serviceGeneration/subDocumentUtility.py | 0
.../serviceGeneration/subJsonSchema.py | 0
.../subPromptBuilderGeneration.py | 0
.../subStructureGenerator.py | 0
.../services/serviceUtils/mainServiceUtils.py | 2 +-
.../serviceWeb/mainServiceWeb.py | 0
modules/workflows/automation/mainWorkflow.py | 3 +-
.../methodAi/actions/convertDocument.py | 2 +-
.../methods/methodAi/actions/generateCode.py | 2 +-
.../methodAi/actions/generateDocument.py | 2 +-
.../methods/methodAi/actions/process.py | 4 +-
.../methodAi/actions/summarizeDocument.py | 2 +-
.../methodAi/actions/translateDocument.py | 2 +-
.../methods/methodAi/actions/webResearch.py | 2 +-
.../methodChatbot/actions/queryDatabase.py | 2 +-
.../methodContext/actions/extractContent.py | 2 +-
.../methodContext/actions/getDocumentIndex.py | 2 +-
.../methodContext/actions/neutralizeData.py | 2 +-
.../actions/triggerPreprocessingServer.py | 2 +-
.../methods/methodJira/actions/connectJira.py | 2 +-
.../methodJira/actions/createCsvContent.py | 2 +-
.../methodJira/actions/createExcelContent.py | 2 +-
.../methodJira/actions/exportTicketsAsJson.py | 2 +-
.../actions/importTicketsFromJson.py | 2 +-
.../methodJira/actions/mergeTicketData.py | 2 +-
.../methodJira/actions/parseCsvContent.py | 2 +-
.../methodJira/actions/parseExcelContent.py | 2 +-
.../composeAndDraftEmailWithContext.py | 2 +-
.../methodOutlook/actions/readEmails.py | 2 +-
.../methodOutlook/actions/searchEmails.py | 2 +-
.../methodOutlook/actions/sendDraftEmail.py | 2 +-
.../actions/analyzeFolderUsage.py | 2 +-
.../methodSharepoint/actions/copyFile.py | 2 +-
.../actions/downloadFileByPath.py | 2 +-
.../actions/findDocumentPath.py | 2 +-
.../methodSharepoint/actions/findSiteByUrl.py | 2 +-
.../methodSharepoint/actions/listDocuments.py | 2 +-
.../methodSharepoint/actions/readDocuments.py | 2 +-
.../actions/uploadDocument.py | 2 +-
.../methodSharepoint/actions/uploadFile.py | 2 +-
.../processing/core/actionExecutor.py | 4 +-
.../processing/core/messageCreator.py | 4 +-
.../workflows/processing/core/taskPlanner.py | 3 +-
.../processing/modes/modeAutomation.py | 4 +-
.../workflows/processing/modes/modeBase.py | 4 +-
.../workflows/processing/modes/modeDynamic.py | 6 +-
.../processing/shared/executionState.py | 2 +-
.../processing/shared/placeholderFactory.py | 6 +-
.../shared/promptGenerationActionsDynamic.py | 2 +-
.../shared/promptGenerationTaskplan.py | 2 +-
.../workflows/processing/workflowProcessor.py | 11 +-
modules/workflows/workflowManager.py | 7 +-
scripts/.$import_diagram.drawio.bkp | 2723 +++++++++++++++++
.../.$import_diagram_containers.drawio.bkp | 317 ++
scripts/function_imports_analysis.txt | 435 +++
scripts/import_analysis.csv | 1623 +++++-----
scripts/import_diagram.drawio | 1 +
scripts/import_diagram_containers.drawio | 1 +
scripts/script_analyze_function_imports.py | 223 ++
scripts/script_generate_container_diagram.py | 221 ++
scripts/script_generate_import_diagram.py | 251 ++
scripts/script_remove_redundant_imports.py | 245 ++
tests/functional/test01_ai_model_selection.py | 6 +-
tests/functional/test02_ai_models.py | 16 +-
tests/functional/test03_ai_operations.py | 12 +-
tests/functional/test04_ai_behavior.py | 4 +-
.../test05_workflow_with_documents.py | 4 +-
.../test06_workflow_prompt_variations.py | 4 +-
tests/functional/test07_json_merge.py | 2 +-
tests/functional/test08_json_finalization.py | 2 +-
.../test09_document_generation_formats.py | 4 +-
.../test10_document_generation_formats.py | 4 +-
.../test11_code_generation_formats.py | 4 +-
tests/functional/test12_json_split_merge.py | 2 +-
tests/functional/test_kpi_full.py | 2 +-
tests/functional/test_kpi_incomplete.py | 2 +-
tests/functional/test_kpi_path.py | 2 +-
.../workflows/test_workflow_execution.py | 2 +-
.../services/test_json_extraction_merging.py | 2 +-
tests/unit/workflows/test_state_management.py | 2 +-
.../test_architecture_validation.py | 2 +-
179 files changed, 5422 insertions(+), 1098 deletions(-)
rename modules/{aichat => }/aicore/aicoreBase.py (100%)
rename modules/{aichat => }/aicore/aicoreModelRegistry.py (100%)
rename modules/{aichat => }/aicore/aicoreModelSelector.py (100%)
rename modules/{aichat => }/aicore/aicorePluginAnthropic.py (100%)
rename modules/{aichat => }/aicore/aicorePluginInternal.py (100%)
rename modules/{aichat => }/aicore/aicorePluginOpenai.py (99%)
rename modules/{aichat => }/aicore/aicorePluginPerplexity.py (99%)
rename modules/{aichat => }/aicore/aicorePluginTavily.py (100%)
rename modules/{aichat/datamodelFeatureAiChat.py => datamodels/datamodelChat.py} (92%)
create mode 100644 modules/features/automation/datamodelFeatureAutomation.py
rename modules/{aichat/interfaceFeatureAiChat.py => interfaces/interfaceDbChat.py} (99%)
rename modules/{aichat/routeFeatureAiChat.py => routes/routeChat.py} (97%)
rename modules/{aichat => services/serviceAi}/mainAiChat.py (98%)
rename modules/{aichat => services}/serviceAi/mainServiceAi.py (98%)
rename modules/{aichat => services}/serviceAi/merge_1.txt (100%)
rename modules/{aichat => services}/serviceAi/subAiCallLooping-flow.md (100%)
rename modules/{aichat => services}/serviceAi/subAiCallLooping.py (100%)
rename modules/{aichat => services}/serviceAi/subContentExtraction.py (99%)
rename modules/{aichat => services}/serviceAi/subDocumentIntents.py (99%)
rename modules/{aichat => services}/serviceAi/subJsonMerger.py (100%)
rename modules/{aichat => services}/serviceAi/subJsonResponseHandling.py (99%)
rename modules/{aichat => services}/serviceAi/subLoopingUseCases.py (100%)
rename modules/{aichat => services}/serviceAi/subResponseParsing.py (100%)
rename modules/{aichat => services}/serviceAi/subStructureFilling.py (99%)
rename modules/{aichat => services}/serviceAi/subStructureGeneration.py (99%)
rename modules/{aichat => services}/serviceExtraction/__init__.py (100%)
rename modules/{aichat => services}/serviceExtraction/chunking/__init__.py (100%)
rename modules/{aichat => services}/serviceExtraction/chunking/chunkerImage.py (100%)
rename modules/{aichat => services}/serviceExtraction/chunking/chunkerStructure.py (100%)
rename modules/{aichat => services}/serviceExtraction/chunking/chunkerTable.py (100%)
rename modules/{aichat => services}/serviceExtraction/chunking/chunkerText.py (100%)
rename modules/{aichat => services}/serviceExtraction/extractors/__init__.py (100%)
rename modules/{aichat => services}/serviceExtraction/extractors/extractorBinary.py (100%)
rename modules/{aichat => services}/serviceExtraction/extractors/extractorCsv.py (100%)
rename modules/{aichat => services}/serviceExtraction/extractors/extractorDocx.py (100%)
rename modules/{aichat => services}/serviceExtraction/extractors/extractorHtml.py (100%)
rename modules/{aichat => services}/serviceExtraction/extractors/extractorImage.py (100%)
rename modules/{aichat => services}/serviceExtraction/extractors/extractorJson.py (100%)
rename modules/{aichat => services}/serviceExtraction/extractors/extractorPdf.py (100%)
rename modules/{aichat => services}/serviceExtraction/extractors/extractorPptx.py (100%)
rename modules/{aichat => services}/serviceExtraction/extractors/extractorSql.py (100%)
rename modules/{aichat => services}/serviceExtraction/extractors/extractorText.py (100%)
rename modules/{aichat => services}/serviceExtraction/extractors/extractorXlsx.py (100%)
rename modules/{aichat => services}/serviceExtraction/extractors/extractorXml.py (100%)
rename modules/{aichat => services}/serviceExtraction/mainServiceExtraction.py (99%)
rename modules/{aichat => services}/serviceExtraction/merging/__init__.py (100%)
rename modules/{aichat => services}/serviceExtraction/merging/mergerDefault.py (100%)
rename modules/{aichat => services}/serviceExtraction/merging/mergerTable.py (100%)
rename modules/{aichat => services}/serviceExtraction/merging/mergerText.py (100%)
rename modules/{aichat => services}/serviceExtraction/subMerger.py (100%)
rename modules/{aichat => services}/serviceExtraction/subPipeline.py (100%)
rename modules/{aichat => services}/serviceExtraction/subPromptBuilderExtraction.py (98%)
rename modules/{aichat => services}/serviceExtraction/subRegistry.py (99%)
rename modules/{aichat => services}/serviceExtraction/subUtils.py (100%)
rename modules/{aichat => services}/serviceGeneration/mainServiceGeneration.py (98%)
rename modules/{aichat => services}/serviceGeneration/paths/codePath.py (99%)
rename modules/{aichat => services}/serviceGeneration/paths/documentPath.py (100%)
rename modules/{aichat => services}/serviceGeneration/paths/imagePath.py (100%)
rename modules/{aichat => services}/serviceGeneration/renderers/codeRendererBaseTemplate.py (100%)
rename modules/{aichat => services}/serviceGeneration/renderers/documentRendererBaseTemplate.py (99%)
rename modules/{aichat => services}/serviceGeneration/renderers/registry.py (100%)
rename modules/{aichat => services}/serviceGeneration/renderers/rendererCodeCsv.py (100%)
rename modules/{aichat => services}/serviceGeneration/renderers/rendererCodeJson.py (100%)
rename modules/{aichat => services}/serviceGeneration/renderers/rendererCodeXml.py (100%)
rename modules/{aichat => services}/serviceGeneration/renderers/rendererCsv.py (100%)
rename modules/{aichat => services}/serviceGeneration/renderers/rendererDocx.py (100%)
rename modules/{aichat => services}/serviceGeneration/renderers/rendererHtml.py (100%)
rename modules/{aichat => services}/serviceGeneration/renderers/rendererImage.py (100%)
rename modules/{aichat => services}/serviceGeneration/renderers/rendererJson.py (100%)
rename modules/{aichat => services}/serviceGeneration/renderers/rendererMarkdown.py (100%)
rename modules/{aichat => services}/serviceGeneration/renderers/rendererPdf.py (100%)
rename modules/{aichat => services}/serviceGeneration/renderers/rendererPptx.py (100%)
rename modules/{aichat => services}/serviceGeneration/renderers/rendererText.py (100%)
rename modules/{aichat => services}/serviceGeneration/renderers/rendererXlsx.py (100%)
rename modules/{aichat => services}/serviceGeneration/subContentGenerator.py (99%)
rename modules/{aichat => services}/serviceGeneration/subContentIntegrator.py (100%)
rename modules/{aichat => services}/serviceGeneration/subDocumentUtility.py (100%)
rename modules/{aichat => services}/serviceGeneration/subJsonSchema.py (100%)
rename modules/{aichat => services}/serviceGeneration/subPromptBuilderGeneration.py (100%)
rename modules/{aichat => services}/serviceGeneration/subStructureGenerator.py (100%)
rename modules/{aichat => services}/serviceWeb/mainServiceWeb.py (100%)
create mode 100644 scripts/.$import_diagram.drawio.bkp
create mode 100644 scripts/.$import_diagram_containers.drawio.bkp
create mode 100644 scripts/function_imports_analysis.txt
create mode 100644 scripts/import_diagram.drawio
create mode 100644 scripts/import_diagram_containers.drawio
create mode 100644 scripts/script_analyze_function_imports.py
create mode 100644 scripts/script_generate_container_diagram.py
create mode 100644 scripts/script_generate_import_diagram.py
create mode 100644 scripts/script_remove_redundant_imports.py
diff --git a/app.py b/app.py
index 6581065b..4e3e0c67 100644
--- a/app.py
+++ b/app.py
@@ -485,6 +485,9 @@ app.include_router(rbacAdminExportRouter)
from modules.routes.routeGdpr import router as gdprRouter
app.include_router(gdprRouter)
+from modules.routes.routeChat import router as chatRouter
+app.include_router(chatRouter)
+
# ============================================================================
# PLUG&PLAY FEATURE ROUTERS
# Dynamically load routers from feature containers in modules/features/
diff --git a/modules/aichat/aicore/aicoreBase.py b/modules/aicore/aicoreBase.py
similarity index 100%
rename from modules/aichat/aicore/aicoreBase.py
rename to modules/aicore/aicoreBase.py
diff --git a/modules/aichat/aicore/aicoreModelRegistry.py b/modules/aicore/aicoreModelRegistry.py
similarity index 100%
rename from modules/aichat/aicore/aicoreModelRegistry.py
rename to modules/aicore/aicoreModelRegistry.py
diff --git a/modules/aichat/aicore/aicoreModelSelector.py b/modules/aicore/aicoreModelSelector.py
similarity index 100%
rename from modules/aichat/aicore/aicoreModelSelector.py
rename to modules/aicore/aicoreModelSelector.py
diff --git a/modules/aichat/aicore/aicorePluginAnthropic.py b/modules/aicore/aicorePluginAnthropic.py
similarity index 100%
rename from modules/aichat/aicore/aicorePluginAnthropic.py
rename to modules/aicore/aicorePluginAnthropic.py
diff --git a/modules/aichat/aicore/aicorePluginInternal.py b/modules/aicore/aicorePluginInternal.py
similarity index 100%
rename from modules/aichat/aicore/aicorePluginInternal.py
rename to modules/aicore/aicorePluginInternal.py
diff --git a/modules/aichat/aicore/aicorePluginOpenai.py b/modules/aicore/aicorePluginOpenai.py
similarity index 99%
rename from modules/aichat/aicore/aicorePluginOpenai.py
rename to modules/aicore/aicorePluginOpenai.py
index 711f0c35..c35c6dd6 100644
--- a/modules/aichat/aicore/aicorePluginOpenai.py
+++ b/modules/aicore/aicorePluginOpenai.py
@@ -298,7 +298,6 @@ class AiOpenai(BaseConnectorAi):
promptContent = messages[0]["content"] if messages else ""
# Parse prompt using AiCallPromptImage model
- from modules.datamodels.datamodelAi import AiCallPromptImage
import json
try:
diff --git a/modules/aichat/aicore/aicorePluginPerplexity.py b/modules/aicore/aicorePluginPerplexity.py
similarity index 99%
rename from modules/aichat/aicore/aicorePluginPerplexity.py
rename to modules/aicore/aicorePluginPerplexity.py
index f537d83c..e751f1e9 100644
--- a/modules/aichat/aicore/aicorePluginPerplexity.py
+++ b/modules/aicore/aicorePluginPerplexity.py
@@ -184,7 +184,6 @@ class AiPerplexity(BaseConnectorAi):
]
# Create a model call for testing
- from modules.datamodels.datamodelAi import AiCallOptions
model = self.getModels()[0] # Get first model for testing
testCall = AiModelCall(
messages=testMessages,
diff --git a/modules/aichat/aicore/aicorePluginTavily.py b/modules/aicore/aicorePluginTavily.py
similarity index 100%
rename from modules/aichat/aicore/aicorePluginTavily.py
rename to modules/aicore/aicorePluginTavily.py
diff --git a/modules/aichat/datamodelFeatureAiChat.py b/modules/datamodels/datamodelChat.py
similarity index 92%
rename from modules/aichat/datamodelFeatureAiChat.py
rename to modules/datamodels/datamodelChat.py
index 45c5c4eb..c2838ad3 100644
--- a/modules/aichat/datamodelFeatureAiChat.py
+++ b/modules/datamodels/datamodelChat.py
@@ -1022,40 +1022,3 @@ registerModelLabels(
"placeholders": {"en": "Placeholders", "fr": "Espaces réservés"},
},
)
-
-
-class AutomationDefinition(BaseModel):
- id: str = Field(default_factory=lambda: str(uuid.uuid4()), description="Primary key", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
- mandateId: str = Field(description="Mandate ID", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
- featureInstanceId: str = Field(description="ID of the feature instance this automation belongs to", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
- label: str = Field(description="User-friendly name", json_schema_extra={"frontend_type": "text", "frontend_required": True})
- schedule: str = Field(description="Cron schedule pattern", json_schema_extra={"frontend_type": "select", "frontend_required": True, "frontend_options": [
- {"value": "0 */4 * * *", "label": {"en": "Every 4 hours", "fr": "Toutes les 4 heures"}},
- {"value": "0 22 * * *", "label": {"en": "Daily at 22:00", "fr": "Quotidien à 22:00"}},
- {"value": "0 10 * * 1", "label": {"en": "Weekly Monday 10:00", "fr": "Hebdomadaire lundi 10:00"}}
- ]})
- template: str = Field(description="JSON template with placeholders (format: {{KEY:PLACEHOLDER_NAME}})", json_schema_extra={"frontend_type": "textarea", "frontend_required": True})
- placeholders: Dict[str, str] = Field(default_factory=dict, description="Dictionary of placeholder key/value pairs (e.g., {'connectionName': 'MyConnection', 'sharepointFolderNameSource': '/folder/path', 'webResearchUrl': 'https://...', 'webResearchPrompt': '...', 'documentPrompt': '...'})", json_schema_extra={"frontend_type": "text"})
- active: bool = Field(default=False, description="Whether automation should be launched in event handler", json_schema_extra={"frontend_type": "checkbox", "frontend_required": False})
- eventId: Optional[str] = Field(None, description="Event ID from event management (None if not registered)", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
- status: Optional[str] = Field(None, description="Status: 'active' if event is registered, 'inactive' if not (computed, readonly)", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
- executionLogs: List[Dict[str, Any]] = Field(default_factory=list, description="List of execution logs, each containing timestamp, workflowId, status, and messages", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
-
-
-registerModelLabels(
- "AutomationDefinition",
- {"en": "Automation Definition", "fr": "Définition d'automatisation"},
- {
- "id": {"en": "ID", "fr": "ID"},
- "mandateId": {"en": "Mandate ID", "fr": "ID du mandat"},
- "featureInstanceId": {"en": "Feature Instance ID", "fr": "ID de l'instance de fonctionnalité"},
- "label": {"en": "Label", "fr": "Libellé"},
- "schedule": {"en": "Schedule", "fr": "Planification"},
- "template": {"en": "Template", "fr": "Modèle"},
- "placeholders": {"en": "Placeholders", "fr": "Espaces réservés"},
- "active": {"en": "Active", "fr": "Actif"},
- "eventId": {"en": "Event ID", "fr": "ID de l'événement"},
- "status": {"en": "Status", "fr": "Statut"},
- "executionLogs": {"en": "Execution Logs", "fr": "Journaux d'exécution"},
- },
-)
diff --git a/modules/datamodels/datamodelWorkflowActions.py b/modules/datamodels/datamodelWorkflowActions.py
index aee7d261..8bac1fd5 100644
--- a/modules/datamodels/datamodelWorkflowActions.py
+++ b/modules/datamodels/datamodelWorkflowActions.py
@@ -4,7 +4,7 @@
from typing import Optional, Any, Union, List, Dict, Callable, Awaitable
from pydantic import BaseModel, Field
-from modules.aichat.datamodelFeatureAiChat import ActionResult
+from modules.datamodels.datamodelChat import ActionResult
from modules.shared.frontendTypes import FrontendType
from modules.shared.attributeUtils import registerModelLabels
diff --git a/modules/features/automation/datamodelFeatureAutomation.py b/modules/features/automation/datamodelFeatureAutomation.py
new file mode 100644
index 00000000..2a774ebd
--- /dev/null
+++ b/modules/features/automation/datamodelFeatureAutomation.py
@@ -0,0 +1,45 @@
+# Copyright (c) 2025 Patrick Motsch
+# All rights reserved.
+"""Automation models: AutomationDefinition."""
+
+from typing import List, Dict, Any, Optional
+from pydantic import BaseModel, Field
+from modules.shared.attributeUtils import registerModelLabels
+import uuid
+
+
+class AutomationDefinition(BaseModel):
+ id: str = Field(default_factory=lambda: str(uuid.uuid4()), description="Primary key", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
+ mandateId: str = Field(description="Mandate ID", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
+ featureInstanceId: str = Field(description="ID of the feature instance this automation belongs to", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
+ label: str = Field(description="User-friendly name", json_schema_extra={"frontend_type": "text", "frontend_required": True})
+ schedule: str = Field(description="Cron schedule pattern", json_schema_extra={"frontend_type": "select", "frontend_required": True, "frontend_options": [
+ {"value": "0 */4 * * *", "label": {"en": "Every 4 hours", "fr": "Toutes les 4 heures"}},
+ {"value": "0 22 * * *", "label": {"en": "Daily at 22:00", "fr": "Quotidien à 22:00"}},
+ {"value": "0 10 * * 1", "label": {"en": "Weekly Monday 10:00", "fr": "Hebdomadaire lundi 10:00"}}
+ ]})
+ template: str = Field(description="JSON template with placeholders (format: {{KEY:PLACEHOLDER_NAME}})", json_schema_extra={"frontend_type": "textarea", "frontend_required": True})
+ placeholders: Dict[str, str] = Field(default_factory=dict, description="Dictionary of placeholder key/value pairs (e.g., {'connectionName': 'MyConnection', 'sharepointFolderNameSource': '/folder/path', 'webResearchUrl': 'https://...', 'webResearchPrompt': '...', 'documentPrompt': '...'})", json_schema_extra={"frontend_type": "text"})
+ active: bool = Field(default=False, description="Whether automation should be launched in event handler", json_schema_extra={"frontend_type": "checkbox", "frontend_required": False})
+ eventId: Optional[str] = Field(None, description="Event ID from event management (None if not registered)", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
+ status: Optional[str] = Field(None, description="Status: 'active' if event is registered, 'inactive' if not (computed, readonly)", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
+ executionLogs: List[Dict[str, Any]] = Field(default_factory=list, description="List of execution logs, each containing timestamp, workflowId, status, and messages", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
+
+
+registerModelLabels(
+ "AutomationDefinition",
+ {"en": "Automation Definition", "fr": "Définition d'automatisation"},
+ {
+ "id": {"en": "ID", "fr": "ID"},
+ "mandateId": {"en": "Mandate ID", "fr": "ID du mandat"},
+ "featureInstanceId": {"en": "Feature Instance ID", "fr": "ID de l'instance de fonctionnalité"},
+ "label": {"en": "Label", "fr": "Libellé"},
+ "schedule": {"en": "Schedule", "fr": "Planification"},
+ "template": {"en": "Template", "fr": "Modèle"},
+ "placeholders": {"en": "Placeholders", "fr": "Espaces réservés"},
+ "active": {"en": "Active", "fr": "Actif"},
+ "eventId": {"en": "Event ID", "fr": "ID de l'événement"},
+ "status": {"en": "Status", "fr": "Statut"},
+ "executionLogs": {"en": "Execution Logs", "fr": "Journaux d'exécution"},
+ },
+)
diff --git a/modules/features/automation/routeFeatureAutomation.py b/modules/features/automation/routeFeatureAutomation.py
index f0395a21..49c1606e 100644
--- a/modules/features/automation/routeFeatureAutomation.py
+++ b/modules/features/automation/routeFeatureAutomation.py
@@ -13,9 +13,10 @@ import logging
import json
# Import interfaces and models
-from modules.aichat.interfaceFeatureAiChat import getInterface as getChatInterface
+from modules.interfaces.interfaceDbChat import getInterface as getChatInterface
from modules.auth import getCurrentUser, limiter
-from modules.aichat.datamodelFeatureAiChat import AutomationDefinition, ChatWorkflow
+from modules.features.automation.datamodelFeatureAutomation import AutomationDefinition
+from modules.datamodels.datamodelChat import ChatWorkflow
from modules.datamodels.datamodelPagination import PaginationParams, PaginatedResponse, PaginationMetadata, normalize_pagination_dict
from modules.shared.attributeUtils import getModelAttributeDefinitions
from modules.workflows.automation import executeAutomation
diff --git a/modules/features/chatbot/datamodelFeatureChatbot.py b/modules/features/chatbot/datamodelFeatureChatbot.py
index 45c5c4eb..c2838ad3 100644
--- a/modules/features/chatbot/datamodelFeatureChatbot.py
+++ b/modules/features/chatbot/datamodelFeatureChatbot.py
@@ -1022,40 +1022,3 @@ registerModelLabels(
"placeholders": {"en": "Placeholders", "fr": "Espaces réservés"},
},
)
-
-
-class AutomationDefinition(BaseModel):
- id: str = Field(default_factory=lambda: str(uuid.uuid4()), description="Primary key", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
- mandateId: str = Field(description="Mandate ID", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
- featureInstanceId: str = Field(description="ID of the feature instance this automation belongs to", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
- label: str = Field(description="User-friendly name", json_schema_extra={"frontend_type": "text", "frontend_required": True})
- schedule: str = Field(description="Cron schedule pattern", json_schema_extra={"frontend_type": "select", "frontend_required": True, "frontend_options": [
- {"value": "0 */4 * * *", "label": {"en": "Every 4 hours", "fr": "Toutes les 4 heures"}},
- {"value": "0 22 * * *", "label": {"en": "Daily at 22:00", "fr": "Quotidien à 22:00"}},
- {"value": "0 10 * * 1", "label": {"en": "Weekly Monday 10:00", "fr": "Hebdomadaire lundi 10:00"}}
- ]})
- template: str = Field(description="JSON template with placeholders (format: {{KEY:PLACEHOLDER_NAME}})", json_schema_extra={"frontend_type": "textarea", "frontend_required": True})
- placeholders: Dict[str, str] = Field(default_factory=dict, description="Dictionary of placeholder key/value pairs (e.g., {'connectionName': 'MyConnection', 'sharepointFolderNameSource': '/folder/path', 'webResearchUrl': 'https://...', 'webResearchPrompt': '...', 'documentPrompt': '...'})", json_schema_extra={"frontend_type": "text"})
- active: bool = Field(default=False, description="Whether automation should be launched in event handler", json_schema_extra={"frontend_type": "checkbox", "frontend_required": False})
- eventId: Optional[str] = Field(None, description="Event ID from event management (None if not registered)", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
- status: Optional[str] = Field(None, description="Status: 'active' if event is registered, 'inactive' if not (computed, readonly)", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
- executionLogs: List[Dict[str, Any]] = Field(default_factory=list, description="List of execution logs, each containing timestamp, workflowId, status, and messages", json_schema_extra={"frontend_type": "text", "frontend_readonly": True, "frontend_required": False})
-
-
-registerModelLabels(
- "AutomationDefinition",
- {"en": "Automation Definition", "fr": "Définition d'automatisation"},
- {
- "id": {"en": "ID", "fr": "ID"},
- "mandateId": {"en": "Mandate ID", "fr": "ID du mandat"},
- "featureInstanceId": {"en": "Feature Instance ID", "fr": "ID de l'instance de fonctionnalité"},
- "label": {"en": "Label", "fr": "Libellé"},
- "schedule": {"en": "Schedule", "fr": "Planification"},
- "template": {"en": "Template", "fr": "Modèle"},
- "placeholders": {"en": "Placeholders", "fr": "Espaces réservés"},
- "active": {"en": "Active", "fr": "Actif"},
- "eventId": {"en": "Event ID", "fr": "ID de l'événement"},
- "status": {"en": "Status", "fr": "Statut"},
- "executionLogs": {"en": "Execution Logs", "fr": "Journaux d'exécution"},
- },
-)
diff --git a/modules/features/chatbot/interfaceFeatureChatbot.py b/modules/features/chatbot/interfaceFeatureChatbot.py
index bce7d43e..685a1a4e 100644
--- a/modules/features/chatbot/interfaceFeatureChatbot.py
+++ b/modules/features/chatbot/interfaceFeatureChatbot.py
@@ -23,9 +23,9 @@ from .datamodelFeatureChatbot import (
ChatMessage,
ChatWorkflow,
WorkflowModeEnum,
- AutomationDefinition,
UserInputRequest
)
+from modules.features.automation.datamodelFeatureAutomation import AutomationDefinition
import json
from modules.datamodels.datamodelUam import User
diff --git a/modules/features/chatbot/mainChatbot.py b/modules/features/chatbot/mainChatbot.py
index ad44f5ee..560a77b9 100644
--- a/modules/features/chatbot/mainChatbot.py
+++ b/modules/features/chatbot/mainChatbot.py
@@ -117,7 +117,7 @@ import asyncio
import re
from typing import Optional, Dict, Any, List
-from modules.aichat.datamodelFeatureAiChat import ChatWorkflow, UserInputRequest, WorkflowModeEnum, ChatLog, ChatDocument
+from modules.features.chatbot.datamodelFeatureChatbot import ChatWorkflow, UserInputRequest, WorkflowModeEnum, ChatLog, ChatDocument
from modules.datamodels.datamodelUam import User
from modules.datamodels.datamodelAi import AiCallRequest, AiCallOptions, OperationTypeEnum, ProcessingModeEnum
from modules.datamodels.datamodelDocref import DocumentReferenceList, DocumentItemReference
@@ -439,7 +439,6 @@ async def _emit_log_and_event(
# Emit event directly for streaming (using correct signature)
if created_log and event_manager:
try:
- from modules.aichat.datamodelFeatureAiChat import ChatLog
# Convert to dict if it's a Pydantic model
if hasattr(created_log, "model_dump"):
log_dict = created_log.model_dump()
@@ -1248,7 +1247,6 @@ async def _processChatbotMessage(
)
# Retry analysis with empty results context - create NEW analysis with alternative strategies
- from modules.features.chatbot.chatbotConstants import get_empty_results_retry_instructions
# Build retry prompt with progressively different strategies
empty_count = len(sql_queries)
diff --git a/modules/features/chatbot/routeFeatureChatbot.py b/modules/features/chatbot/routeFeatureChatbot.py
index 3c97c753..ee05e2ac 100644
--- a/modules/features/chatbot/routeFeatureChatbot.py
+++ b/modules/features/chatbot/routeFeatureChatbot.py
@@ -432,7 +432,6 @@ async def get_chatbot_threads(
normalized_workflows.append(normalized_wf)
# Create paginated response
- from modules.datamodels.datamodelPagination import PaginationMetadata
metadata = PaginationMetadata(
currentPage=paginationParams.page if paginationParams else 1,
pageSize=paginationParams.pageSize if paginationParams else len(workflows),
diff --git a/modules/features/neutralizer/mainNeutralizePlayground.py b/modules/features/neutralizer/mainNeutralizePlayground.py
index c5932117..bf9aa087 100644
--- a/modules/features/neutralizer/mainNeutralizePlayground.py
+++ b/modules/features/neutralizer/mainNeutralizePlayground.py
@@ -182,7 +182,6 @@ class SharepointProcessor:
async def _getSharepointConnection(self, sharepointPath: str = None):
try:
- from modules.datamodels.datamodelUam import UserConnection
connections = self.services.interfaceDbApp.db.getRecordset(
UserConnection,
recordFilter={"userId": self.services.interfaceDbApp.userId}
diff --git a/modules/interfaces/interfaceAiObjects.py b/modules/interfaces/interfaceAiObjects.py
index 957221f2..5c252ff6 100644
--- a/modules/interfaces/interfaceAiObjects.py
+++ b/modules/interfaces/interfaceAiObjects.py
@@ -10,8 +10,8 @@ import time
logger = logging.getLogger(__name__)
-from modules.aichat.aicore.aicoreModelRegistry import modelRegistry
-from modules.aichat.aicore.aicoreModelSelector import modelSelector
+from modules.aicore.aicoreModelRegistry import modelRegistry
+from modules.aicore.aicoreModelSelector import modelSelector
from modules.datamodels.datamodelAi import (
AiModel,
AiCallOptions,
diff --git a/modules/aichat/interfaceFeatureAiChat.py b/modules/interfaces/interfaceDbChat.py
similarity index 99%
rename from modules/aichat/interfaceFeatureAiChat.py
rename to modules/interfaces/interfaceDbChat.py
index de3d42d1..bbe2d9ce 100644
--- a/modules/aichat/interfaceFeatureAiChat.py
+++ b/modules/interfaces/interfaceDbChat.py
@@ -16,16 +16,16 @@ from modules.security.rbac import RbacClass
from modules.datamodels.datamodelRbac import AccessRuleContext
from modules.datamodels.datamodelUam import AccessLevel
-from .datamodelFeatureAiChat import (
+from modules.datamodels.datamodelChat import (
ChatDocument,
ChatStat,
ChatLog,
ChatMessage,
ChatWorkflow,
WorkflowModeEnum,
- AutomationDefinition,
UserInputRequest
)
+from modules.features.automation.datamodelFeatureAutomation import AutomationDefinition
import json
from modules.datamodels.datamodelUam import User
diff --git a/modules/routes/routeAdminAutomationEvents.py b/modules/routes/routeAdminAutomationEvents.py
index d1f526c6..e829f986 100644
--- a/modules/routes/routeAdminAutomationEvents.py
+++ b/modules/routes/routeAdminAutomationEvents.py
@@ -11,7 +11,7 @@ from fastapi import status
import logging
# Import interfaces and models from feature containers
-import modules.aichat.interfaceFeatureAiChat as interfaceDbChat
+import modules.interfaces.interfaceDbChat as interfaceDbChat
from modules.auth import limiter, getRequestContext, requireSysAdmin, RequestContext
from modules.datamodels.datamodelUam import User
@@ -76,7 +76,6 @@ async def sync_all_automation_events(
This will register/remove events based on active flags.
"""
try:
- from modules.aichat.interfaceFeatureAiChat import getInterface as getChatInterface
from modules.interfaces.interfaceDbApp import getRootInterface
from modules.workflows.automation import syncAutomationEvents
diff --git a/modules/routes/routeAdminFeatures.py b/modules/routes/routeAdminFeatures.py
index d62a48e1..d5f1a8f5 100644
--- a/modules/routes/routeAdminFeatures.py
+++ b/modules/routes/routeAdminFeatures.py
@@ -799,7 +799,6 @@ async def listFeatureInstanceUsers(
# Get all FeatureAccess records for this instance
from modules.datamodels.datamodelMembership import FeatureAccess, FeatureAccessRole
from modules.datamodels.datamodelRbac import Role
- from modules.datamodels.datamodelUam import UserInDB
featureAccesses = rootInterface.db.getRecordset(
FeatureAccess,
@@ -899,7 +898,6 @@ async def addUserToFeatureInstance(
)
# Verify user exists
- from modules.datamodels.datamodelUam import UserInDB
users = rootInterface.db.getRecordset(UserInDB, recordFilter={"id": data.userId})
if not users:
raise HTTPException(
diff --git a/modules/routes/routeAdminRbacRoles.py b/modules/routes/routeAdminRbacRoles.py
index c5c45963..70d0beaa 100644
--- a/modules/routes/routeAdminRbacRoles.py
+++ b/modules/routes/routeAdminRbacRoles.py
@@ -364,7 +364,6 @@ async def listUsersWithRoles(
# Get all users (SysAdmin sees all)
# Use db.getRecordset with UserInDB (the actual database model)
- from modules.datamodels.datamodelUam import User, UserInDB
allUsersData = interface.db.getRecordset(UserInDB)
# Convert to User objects, filtering out sensitive fields
users = []
@@ -376,7 +375,6 @@ async def listUsersWithRoles(
# Filter by mandate if specified (via UserMandate table)
if mandateId:
- from modules.datamodels.datamodelMembership import UserMandate
userMandates = interface.db.getRecordset(UserMandate, recordFilter={"mandateId": mandateId})
mandateUserIds = {str(um["userId"]) for um in userMandates}
users = [u for u in users if str(u.id) in mandateUserIds]
diff --git a/modules/aichat/routeFeatureAiChat.py b/modules/routes/routeChat.py
similarity index 97%
rename from modules/aichat/routeFeatureAiChat.py
rename to modules/routes/routeChat.py
index 3eaaf624..88d4a4b1 100644
--- a/modules/aichat/routeFeatureAiChat.py
+++ b/modules/routes/routeChat.py
@@ -16,7 +16,7 @@ from modules.auth import limiter, getRequestContext, RequestContext
from . import interfaceFeatureAiChat as interfaceDbChat
# Import models
-from .datamodelFeatureAiChat import ChatWorkflow, UserInputRequest, WorkflowModeEnum
+from modules.datamodels.datamodelChat import ChatWorkflow, UserInputRequest, WorkflowModeEnum
# Import workflow control functions
from modules.workflows.automation import chatStart, chatStop
diff --git a/modules/routes/routeDataConnections.py b/modules/routes/routeDataConnections.py
index c7af510e..210e0522 100644
--- a/modules/routes/routeDataConnections.py
+++ b/modules/routes/routeDataConnections.py
@@ -182,7 +182,6 @@ async def get_connections(
# Perform silent token refresh for expired OAuth connections
try:
- from modules.auth import token_refresh_service
refresh_result = await token_refresh_service.refresh_expired_tokens(currentUser.id)
if refresh_result.get("refreshed", 0) > 0:
logger.info(f"Silently refreshed {refresh_result['refreshed']} tokens for user {currentUser.id}")
diff --git a/modules/routes/routeDataMandates.py b/modules/routes/routeDataMandates.py
index ab0ad8c1..37c871ab 100644
--- a/modules/routes/routeDataMandates.py
+++ b/modules/routes/routeDataMandates.py
@@ -291,7 +291,6 @@ async def delete_mandate(
)
# MULTI-TENANT: Delete all UserMandate entries for this mandate first
- from modules.datamodels.datamodelMembership import UserMandate
userMandates = appInterface.db.getRecordset(UserMandate, recordFilter={"mandateId": mandateId})
for um in userMandates:
appInterface.db.deleteRecord(UserMandate, um["id"])
diff --git a/modules/routes/routeDataUsers.py b/modules/routes/routeDataUsers.py
index 809b3521..ed55b11f 100644
--- a/modules/routes/routeDataUsers.py
+++ b/modules/routes/routeDataUsers.py
@@ -252,7 +252,6 @@ async def get_users(
elif context.isSysAdmin:
# SysAdmin without mandateId sees all users
# Get all users directly from database using UserInDB (the actual database model)
- from modules.datamodels.datamodelUam import UserInDB
allUsers = appInterface.db.getRecordset(UserInDB)
# Convert to cleaned dictionaries first for filtering
cleanedUsers = []
@@ -378,7 +377,6 @@ async def create_user(
appInterface = interfaceDbApp.getInterface(context.user)
# Extract fields from request model and call createUser with individual parameters
- from modules.datamodels.datamodelUam import AuthAuthority
newUser = appInterface.createUser(
username=userData.username,
password=userData.password,
@@ -512,7 +510,6 @@ async def reset_user_password(
# SECURITY: Automatically revoke all tokens for the user after password reset
try:
- from modules.datamodels.datamodelUam import AuthAuthority
revoked_count = appInterface.revokeTokensByUser(
userId=userId,
authority=None, # Revoke all authorities
@@ -593,7 +590,6 @@ async def change_password(
# SECURITY: Automatically revoke all tokens for the user after password change
try:
- from modules.datamodels.datamodelUam import AuthAuthority
revoked_count = appInterface.revokeTokensByUser(
userId=str(context.user.id),
authority=None, # Revoke all authorities
@@ -654,7 +650,6 @@ async def sendPasswordLink(
"""
try:
from modules.shared.configuration import APP_CONFIG
- from modules.interfaces.interfaceDbApp import getRootInterface
# Get user interface
appInterface = interfaceDbApp.getInterface(context.user)
diff --git a/modules/routes/routeDataWorkflows.py b/modules/routes/routeDataWorkflows.py
index 09bfbabc..799a9855 100644
--- a/modules/routes/routeDataWorkflows.py
+++ b/modules/routes/routeDataWorkflows.py
@@ -14,12 +14,12 @@ from fastapi import APIRouter, HTTPException, Depends, Body, Path, Query, Respon
from modules.auth import limiter, getCurrentUser
# Import interfaces from feature containers
-import modules.aichat.interfaceFeatureAiChat as interfaceDbChat
-from modules.aichat.interfaceFeatureAiChat import getInterface
+import modules.interfaces.interfaceDbChat as interfaceDbChat
+from modules.interfaces.interfaceDbChat import getInterface
from modules.interfaces.interfaceRbac import getRecordsetWithRBAC
# Import models from feature containers
-from modules.aichat.datamodelFeatureAiChat import (
+from modules.datamodels.datamodelChat import (
ChatWorkflow,
ChatMessage,
ChatLog,
diff --git a/modules/routes/routeGdpr.py b/modules/routes/routeGdpr.py
index f99dcd77..4f5f2aa4 100644
--- a/modules/routes/routeGdpr.py
+++ b/modules/routes/routeGdpr.py
@@ -121,7 +121,6 @@ async def exportUserData(
mandateId = um.get("mandateId")
# Get mandate details
- from modules.datamodels.datamodelUam import Mandate
mandateRecords = rootInterface.db.getRecordset(
Mandate,
recordFilter={"id": mandateId}
@@ -278,7 +277,6 @@ async def exportPortableData(
affiliations = []
for um in userMandates:
- from modules.datamodels.datamodelUam import Mandate
mandateRecords = rootInterface.db.getRecordset(
Mandate,
recordFilter={"id": um.get("mandateId")}
@@ -418,7 +416,6 @@ async def deleteAccount(
deletedData.append(f"Tokens deleted: {len(userTokens)}")
# 5. Delete user connections (OAuth)
- from modules.datamodels.datamodelUam import UserConnection
userConnections = rootInterface.db.getRecordset(
UserConnection,
recordFilter={"userId": str(currentUser.id)}
diff --git a/modules/routes/routeSecurityGoogle.py b/modules/routes/routeSecurityGoogle.py
index 9642df00..39edcf8b 100644
--- a/modules/routes/routeSecurityGoogle.py
+++ b/modules/routes/routeSecurityGoogle.py
@@ -170,7 +170,6 @@ async def login(
try:
if connectionId:
rootInterface = getRootInterface()
- from modules.datamodels.datamodelUam import UserConnection
records = rootInterface.db.getRecordset(UserConnection, recordFilter={"id": connectionId})
if records:
record = records[0]
@@ -356,7 +355,6 @@ async def auth_callback(code: str, state: str, request: Request, response: Respo
# Decode token to get jti for database record
from jose import jwt
- from modules.auth import SECRET_KEY, ALGORITHM
payload = jwt.decode(jwt_token, SECRET_KEY, algorithms=[ALGORITHM])
jti = payload.get("jti")
@@ -494,7 +492,6 @@ async def auth_callback(code: str, state: str, request: Request, response: Respo
connection.externalEmail = user_info.get("email")
# Update connection record directly
- from modules.datamodels.datamodelUam import UserConnection
rootInterface.db.recordModify(UserConnection, connection_id, connection.model_dump())
@@ -667,7 +664,6 @@ async def verify_token(
)
# Get a fresh token via TokenManager convenience method
- from modules.auth import TokenManager
current_token = TokenManager().getFreshToken(google_connection.id)
if not current_token:
@@ -741,7 +737,6 @@ async def refresh_token(
logger.debug(f"Found Google connection: {google_connection.id}, status={google_connection.status}")
# Get the token for this specific connection (fresh if expiring soon)
- from modules.auth import TokenManager
current_token = TokenManager().getFreshToken(google_connection.id)
if not current_token:
diff --git a/modules/routes/routeSecurityLocal.py b/modules/routes/routeSecurityLocal.py
index 64984eef..41fe2cab 100644
--- a/modules/routes/routeSecurityLocal.py
+++ b/modules/routes/routeSecurityLocal.py
@@ -107,7 +107,6 @@ async def login(
rootInterface = getRootInterface()
# Get default mandate ID
- from modules.datamodels.datamodelUam import Mandate
defaultMandateId = rootInterface.getInitialId(Mandate)
if not defaultMandateId:
raise HTTPException(
@@ -267,7 +266,6 @@ async def register_user(
appInterface = getRootInterface()
# Get default mandate ID
- from modules.datamodels.datamodelUam import Mandate
defaultMandateId = appInterface.getInitialId(Mandate)
if not defaultMandateId:
raise HTTPException(
diff --git a/modules/routes/routeSecurityMsft.py b/modules/routes/routeSecurityMsft.py
index 6d034607..bc637222 100644
--- a/modules/routes/routeSecurityMsft.py
+++ b/modules/routes/routeSecurityMsft.py
@@ -364,7 +364,6 @@ async def auth_callback(code: str, state: str, request: Request, response: Respo
# Decode token to get jti for database record
from jose import jwt
- from modules.auth import SECRET_KEY, ALGORITHM
payload = jwt.decode(jwt_token, SECRET_KEY, algorithms=[ALGORITHM])
jti = payload.get("jti")
@@ -726,7 +725,6 @@ async def refresh_token(
logger.debug(f"Found Microsoft connection: {msft_connection.id}, status={msft_connection.status}")
# Get a fresh token via TokenManager convenience method
- from modules.auth import TokenManager
current_token = TokenManager().getFreshToken(msft_connection.id)
if not current_token:
@@ -738,7 +736,6 @@ async def refresh_token(
# Always attempt refresh (as per your requirement)
- from modules.auth import TokenManager
token_manager = TokenManager()
refreshedToken = token_manager.refreshToken(current_token)
diff --git a/modules/services/__init__.py b/modules/services/__init__.py
index ade50b5f..3e0a2560 100644
--- a/modules/services/__init__.py
+++ b/modules/services/__init__.py
@@ -19,7 +19,7 @@ import logging
from modules.datamodels.datamodelUam import User
if TYPE_CHECKING:
- from modules.aichat.datamodelFeatureAiChat import ChatWorkflow
+ from modules.datamodels.datamodelChat import ChatWorkflow
logger = logging.getLogger(__name__)
@@ -79,6 +79,12 @@ class Services:
self.rbac = self.interfaceDbApp.rbac if self.interfaceDbApp else None
+ # ============================================================
+ # CENTRAL INTERFACE (Chat/Workflow)
+ # ============================================================
+ from modules.interfaces.interfaceDbChat import getInterface as getChatInterface
+ self.interfaceDbChat = getChatInterface(user, mandateId=mandateId)
+
# ============================================================
# SHARED SERVICES (from modules/services/)
# ============================================================
@@ -101,7 +107,22 @@ class Services:
self.messaging = PublicService(MessagingService(self))
# ============================================================
- # FEATURE SERVICES (dynamically loaded by filename discovery)
+ # AI SERVICES (from modules/services/)
+ # ============================================================
+ from .serviceAi.mainServiceAi import AiService
+ self.ai = PublicService(AiService(self), functionsOnly=False)
+
+ from .serviceExtraction.mainServiceExtraction import ExtractionService
+ self.extraction = PublicService(ExtractionService(self))
+
+ from .serviceGeneration.mainServiceGeneration import GenerationService
+ self.generation = PublicService(GenerationService(self))
+
+ from .serviceWeb.mainServiceWeb import WebService
+ self.web = PublicService(WebService(self))
+
+ # ============================================================
+ # FEATURE INTERFACES (dynamically loaded)
# ============================================================
self._loadFeatureInterfaces()
self._loadFeatureServices()
diff --git a/modules/aichat/mainAiChat.py b/modules/services/serviceAi/mainAiChat.py
similarity index 98%
rename from modules/aichat/mainAiChat.py
rename to modules/services/serviceAi/mainAiChat.py
index fbd6b91a..2e6514e6 100644
--- a/modules/aichat/mainAiChat.py
+++ b/modules/services/serviceAi/mainAiChat.py
@@ -154,7 +154,7 @@ async def onStart(eventUser) -> None:
Initializes AI connectors for model registry.
"""
try:
- from .aicore.aicoreModelRegistry import modelRegistry
+ from modules.aicore.aicoreModelRegistry import modelRegistry
modelRegistry.ensureConnectorsRegistered()
logger.info(f"Feature '{FEATURE_CODE}' started - AI connectors initialized")
except Exception as e:
diff --git a/modules/aichat/serviceAi/mainServiceAi.py b/modules/services/serviceAi/mainServiceAi.py
similarity index 98%
rename from modules/aichat/serviceAi/mainServiceAi.py
rename to modules/services/serviceAi/mainServiceAi.py
index 40e2e974..296a8032 100644
--- a/modules/aichat/serviceAi/mainServiceAi.py
+++ b/modules/services/serviceAi/mainServiceAi.py
@@ -6,8 +6,8 @@ import re
import time
import base64
from typing import Dict, Any, List, Optional, Tuple
-from modules.aichat.datamodelFeatureAiChat import PromptPlaceholder, ChatDocument
-from modules.aichat.serviceExtraction.mainServiceExtraction import ExtractionService
+from modules.datamodels.datamodelChat import PromptPlaceholder, ChatDocument
+from modules.services.serviceExtraction.mainServiceExtraction import ExtractionService
from modules.datamodels.datamodelAi import AiCallRequest, AiCallOptions, OperationTypeEnum, PriorityEnum, ProcessingModeEnum
from modules.datamodels.datamodelExtraction import ContentPart, DocumentIntent
from modules.datamodels.datamodelWorkflow import AiResponse, AiResponseMetadata, DocumentData
@@ -329,7 +329,7 @@ Respond with ONLY a JSON object in this exact format:
parentOperationId: Optional[str]
) -> AiResponse:
"""Handle IMAGE_GENERATE operation type using image generation path."""
- from modules.aichat.serviceGeneration.paths.imagePath import ImageGenerationPath
+ from modules.services.serviceGeneration.paths.imagePath import ImageGenerationPath
imagePath = ImageGenerationPath(self.services)
@@ -514,7 +514,7 @@ Respond with ONLY a JSON object in this exact format:
)
try:
- from modules.aichat.serviceGeneration.mainServiceGeneration import GenerationService
+ from modules.services.serviceGeneration.mainServiceGeneration import GenerationService
generationService = GenerationService(self.services)
@@ -829,7 +829,7 @@ Respond with ONLY a JSON object in this exact format:
parentOperationId: Optional[str]
) -> AiResponse:
"""Handle code generation using code generation path."""
- from modules.aichat.serviceGeneration.paths.codePath import CodeGenerationPath
+ from modules.services.serviceGeneration.paths.codePath import CodeGenerationPath
codePath = CodeGenerationPath(self.services)
return await codePath.generateCode(
@@ -852,7 +852,7 @@ Respond with ONLY a JSON object in this exact format:
parentOperationId: Optional[str]
) -> AiResponse:
"""Handle document generation using document generation path."""
- from modules.aichat.serviceGeneration.paths.documentPath import DocumentGenerationPath
+ from modules.services.serviceGeneration.paths.documentPath import DocumentGenerationPath
# Set compression options for document generation
options.compressPrompt = False
diff --git a/modules/aichat/serviceAi/merge_1.txt b/modules/services/serviceAi/merge_1.txt
similarity index 100%
rename from modules/aichat/serviceAi/merge_1.txt
rename to modules/services/serviceAi/merge_1.txt
diff --git a/modules/aichat/serviceAi/subAiCallLooping-flow.md b/modules/services/serviceAi/subAiCallLooping-flow.md
similarity index 100%
rename from modules/aichat/serviceAi/subAiCallLooping-flow.md
rename to modules/services/serviceAi/subAiCallLooping-flow.md
diff --git a/modules/aichat/serviceAi/subAiCallLooping.py b/modules/services/serviceAi/subAiCallLooping.py
similarity index 100%
rename from modules/aichat/serviceAi/subAiCallLooping.py
rename to modules/services/serviceAi/subAiCallLooping.py
diff --git a/modules/aichat/serviceAi/subContentExtraction.py b/modules/services/serviceAi/subContentExtraction.py
similarity index 99%
rename from modules/aichat/serviceAi/subContentExtraction.py
rename to modules/services/serviceAi/subContentExtraction.py
index cb6ff743..696ba377 100644
--- a/modules/aichat/serviceAi/subContentExtraction.py
+++ b/modules/services/serviceAi/subContentExtraction.py
@@ -14,7 +14,7 @@ import logging
import base64
from typing import Dict, Any, List, Optional
-from modules.aichat.datamodelFeatureAiChat import ChatDocument
+from modules.datamodels.datamodelChat import ChatDocument
from modules.datamodels.datamodelExtraction import ContentPart, DocumentIntent
from modules.workflows.processing.shared.stateTools import checkWorkflowStopped
@@ -387,7 +387,6 @@ class ContentExtractor:
)
# Führe Extraktion aus
- from modules.datamodels.datamodelExtraction import ExtractionOptions, MergeStrategy
extractionOptions = ExtractionOptions(
prompt=extractionPrompt,
diff --git a/modules/aichat/serviceAi/subDocumentIntents.py b/modules/services/serviceAi/subDocumentIntents.py
similarity index 99%
rename from modules/aichat/serviceAi/subDocumentIntents.py
rename to modules/services/serviceAi/subDocumentIntents.py
index a468f1d4..274a8a5a 100644
--- a/modules/aichat/serviceAi/subDocumentIntents.py
+++ b/modules/services/serviceAi/subDocumentIntents.py
@@ -12,7 +12,7 @@ import json
import logging
from typing import Dict, Any, List, Optional
-from modules.aichat.datamodelFeatureAiChat import ChatDocument
+from modules.datamodels.datamodelChat import ChatDocument
from modules.datamodels.datamodelExtraction import DocumentIntent
from modules.workflows.processing.shared.stateTools import checkWorkflowStopped
@@ -181,7 +181,6 @@ class DocumentIntentAnalyzer:
logger.debug(f"JSON document {document.id} does not have actionType='context.extractContent' (got: {actionType})")
if documentData:
- from modules.datamodels.datamodelExtraction import ContentExtracted
try:
# Stelle sicher, dass "id" vorhanden ist
diff --git a/modules/aichat/serviceAi/subJsonMerger.py b/modules/services/serviceAi/subJsonMerger.py
similarity index 100%
rename from modules/aichat/serviceAi/subJsonMerger.py
rename to modules/services/serviceAi/subJsonMerger.py
diff --git a/modules/aichat/serviceAi/subJsonResponseHandling.py b/modules/services/serviceAi/subJsonResponseHandling.py
similarity index 99%
rename from modules/aichat/serviceAi/subJsonResponseHandling.py
rename to modules/services/serviceAi/subJsonResponseHandling.py
index b2cfe084..3adb613c 100644
--- a/modules/aichat/serviceAi/subJsonResponseHandling.py
+++ b/modules/services/serviceAi/subJsonResponseHandling.py
@@ -1357,7 +1357,6 @@ class JsonResponseHandler:
logger.debug(f"Modular merger failed, using fallback: {e}")
# Fallback to legacy merger (simplified)
- from modules.shared.jsonUtils import normalizeJsonText, stripCodeFences, closeJsonStructures, tryParseJson
accumulatedExtracted = stripCodeFences(normalizeJsonText(accumulated)).strip()
newFragmentExtracted = stripCodeFences(normalizeJsonText(newFragment)).strip()
@@ -1450,7 +1449,6 @@ class JsonResponseHandler:
if not jsonString:
return None
- from modules.shared.jsonUtils import tryParseJson, repairBrokenJson, closeJsonStructures
# Try to parse directly first
try:
@@ -1535,7 +1533,6 @@ class JsonResponseHandler:
# Strategy 1: Check if it's an array fragment
if jsonStripped.startswith('['):
# Try to parse as array
- from modules.shared.jsonUtils import tryParseJson, closeJsonStructures
# Close incomplete structures
closed = closeJsonStructures(jsonStripped)
@@ -1579,7 +1576,6 @@ class JsonResponseHandler:
# Strategy 2: Check if it's a partial object (cut mid-structure)
# Look for patterns like: {"elements": [...] or {"type": "table"...
if jsonStripped.startswith('{'):
- from modules.shared.jsonUtils import tryParseJson, closeJsonStructures
# Try to close and parse
closed = closeJsonStructures(jsonStripped)
@@ -1690,7 +1686,6 @@ class JsonResponseHandler:
if not accumulatedElements and not newFragmentElements:
# No elements found - try to extract from raw strings
# Try to extract any valid JSON structure from raw strings
- from modules.shared.jsonUtils import tryParseJson, closeJsonStructures
# Try accumulated first
if accumulatedRaw:
@@ -2019,7 +2014,6 @@ class JsonResponseHandler:
return rows
# Pattern 4: Try to parse as JSON array (handles complete arrays)
- from modules.shared.jsonUtils import tryParseJson, closeJsonStructures
# Try to close incomplete structures
closed = closeJsonStructures(fragmentRaw.strip())
@@ -2292,7 +2286,6 @@ class JsonResponseHandler:
if not jsonString:
return None, None
- from modules.shared.jsonUtils import stripCodeFences, normalizeJsonText, tryParseJson, closeJsonStructures
# Extract and normalize JSON
extracted = stripCodeFences(normalizeJsonText(jsonString)).strip()
@@ -2366,7 +2359,6 @@ class JsonResponseHandler:
if not continuationJson:
return accumulated
- from modules.shared.jsonUtils import stripCodeFences, normalizeJsonText, tryParseJson, closeJsonStructures
# Normalize accumulated
accumulatedExtracted = stripCodeFences(normalizeJsonText(accumulated)).strip()
@@ -2429,7 +2421,6 @@ class JsonResponseHandler:
if not jsonString or not jsonString.strip():
return ""
- from modules.shared.jsonUtils import tryParseJson, closeJsonStructures
# Strategy 1: Try progressive truncation to find longest valid JSON
# Use binary search-like approach for efficiency
@@ -2484,7 +2475,6 @@ class JsonResponseHandler:
if jsonStripped.startswith('{') or jsonStripped.startswith('['):
# Try to extract balanced JSON
- from modules.shared.jsonUtils import extractFirstBalancedJson
balanced = extractFirstBalancedJson(jsonStripped)
if balanced and balanced != jsonStripped:
try:
@@ -2554,7 +2544,6 @@ class JsonResponseHandler:
if not accumulated or not newFragment:
return ""
- from modules.shared.jsonUtils import closeJsonStructures, tryParseJson
# Extract valid JSON prefixes from both
accumulatedValid = JsonResponseHandler._extractValidJsonPrefix(accumulated)
@@ -2647,7 +2636,6 @@ class JsonResponseHandler:
if not newFragment:
return accumulated
- from modules.shared.jsonUtils import tryParseJson, closeJsonStructures
# Strategy 1: Try to extract valid JSON parts from both fragments
# This handles random cuts better by finding the longest valid prefix/suffix
@@ -2894,7 +2882,6 @@ class JsonResponseHandler:
try:
# Use existing JSON completion function to close incomplete structures
- from modules.shared.jsonUtils import extractJsonString, closeJsonStructures
# Extract JSON string and complete it with missing closing elements
extracted = extractJsonString(jsonString)
diff --git a/modules/aichat/serviceAi/subLoopingUseCases.py b/modules/services/serviceAi/subLoopingUseCases.py
similarity index 100%
rename from modules/aichat/serviceAi/subLoopingUseCases.py
rename to modules/services/serviceAi/subLoopingUseCases.py
diff --git a/modules/aichat/serviceAi/subResponseParsing.py b/modules/services/serviceAi/subResponseParsing.py
similarity index 100%
rename from modules/aichat/serviceAi/subResponseParsing.py
rename to modules/services/serviceAi/subResponseParsing.py
diff --git a/modules/aichat/serviceAi/subStructureFilling.py b/modules/services/serviceAi/subStructureFilling.py
similarity index 99%
rename from modules/aichat/serviceAi/subStructureFilling.py
rename to modules/services/serviceAi/subStructureFilling.py
index be2197bb..5145ad54 100644
--- a/modules/aichat/serviceAi/subStructureFilling.py
+++ b/modules/services/serviceAi/subStructureFilling.py
@@ -2531,7 +2531,7 @@ CRITICAL:
List of accepted section content types (e.g., ["table", "code_block"])
"""
try:
- from modules.aichat.serviceGeneration.renderers.registry import getRenderer
+ from modules.services.serviceGeneration.renderers.registry import getRenderer
# Get renderer for this format
renderer = getRenderer(outputFormat, self.services)
diff --git a/modules/aichat/serviceAi/subStructureGeneration.py b/modules/services/serviceAi/subStructureGeneration.py
similarity index 99%
rename from modules/aichat/serviceAi/subStructureGeneration.py
rename to modules/services/serviceAi/subStructureGeneration.py
index 429a182c..64624b84 100644
--- a/modules/aichat/serviceAi/subStructureGeneration.py
+++ b/modules/services/serviceAi/subStructureGeneration.py
@@ -231,7 +231,7 @@ CRITICAL:
raise ValueError("Structure has no documents - cannot generate without documents")
# Import renderer registry for format validation (existing infrastructure)
- from modules.aichat.serviceGeneration.renderers.registry import getRenderer
+ from modules.services.serviceGeneration.renderers.registry import getRenderer
# Validate and fix each document
for doc in documents:
diff --git a/modules/services/serviceChat/mainServiceChat.py b/modules/services/serviceChat/mainServiceChat.py
index ef57803d..137dcd05 100644
--- a/modules/services/serviceChat/mainServiceChat.py
+++ b/modules/services/serviceChat/mainServiceChat.py
@@ -3,7 +3,7 @@
import logging
from typing import Dict, Any, List, Optional
from modules.datamodels.datamodelUam import User, UserConnection
-from modules.aichat.datamodelFeatureAiChat import ChatDocument, ChatMessage, ChatStat, ChatLog
+from modules.datamodels.datamodelChat import ChatDocument, ChatMessage, ChatStat, ChatLog
from modules.datamodels.datamodelAi import AiCallOptions, OperationTypeEnum, PriorityEnum, ProcessingModeEnum
from modules.shared.progressLogger import ProgressLogger
diff --git a/modules/aichat/serviceExtraction/__init__.py b/modules/services/serviceExtraction/__init__.py
similarity index 100%
rename from modules/aichat/serviceExtraction/__init__.py
rename to modules/services/serviceExtraction/__init__.py
diff --git a/modules/aichat/serviceExtraction/chunking/__init__.py b/modules/services/serviceExtraction/chunking/__init__.py
similarity index 100%
rename from modules/aichat/serviceExtraction/chunking/__init__.py
rename to modules/services/serviceExtraction/chunking/__init__.py
diff --git a/modules/aichat/serviceExtraction/chunking/chunkerImage.py b/modules/services/serviceExtraction/chunking/chunkerImage.py
similarity index 100%
rename from modules/aichat/serviceExtraction/chunking/chunkerImage.py
rename to modules/services/serviceExtraction/chunking/chunkerImage.py
diff --git a/modules/aichat/serviceExtraction/chunking/chunkerStructure.py b/modules/services/serviceExtraction/chunking/chunkerStructure.py
similarity index 100%
rename from modules/aichat/serviceExtraction/chunking/chunkerStructure.py
rename to modules/services/serviceExtraction/chunking/chunkerStructure.py
diff --git a/modules/aichat/serviceExtraction/chunking/chunkerTable.py b/modules/services/serviceExtraction/chunking/chunkerTable.py
similarity index 100%
rename from modules/aichat/serviceExtraction/chunking/chunkerTable.py
rename to modules/services/serviceExtraction/chunking/chunkerTable.py
diff --git a/modules/aichat/serviceExtraction/chunking/chunkerText.py b/modules/services/serviceExtraction/chunking/chunkerText.py
similarity index 100%
rename from modules/aichat/serviceExtraction/chunking/chunkerText.py
rename to modules/services/serviceExtraction/chunking/chunkerText.py
diff --git a/modules/aichat/serviceExtraction/extractors/__init__.py b/modules/services/serviceExtraction/extractors/__init__.py
similarity index 100%
rename from modules/aichat/serviceExtraction/extractors/__init__.py
rename to modules/services/serviceExtraction/extractors/__init__.py
diff --git a/modules/aichat/serviceExtraction/extractors/extractorBinary.py b/modules/services/serviceExtraction/extractors/extractorBinary.py
similarity index 100%
rename from modules/aichat/serviceExtraction/extractors/extractorBinary.py
rename to modules/services/serviceExtraction/extractors/extractorBinary.py
diff --git a/modules/aichat/serviceExtraction/extractors/extractorCsv.py b/modules/services/serviceExtraction/extractors/extractorCsv.py
similarity index 100%
rename from modules/aichat/serviceExtraction/extractors/extractorCsv.py
rename to modules/services/serviceExtraction/extractors/extractorCsv.py
diff --git a/modules/aichat/serviceExtraction/extractors/extractorDocx.py b/modules/services/serviceExtraction/extractors/extractorDocx.py
similarity index 100%
rename from modules/aichat/serviceExtraction/extractors/extractorDocx.py
rename to modules/services/serviceExtraction/extractors/extractorDocx.py
diff --git a/modules/aichat/serviceExtraction/extractors/extractorHtml.py b/modules/services/serviceExtraction/extractors/extractorHtml.py
similarity index 100%
rename from modules/aichat/serviceExtraction/extractors/extractorHtml.py
rename to modules/services/serviceExtraction/extractors/extractorHtml.py
diff --git a/modules/aichat/serviceExtraction/extractors/extractorImage.py b/modules/services/serviceExtraction/extractors/extractorImage.py
similarity index 100%
rename from modules/aichat/serviceExtraction/extractors/extractorImage.py
rename to modules/services/serviceExtraction/extractors/extractorImage.py
diff --git a/modules/aichat/serviceExtraction/extractors/extractorJson.py b/modules/services/serviceExtraction/extractors/extractorJson.py
similarity index 100%
rename from modules/aichat/serviceExtraction/extractors/extractorJson.py
rename to modules/services/serviceExtraction/extractors/extractorJson.py
diff --git a/modules/aichat/serviceExtraction/extractors/extractorPdf.py b/modules/services/serviceExtraction/extractors/extractorPdf.py
similarity index 100%
rename from modules/aichat/serviceExtraction/extractors/extractorPdf.py
rename to modules/services/serviceExtraction/extractors/extractorPdf.py
diff --git a/modules/aichat/serviceExtraction/extractors/extractorPptx.py b/modules/services/serviceExtraction/extractors/extractorPptx.py
similarity index 100%
rename from modules/aichat/serviceExtraction/extractors/extractorPptx.py
rename to modules/services/serviceExtraction/extractors/extractorPptx.py
diff --git a/modules/aichat/serviceExtraction/extractors/extractorSql.py b/modules/services/serviceExtraction/extractors/extractorSql.py
similarity index 100%
rename from modules/aichat/serviceExtraction/extractors/extractorSql.py
rename to modules/services/serviceExtraction/extractors/extractorSql.py
diff --git a/modules/aichat/serviceExtraction/extractors/extractorText.py b/modules/services/serviceExtraction/extractors/extractorText.py
similarity index 100%
rename from modules/aichat/serviceExtraction/extractors/extractorText.py
rename to modules/services/serviceExtraction/extractors/extractorText.py
diff --git a/modules/aichat/serviceExtraction/extractors/extractorXlsx.py b/modules/services/serviceExtraction/extractors/extractorXlsx.py
similarity index 100%
rename from modules/aichat/serviceExtraction/extractors/extractorXlsx.py
rename to modules/services/serviceExtraction/extractors/extractorXlsx.py
diff --git a/modules/aichat/serviceExtraction/extractors/extractorXml.py b/modules/services/serviceExtraction/extractors/extractorXml.py
similarity index 100%
rename from modules/aichat/serviceExtraction/extractors/extractorXml.py
rename to modules/services/serviceExtraction/extractors/extractorXml.py
diff --git a/modules/aichat/serviceExtraction/mainServiceExtraction.py b/modules/services/serviceExtraction/mainServiceExtraction.py
similarity index 99%
rename from modules/aichat/serviceExtraction/mainServiceExtraction.py
rename to modules/services/serviceExtraction/mainServiceExtraction.py
index 8777dbee..4081158d 100644
--- a/modules/aichat/serviceExtraction/mainServiceExtraction.py
+++ b/modules/services/serviceExtraction/mainServiceExtraction.py
@@ -11,10 +11,10 @@ import json
from .subRegistry import ExtractorRegistry, ChunkerRegistry
from .subPipeline import runExtraction
from modules.datamodels.datamodelExtraction import ContentExtracted, ContentPart, MergeStrategy, ExtractionOptions, PartResult, DocumentIntent
-from modules.aichat.datamodelFeatureAiChat import ChatDocument
+from modules.datamodels.datamodelChat import ChatDocument
from modules.datamodels.datamodelAi import AiCallResponse, AiCallRequest, AiCallOptions, OperationTypeEnum, AiModelCall
-from modules.aichat.aicore.aicoreModelRegistry import modelRegistry
-from modules.aichat.aicore.aicoreModelSelector import modelSelector
+from modules.aicore.aicoreModelRegistry import modelRegistry
+from modules.aicore.aicoreModelSelector import modelSelector
from modules.shared.jsonUtils import stripCodeFences
@@ -692,7 +692,6 @@ class ExtractionService:
isGenerationResponse = False
if options and hasattr(options, 'operationType'):
# Generation responses use DATA_GENERATE operation type
- from modules.datamodels.datamodelAi import OperationTypeEnum
isGenerationResponse = options.operationType == OperationTypeEnum.DATA_GENERATE
# Also check if content looks like JSON (starts with { or [)
diff --git a/modules/aichat/serviceExtraction/merging/__init__.py b/modules/services/serviceExtraction/merging/__init__.py
similarity index 100%
rename from modules/aichat/serviceExtraction/merging/__init__.py
rename to modules/services/serviceExtraction/merging/__init__.py
diff --git a/modules/aichat/serviceExtraction/merging/mergerDefault.py b/modules/services/serviceExtraction/merging/mergerDefault.py
similarity index 100%
rename from modules/aichat/serviceExtraction/merging/mergerDefault.py
rename to modules/services/serviceExtraction/merging/mergerDefault.py
diff --git a/modules/aichat/serviceExtraction/merging/mergerTable.py b/modules/services/serviceExtraction/merging/mergerTable.py
similarity index 100%
rename from modules/aichat/serviceExtraction/merging/mergerTable.py
rename to modules/services/serviceExtraction/merging/mergerTable.py
diff --git a/modules/aichat/serviceExtraction/merging/mergerText.py b/modules/services/serviceExtraction/merging/mergerText.py
similarity index 100%
rename from modules/aichat/serviceExtraction/merging/mergerText.py
rename to modules/services/serviceExtraction/merging/mergerText.py
diff --git a/modules/aichat/serviceExtraction/subMerger.py b/modules/services/serviceExtraction/subMerger.py
similarity index 100%
rename from modules/aichat/serviceExtraction/subMerger.py
rename to modules/services/serviceExtraction/subMerger.py
diff --git a/modules/aichat/serviceExtraction/subPipeline.py b/modules/services/serviceExtraction/subPipeline.py
similarity index 100%
rename from modules/aichat/serviceExtraction/subPipeline.py
rename to modules/services/serviceExtraction/subPipeline.py
diff --git a/modules/aichat/serviceExtraction/subPromptBuilderExtraction.py b/modules/services/serviceExtraction/subPromptBuilderExtraction.py
similarity index 98%
rename from modules/aichat/serviceExtraction/subPromptBuilderExtraction.py
rename to modules/services/serviceExtraction/subPromptBuilderExtraction.py
index 9b785525..8f8f756d 100644
--- a/modules/aichat/serviceExtraction/subPromptBuilderExtraction.py
+++ b/modules/services/serviceExtraction/subPromptBuilderExtraction.py
@@ -13,7 +13,7 @@ from modules.datamodels.datamodelAi import AiCallRequest, AiCallOptions, Operati
# Type hint for renderer parameter
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate import BaseRenderer
+ from modules.services.serviceGeneration.renderers.documentRendererBaseTemplate import BaseRenderer
_RendererLike = BaseRenderer
else:
_RendererLike = Any
diff --git a/modules/aichat/serviceExtraction/subRegistry.py b/modules/services/serviceExtraction/subRegistry.py
similarity index 99%
rename from modules/aichat/serviceExtraction/subRegistry.py
rename to modules/services/serviceExtraction/subRegistry.py
index 68c701cc..32727746 100644
--- a/modules/aichat/serviceExtraction/subRegistry.py
+++ b/modules/services/serviceExtraction/subRegistry.py
@@ -71,7 +71,7 @@ class ExtractorRegistry:
module_name = file_path.stem
try:
# Import the module
- module = importlib.import_module(f".{module_name}", package="modules.aichat.serviceExtraction.extractors")
+ module = importlib.import_module(f".{module_name}", package="modules.services.serviceExtraction.extractors")
# Find all extractor classes in the module
for attr_name in dir(module):
diff --git a/modules/aichat/serviceExtraction/subUtils.py b/modules/services/serviceExtraction/subUtils.py
similarity index 100%
rename from modules/aichat/serviceExtraction/subUtils.py
rename to modules/services/serviceExtraction/subUtils.py
diff --git a/modules/aichat/serviceGeneration/mainServiceGeneration.py b/modules/services/serviceGeneration/mainServiceGeneration.py
similarity index 98%
rename from modules/aichat/serviceGeneration/mainServiceGeneration.py
rename to modules/services/serviceGeneration/mainServiceGeneration.py
index 6953ed7c..a49b78c7 100644
--- a/modules/aichat/serviceGeneration/mainServiceGeneration.py
+++ b/modules/services/serviceGeneration/mainServiceGeneration.py
@@ -6,8 +6,8 @@ import base64
import traceback
from typing import Any, Dict, List, Optional, Callable
from modules.datamodels.datamodelDocument import RenderedDocument
-from modules.aichat.datamodelFeatureAiChat import ChatDocument
-from modules.aichat.serviceGeneration.subDocumentUtility import (
+from modules.datamodels.datamodelChat import ChatDocument
+from modules.services.serviceGeneration.subDocumentUtility import (
getFileExtension,
getMimeTypeFromExtension,
detectMimeTypeFromContent,
@@ -414,7 +414,7 @@ class GenerationService:
continue
# Check output style classification (code/document/image/etc.) from renderer
- from modules.aichat.serviceGeneration.renderers.registry import getOutputStyle
+ from modules.services.serviceGeneration.renderers.registry import getOutputStyle
outputStyle = getOutputStyle(docFormat)
if outputStyle:
logger.debug(f"Document {doc.get('id', docIndex)} format '{docFormat}' classified as '{outputStyle}' style")
@@ -471,8 +471,8 @@ class GenerationService:
Complete document structure with populated elements ready for rendering
"""
try:
- from modules.aichat.serviceGeneration.subStructureGenerator import StructureGenerator
- from modules.aichat.serviceGeneration.subContentGenerator import ContentGenerator
+ from modules.services.serviceGeneration.subStructureGenerator import StructureGenerator
+ from modules.services.serviceGeneration.subContentGenerator import ContentGenerator
# Phase 1: Generate structure skeleton
if progressCallback:
@@ -537,7 +537,7 @@ class GenerationService:
aiService=None
) -> str:
"""Get adaptive extraction prompt."""
- from modules.aichat.serviceExtraction.subPromptBuilderExtraction import buildExtractionPrompt
+ from modules.services.serviceExtraction.subPromptBuilderExtraction import buildExtractionPrompt
return await buildExtractionPrompt(
outputFormat=outputFormat,
userPrompt=userPrompt,
diff --git a/modules/aichat/serviceGeneration/paths/codePath.py b/modules/services/serviceGeneration/paths/codePath.py
similarity index 99%
rename from modules/aichat/serviceGeneration/paths/codePath.py
rename to modules/services/serviceGeneration/paths/codePath.py
index 4ab6f79e..f2470385 100644
--- a/modules/aichat/serviceGeneration/paths/codePath.py
+++ b/modules/services/serviceGeneration/paths/codePath.py
@@ -920,7 +920,7 @@ CRITICAL:
def _getCodeRenderer(self, fileType: str):
"""Get code renderer for file type."""
- from modules.aichat.serviceGeneration.renderers.registry import getRenderer
+ from modules.services.serviceGeneration.renderers.registry import getRenderer
# Map file types to renderer formats
formatMap = {
diff --git a/modules/aichat/serviceGeneration/paths/documentPath.py b/modules/services/serviceGeneration/paths/documentPath.py
similarity index 100%
rename from modules/aichat/serviceGeneration/paths/documentPath.py
rename to modules/services/serviceGeneration/paths/documentPath.py
diff --git a/modules/aichat/serviceGeneration/paths/imagePath.py b/modules/services/serviceGeneration/paths/imagePath.py
similarity index 100%
rename from modules/aichat/serviceGeneration/paths/imagePath.py
rename to modules/services/serviceGeneration/paths/imagePath.py
diff --git a/modules/aichat/serviceGeneration/renderers/codeRendererBaseTemplate.py b/modules/services/serviceGeneration/renderers/codeRendererBaseTemplate.py
similarity index 100%
rename from modules/aichat/serviceGeneration/renderers/codeRendererBaseTemplate.py
rename to modules/services/serviceGeneration/renderers/codeRendererBaseTemplate.py
diff --git a/modules/aichat/serviceGeneration/renderers/documentRendererBaseTemplate.py b/modules/services/serviceGeneration/renderers/documentRendererBaseTemplate.py
similarity index 99%
rename from modules/aichat/serviceGeneration/renderers/documentRendererBaseTemplate.py
rename to modules/services/serviceGeneration/renderers/documentRendererBaseTemplate.py
index 76cc1aec..b080ce88 100644
--- a/modules/aichat/serviceGeneration/renderers/documentRendererBaseTemplate.py
+++ b/modules/services/serviceGeneration/renderers/documentRendererBaseTemplate.py
@@ -81,7 +81,6 @@ class BaseRenderer(ABC):
Valid types: "table", "bullet_list", "heading", "paragraph", "code_block", "image"
"""
# Default: accept all section types
- from modules.datamodels.datamodelJson import supportedSectionTypes
return list(supportedSectionTypes)
@abstractmethod
diff --git a/modules/aichat/serviceGeneration/renderers/registry.py b/modules/services/serviceGeneration/renderers/registry.py
similarity index 100%
rename from modules/aichat/serviceGeneration/renderers/registry.py
rename to modules/services/serviceGeneration/renderers/registry.py
diff --git a/modules/aichat/serviceGeneration/renderers/rendererCodeCsv.py b/modules/services/serviceGeneration/renderers/rendererCodeCsv.py
similarity index 100%
rename from modules/aichat/serviceGeneration/renderers/rendererCodeCsv.py
rename to modules/services/serviceGeneration/renderers/rendererCodeCsv.py
diff --git a/modules/aichat/serviceGeneration/renderers/rendererCodeJson.py b/modules/services/serviceGeneration/renderers/rendererCodeJson.py
similarity index 100%
rename from modules/aichat/serviceGeneration/renderers/rendererCodeJson.py
rename to modules/services/serviceGeneration/renderers/rendererCodeJson.py
diff --git a/modules/aichat/serviceGeneration/renderers/rendererCodeXml.py b/modules/services/serviceGeneration/renderers/rendererCodeXml.py
similarity index 100%
rename from modules/aichat/serviceGeneration/renderers/rendererCodeXml.py
rename to modules/services/serviceGeneration/renderers/rendererCodeXml.py
diff --git a/modules/aichat/serviceGeneration/renderers/rendererCsv.py b/modules/services/serviceGeneration/renderers/rendererCsv.py
similarity index 100%
rename from modules/aichat/serviceGeneration/renderers/rendererCsv.py
rename to modules/services/serviceGeneration/renderers/rendererCsv.py
diff --git a/modules/aichat/serviceGeneration/renderers/rendererDocx.py b/modules/services/serviceGeneration/renderers/rendererDocx.py
similarity index 100%
rename from modules/aichat/serviceGeneration/renderers/rendererDocx.py
rename to modules/services/serviceGeneration/renderers/rendererDocx.py
diff --git a/modules/aichat/serviceGeneration/renderers/rendererHtml.py b/modules/services/serviceGeneration/renderers/rendererHtml.py
similarity index 100%
rename from modules/aichat/serviceGeneration/renderers/rendererHtml.py
rename to modules/services/serviceGeneration/renderers/rendererHtml.py
diff --git a/modules/aichat/serviceGeneration/renderers/rendererImage.py b/modules/services/serviceGeneration/renderers/rendererImage.py
similarity index 100%
rename from modules/aichat/serviceGeneration/renderers/rendererImage.py
rename to modules/services/serviceGeneration/renderers/rendererImage.py
diff --git a/modules/aichat/serviceGeneration/renderers/rendererJson.py b/modules/services/serviceGeneration/renderers/rendererJson.py
similarity index 100%
rename from modules/aichat/serviceGeneration/renderers/rendererJson.py
rename to modules/services/serviceGeneration/renderers/rendererJson.py
diff --git a/modules/aichat/serviceGeneration/renderers/rendererMarkdown.py b/modules/services/serviceGeneration/renderers/rendererMarkdown.py
similarity index 100%
rename from modules/aichat/serviceGeneration/renderers/rendererMarkdown.py
rename to modules/services/serviceGeneration/renderers/rendererMarkdown.py
diff --git a/modules/aichat/serviceGeneration/renderers/rendererPdf.py b/modules/services/serviceGeneration/renderers/rendererPdf.py
similarity index 100%
rename from modules/aichat/serviceGeneration/renderers/rendererPdf.py
rename to modules/services/serviceGeneration/renderers/rendererPdf.py
diff --git a/modules/aichat/serviceGeneration/renderers/rendererPptx.py b/modules/services/serviceGeneration/renderers/rendererPptx.py
similarity index 100%
rename from modules/aichat/serviceGeneration/renderers/rendererPptx.py
rename to modules/services/serviceGeneration/renderers/rendererPptx.py
diff --git a/modules/aichat/serviceGeneration/renderers/rendererText.py b/modules/services/serviceGeneration/renderers/rendererText.py
similarity index 100%
rename from modules/aichat/serviceGeneration/renderers/rendererText.py
rename to modules/services/serviceGeneration/renderers/rendererText.py
diff --git a/modules/aichat/serviceGeneration/renderers/rendererXlsx.py b/modules/services/serviceGeneration/renderers/rendererXlsx.py
similarity index 100%
rename from modules/aichat/serviceGeneration/renderers/rendererXlsx.py
rename to modules/services/serviceGeneration/renderers/rendererXlsx.py
diff --git a/modules/aichat/serviceGeneration/subContentGenerator.py b/modules/services/serviceGeneration/subContentGenerator.py
similarity index 99%
rename from modules/aichat/serviceGeneration/subContentGenerator.py
rename to modules/services/serviceGeneration/subContentGenerator.py
index e5c9eec1..86464ef6 100644
--- a/modules/aichat/serviceGeneration/subContentGenerator.py
+++ b/modules/services/serviceGeneration/subContentGenerator.py
@@ -12,7 +12,7 @@ import base64
import re
import traceback
from typing import Dict, Any, Optional, List, Callable
-from modules.aichat.serviceGeneration.subContentIntegrator import ContentIntegrator
+from modules.services.serviceGeneration.subContentIntegrator import ContentIntegrator
from modules.workflows.processing.shared.stateTools import checkWorkflowStopped
logger = logging.getLogger(__name__)
diff --git a/modules/aichat/serviceGeneration/subContentIntegrator.py b/modules/services/serviceGeneration/subContentIntegrator.py
similarity index 100%
rename from modules/aichat/serviceGeneration/subContentIntegrator.py
rename to modules/services/serviceGeneration/subContentIntegrator.py
diff --git a/modules/aichat/serviceGeneration/subDocumentUtility.py b/modules/services/serviceGeneration/subDocumentUtility.py
similarity index 100%
rename from modules/aichat/serviceGeneration/subDocumentUtility.py
rename to modules/services/serviceGeneration/subDocumentUtility.py
diff --git a/modules/aichat/serviceGeneration/subJsonSchema.py b/modules/services/serviceGeneration/subJsonSchema.py
similarity index 100%
rename from modules/aichat/serviceGeneration/subJsonSchema.py
rename to modules/services/serviceGeneration/subJsonSchema.py
diff --git a/modules/aichat/serviceGeneration/subPromptBuilderGeneration.py b/modules/services/serviceGeneration/subPromptBuilderGeneration.py
similarity index 100%
rename from modules/aichat/serviceGeneration/subPromptBuilderGeneration.py
rename to modules/services/serviceGeneration/subPromptBuilderGeneration.py
diff --git a/modules/aichat/serviceGeneration/subStructureGenerator.py b/modules/services/serviceGeneration/subStructureGenerator.py
similarity index 100%
rename from modules/aichat/serviceGeneration/subStructureGenerator.py
rename to modules/services/serviceGeneration/subStructureGenerator.py
diff --git a/modules/services/serviceUtils/mainServiceUtils.py b/modules/services/serviceUtils/mainServiceUtils.py
index 83cb9327..2c975f1d 100644
--- a/modules/services/serviceUtils/mainServiceUtils.py
+++ b/modules/services/serviceUtils/mainServiceUtils.py
@@ -161,7 +161,7 @@ class UtilsService:
Mirrors storeDebugMessageAndDocuments() in modules.interfaces.interfaceDbChat.
"""
try:
- from modules.aichat.interfaceFeatureAiChat import storeDebugMessageAndDocuments as _storeDebugMessageAndDocuments
+ from modules.interfaces.interfaceDbChat import storeDebugMessageAndDocuments as _storeDebugMessageAndDocuments
_storeDebugMessageAndDocuments(message, currentUser)
except Exception:
# Silent fail to never break main flow
diff --git a/modules/aichat/serviceWeb/mainServiceWeb.py b/modules/services/serviceWeb/mainServiceWeb.py
similarity index 100%
rename from modules/aichat/serviceWeb/mainServiceWeb.py
rename to modules/services/serviceWeb/mainServiceWeb.py
diff --git a/modules/workflows/automation/mainWorkflow.py b/modules/workflows/automation/mainWorkflow.py
index 332f8d29..23bbf125 100644
--- a/modules/workflows/automation/mainWorkflow.py
+++ b/modules/workflows/automation/mainWorkflow.py
@@ -12,7 +12,8 @@ import logging
import json
from typing import Dict, Any, Optional
-from modules.aichat.datamodelFeatureAiChat import ChatWorkflow, UserInputRequest, WorkflowModeEnum, AutomationDefinition
+from modules.datamodels.datamodelChat import ChatWorkflow, UserInputRequest, WorkflowModeEnum
+from modules.features.automation.datamodelFeatureAutomation import AutomationDefinition
from modules.datamodels.datamodelUam import User
from modules.shared.timeUtils import getUtcTimestamp
from modules.shared.eventManagement import eventManager
diff --git a/modules/workflows/methods/methodAi/actions/convertDocument.py b/modules/workflows/methods/methodAi/actions/convertDocument.py
index d6264bed..39d6e16f 100644
--- a/modules/workflows/methods/methodAi/actions/convertDocument.py
+++ b/modules/workflows/methods/methodAi/actions/convertDocument.py
@@ -3,7 +3,7 @@
import logging
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult
+from modules.datamodels.datamodelChat import ActionResult
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodAi/actions/generateCode.py b/modules/workflows/methods/methodAi/actions/generateCode.py
index ebdada6a..4f9bbd21 100644
--- a/modules/workflows/methods/methodAi/actions/generateCode.py
+++ b/modules/workflows/methods/methodAi/actions/generateCode.py
@@ -4,7 +4,7 @@
import logging
import time
from typing import Dict, Any, Optional, List
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
from modules.datamodels.datamodelExtraction import ContentPart
from modules.datamodels.datamodelAi import AiCallOptions, OperationTypeEnum, PriorityEnum, ProcessingModeEnum
from modules.datamodels.datamodelWorkflow import AiResponse, DocumentData
diff --git a/modules/workflows/methods/methodAi/actions/generateDocument.py b/modules/workflows/methods/methodAi/actions/generateDocument.py
index 4451f0ae..65e95a32 100644
--- a/modules/workflows/methods/methodAi/actions/generateDocument.py
+++ b/modules/workflows/methods/methodAi/actions/generateDocument.py
@@ -4,7 +4,7 @@
import logging
import time
from typing import Dict, Any, Optional, List
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
from modules.datamodels.datamodelExtraction import ContentPart
from modules.datamodels.datamodelAi import AiCallOptions, OperationTypeEnum, PriorityEnum, ProcessingModeEnum
from modules.datamodels.datamodelWorkflow import AiResponse, DocumentData
diff --git a/modules/workflows/methods/methodAi/actions/process.py b/modules/workflows/methods/methodAi/actions/process.py
index 298ecbe4..cdaf55b6 100644
--- a/modules/workflows/methods/methodAi/actions/process.py
+++ b/modules/workflows/methods/methodAi/actions/process.py
@@ -5,7 +5,7 @@ import logging
import time
import json
from typing import Dict, Any, List, Optional
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
from modules.datamodels.datamodelAi import AiCallOptions
from modules.datamodels.datamodelExtraction import ContentPart
@@ -134,7 +134,6 @@ async def process(self, parameters: Dict[str, Any]) -> ActionResult:
logger.warning(f"Error extracting context from documents in simple mode: {e}")
# Use direct AI call without document generation pipeline
- from modules.datamodels.datamodelAi import AiCallRequest, OperationTypeEnum, ProcessingModeEnum
request = AiCallRequest(
prompt=aiPrompt,
context=context_text if context_text else None,
@@ -170,7 +169,6 @@ async def process(self, parameters: Dict[str, Any]) -> ActionResult:
isImageGeneration = normalized_result_type in imageFormats if normalized_result_type else False
# Build options with correct operationType
- from modules.datamodels.datamodelAi import OperationTypeEnum
# resultFormat in options can be None - formats will be determined by AI if not provided
options = AiCallOptions(
resultFormat=output_format, # Can be None - formats determined by AI
diff --git a/modules/workflows/methods/methodAi/actions/summarizeDocument.py b/modules/workflows/methods/methodAi/actions/summarizeDocument.py
index 4dc7c4ef..e32c1965 100644
--- a/modules/workflows/methods/methodAi/actions/summarizeDocument.py
+++ b/modules/workflows/methods/methodAi/actions/summarizeDocument.py
@@ -3,7 +3,7 @@
import logging
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult
+from modules.datamodels.datamodelChat import ActionResult
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodAi/actions/translateDocument.py b/modules/workflows/methods/methodAi/actions/translateDocument.py
index 07350a54..bb6f8437 100644
--- a/modules/workflows/methods/methodAi/actions/translateDocument.py
+++ b/modules/workflows/methods/methodAi/actions/translateDocument.py
@@ -3,7 +3,7 @@
import logging
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult
+from modules.datamodels.datamodelChat import ActionResult
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodAi/actions/webResearch.py b/modules/workflows/methods/methodAi/actions/webResearch.py
index 753319fe..62b43bce 100644
--- a/modules/workflows/methods/methodAi/actions/webResearch.py
+++ b/modules/workflows/methods/methodAi/actions/webResearch.py
@@ -5,7 +5,7 @@ import logging
import time
import re
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodChatbot/actions/queryDatabase.py b/modules/workflows/methods/methodChatbot/actions/queryDatabase.py
index 75bf8771..ff7e896f 100644
--- a/modules/workflows/methods/methodChatbot/actions/queryDatabase.py
+++ b/modules/workflows/methods/methodChatbot/actions/queryDatabase.py
@@ -11,7 +11,7 @@ import json
import time
from typing import Dict, Any
from modules.workflows.methods.methodBase import action
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
from modules.connectors.connectorPreprocessor import PreprocessorConnector
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodContext/actions/extractContent.py b/modules/workflows/methods/methodContext/actions/extractContent.py
index 5fd926a1..5b90ce13 100644
--- a/modules/workflows/methods/methodContext/actions/extractContent.py
+++ b/modules/workflows/methods/methodContext/actions/extractContent.py
@@ -4,7 +4,7 @@
import logging
import time
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
from modules.datamodels.datamodelDocref import DocumentReferenceList
from modules.datamodels.datamodelExtraction import ExtractionOptions, MergeStrategy, ContentExtracted, ContentPart
diff --git a/modules/workflows/methods/methodContext/actions/getDocumentIndex.py b/modules/workflows/methods/methodContext/actions/getDocumentIndex.py
index 6b4dabe9..9991285b 100644
--- a/modules/workflows/methods/methodContext/actions/getDocumentIndex.py
+++ b/modules/workflows/methods/methodContext/actions/getDocumentIndex.py
@@ -4,7 +4,7 @@
import logging
import json
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodContext/actions/neutralizeData.py b/modules/workflows/methods/methodContext/actions/neutralizeData.py
index c871fa06..8e3b7185 100644
--- a/modules/workflows/methods/methodContext/actions/neutralizeData.py
+++ b/modules/workflows/methods/methodContext/actions/neutralizeData.py
@@ -4,7 +4,7 @@
import logging
import time
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
from modules.datamodels.datamodelDocref import DocumentReferenceList
from modules.datamodels.datamodelExtraction import ContentExtracted, ContentPart
diff --git a/modules/workflows/methods/methodContext/actions/triggerPreprocessingServer.py b/modules/workflows/methods/methodContext/actions/triggerPreprocessingServer.py
index e299d226..2f011a25 100644
--- a/modules/workflows/methods/methodContext/actions/triggerPreprocessingServer.py
+++ b/modules/workflows/methods/methodContext/actions/triggerPreprocessingServer.py
@@ -5,7 +5,7 @@ import logging
import json
import aiohttp
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
from modules.shared.configuration import APP_CONFIG
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodJira/actions/connectJira.py b/modules/workflows/methods/methodJira/actions/connectJira.py
index bd4f666c..45b60cad 100644
--- a/modules/workflows/methods/methodJira/actions/connectJira.py
+++ b/modules/workflows/methods/methodJira/actions/connectJira.py
@@ -5,7 +5,7 @@ import logging
import json
import uuid
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
from modules.shared.configuration import APP_CONFIG
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodJira/actions/createCsvContent.py b/modules/workflows/methods/methodJira/actions/createCsvContent.py
index 3b07ca6a..cbec7960 100644
--- a/modules/workflows/methods/methodJira/actions/createCsvContent.py
+++ b/modules/workflows/methods/methodJira/actions/createCsvContent.py
@@ -9,7 +9,7 @@ import csv as csv_module
from io import StringIO
from datetime import datetime, UTC
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodJira/actions/createExcelContent.py b/modules/workflows/methods/methodJira/actions/createExcelContent.py
index b172140b..631795b3 100644
--- a/modules/workflows/methods/methodJira/actions/createExcelContent.py
+++ b/modules/workflows/methods/methodJira/actions/createExcelContent.py
@@ -9,7 +9,7 @@ import csv as csv_module
from io import BytesIO
from datetime import datetime, UTC
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodJira/actions/exportTicketsAsJson.py b/modules/workflows/methods/methodJira/actions/exportTicketsAsJson.py
index fd1570f3..55d99654 100644
--- a/modules/workflows/methods/methodJira/actions/exportTicketsAsJson.py
+++ b/modules/workflows/methods/methodJira/actions/exportTicketsAsJson.py
@@ -4,7 +4,7 @@
import logging
import json
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodJira/actions/importTicketsFromJson.py b/modules/workflows/methods/methodJira/actions/importTicketsFromJson.py
index 874867b8..b997889e 100644
--- a/modules/workflows/methods/methodJira/actions/importTicketsFromJson.py
+++ b/modules/workflows/methods/methodJira/actions/importTicketsFromJson.py
@@ -4,7 +4,7 @@
import logging
import json
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodJira/actions/mergeTicketData.py b/modules/workflows/methods/methodJira/actions/mergeTicketData.py
index 8333499f..2bd7ab74 100644
--- a/modules/workflows/methods/methodJira/actions/mergeTicketData.py
+++ b/modules/workflows/methods/methodJira/actions/mergeTicketData.py
@@ -4,7 +4,7 @@
import logging
import json
from typing import Dict, Any, List
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodJira/actions/parseCsvContent.py b/modules/workflows/methods/methodJira/actions/parseCsvContent.py
index 650de4ce..bbdc2cc7 100644
--- a/modules/workflows/methods/methodJira/actions/parseCsvContent.py
+++ b/modules/workflows/methods/methodJira/actions/parseCsvContent.py
@@ -6,7 +6,7 @@ import json
import io
import pandas as pd
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodJira/actions/parseExcelContent.py b/modules/workflows/methods/methodJira/actions/parseExcelContent.py
index 9fb0cc3f..5ac4e548 100644
--- a/modules/workflows/methods/methodJira/actions/parseExcelContent.py
+++ b/modules/workflows/methods/methodJira/actions/parseExcelContent.py
@@ -6,7 +6,7 @@ import json
import pandas as pd
from io import BytesIO
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodOutlook/actions/composeAndDraftEmailWithContext.py b/modules/workflows/methods/methodOutlook/actions/composeAndDraftEmailWithContext.py
index 69beed2d..59604896 100644
--- a/modules/workflows/methods/methodOutlook/actions/composeAndDraftEmailWithContext.py
+++ b/modules/workflows/methods/methodOutlook/actions/composeAndDraftEmailWithContext.py
@@ -6,7 +6,7 @@ import json
import base64
import requests
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodOutlook/actions/readEmails.py b/modules/workflows/methods/methodOutlook/actions/readEmails.py
index c64abf18..2d325d9f 100644
--- a/modules/workflows/methods/methodOutlook/actions/readEmails.py
+++ b/modules/workflows/methods/methodOutlook/actions/readEmails.py
@@ -6,7 +6,7 @@ import time
import json
import requests
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodOutlook/actions/searchEmails.py b/modules/workflows/methods/methodOutlook/actions/searchEmails.py
index 4bb1861d..f8831d59 100644
--- a/modules/workflows/methods/methodOutlook/actions/searchEmails.py
+++ b/modules/workflows/methods/methodOutlook/actions/searchEmails.py
@@ -5,7 +5,7 @@ import logging
import json
import requests
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodOutlook/actions/sendDraftEmail.py b/modules/workflows/methods/methodOutlook/actions/sendDraftEmail.py
index 7dff3f3f..9b7fb011 100644
--- a/modules/workflows/methods/methodOutlook/actions/sendDraftEmail.py
+++ b/modules/workflows/methods/methodOutlook/actions/sendDraftEmail.py
@@ -6,7 +6,7 @@ import time
import json
import requests
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodSharepoint/actions/analyzeFolderUsage.py b/modules/workflows/methods/methodSharepoint/actions/analyzeFolderUsage.py
index e0e2b811..a4bf18b6 100644
--- a/modules/workflows/methods/methodSharepoint/actions/analyzeFolderUsage.py
+++ b/modules/workflows/methods/methodSharepoint/actions/analyzeFolderUsage.py
@@ -6,7 +6,7 @@ import time
import json
from datetime import datetime, timezone, timedelta
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodSharepoint/actions/copyFile.py b/modules/workflows/methods/methodSharepoint/actions/copyFile.py
index 418ba477..f149e482 100644
--- a/modules/workflows/methods/methodSharepoint/actions/copyFile.py
+++ b/modules/workflows/methods/methodSharepoint/actions/copyFile.py
@@ -4,7 +4,7 @@
import logging
import json
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodSharepoint/actions/downloadFileByPath.py b/modules/workflows/methods/methodSharepoint/actions/downloadFileByPath.py
index 9cec8d61..c64a6637 100644
--- a/modules/workflows/methods/methodSharepoint/actions/downloadFileByPath.py
+++ b/modules/workflows/methods/methodSharepoint/actions/downloadFileByPath.py
@@ -6,7 +6,7 @@ import json
import base64
import os
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodSharepoint/actions/findDocumentPath.py b/modules/workflows/methods/methodSharepoint/actions/findDocumentPath.py
index 7942ab21..722dbc99 100644
--- a/modules/workflows/methods/methodSharepoint/actions/findDocumentPath.py
+++ b/modules/workflows/methods/methodSharepoint/actions/findDocumentPath.py
@@ -6,7 +6,7 @@ import time
import json
import urllib.parse
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodSharepoint/actions/findSiteByUrl.py b/modules/workflows/methods/methodSharepoint/actions/findSiteByUrl.py
index 063fd3c5..62b6dd94 100644
--- a/modules/workflows/methods/methodSharepoint/actions/findSiteByUrl.py
+++ b/modules/workflows/methods/methodSharepoint/actions/findSiteByUrl.py
@@ -4,7 +4,7 @@
import logging
import json
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodSharepoint/actions/listDocuments.py b/modules/workflows/methods/methodSharepoint/actions/listDocuments.py
index a9b766c1..318271c3 100644
--- a/modules/workflows/methods/methodSharepoint/actions/listDocuments.py
+++ b/modules/workflows/methods/methodSharepoint/actions/listDocuments.py
@@ -6,7 +6,7 @@ import time
import json
import urllib.parse
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodSharepoint/actions/readDocuments.py b/modules/workflows/methods/methodSharepoint/actions/readDocuments.py
index 13c31219..73cdb730 100644
--- a/modules/workflows/methods/methodSharepoint/actions/readDocuments.py
+++ b/modules/workflows/methods/methodSharepoint/actions/readDocuments.py
@@ -6,7 +6,7 @@ import time
import json
import base64
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodSharepoint/actions/uploadDocument.py b/modules/workflows/methods/methodSharepoint/actions/uploadDocument.py
index 469dde0d..e9361853 100644
--- a/modules/workflows/methods/methodSharepoint/actions/uploadDocument.py
+++ b/modules/workflows/methods/methodSharepoint/actions/uploadDocument.py
@@ -6,7 +6,7 @@ import time
import json
import urllib.parse
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/methods/methodSharepoint/actions/uploadFile.py b/modules/workflows/methods/methodSharepoint/actions/uploadFile.py
index bd0618d7..1f469b80 100644
--- a/modules/workflows/methods/methodSharepoint/actions/uploadFile.py
+++ b/modules/workflows/methods/methodSharepoint/actions/uploadFile.py
@@ -5,7 +5,7 @@ import logging
import json
import base64
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionDocument
+from modules.datamodels.datamodelChat import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/processing/core/actionExecutor.py b/modules/workflows/processing/core/actionExecutor.py
index 2d657596..0e4d6ee4 100644
--- a/modules/workflows/processing/core/actionExecutor.py
+++ b/modules/workflows/processing/core/actionExecutor.py
@@ -5,8 +5,8 @@
import logging
from typing import Dict, Any, List
-from modules.aichat.datamodelFeatureAiChat import ActionResult, ActionItem, TaskStep
-from modules.aichat.datamodelFeatureAiChat import ChatWorkflow
+from modules.datamodels.datamodelChat import ActionResult, ActionItem, TaskStep
+from modules.datamodels.datamodelChat import ChatWorkflow
from modules.workflows.processing.shared.methodDiscovery import methods
from modules.workflows.processing.shared.stateTools import checkWorkflowStopped
diff --git a/modules/workflows/processing/core/messageCreator.py b/modules/workflows/processing/core/messageCreator.py
index af9c3f08..a4ae05e9 100644
--- a/modules/workflows/processing/core/messageCreator.py
+++ b/modules/workflows/processing/core/messageCreator.py
@@ -5,8 +5,8 @@
import logging
from typing import Dict, Any, Optional, List
-from modules.aichat.datamodelFeatureAiChat import TaskPlan, TaskStep, ActionResult, ReviewResult
-from modules.aichat.datamodelFeatureAiChat import ChatWorkflow
+from modules.datamodels.datamodelChat import TaskPlan, TaskStep, ActionResult, ReviewResult
+from modules.datamodels.datamodelChat import ChatWorkflow
from modules.workflows.processing.shared.stateTools import checkWorkflowStopped
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/processing/core/taskPlanner.py b/modules/workflows/processing/core/taskPlanner.py
index 62f9a72a..94c695cb 100644
--- a/modules/workflows/processing/core/taskPlanner.py
+++ b/modules/workflows/processing/core/taskPlanner.py
@@ -6,7 +6,7 @@
import json
import logging
from typing import Dict, Any
-from modules.aichat.datamodelFeatureAiChat import TaskStep, TaskContext, TaskPlan
+from modules.datamodels.datamodelChat import TaskStep, TaskContext, TaskPlan
from modules.datamodels.datamodelAi import AiCallOptions, OperationTypeEnum, ProcessingModeEnum, PriorityEnum
from modules.workflows.processing.shared.promptGenerationTaskplan import (
generateTaskPlanningPrompt
@@ -51,7 +51,6 @@ class TaskPlanner:
# Analyze user intent to obtain cleaned user objective for planning
# SKIP intent analysis for AUTOMATION mode - it uses predefined JSON plans
- from modules.aichat.datamodelFeatureAiChat import WorkflowModeEnum
workflowMode = getattr(workflow, 'workflowMode', None)
skipIntentionAnalysis = (workflowMode == WorkflowModeEnum.WORKFLOW_AUTOMATION)
diff --git a/modules/workflows/processing/modes/modeAutomation.py b/modules/workflows/processing/modes/modeAutomation.py
index 084024aa..e3131939 100644
--- a/modules/workflows/processing/modes/modeAutomation.py
+++ b/modules/workflows/processing/modes/modeAutomation.py
@@ -7,11 +7,11 @@ import json
import logging
import uuid
from typing import List, Dict, Any, Optional
-from modules.aichat.datamodelFeatureAiChat import (
+from modules.datamodels.datamodelChat import (
TaskStep, TaskContext, TaskResult, ActionItem, TaskStatus,
TaskPlan, ActionResult
)
-from modules.aichat.datamodelFeatureAiChat import ChatWorkflow
+from modules.datamodels.datamodelChat import ChatWorkflow
from modules.workflows.processing.modes.modeBase import BaseMode
from modules.workflows.processing.shared.stateTools import checkWorkflowStopped
from modules.shared.timeUtils import parseTimestamp
diff --git a/modules/workflows/processing/modes/modeBase.py b/modules/workflows/processing/modes/modeBase.py
index f4533e7d..770c868a 100644
--- a/modules/workflows/processing/modes/modeBase.py
+++ b/modules/workflows/processing/modes/modeBase.py
@@ -6,8 +6,8 @@
from abc import ABC, abstractmethod
import logging
from typing import List, Dict, Any
-from modules.aichat.datamodelFeatureAiChat import TaskStep, TaskContext, TaskResult, ActionItem
-from modules.aichat.datamodelFeatureAiChat import ChatWorkflow
+from modules.datamodels.datamodelChat import TaskStep, TaskContext, TaskResult, ActionItem
+from modules.datamodels.datamodelChat import ChatWorkflow
from modules.workflows.processing.core.taskPlanner import TaskPlanner
from modules.workflows.processing.core.actionExecutor import ActionExecutor
from modules.workflows.processing.core.messageCreator import MessageCreator
diff --git a/modules/workflows/processing/modes/modeDynamic.py b/modules/workflows/processing/modes/modeDynamic.py
index 834353b7..45b92961 100644
--- a/modules/workflows/processing/modes/modeDynamic.py
+++ b/modules/workflows/processing/modes/modeDynamic.py
@@ -9,11 +9,11 @@ import re
import time
from datetime import datetime, timezone
from typing import List, Dict, Any
-from modules.aichat.datamodelFeatureAiChat import (
+from modules.datamodels.datamodelChat import (
TaskStep, TaskContext, TaskResult, ActionItem, TaskStatus,
ActionResult, Observation, ObservationPreview, ReviewResult
)
-from modules.aichat.datamodelFeatureAiChat import ChatWorkflow
+from modules.datamodels.datamodelChat import ChatWorkflow
from modules.workflows.processing.modes.modeBase import BaseMode
from modules.workflows.processing.shared.stateTools import checkWorkflowStopped
from modules.shared.timeUtils import parseTimestamp
@@ -893,7 +893,6 @@ class DynamicMode(BaseMode):
async def _refineDecide(self, context: TaskContext, observation: Observation) -> ReviewResult:
"""Refine: decide continue or stop, with reason"""
# Create proper ReviewContext for extractReviewContent
- from modules.aichat.datamodelFeatureAiChat import ReviewContext
# Convert observation to dict for extractReviewContent (temporary compatibility)
observationDict = {
'success': observation.success,
@@ -1042,7 +1041,6 @@ class DynamicMode(BaseMode):
# Parse response using structured parsing with ReviewResult model
from modules.shared.jsonUtils import parseJsonWithModel
- from modules.aichat.datamodelFeatureAiChat import ReviewResult
if not resp:
return ReviewResult(
diff --git a/modules/workflows/processing/shared/executionState.py b/modules/workflows/processing/shared/executionState.py
index 405aabe1..1cdf0d53 100644
--- a/modules/workflows/processing/shared/executionState.py
+++ b/modules/workflows/processing/shared/executionState.py
@@ -5,7 +5,7 @@
import logging
from typing import List, Optional
-from modules.aichat.datamodelFeatureAiChat import TaskStep, ActionResult, Observation
+from modules.datamodels.datamodelChat import TaskStep, ActionResult, Observation
logger = logging.getLogger(__name__)
diff --git a/modules/workflows/processing/shared/placeholderFactory.py b/modules/workflows/processing/shared/placeholderFactory.py
index b70d632c..136dd2cb 100644
--- a/modules/workflows/processing/shared/placeholderFactory.py
+++ b/modules/workflows/processing/shared/placeholderFactory.py
@@ -348,7 +348,7 @@ def extractReviewContent(context: Any) -> str:
elif hasattr(context, 'observation') and context.observation:
# For observation data, show full content but handle documents specially
# Handle both Pydantic Observation model and dict format
- from modules.aichat.datamodelFeatureAiChat import Observation
+ from modules.datamodels.datamodelChat import Observation
if isinstance(context.observation, Observation):
# Convert Pydantic model to dict
@@ -371,7 +371,7 @@ def extractReviewContent(context: Any) -> str:
# For observation data in stepResult, show full content but handle documents specially
observation = context.stepResult['observation']
# Handle both Pydantic Observation model and dict format
- from modules.aichat.datamodelFeatureAiChat import Observation
+ from modules.datamodels.datamodelChat import Observation
if isinstance(observation, Observation):
# Convert Pydantic model to dict
@@ -452,7 +452,7 @@ def extractLatestRefinementFeedback(context: Any) -> str:
# First check for ERROR level logs in workflow
if hasattr(context, 'workflow') and context.workflow:
try:
- import modules.aichat.interfaceFeatureAiChat as interfaceDbChat
+ import modules.interfaces.interfaceDbChat as interfaceDbChat
from modules.interfaces.interfaceDbApp import getRootInterface
rootInterface = getRootInterface()
interfaceDbChat = interfaceDbChat.getInterface(rootInterface.currentUser)
diff --git a/modules/workflows/processing/shared/promptGenerationActionsDynamic.py b/modules/workflows/processing/shared/promptGenerationActionsDynamic.py
index e8db412d..31878033 100644
--- a/modules/workflows/processing/shared/promptGenerationActionsDynamic.py
+++ b/modules/workflows/processing/shared/promptGenerationActionsDynamic.py
@@ -7,7 +7,7 @@ Handles prompt templates for dynamic mode action handling.
import json
from typing import Any, List
-from modules.aichat.datamodelFeatureAiChat import PromptBundle, PromptPlaceholder
+from modules.datamodels.datamodelChat import PromptBundle, PromptPlaceholder
from modules.workflows.processing.shared.placeholderFactory import (
extractUserPrompt,
extractUserLanguage,
diff --git a/modules/workflows/processing/shared/promptGenerationTaskplan.py b/modules/workflows/processing/shared/promptGenerationTaskplan.py
index 08007833..11a54ca1 100644
--- a/modules/workflows/processing/shared/promptGenerationTaskplan.py
+++ b/modules/workflows/processing/shared/promptGenerationTaskplan.py
@@ -7,7 +7,7 @@ Handles prompt templates and extraction functions for task planning phase.
import logging
from typing import Dict, Any, List
-from modules.aichat.datamodelFeatureAiChat import PromptBundle, PromptPlaceholder
+from modules.datamodels.datamodelChat import PromptBundle, PromptPlaceholder
from modules.workflows.processing.shared.placeholderFactory import (
extractUserPrompt,
extractAvailableDocumentsSummary,
diff --git a/modules/workflows/processing/workflowProcessor.py b/modules/workflows/processing/workflowProcessor.py
index c8f6b09c..c73d280b 100644
--- a/modules/workflows/processing/workflowProcessor.py
+++ b/modules/workflows/processing/workflowProcessor.py
@@ -7,8 +7,8 @@ import logging
import json
from typing import Dict, Any, Optional, List, TYPE_CHECKING
from modules.datamodels import datamodelChat
-from modules.aichat.datamodelFeatureAiChat import TaskStep, TaskContext, TaskPlan, ActionResult, ActionDocument, ChatDocument, ChatMessage
-from modules.aichat.datamodelFeatureAiChat import ChatWorkflow, WorkflowModeEnum
+from modules.datamodels.datamodelChat import TaskStep, TaskContext, TaskPlan, ActionResult, ActionDocument, ChatDocument, ChatMessage
+from modules.datamodels.datamodelChat import ChatWorkflow, WorkflowModeEnum
from modules.workflows.processing.modes.modeBase import BaseMode
from modules.workflows.processing.modes.modeDynamic import DynamicMode
from modules.workflows.processing.modes.modeAutomation import AutomationMode
@@ -468,7 +468,6 @@ class WorkflowProcessor:
)
# Prepare AI call options for fast path (balanced, fast processing)
- from modules.datamodels.datamodelAi import AiCallOptions, AiCallRequest
options = AiCallOptions(
operationType=OperationTypeEnum.DATA_ANALYSE,
@@ -494,7 +493,6 @@ class WorkflowProcessor:
# Create ActionResult with response
# For fast path, we create a simple text document with the response
- from modules.aichat.datamodelFeatureAiChat import ActionDocument
responseDoc = ActionDocument(
documentName="fast_path_response.txt",
@@ -538,8 +536,6 @@ class WorkflowProcessor:
UnderstandingResult with all understanding components
"""
try:
- from modules.datamodels.datamodelWorkflow import UnderstandingResult, TaskDefinition
- from modules.shared.jsonUtils import parseJsonWithModel
# Ensure AI service is initialized
await self.services.ai.ensureAiObjectsInitialized()
@@ -600,7 +596,6 @@ class WorkflowProcessor:
except Exception as e:
logger.error(f"Error in initialUnderstanding: {str(e)}")
# Return minimal UnderstandingResult on error
- from modules.datamodels.datamodelWorkflow import UnderstandingResult
return UnderstandingResult(
parameters={"language": context.userLanguage},
intention={"primaryGoal": context.originalPrompt},
@@ -626,8 +621,6 @@ class WorkflowProcessor:
ChatMessage with persisted documents
"""
try:
- from modules.aichat.datamodelFeatureAiChat import ChatMessage, ChatDocument, ActionDocument
- from modules.workflows.processing.shared.stateTools import checkWorkflowStopped
# Check workflow status
checkWorkflowStopped(self.services)
diff --git a/modules/workflows/workflowManager.py b/modules/workflows/workflowManager.py
index 417bb384..d0c35bf1 100644
--- a/modules/workflows/workflowManager.py
+++ b/modules/workflows/workflowManager.py
@@ -6,14 +6,14 @@ import uuid
import asyncio
import json
-from modules.aichat.datamodelFeatureAiChat import (
+from modules.datamodels.datamodelChat import (
UserInputRequest,
ChatMessage,
ChatWorkflow,
ChatDocument,
WorkflowModeEnum
)
-from modules.aichat.datamodelFeatureAiChat import TaskContext
+from modules.datamodels.datamodelChat import TaskContext
from modules.workflows.processing.workflowProcessor import WorkflowProcessor
from modules.workflows.processing.shared.stateTools import WorkflowStoppedException, checkWorkflowStopped
@@ -606,7 +606,6 @@ The following is the user's original input message. Analyze intent, normalize th
# Collect file info
fileInfo = self.services.chat.getFileInfo(fileItem.id)
- from modules.aichat.datamodelFeatureAiChat import ChatDocument
doc = ChatDocument(
fileId=fileItem.id,
fileName=fileInfo.get("fileName", fileName) if fileInfo else fileName,
@@ -792,7 +791,6 @@ The following is the user's original input message. Analyze intent, normalize th
# Collect file info
fileInfo = self.services.chat.getFileInfo(fileItem.id)
- from modules.aichat.datamodelFeatureAiChat import ChatDocument
doc = ChatDocument(
fileId=fileItem.id,
fileName=fileInfo.get("fileName", fileName) if fileInfo else fileName,
@@ -921,7 +919,6 @@ The following is the user's original input message. Analyze intent, normalize th
# Persist task result for cross-task/round document references
# Convert ChatTaskResult to WorkflowTaskResult for persistence
from modules.datamodels.datamodelWorkflow import TaskResult as WorkflowTaskResult
- from modules.aichat.datamodelFeatureAiChat import ActionResult
# Get final ActionResult from task execution (last action result)
finalActionResult = None
diff --git a/scripts/.$import_diagram.drawio.bkp b/scripts/.$import_diagram.drawio.bkp
new file mode 100644
index 00000000..588285b0
--- /dev/null
+++ b/scripts/.$import_diagram.drawio.bkp
@@ -0,0 +1,2723 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/scripts/.$import_diagram_containers.drawio.bkp b/scripts/.$import_diagram_containers.drawio.bkp
new file mode 100644
index 00000000..cad95eef
--- /dev/null
+++ b/scripts/.$import_diagram_containers.drawio.bkp
@@ -0,0 +1,317 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/scripts/function_imports_analysis.txt b/scripts/function_imports_analysis.txt
new file mode 100644
index 00000000..23f26c9f
--- /dev/null
+++ b/scripts/function_imports_analysis.txt
@@ -0,0 +1,435 @@
+================================================================================
+FUNCTION IMPORTS ANALYSIS
+================================================================================
+
+Total function imports (internal modules): 226
+ - CIRCULAR (must stay): 4
+ - REDUNDANT (can remove): 0
+ - MOVABLE (can move): 222
+
+
+================================================================================
+MOVABLE TO HEADER (grouped by source module)
+These imports could potentially be moved to the module header.
+================================================================================
+
+gateway.app
+-----------
+ [lifespan] modules.shared.auditLogger
+
+gateway.modules.aichat.datamodelFeatureAiChat
+---------------------------------------------
+ [updateFromSelection] modules.datamodels.datamodelWorkflow
+
+gateway.modules.aichat.interfaceFeatureAiChat
+---------------------------------------------
+ [_enrichAutomationsWithUserAndMandate] modules.interfaces.interfaceDbApp
+ [storeDebugMessageAndDocuments] modules.interfaces.interfaceDbManagement
+ [setUserContext] modules.security.rootAccess
+ [_notifyAutomationChanged] modules.shared.callbackRegistry
+ [storeDebugMessageAndDocuments] modules.shared.debugLogger
+
+gateway.modules.aichat.serviceAi.mainServiceAi
+----------------------------------------------
+ [renderResult] modules.aichat.serviceGeneration.mainServiceGeneration
+ [_handleCodeGeneration] modules.aichat.serviceGeneration.paths.codePath
+ [_handleDocumentGeneration] modules.aichat.serviceGeneration.paths.documentPath
+ [_handleImageGeneration] modules.aichat.serviceGeneration.paths.imagePath
+
+gateway.modules.aichat.serviceAi.subContentExtraction
+-----------------------------------------------------
+ [extractTextFromImage] modules.datamodels.datamodelAi
+ [processTextContentWithAi] modules.datamodels.datamodelAi
+
+gateway.modules.aichat.serviceAi.subJsonResponseHandling
+--------------------------------------------------------
+ [mergeFragmentIntoSection] modules.shared.debugLogger
+
+gateway.modules.aichat.serviceAi.subStructureFilling
+----------------------------------------------------
+ [_getAcceptedSectionTypesForFormat] modules.aichat.serviceGeneration.renderers.registry
+ [_getAcceptedSectionTypesForFormat] modules.datamodels.datamodelJson
+ [buildSectionPromptWithContinuation] modules.shared.jsonContinuation
+ [_extractAndMergeMultipleJsonBlocks] modules.shared.jsonUtils
+ [_processAiResponseForSection] modules.shared.jsonUtils
+ [_processSingleSection] modules.shared.jsonUtils
+
+gateway.modules.aichat.serviceAi.subStructureGeneration
+-------------------------------------------------------
+ [generateStructure] modules.aichat.serviceGeneration.renderers.registry
+ [generateStructure] modules.shared
+ [generateStructure] modules.shared.jsonContinuation
+
+gateway.modules.aichat.serviceExtraction.mainServiceExtraction
+--------------------------------------------------------------
+ [extractContent] modules.interfaces.interfaceDbManagement
+ [extractContent] modules.shared.debugLogger
+
+gateway.modules.aichat.serviceExtraction.subPromptBuilderExtraction
+-------------------------------------------------------------------
+ [buildExtractionPrompt] modules.shared.debugLogger
+
+gateway.modules.aichat.serviceGeneration.mainServiceGeneration
+--------------------------------------------------------------
+ [getAdaptiveExtractionPrompt] modules.aichat.serviceExtraction.subPromptBuilderExtraction
+ [renderReport] modules.aichat.serviceGeneration.renderers.registry
+ [generateDocumentWithTwoPhases] modules.aichat.serviceGeneration.subContentGenerator
+ [generateDocumentWithTwoPhases] modules.aichat.serviceGeneration.subStructureGenerator
+
+gateway.modules.aichat.serviceGeneration.paths.codePath
+-------------------------------------------------------
+ [_getCodeRenderer] modules.aichat.serviceGeneration.renderers.registry
+ [generateCode] modules.datamodels.datamodelDocument
+ [_generateCodeStructure] modules.shared.jsonContinuation
+ [_generateSingleFileContent] modules.shared.jsonContinuation
+
+gateway.modules.aichat.serviceGeneration.renderers.rendererDocx
+---------------------------------------------------------------
+ [getAcceptedSectionTypes] modules.datamodels.datamodelJson
+
+gateway.modules.aichat.serviceGeneration.renderers.rendererHtml
+---------------------------------------------------------------
+ [getAcceptedSectionTypes] modules.datamodels.datamodelJson
+
+gateway.modules.aichat.serviceGeneration.renderers.rendererImage
+----------------------------------------------------------------
+ [_compressPromptWithAi] modules.datamodels.datamodelAi
+ [_generateAiImage] modules.datamodels.datamodelAi
+
+gateway.modules.aichat.serviceGeneration.renderers.rendererJson
+---------------------------------------------------------------
+ [getAcceptedSectionTypes] modules.datamodels.datamodelJson
+
+gateway.modules.aichat.serviceGeneration.renderers.rendererMarkdown
+-------------------------------------------------------------------
+ [getAcceptedSectionTypes] modules.datamodels.datamodelJson
+
+gateway.modules.aichat.serviceGeneration.renderers.rendererPdf
+--------------------------------------------------------------
+ [_getAiStylesWithPdfColors] modules.datamodels.datamodelAi
+ [getAcceptedSectionTypes] modules.datamodels.datamodelJson
+
+gateway.modules.aichat.serviceGeneration.renderers.rendererPptx
+---------------------------------------------------------------
+ [getAcceptedSectionTypes] modules.datamodels.datamodelJson
+
+gateway.modules.aichat.serviceGeneration.renderers.rendererText
+---------------------------------------------------------------
+ [getAcceptedSectionTypes] modules.datamodels.datamodelJson
+
+gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx
+---------------------------------------------------------------
+ [_getAiStylesWithExcelColors] modules.datamodels.datamodelAi
+ [getAcceptedSectionTypes] modules.datamodels.datamodelJson
+
+gateway.modules.aichat.serviceGeneration.subContentGenerator
+------------------------------------------------------------
+ [_generateImageSection] modules.datamodels.datamodelAi
+ [_generateSimpleSection] modules.datamodels.datamodelAi
+ [_generateSimpleSection] modules.shared.jsonUtils
+
+gateway.modules.aichat.serviceGeneration.subStructureGenerator
+--------------------------------------------------------------
+ [generateStructure] modules.datamodels.datamodelAi
+
+gateway.modules.auth.authentication
+-----------------------------------
+ [requireSysAdmin] modules.shared.auditLogger
+
+gateway.modules.auth.tokenManager
+---------------------------------
+ [getFreshToken] modules.interfaces.interfaceDbApp
+ [getFreshToken] modules.security.rootAccess
+
+gateway.modules.auth.tokenRefreshService
+----------------------------------------
+ [_refresh_google_token] modules.auth.tokenManager
+ [_refresh_microsoft_token] modules.auth.tokenManager
+ [proactive_refresh] modules.interfaces.interfaceDbApp
+ [refresh_expired_tokens] modules.interfaces.interfaceDbApp
+ [proactive_refresh] modules.security.rootAccess
+ [refresh_expired_tokens] modules.security.rootAccess
+
+gateway.modules.features.automation.routeFeatureAutomation
+----------------------------------------------------------
+ [execute_automation] modules.services
+
+gateway.modules.features.chatbot.datamodelFeatureChatbot
+--------------------------------------------------------
+ [updateFromSelection] modules.datamodels.datamodelWorkflow
+
+gateway.modules.features.chatbot.interfaceFeatureChatbot
+--------------------------------------------------------
+ [createLog] modules.features.chatbot.eventManager
+ [createMessage] modules.features.chatbot.eventManager
+ [_enrichAutomationsWithUserAndMandate] modules.interfaces.interfaceDbApp
+ [storeDebugMessageAndDocuments] modules.interfaces.interfaceDbManagement
+ [setUserContext] modules.security.rootAccess
+ [_notifyAutomationChanged] modules.shared.callbackRegistry
+ [storeDebugMessageAndDocuments] modules.shared.debugLogger
+ [deleteAutomationDefinition] modules.shared.eventManagement
+
+gateway.modules.features.chatbot.mainChatbot
+--------------------------------------------
+ [_convert_file_ids_to_document_references] modules.interfaces.interfaceRbac
+
+gateway.modules.features.neutralizer.mainNeutralizePlayground
+-------------------------------------------------------------
+ [processSharepointFiles] modules.services.serviceSharepoint.mainServiceSharepoint
+
+gateway.modules.features.realestate.interfaceFeatureRealEstate
+--------------------------------------------------------------
+ [setUserContext] modules.security.rootAccess
+
+gateway.modules.features.realestate.mainRealEstate
+--------------------------------------------------
+ [executeIntentBasedOperation] modules.features.realestate.datamodelFeatureRealEstate
+
+gateway.modules.features.trustee.interfaceFeatureTrustee
+--------------------------------------------------------
+ [setUserContext] modules.security.rootAccess
+
+gateway.modules.interfaces.interfaceBootstrap
+---------------------------------------------
+ [_applyDatabaseOptimizations] modules.shared.dbMultiTenantOptimizations
+
+gateway.modules.interfaces.interfaceDbApp
+-----------------------------------------
+ [getRootInterface] modules.security.rootAccess
+
+gateway.modules.interfaces.interfaceDbManagement
+------------------------------------------------
+ [_initializeStandardPrompts] modules.interfaces.interfaceDbApp
+ [_initializeStandardPrompts] modules.security.rootAccess
+ [setUserContext] modules.security.rootAccess
+
+gateway.modules.interfaces.interfaceFeatures
+--------------------------------------------
+ [syncRolesFromTemplate] modules.datamodels.datamodelMembership
+
+gateway.modules.interfaces.interfaceRbac
+----------------------------------------
+ [getRecordsetWithRBAC] modules.connectors.connectorDbPostgre
+
+gateway.modules.interfaces.interfaceTicketObjects
+-------------------------------------------------
+ [createTicketInterfaceByType] modules.connectors.connectorTicketsClickup
+ [createTicketInterfaceByType] modules.connectors.connectorTicketsJira
+
+gateway.modules.routes.routeAdminAutomationEvents
+-------------------------------------------------
+ [sync_all_automation_events] modules.interfaces.interfaceDbApp
+ [sync_all_automation_events] modules.services
+ [get_all_automation_events] modules.shared.eventManagement
+ [remove_event] modules.shared.eventManagement
+ [sync_all_automation_events] modules.workflows.automation
+
+gateway.modules.routes.routeAdminFeatures
+-----------------------------------------
+ [_getInstancePermissions] modules.datamodels.datamodelMembership
+ [_getUserRoleInInstance] modules.datamodels.datamodelMembership
+ [addUserToFeatureInstance] modules.datamodels.datamodelMembership
+ [listFeatureInstanceUsers] modules.datamodels.datamodelMembership
+ [removeUserFromFeatureInstance] modules.datamodels.datamodelMembership
+ [updateFeatureInstanceUserRoles] modules.datamodels.datamodelMembership
+ [_getInstancePermissions] modules.datamodels.datamodelRbac
+ [_getUserRoleInInstance] modules.datamodels.datamodelRbac
+ [_hasMandateAdminRole] modules.datamodels.datamodelRbac
+ [getFeatureInstanceAvailableRoles] modules.datamodels.datamodelRbac
+ [listFeatureInstanceUsers] modules.datamodels.datamodelRbac
+
+gateway.modules.routes.routeDataUsers
+-------------------------------------
+ [delete_user] modules.datamodels.datamodelMembership
+ [get_user] modules.datamodels.datamodelMembership
+ [reset_user_password] modules.datamodels.datamodelMembership
+ [sendPasswordLink] modules.datamodels.datamodelMembership
+ [update_user] modules.datamodels.datamodelMembership
+ [sendPasswordLink] modules.services
+ [change_password] modules.shared.auditLogger
+ [reset_user_password] modules.shared.auditLogger
+ [sendPasswordLink] modules.shared.auditLogger
+ [sendPasswordLink] modules.shared.configuration
+
+gateway.modules.routes.routeDataWorkflows
+-----------------------------------------
+ [get_action_schema] modules.services
+ [get_all_actions] modules.services
+ [get_method_actions] modules.services
+ [get_action_schema] modules.workflows.processing.shared.methodDiscovery
+ [get_all_actions] modules.workflows.processing.shared.methodDiscovery
+ [get_method_actions] modules.workflows.processing.shared.methodDiscovery
+
+gateway.modules.routes.routeGdpr
+--------------------------------
+ [exportUserData] modules.datamodels.datamodelFeatures
+ [deleteAccount] modules.datamodels.datamodelInvitation
+ [exportUserData] modules.datamodels.datamodelInvitation
+ [deleteAccount] modules.datamodels.datamodelMembership
+ [exportPortableData] modules.datamodels.datamodelMembership
+ [exportUserData] modules.datamodels.datamodelMembership
+ [deleteAccount] modules.datamodels.datamodelSecurity
+
+gateway.modules.routes.routeInvitations
+---------------------------------------
+ [createInvitation] modules.datamodels.datamodelFeatures
+ [_hasMandateAdminRole] modules.datamodels.datamodelRbac
+ [_isInstanceRole] modules.datamodels.datamodelRbac
+ [createInvitation] modules.datamodels.datamodelRbac
+ [registerAndAcceptInvitation] modules.security.passwordUtils
+ [createInvitation] modules.shared.configuration
+ [listInvitations] modules.shared.configuration
+
+gateway.modules.routes.routeMessaging
+-------------------------------------
+ [_hasTriggerPermission] modules.interfaces.interfaceDbApp
+ [triggerSubscription] modules.services
+
+gateway.modules.routes.routeSecurityAdmin
+-----------------------------------------
+ [revoke_tokens_by_mandate] modules.datamodels.datamodelMembership
+
+gateway.modules.routes.routeSecurityGoogle
+------------------------------------------
+ [auth_callback] modules.datamodels.datamodelSecurity
+ [logout] modules.shared.auditLogger
+
+gateway.modules.routes.routeSecurityLocal
+-----------------------------------------
+ [_sendAuthEmail] modules.datamodels.datamodelMessaging
+ [_sendAuthEmail] modules.interfaces.interfaceMessaging
+ [login] modules.shared.auditLogger
+ [logout] modules.shared.auditLogger
+ [passwordReset] modules.shared.auditLogger
+
+gateway.modules.routes.routeSecurityMsft
+----------------------------------------
+ [logout] modules.shared.auditLogger
+
+gateway.modules.security.rootAccess
+-----------------------------------
+ [_ensureBootstrap] modules.interfaces.interfaceBootstrap
+
+gateway.modules.services.__init__
+---------------------------------
+ [__init__] modules.interfaces.interfaceDbApp
+ [__init__] modules.interfaces.interfaceDbManagement
+
+gateway.modules.services.serviceChat.mainServiceChat
+----------------------------------------------------
+ [getChatDocumentsFromDocumentList] modules.datamodels.datamodelDocref
+
+gateway.modules.services.serviceUtils.mainServiceUtils
+------------------------------------------------------
+ [storeDebugMessageAndDocuments] modules.aichat.interfaceFeatureAiChat
+ [debugLogToFile] modules.shared.debugLogger
+ [writeDebugArtifact] modules.shared.debugLogger
+ [writeDebugFile] modules.shared.debugLogger
+
+gateway.modules.shared.auditLogger
+----------------------------------
+ [_ensureInitialized] modules.datamodels.datamodelAudit
+ [cleanupOldEntries] modules.datamodels.datamodelAudit
+ [getAuditLogs] modules.datamodels.datamodelAudit
+ [logEvent] modules.datamodels.datamodelAudit
+ [registerAuditLogCleanupScheduler] modules.shared.eventManagement
+
+gateway.modules.shared.debugLogger
+----------------------------------
+ [debugLogToFile] modules.shared.timeUtils
+
+gateway.modules.shared.jsonUtils
+--------------------------------
+ [buildContinuationContext] modules.shared.jsonContinuation
+
+gateway.modules.workflows.automation.subAutomationSchedule
+----------------------------------------------------------
+ [start] modules.shared.callbackRegistry
+ [start] modules.workflows.automation
+
+gateway.modules.workflows.methods.methodAi.actions.generateCode
+---------------------------------------------------------------
+ [generateCode] modules.datamodels.datamodelDocref
+
+gateway.modules.workflows.methods.methodAi.actions.generateDocument
+-------------------------------------------------------------------
+ [generateDocument] modules.datamodels.datamodelDocref
+
+gateway.modules.workflows.methods.methodAi.actions.process
+----------------------------------------------------------
+ [process] modules.datamodels.datamodelDocref
+ [process] modules.datamodels.datamodelWorkflow
+
+gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase
+---------------------------------------------------------------------
+ [queryDatabase] modules.datamodels.datamodelDocref
+
+gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext
+---------------------------------------------------------------------------------------
+ [composeAndDraftEmailWithContext] modules.datamodels.datamodelDocref
+
+gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail
+----------------------------------------------------------------------
+ [sendDraftEmail] modules.datamodels.datamodelDocref
+
+gateway.modules.workflows.methods.methodSharepoint.actions.copyFile
+-------------------------------------------------------------------
+ [copyFile] modules.datamodels.datamodelDocref
+
+gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath
+-----------------------------------------------------------------------------
+ [downloadFileByPath] modules.datamodels.datamodelDocref
+
+gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile
+---------------------------------------------------------------------
+ [uploadFile] modules.datamodels.datamodelDocref
+
+gateway.modules.workflows.methods.methodSharepoint.helpers.documentParsing
+--------------------------------------------------------------------------
+ [parseDocumentListForFolder] modules.datamodels.datamodelDocref
+ [parseDocumentListForFoundDocuments] modules.datamodels.datamodelDocref
+
+gateway.modules.workflows.processing.core.actionExecutor
+--------------------------------------------------------
+ [_createActionCompletionMessage] modules.workflows.processing.core.messageCreator
+
+gateway.modules.workflows.processing.modes.modeDynamic
+------------------------------------------------------
+ [_actExecute] modules.datamodels.datamodelAi
+ [_planSelect] modules.datamodels.datamodelAi
+ [_refineDecide] modules.datamodels.datamodelAi
+ [_actExecute] modules.datamodels.datamodelDocref
+ [_planSelect] modules.datamodels.datamodelDocref
+ [_actExecute] modules.datamodels.datamodelWorkflow
+ [_planSelect] modules.datamodels.datamodelWorkflow
+ [_actExecute] modules.shared.jsonUtils
+ [_planSelect] modules.shared.jsonUtils
+ [_refineDecide] modules.shared.jsonUtils
+ [_actExecute] modules.workflows.processing.shared.methodDiscovery
+
+gateway.modules.workflows.processing.shared.placeholderFactory
+--------------------------------------------------------------
+ [extractReviewContent] modules.aichat.datamodelFeatureAiChat
+ [extractLatestRefinementFeedback] modules.aichat.interfaceFeatureAiChat
+ [extractLatestRefinementFeedback] modules.interfaces.interfaceDbApp
+
+gateway.modules.workflows.workflowManager
+-----------------------------------------
+ [_executeTasks] modules.datamodels.datamodelWorkflow
+ [workflowStart] modules.workflows.processing.shared.methodDiscovery
+ [_checkIfHistoryAvailable] modules.workflows.processing.shared.placeholderFactory
+
+
+================================================================================
+CIRCULAR DEPENDENCY (must stay in function)
+================================================================================
+
+gateway.modules.shared.auditLogger
+----------------------------------
+ [_ensureInitialized] modules.connectors.connectorDbPostgre
+
+gateway.modules.shared.configuration
+------------------------------------
+ [decryptValue] modules.shared.auditLogger
+ [encryptValue] modules.shared.auditLogger
+ [get] modules.shared.auditLogger
\ No newline at end of file
diff --git a/scripts/import_analysis.csv b/scripts/import_analysis.csv
index 00533906..03015969 100644
--- a/scripts/import_analysis.csv
+++ b/scripts/import_analysis.csv
@@ -18,6 +18,7 @@ gateway.app,modules.routes.routeAdminFeatures,header,Yes
gateway.app,modules.routes.routeAdminRbacExport,header,Yes
gateway.app,modules.routes.routeAdminRbacRules,header,Yes
gateway.app,modules.routes.routeAttributes,header,Yes
+gateway.app,modules.routes.routeChat,header,Yes
gateway.app,modules.routes.routeDataConnections,header,Yes
gateway.app,modules.routes.routeDataFiles,header,Yes
gateway.app,modules.routes.routeDataMandates,header,Yes
@@ -41,680 +42,75 @@ gateway.app,os,header,Yes
gateway.app,sys,header,Yes
gateway.app,unicodedata,header,Yes
gateway.app,urllib.parse,header,Yes
-gateway.modules.aichat.aicore.aicoreBase,abc,header,Yes
-gateway.modules.aichat.aicore.aicoreBase,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.aicore.aicoreBase,time,function getCachedModels,Yes
-gateway.modules.aichat.aicore.aicoreBase,typing,header,Yes
-gateway.modules.aichat.aicore.aicoreModelRegistry,(relative) .aicoreBase,header,Yes
-gateway.modules.aichat.aicore.aicoreModelRegistry,importlib,header,Yes
-gateway.modules.aichat.aicore.aicoreModelRegistry,logging,header,Yes
-gateway.modules.aichat.aicore.aicoreModelRegistry,modules.connectors.connectorDbPostgre,header,Yes
-gateway.modules.aichat.aicore.aicoreModelRegistry,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.aicore.aicoreModelRegistry,modules.datamodels.datamodelUam,header,Yes
-gateway.modules.aichat.aicore.aicoreModelRegistry,modules.security.rbac,header,Yes
-gateway.modules.aichat.aicore.aicoreModelRegistry,modules.security.rbacHelpers,header,Yes
-gateway.modules.aichat.aicore.aicoreModelRegistry,os,header,Yes
-gateway.modules.aichat.aicore.aicoreModelRegistry,time,function refreshModels,Yes
-gateway.modules.aichat.aicore.aicoreModelRegistry,typing,header,Yes
-gateway.modules.aichat.aicore.aicoreModelSelector,logging,header,Yes
-gateway.modules.aichat.aicore.aicoreModelSelector,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.aicore.aicoreModelSelector,typing,header,Yes
-gateway.modules.aichat.aicore.aicorePluginAnthropic,(relative) .aicoreBase,header,Yes
-gateway.modules.aichat.aicore.aicorePluginAnthropic,base64,function callAiImage,Yes
-gateway.modules.aichat.aicore.aicorePluginAnthropic,fastapi,header,Yes
-gateway.modules.aichat.aicore.aicorePluginAnthropic,httpx,header,Yes
-gateway.modules.aichat.aicore.aicorePluginAnthropic,logging,header,Yes
-gateway.modules.aichat.aicore.aicorePluginAnthropic,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.aicore.aicorePluginAnthropic,modules.shared.configuration,header,Yes
-gateway.modules.aichat.aicore.aicorePluginAnthropic,os,header,Yes
-gateway.modules.aichat.aicore.aicorePluginAnthropic,time,function callAiImage,Yes
-gateway.modules.aichat.aicore.aicorePluginAnthropic,typing,header,Yes
-gateway.modules.aichat.aicore.aicorePluginInternal,(relative) .aicoreBase,header,Yes
-gateway.modules.aichat.aicore.aicorePluginInternal,logging,header,Yes
-gateway.modules.aichat.aicore.aicorePluginInternal,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.aicore.aicorePluginInternal,typing,header,Yes
-gateway.modules.aichat.aicore.aicorePluginOpenai,(relative) .aicoreBase,header,Yes
-gateway.modules.aichat.aicore.aicorePluginOpenai,fastapi,header,Yes
-gateway.modules.aichat.aicore.aicorePluginOpenai,httpx,header,Yes
-gateway.modules.aichat.aicore.aicorePluginOpenai,json,function generateImage,Yes
-gateway.modules.aichat.aicore.aicorePluginOpenai,logging,header,Yes
-gateway.modules.aichat.aicore.aicorePluginOpenai,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.aicore.aicorePluginOpenai,modules.datamodels.datamodelAi,function generateImage,Yes
-gateway.modules.aichat.aicore.aicorePluginOpenai,modules.shared.configuration,header,Yes
-gateway.modules.aichat.aicore.aicorePluginOpenai,typing,header,Yes
-gateway.modules.aichat.aicore.aicorePluginPerplexity,(relative) .aicoreBase,header,Yes
-gateway.modules.aichat.aicore.aicorePluginPerplexity,fastapi,header,Yes
-gateway.modules.aichat.aicore.aicorePluginPerplexity,httpx,header,Yes
-gateway.modules.aichat.aicore.aicorePluginPerplexity,json,function webSearch,Yes
-gateway.modules.aichat.aicore.aicorePluginPerplexity,json,function webCrawl,Yes
-gateway.modules.aichat.aicore.aicorePluginPerplexity,json,function webCrawl,Yes
-gateway.modules.aichat.aicore.aicorePluginPerplexity,logging,header,Yes
-gateway.modules.aichat.aicore.aicorePluginPerplexity,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.aicore.aicorePluginPerplexity,modules.datamodels.datamodelAi,function _testConnection,Yes
-gateway.modules.aichat.aicore.aicorePluginPerplexity,modules.datamodels.datamodelTools,header,Yes
-gateway.modules.aichat.aicore.aicorePluginPerplexity,modules.shared.configuration,header,Yes
-gateway.modules.aichat.aicore.aicorePluginPerplexity,typing,header,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,(relative) .aicoreBase,header,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,asyncio,header,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,dataclasses,header,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,json,function webSearch,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,json,function webSearch,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,json,function webCrawl,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,json,function webCrawl,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,json,function webSearch,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,json,function webCrawl,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,logging,header,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,modules.datamodels.datamodelTools,header,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,modules.shared.configuration,header,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,re,header,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,re,function _cleanUrl,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,tavily,header,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,typing,header,Yes
-gateway.modules.aichat.aicore.aicorePluginTavily,urllib.parse,function _normalizeUrl,Yes
-gateway.modules.aichat.datamodelFeatureAiChat,enum,header,Yes
-gateway.modules.aichat.datamodelFeatureAiChat,modules.datamodels.datamodelWorkflow,function updateFromSelection,Yes
-gateway.modules.aichat.datamodelFeatureAiChat,modules.shared.attributeUtils,header,Yes
-gateway.modules.aichat.datamodelFeatureAiChat,modules.shared.timeUtils,header,Yes
-gateway.modules.aichat.datamodelFeatureAiChat,pydantic,header,Yes
-gateway.modules.aichat.datamodelFeatureAiChat,typing,header,Yes
-gateway.modules.aichat.datamodelFeatureAiChat,uuid,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,(relative) .datamodelFeatureAiChat,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,asyncio,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,datetime,function storeDebugMessageAndDocuments,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,json,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,logging,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,math,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,modules.connectors.connectorDbPostgre,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,modules.datamodels.datamodelPagination,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,modules.datamodels.datamodelRbac,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,modules.datamodels.datamodelUam,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,modules.datamodels.datamodelUam,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,modules.interfaces.interfaceDbApp,function _enrichAutomationsWithUserAndMandate,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,modules.interfaces.interfaceDbManagement,function storeDebugMessageAndDocuments,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,modules.interfaces.interfaceRbac,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,modules.security.rbac,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,modules.security.rootAccess,function setUserContext,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,modules.shared.callbackRegistry,function _notifyAutomationChanged,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,modules.shared.configuration,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,modules.shared.debugLogger,function storeDebugMessageAndDocuments,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,modules.shared.timeUtils,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,os,function storeDebugMessageAndDocuments,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,typing,header,Yes
-gateway.modules.aichat.interfaceFeatureAiChat,uuid,header,Yes
-gateway.modules.aichat.mainAiChat,(relative) .aicore.aicoreModelRegistry,function onStart,Yes
-gateway.modules.aichat.mainAiChat,logging,header,Yes
-gateway.modules.aichat.mainAiChat,typing,header,Yes
-gateway.modules.aichat.routeFeatureAiChat,(relative) .,header,Yes
-gateway.modules.aichat.routeFeatureAiChat,(relative) .datamodelFeatureAiChat,header,Yes
-gateway.modules.aichat.routeFeatureAiChat,fastapi,header,Yes
-gateway.modules.aichat.routeFeatureAiChat,logging,header,Yes
-gateway.modules.aichat.routeFeatureAiChat,modules.auth,header,Yes
-gateway.modules.aichat.routeFeatureAiChat,modules.workflows.automation,header,Yes
-gateway.modules.aichat.routeFeatureAiChat,typing,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,(relative) .subAiCallLooping,function _initializeSubmodules,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,(relative) .subContentExtraction,function _initializeSubmodules,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,(relative) .subDocumentIntents,function _initializeSubmodules,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,(relative) .subJsonResponseHandling,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,(relative) .subResponseParsing,function _initializeSubmodules,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,(relative) .subStructureFilling,function _initializeSubmodules,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,(relative) .subStructureGeneration,function _initializeSubmodules,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,base64,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,json,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,logging,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,modules.aichat.serviceExtraction.mainServiceExtraction,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,modules.aichat.serviceGeneration.mainServiceGeneration,function renderResult,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,modules.aichat.serviceGeneration.paths.codePath,function _handleCodeGeneration,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,modules.aichat.serviceGeneration.paths.documentPath,function _handleDocumentGeneration,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,modules.aichat.serviceGeneration.paths.imagePath,function _handleImageGeneration,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,modules.datamodels.datamodelWorkflow,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,modules.interfaces.interfaceAiObjects,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,modules.shared.jsonUtils,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,re,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,time,header,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,time,function _handleDataExtraction,Yes
-gateway.modules.aichat.serviceAi.mainServiceAi,typing,header,Yes
-gateway.modules.aichat.serviceAi.subAiCallLooping,(relative) .subJsonResponseHandling,header,Yes
-gateway.modules.aichat.serviceAi.subAiCallLooping,(relative) .subLoopingUseCases,header,Yes
-gateway.modules.aichat.serviceAi.subAiCallLooping,json,header,Yes
-gateway.modules.aichat.serviceAi.subAiCallLooping,logging,header,Yes
-gateway.modules.aichat.serviceAi.subAiCallLooping,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.serviceAi.subAiCallLooping,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceAi.subAiCallLooping,modules.shared.jsonContinuation,header,Yes
-gateway.modules.aichat.serviceAi.subAiCallLooping,modules.shared.jsonUtils,header,Yes
-gateway.modules.aichat.serviceAi.subAiCallLooping,modules.shared.jsonUtils,header,Yes
-gateway.modules.aichat.serviceAi.subAiCallLooping,modules.shared.jsonUtils,header,Yes
-gateway.modules.aichat.serviceAi.subAiCallLooping,modules.shared.jsonUtils,header,Yes
-gateway.modules.aichat.serviceAi.subAiCallLooping,modules.workflows.processing.shared.stateTools,header,Yes
-gateway.modules.aichat.serviceAi.subAiCallLooping,typing,header,Yes
-gateway.modules.aichat.serviceAi.subContentExtraction,base64,header,Yes
-gateway.modules.aichat.serviceAi.subContentExtraction,json,header,Yes
-gateway.modules.aichat.serviceAi.subContentExtraction,logging,header,Yes
-gateway.modules.aichat.serviceAi.subContentExtraction,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.aichat.serviceAi.subContentExtraction,modules.datamodels.datamodelAi,function extractTextFromImage,Yes
-gateway.modules.aichat.serviceAi.subContentExtraction,modules.datamodels.datamodelAi,function processTextContentWithAi,Yes
-gateway.modules.aichat.serviceAi.subContentExtraction,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceAi.subContentExtraction,modules.datamodels.datamodelExtraction,function extractAndPrepareContent,Yes
-gateway.modules.aichat.serviceAi.subContentExtraction,modules.workflows.processing.shared.stateTools,header,Yes
-gateway.modules.aichat.serviceAi.subContentExtraction,traceback,function extractTextFromImage,Yes
-gateway.modules.aichat.serviceAi.subContentExtraction,traceback,function processTextContentWithAi,Yes
-gateway.modules.aichat.serviceAi.subContentExtraction,typing,header,Yes
-gateway.modules.aichat.serviceAi.subDocumentIntents,json,header,Yes
-gateway.modules.aichat.serviceAi.subDocumentIntents,logging,header,Yes
-gateway.modules.aichat.serviceAi.subDocumentIntents,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.aichat.serviceAi.subDocumentIntents,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceAi.subDocumentIntents,modules.datamodels.datamodelExtraction,function resolvePreExtractedDocument,Yes
-gateway.modules.aichat.serviceAi.subDocumentIntents,modules.workflows.processing.shared.stateTools,header,Yes
-gateway.modules.aichat.serviceAi.subDocumentIntents,traceback,function resolvePreExtractedDocument,Yes
-gateway.modules.aichat.serviceAi.subDocumentIntents,typing,header,Yes
-gateway.modules.aichat.serviceAi.subJsonMerger,datetime,header,Yes
-gateway.modules.aichat.serviceAi.subJsonMerger,json,header,Yes
-gateway.modules.aichat.serviceAi.subJsonMerger,logging,header,Yes
-gateway.modules.aichat.serviceAi.subJsonMerger,modules.shared.jsonUtils,header,Yes
-gateway.modules.aichat.serviceAi.subJsonMerger,os,header,Yes
-gateway.modules.aichat.serviceAi.subJsonMerger,re,header,Yes
-gateway.modules.aichat.serviceAi.subJsonMerger,typing,header,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,(relative) .subJsonMerger,function mergeJsonStringsWithOverlap,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,json,header,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,logging,header,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.shared.debugLogger,function mergeFragmentIntoSection,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,header,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,function mergeJsonStringsWithOverlap,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,function _normalizeToElementsStructure,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,function _extractRowsFromFragment,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,function _extractOverlapAndContinuation,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,function _mergeWithExplicitOverlap,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,function _extractValidJsonPrefix,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,function _smartConcatenate,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,function _mergeJsonStringsWithOverlapFallback,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,function _detectAndNormalizeFragment,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,function _detectAndNormalizeFragment,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,function _extractValidJsonPrefix,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,function _mergeJsonStructuresGeneric,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,function extractKpiValuesFromIncompleteJson,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,re,header,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,re,function _extractRowsFromFragment,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,re,function _detectAndNormalizeFragment,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,traceback,function _mergeJsonStructuresGeneric,Yes
-gateway.modules.aichat.serviceAi.subJsonResponseHandling,typing,header,Yes
-gateway.modules.aichat.serviceAi.subLoopingUseCases,dataclasses,header,Yes
-gateway.modules.aichat.serviceAi.subLoopingUseCases,json,function _handleChapterStructureFinalResult,Yes
-gateway.modules.aichat.serviceAi.subLoopingUseCases,json,function _handleCodeStructureFinalResult,Yes
-gateway.modules.aichat.serviceAi.subLoopingUseCases,json,function _handleCodeContentFinalResult,Yes
-gateway.modules.aichat.serviceAi.subLoopingUseCases,logging,header,Yes
-gateway.modules.aichat.serviceAi.subLoopingUseCases,typing,header,Yes
-gateway.modules.aichat.serviceAi.subResponseParsing,(relative) .subJsonResponseHandling,header,Yes
-gateway.modules.aichat.serviceAi.subResponseParsing,json,header,Yes
-gateway.modules.aichat.serviceAi.subResponseParsing,logging,header,Yes
-gateway.modules.aichat.serviceAi.subResponseParsing,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.serviceAi.subResponseParsing,modules.shared.jsonUtils,header,Yes
-gateway.modules.aichat.serviceAi.subResponseParsing,typing,header,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,asyncio,header,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,base64,function _processAiResponseForSection,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,copy,header,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,json,header,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,logging,header,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,modules.aichat.serviceGeneration.renderers.registry,function _getAcceptedSectionTypesForFormat,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,modules.datamodels.datamodelJson,function _getAcceptedSectionTypesForFormat,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,modules.datamodels.datamodelJson,function _getAcceptedSectionTypesForFormat,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,modules.shared.jsonContinuation,function buildSectionPromptWithContinuation,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,modules.shared.jsonUtils,function _extractAndMergeMultipleJsonBlocks,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,modules.shared.jsonUtils,function _processAiResponseForSection,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,modules.shared.jsonUtils,function _processSingleSection,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,modules.workflows.processing.shared.stateTools,header,Yes
-gateway.modules.aichat.serviceAi.subStructureFilling,typing,header,Yes
-gateway.modules.aichat.serviceAi.subStructureGeneration,json,header,Yes
-gateway.modules.aichat.serviceAi.subStructureGeneration,logging,header,Yes
-gateway.modules.aichat.serviceAi.subStructureGeneration,modules.aichat.serviceGeneration.renderers.registry,function generateStructure,Yes
-gateway.modules.aichat.serviceAi.subStructureGeneration,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.serviceAi.subStructureGeneration,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceAi.subStructureGeneration,modules.shared,function generateStructure,Yes
-gateway.modules.aichat.serviceAi.subStructureGeneration,modules.shared.jsonContinuation,function generateStructure,Yes
-gateway.modules.aichat.serviceAi.subStructureGeneration,modules.workflows.processing.shared.stateTools,header,Yes
-gateway.modules.aichat.serviceAi.subStructureGeneration,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.__init__,(relative) .mainServiceExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerImage,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerImage,PIL,function chunk,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerImage,base64,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerImage,io,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerImage,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerImage,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerStructure,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerStructure,json,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerStructure,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerStructure,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerTable,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerTable,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerTable,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerText,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerText,logging,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerText,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.chunking.chunkerText,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorBinary,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorBinary,(relative) ..subUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorBinary,base64,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorBinary,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorBinary,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorCsv,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorCsv,(relative) ..subUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorCsv,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorCsv,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorDocx,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorDocx,(relative) ..subUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorDocx,docx,function _load,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorDocx,io,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorDocx,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorDocx,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorHtml,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorHtml,(relative) ..subUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorHtml,bs4,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorHtml,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorHtml,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorImage,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorImage,(relative) ..subUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorImage,PIL,function extract,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorImage,base64,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorImage,io,function extract,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorImage,logging,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorImage,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorImage,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorJson,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorJson,(relative) ..subUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorJson,json,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorJson,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorJson,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorPdf,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorPdf,(relative) ..subUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorPdf,PyPDF2,function _load,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorPdf,base64,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorPdf,fitz,function _load,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorPdf,io,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorPdf,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorPdf,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorPptx,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorPptx,base64,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorPptx,io,function extract,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorPptx,logging,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorPptx,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorPptx,pptx,function _load,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorPptx,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorSql,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorSql,(relative) ..subUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorSql,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorSql,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorText,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorText,(relative) ..subUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorText,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorText,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorXlsx,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorXlsx,(relative) ..subUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorXlsx,datetime,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorXlsx,io,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorXlsx,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorXlsx,openpyxl,function _load,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorXlsx,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorXml,(relative) ..subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorXml,(relative) ..subUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorXml,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorXml,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.extractors.extractorXml,xml.etree.ElementTree,header,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,(relative) .merging.mergerDefault,function applyMerging,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,(relative) .merging.mergerTable,function applyMerging,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,(relative) .merging.mergerText,function applyMerging,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,(relative) .subMerger,function applyMerging,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,(relative) .subPipeline,header,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,(relative) .subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,asyncio,header,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,base64,header,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,json,header,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,logging,header,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,modules.aichat.aicore.aicoreModelRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,modules.aichat.aicore.aicoreModelSelector,header,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,modules.datamodels.datamodelAi,function mergePartResults,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,modules.interfaces.interfaceDbManagement,function extractContent,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,modules.shared.debugLogger,function extractContent,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,modules.shared.jsonUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,time,header,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.mainServiceExtraction,uuid,header,Yes
-gateway.modules.aichat.serviceExtraction.merging.mergerDefault,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.merging.mergerDefault,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.merging.mergerTable,(relative) ..subUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.merging.mergerTable,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.merging.mergerTable,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.merging.mergerText,(relative) ..subUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.merging.mergerText,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.merging.mergerText,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.subMerger,(relative) .subUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.subMerger,logging,header,Yes
-gateway.modules.aichat.serviceExtraction.subMerger,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.subMerger,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.subPipeline,(relative) .mainServiceExtraction,function runExtraction,Yes
-gateway.modules.aichat.serviceExtraction.subPipeline,(relative) .subRegistry,header,Yes
-gateway.modules.aichat.serviceExtraction.subPipeline,(relative) .subUtils,header,Yes
-gateway.modules.aichat.serviceExtraction.subPipeline,logging,header,Yes
-gateway.modules.aichat.serviceExtraction.subPipeline,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.subPipeline,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.subPromptBuilderExtraction,json,header,Yes
-gateway.modules.aichat.serviceExtraction.subPromptBuilderExtraction,logging,header,Yes
-gateway.modules.aichat.serviceExtraction.subPromptBuilderExtraction,modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceExtraction.subPromptBuilderExtraction,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.serviceExtraction.subPromptBuilderExtraction,modules.shared.debugLogger,function buildExtractionPrompt,Yes
-gateway.modules.aichat.serviceExtraction.subPromptBuilderExtraction,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.subPromptBuilderExtraction,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.subRegistry,(relative) .chunking.chunkerImage,function __init__,Yes
-gateway.modules.aichat.serviceExtraction.subRegistry,(relative) .chunking.chunkerStructure,function __init__,Yes
-gateway.modules.aichat.serviceExtraction.subRegistry,(relative) .chunking.chunkerTable,function __init__,Yes
-gateway.modules.aichat.serviceExtraction.subRegistry,(relative) .chunking.chunkerText,function __init__,Yes
-gateway.modules.aichat.serviceExtraction.subRegistry,(relative) .extractors.extractorBinary,function _auto_discover_extractors,Yes
-gateway.modules.aichat.serviceExtraction.subRegistry,importlib,function _auto_discover_extractors,Yes
-gateway.modules.aichat.serviceExtraction.subRegistry,logging,header,Yes
-gateway.modules.aichat.serviceExtraction.subRegistry,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceExtraction.subRegistry,os,function _auto_discover_extractors,Yes
-gateway.modules.aichat.serviceExtraction.subRegistry,pathlib,function _auto_discover_extractors,Yes
-gateway.modules.aichat.serviceExtraction.subRegistry,traceback,function _auto_discover_extractors,Yes
-gateway.modules.aichat.serviceExtraction.subRegistry,traceback,function __init__,Yes
-gateway.modules.aichat.serviceExtraction.subRegistry,typing,header,Yes
-gateway.modules.aichat.serviceExtraction.subUtils,uuid,header,Yes
-gateway.modules.aichat.serviceGeneration.mainServiceGeneration,(relative) .renderers.registry,function _getFormatRenderer,Yes
-gateway.modules.aichat.serviceGeneration.mainServiceGeneration,base64,header,Yes
-gateway.modules.aichat.serviceGeneration.mainServiceGeneration,logging,header,Yes
-gateway.modules.aichat.serviceGeneration.mainServiceGeneration,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.aichat.serviceGeneration.mainServiceGeneration,modules.aichat.serviceExtraction.subPromptBuilderExtraction,function getAdaptiveExtractionPrompt,Yes
-gateway.modules.aichat.serviceGeneration.mainServiceGeneration,modules.aichat.serviceGeneration.renderers.registry,function renderReport,Yes
-gateway.modules.aichat.serviceGeneration.mainServiceGeneration,modules.aichat.serviceGeneration.subContentGenerator,function generateDocumentWithTwoPhases,Yes
-gateway.modules.aichat.serviceGeneration.mainServiceGeneration,modules.aichat.serviceGeneration.subDocumentUtility,header,Yes
-gateway.modules.aichat.serviceGeneration.mainServiceGeneration,modules.aichat.serviceGeneration.subStructureGenerator,function generateDocumentWithTwoPhases,Yes
-gateway.modules.aichat.serviceGeneration.mainServiceGeneration,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.mainServiceGeneration,traceback,header,Yes
-gateway.modules.aichat.serviceGeneration.mainServiceGeneration,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.mainServiceGeneration,uuid,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.codePath,json,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.codePath,logging,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.codePath,modules.aichat.serviceGeneration.renderers.registry,function _getCodeRenderer,Yes
-gateway.modules.aichat.serviceGeneration.paths.codePath,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.codePath,modules.datamodels.datamodelDocument,function generateCode,Yes
-gateway.modules.aichat.serviceGeneration.paths.codePath,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.codePath,modules.datamodels.datamodelWorkflow,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.codePath,modules.shared.jsonContinuation,function _generateCodeStructure,Yes
-gateway.modules.aichat.serviceGeneration.paths.codePath,modules.shared.jsonContinuation,function _generateSingleFileContent,Yes
-gateway.modules.aichat.serviceGeneration.paths.codePath,modules.shared.jsonUtils,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.codePath,re,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.codePath,time,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.codePath,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.documentPath,copy,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.documentPath,json,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.documentPath,logging,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.documentPath,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.documentPath,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.documentPath,modules.datamodels.datamodelExtraction,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.documentPath,modules.datamodels.datamodelWorkflow,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.documentPath,modules.workflows.processing.shared.stateTools,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.documentPath,time,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.documentPath,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.imagePath,base64,function generateImages,Yes
-gateway.modules.aichat.serviceGeneration.paths.imagePath,json,function generateImages,Yes
-gateway.modules.aichat.serviceGeneration.paths.imagePath,logging,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.imagePath,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.imagePath,modules.datamodels.datamodelWorkflow,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.imagePath,time,header,Yes
-gateway.modules.aichat.serviceGeneration.paths.imagePath,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.codeRendererBaseTemplate,(relative) .documentRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.codeRendererBaseTemplate,abc,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.codeRendererBaseTemplate,logging,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.codeRendererBaseTemplate,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.codeRendererBaseTemplate,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,PIL,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,abc,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,base64,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,datetime,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,io,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,json,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,logging,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,modules.datamodels.datamodelJson,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
-gateway.modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,re,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,re,function _determineFilename,Yes
-gateway.modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,threading,function _getAiStyles,Yes
-gateway.modules.aichat.serviceGeneration.renderers.documentRendererBaseTemplate,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.registry,(relative) .documentRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.registry,importlib,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.registry,logging,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.registry,os,function discoverRenderers,Yes
-gateway.modules.aichat.serviceGeneration.renderers.registry,pathlib,function discoverRenderers,Yes
-gateway.modules.aichat.serviceGeneration.renderers.registry,sys,function discoverRenderers,Yes
-gateway.modules.aichat.serviceGeneration.renderers.registry,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeCsv,(relative) .codeRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeCsv,(relative) .rendererCsv,function render,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeCsv,csv,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeCsv,io,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeCsv,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeCsv,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeJson,(relative) .codeRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeJson,(relative) .rendererJson,function render,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeJson,json,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeJson,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeJson,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeXml,(relative) .codeRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeXml,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeXml,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeXml,xml.dom,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCodeXml,xml.etree.ElementTree,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCsv,(relative) .documentRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCsv,csv,function _convertRowsToCsv,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCsv,io,function _convertRowsToCsv,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCsv,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererCsv,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,(relative) .documentRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,(relative) .rendererHtml,function render,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,PIL,function _renderJsonImage,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,base64,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,csv,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,docx,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,docx.enum.style,function _setupDocumentStyles,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,docx.enum.style,function _createStyle,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,docx.enum.table,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,docx.enum.text,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,docx.oxml.ns,function _renderTableFastXml,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _renderTableFastXml,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _createTableBordersXml,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _createTableRowXml,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _applyHorizontalBordersOnly,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _setCellBackground,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _setCellBackgroundFast,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,docx.shared,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,io,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,lxml,function _renderTableFastXml,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,re,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,time,function _generateDocxFromJson,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,time,function _renderJsonTable,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,time,function _renderTableFastXml,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererDocx,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererHtml,(relative) .documentRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererHtml,base64,function render,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererHtml,base64,function _replaceImageDataUris,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererHtml,html,function _renderJsonImage,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererHtml,html,function _replaceImageDataUris,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererHtml,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererHtml,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererHtml,re,function _replaceImageDataUris,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererHtml,re,function _extractImages,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererHtml,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererImage,(relative) .documentRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererImage,base64,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererImage,json,function _generateAiImage,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererImage,logging,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererImage,modules.datamodels.datamodelAi,function _generateAiImage,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererImage,modules.datamodels.datamodelAi,function _compressPromptWithAi,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererImage,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererImage,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererJson,(relative) .documentRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererJson,json,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererJson,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererJson,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererJson,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererMarkdown,(relative) .documentRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererMarkdown,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererMarkdown,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererMarkdown,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,(relative) .documentRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,(relative) .rendererHtml,function render,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,PIL,function _renderJsonImage,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,base64,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,base64,function _renderJsonImage,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,io,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,io,function _renderJsonImage,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,json,function _getAiStylesWithPdfColors,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,modules.datamodels.datamodelAi,function _getAiStylesWithPdfColors,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,re,function _getAiStylesWithPdfColors,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,re,function _renderJsonImage,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,reportlab.lib,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,reportlab.lib.enums,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,reportlab.lib.pagesizes,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,reportlab.lib.pagesizes,function _renderJsonImage,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,reportlab.lib.styles,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,reportlab.lib.units,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,reportlab.lib.units,function _renderJsonImage,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,reportlab.platypus,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,reportlab.platypus,function _renderJsonImage,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPdf,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,(relative) .documentRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,PIL,function _addImagesToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,PIL,function _addImagesToSlideInFrame,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,PIL,function _addImagesToSlideInFrame,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,base64,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,base64,function _addImagesToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,base64,function _addImagesToSlideInFrame,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,datetime,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,io,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,io,function _addImagesToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,io,function _addImagesToSlideInFrame,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,json,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,logging,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx,function render,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function render,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addImagesToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addTableToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addBulletListToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addHeadingToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addParagraphToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addCodeBlockToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _renderSlideContentWithFrames,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _renderTextSectionsInFrame,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _renderSectionToTextFrame,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function render,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _addImagesToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _addTableToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _addBulletListToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _addParagraphToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _renderSlideContentWithFrames,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _renderTextSectionsInFrame,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _renderSectionToTextFrame,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _addImagesToSlideInFrame,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.util,function render,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.util,function _addImagesToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.util,function _addTableToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.util,function _addBulletListToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.util,function _addHeadingToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.util,function _addParagraphToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.util,function _addCodeBlockToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.util,function _renderSlideContentWithFrames,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.util,function _renderTextSectionsInFrame,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.util,function _renderSectionToTextFrame,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.util,function _addImagesToSlideInFrame,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.util,function render,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.util,function render,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.util,function _renderSlideContentWithFrames,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,pptx.util,function _addBulletListToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,re,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,re,function render,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,traceback,function _addImagesToSlide,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererPptx,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererText,(relative) .documentRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererText,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererText,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererText,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,(relative) .documentRendererBaseTemplate,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,(relative) .rendererCsv,function render,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,base64,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,base64,function _addImageToExcel,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,datetime,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,dateutil,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,io,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,io,function _addImageToExcel,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,json,function _getAiStylesWithExcelColors,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,modules.datamodels.datamodelAi,function _getAiStylesWithExcelColors,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,modules.datamodels.datamodelDocument,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,openpyxl,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,openpyxl.drawing.image,function _addImageToExcel,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,openpyxl.styles,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,openpyxl.utils,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,openpyxl.worksheet.table,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,re,header,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,re,function _getAiStylesWithExcelColors,Yes
-gateway.modules.aichat.serviceGeneration.renderers.rendererXlsx,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.subContentGenerator,asyncio,header,Yes
-gateway.modules.aichat.serviceGeneration.subContentGenerator,base64,header,Yes
-gateway.modules.aichat.serviceGeneration.subContentGenerator,base64,function _generateImageSection,Yes
-gateway.modules.aichat.serviceGeneration.subContentGenerator,json,header,Yes
-gateway.modules.aichat.serviceGeneration.subContentGenerator,logging,header,Yes
-gateway.modules.aichat.serviceGeneration.subContentGenerator,modules.aichat.serviceGeneration.subContentIntegrator,header,Yes
-gateway.modules.aichat.serviceGeneration.subContentGenerator,modules.datamodels.datamodelAi,function _generateSimpleSection,Yes
-gateway.modules.aichat.serviceGeneration.subContentGenerator,modules.datamodels.datamodelAi,function _generateImageSection,Yes
-gateway.modules.aichat.serviceGeneration.subContentGenerator,modules.shared.jsonUtils,function _generateSimpleSection,Yes
-gateway.modules.aichat.serviceGeneration.subContentGenerator,modules.workflows.processing.shared.stateTools,header,Yes
-gateway.modules.aichat.serviceGeneration.subContentGenerator,re,header,Yes
-gateway.modules.aichat.serviceGeneration.subContentGenerator,traceback,header,Yes
-gateway.modules.aichat.serviceGeneration.subContentGenerator,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.subContentIntegrator,json,function integrateContent,Yes
-gateway.modules.aichat.serviceGeneration.subContentIntegrator,logging,header,Yes
-gateway.modules.aichat.serviceGeneration.subContentIntegrator,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.subDocumentUtility,csv,function convertDocumentDataToString,Yes
-gateway.modules.aichat.serviceGeneration.subDocumentUtility,csv,function convertDocumentDataToString,Yes
-gateway.modules.aichat.serviceGeneration.subDocumentUtility,io,function convertDocumentDataToString,Yes
-gateway.modules.aichat.serviceGeneration.subDocumentUtility,io,function convertDocumentDataToString,Yes
-gateway.modules.aichat.serviceGeneration.subDocumentUtility,json,header,Yes
-gateway.modules.aichat.serviceGeneration.subDocumentUtility,logging,header,Yes
-gateway.modules.aichat.serviceGeneration.subDocumentUtility,os,header,Yes
-gateway.modules.aichat.serviceGeneration.subDocumentUtility,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.subJsonSchema,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.subPromptBuilderGeneration,logging,header,Yes
-gateway.modules.aichat.serviceGeneration.subPromptBuilderGeneration,modules.datamodels.datamodelJson,header,Yes
-gateway.modules.aichat.serviceGeneration.subPromptBuilderGeneration,typing,header,Yes
-gateway.modules.aichat.serviceGeneration.subStructureGenerator,json,header,Yes
-gateway.modules.aichat.serviceGeneration.subStructureGenerator,json,function _createStructurePrompt,Yes
-gateway.modules.aichat.serviceGeneration.subStructureGenerator,logging,header,Yes
-gateway.modules.aichat.serviceGeneration.subStructureGenerator,modules.datamodels.datamodelAi,function generateStructure,Yes
-gateway.modules.aichat.serviceGeneration.subStructureGenerator,modules.datamodels.datamodelJson,header,Yes
-gateway.modules.aichat.serviceGeneration.subStructureGenerator,typing,header,Yes
-gateway.modules.aichat.serviceWeb.mainServiceWeb,asyncio,header,Yes
-gateway.modules.aichat.serviceWeb.mainServiceWeb,json,header,Yes
-gateway.modules.aichat.serviceWeb.mainServiceWeb,logging,header,Yes
-gateway.modules.aichat.serviceWeb.mainServiceWeb,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.aichat.serviceWeb.mainServiceWeb,time,header,Yes
-gateway.modules.aichat.serviceWeb.mainServiceWeb,time,function _processCrawlResultsWithHierarchy,Yes
-gateway.modules.aichat.serviceWeb.mainServiceWeb,typing,header,Yes
-gateway.modules.aichat.serviceWeb.mainServiceWeb,urllib.parse,header,Yes
+gateway.modules.aicore.aicoreBase,abc,header,Yes
+gateway.modules.aicore.aicoreBase,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.aicore.aicoreBase,time,function getCachedModels,Yes
+gateway.modules.aicore.aicoreBase,typing,header,Yes
+gateway.modules.aicore.aicoreModelRegistry,(relative) .aicoreBase,header,Yes
+gateway.modules.aicore.aicoreModelRegistry,importlib,header,Yes
+gateway.modules.aicore.aicoreModelRegistry,logging,header,Yes
+gateway.modules.aicore.aicoreModelRegistry,modules.connectors.connectorDbPostgre,header,Yes
+gateway.modules.aicore.aicoreModelRegistry,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.aicore.aicoreModelRegistry,modules.datamodels.datamodelUam,header,Yes
+gateway.modules.aicore.aicoreModelRegistry,modules.security.rbac,header,Yes
+gateway.modules.aicore.aicoreModelRegistry,modules.security.rbacHelpers,header,Yes
+gateway.modules.aicore.aicoreModelRegistry,os,header,Yes
+gateway.modules.aicore.aicoreModelRegistry,time,function refreshModels,Yes
+gateway.modules.aicore.aicoreModelRegistry,typing,header,Yes
+gateway.modules.aicore.aicoreModelSelector,logging,header,Yes
+gateway.modules.aicore.aicoreModelSelector,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.aicore.aicoreModelSelector,typing,header,Yes
+gateway.modules.aicore.aicorePluginAnthropic,(relative) .aicoreBase,header,Yes
+gateway.modules.aicore.aicorePluginAnthropic,base64,function callAiImage,Yes
+gateway.modules.aicore.aicorePluginAnthropic,fastapi,header,Yes
+gateway.modules.aicore.aicorePluginAnthropic,httpx,header,Yes
+gateway.modules.aicore.aicorePluginAnthropic,logging,header,Yes
+gateway.modules.aicore.aicorePluginAnthropic,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.aicore.aicorePluginAnthropic,modules.shared.configuration,header,Yes
+gateway.modules.aicore.aicorePluginAnthropic,os,header,Yes
+gateway.modules.aicore.aicorePluginAnthropic,time,function callAiImage,Yes
+gateway.modules.aicore.aicorePluginAnthropic,typing,header,Yes
+gateway.modules.aicore.aicorePluginInternal,(relative) .aicoreBase,header,Yes
+gateway.modules.aicore.aicorePluginInternal,logging,header,Yes
+gateway.modules.aicore.aicorePluginInternal,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.aicore.aicorePluginInternal,typing,header,Yes
+gateway.modules.aicore.aicorePluginOpenai,(relative) .aicoreBase,header,Yes
+gateway.modules.aicore.aicorePluginOpenai,fastapi,header,Yes
+gateway.modules.aicore.aicorePluginOpenai,httpx,header,Yes
+gateway.modules.aicore.aicorePluginOpenai,json,function generateImage,Yes
+gateway.modules.aicore.aicorePluginOpenai,logging,header,Yes
+gateway.modules.aicore.aicorePluginOpenai,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.aicore.aicorePluginOpenai,modules.shared.configuration,header,Yes
+gateway.modules.aicore.aicorePluginOpenai,typing,header,Yes
+gateway.modules.aicore.aicorePluginPerplexity,(relative) .aicoreBase,header,Yes
+gateway.modules.aicore.aicorePluginPerplexity,fastapi,header,Yes
+gateway.modules.aicore.aicorePluginPerplexity,httpx,header,Yes
+gateway.modules.aicore.aicorePluginPerplexity,json,function webSearch,Yes
+gateway.modules.aicore.aicorePluginPerplexity,json,function webCrawl,Yes
+gateway.modules.aicore.aicorePluginPerplexity,json,function webCrawl,Yes
+gateway.modules.aicore.aicorePluginPerplexity,logging,header,Yes
+gateway.modules.aicore.aicorePluginPerplexity,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.aicore.aicorePluginPerplexity,modules.datamodels.datamodelTools,header,Yes
+gateway.modules.aicore.aicorePluginPerplexity,modules.shared.configuration,header,Yes
+gateway.modules.aicore.aicorePluginPerplexity,typing,header,Yes
+gateway.modules.aicore.aicorePluginTavily,(relative) .aicoreBase,header,Yes
+gateway.modules.aicore.aicorePluginTavily,asyncio,header,Yes
+gateway.modules.aicore.aicorePluginTavily,dataclasses,header,Yes
+gateway.modules.aicore.aicorePluginTavily,json,function webSearch,Yes
+gateway.modules.aicore.aicorePluginTavily,json,function webSearch,Yes
+gateway.modules.aicore.aicorePluginTavily,json,function webCrawl,Yes
+gateway.modules.aicore.aicorePluginTavily,json,function webCrawl,Yes
+gateway.modules.aicore.aicorePluginTavily,json,function webSearch,Yes
+gateway.modules.aicore.aicorePluginTavily,json,function webCrawl,Yes
+gateway.modules.aicore.aicorePluginTavily,logging,header,Yes
+gateway.modules.aicore.aicorePluginTavily,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.aicore.aicorePluginTavily,modules.datamodels.datamodelTools,header,Yes
+gateway.modules.aicore.aicorePluginTavily,modules.shared.configuration,header,Yes
+gateway.modules.aicore.aicorePluginTavily,re,header,Yes
+gateway.modules.aicore.aicorePluginTavily,re,function _cleanUrl,Yes
+gateway.modules.aicore.aicorePluginTavily,tavily,header,Yes
+gateway.modules.aicore.aicorePluginTavily,typing,header,Yes
+gateway.modules.aicore.aicorePluginTavily,urllib.parse,function _normalizeUrl,Yes
gateway.modules.auth.__init__,(relative) .authentication,header,Yes
gateway.modules.auth.__init__,(relative) .csrf,header,Yes
gateway.modules.auth.__init__,(relative) .jwtService,header,Yes
@@ -845,6 +241,13 @@ gateway.modules.datamodels.datamodelAudit,modules.shared.timeUtils,header,Yes
gateway.modules.datamodels.datamodelAudit,pydantic,header,Yes
gateway.modules.datamodels.datamodelAudit,typing,header,Yes
gateway.modules.datamodels.datamodelAudit,uuid,header,Yes
+gateway.modules.datamodels.datamodelChat,enum,header,Yes
+gateway.modules.datamodels.datamodelChat,modules.datamodels.datamodelWorkflow,function updateFromSelection,Yes
+gateway.modules.datamodels.datamodelChat,modules.shared.attributeUtils,header,Yes
+gateway.modules.datamodels.datamodelChat,modules.shared.timeUtils,header,Yes
+gateway.modules.datamodels.datamodelChat,pydantic,header,Yes
+gateway.modules.datamodels.datamodelChat,typing,header,Yes
+gateway.modules.datamodels.datamodelChat,uuid,header,Yes
gateway.modules.datamodels.datamodelDocref,modules.shared.attributeUtils,header,Yes
gateway.modules.datamodels.datamodelDocref,pydantic,header,Yes
gateway.modules.datamodels.datamodelDocref,typing,header,Yes
@@ -919,11 +322,15 @@ gateway.modules.datamodels.datamodelWorkflow,modules.shared.attributeUtils,heade
gateway.modules.datamodels.datamodelWorkflow,modules.shared.jsonUtils,header,Yes
gateway.modules.datamodels.datamodelWorkflow,pydantic,header,Yes
gateway.modules.datamodels.datamodelWorkflow,typing,header,Yes
-gateway.modules.datamodels.datamodelWorkflowActions,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.datamodels.datamodelWorkflowActions,modules.datamodels.datamodelChat,header,Yes
gateway.modules.datamodels.datamodelWorkflowActions,modules.shared.attributeUtils,header,Yes
gateway.modules.datamodels.datamodelWorkflowActions,modules.shared.frontendTypes,header,Yes
gateway.modules.datamodels.datamodelWorkflowActions,pydantic,header,Yes
gateway.modules.datamodels.datamodelWorkflowActions,typing,header,Yes
+gateway.modules.features.automation.datamodelFeatureAutomation,modules.shared.attributeUtils,header,Yes
+gateway.modules.features.automation.datamodelFeatureAutomation,pydantic,header,Yes
+gateway.modules.features.automation.datamodelFeatureAutomation,typing,header,Yes
+gateway.modules.features.automation.datamodelFeatureAutomation,uuid,header,Yes
gateway.modules.features.automation.mainAutomation,logging,header,Yes
gateway.modules.features.automation.mainAutomation,typing,header,Yes
gateway.modules.features.automation.routeFeatureAutomation,(relative) .subAutomationTemplates,header,Yes
@@ -933,10 +340,11 @@ gateway.modules.features.automation.routeFeatureAutomation,fastapi.responses,hea
gateway.modules.features.automation.routeFeatureAutomation,fastapi.responses,function get_automations,Yes
gateway.modules.features.automation.routeFeatureAutomation,json,header,Yes
gateway.modules.features.automation.routeFeatureAutomation,logging,header,Yes
-gateway.modules.features.automation.routeFeatureAutomation,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.features.automation.routeFeatureAutomation,modules.aichat.interfaceFeatureAiChat,header,Yes
gateway.modules.features.automation.routeFeatureAutomation,modules.auth,header,Yes
+gateway.modules.features.automation.routeFeatureAutomation,modules.datamodels.datamodelChat,header,Yes
gateway.modules.features.automation.routeFeatureAutomation,modules.datamodels.datamodelPagination,header,Yes
+gateway.modules.features.automation.routeFeatureAutomation,modules.features.automation.datamodelFeatureAutomation,header,Yes
+gateway.modules.features.automation.routeFeatureAutomation,modules.interfaces.interfaceDbChat,header,Yes
gateway.modules.features.automation.routeFeatureAutomation,modules.services,function execute_automation,Yes
gateway.modules.features.automation.routeFeatureAutomation,modules.shared.attributeUtils,header,Yes
gateway.modules.features.automation.routeFeatureAutomation,modules.workflows.automation,header,Yes
@@ -973,6 +381,7 @@ gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.datamodels.data
gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.datamodels.datamodelRbac,header,Yes
gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.datamodels.datamodelUam,header,Yes
gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.datamodels.datamodelUam,header,Yes
+gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.features.automation.datamodelFeatureAutomation,header,Yes
gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.features.chatbot.eventManager,function createMessage,Yes
gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.features.chatbot.eventManager,function createLog,Yes
gateway.modules.features.chatbot.interfaceFeatureChatbot,modules.interfaces.interfaceDbApp,function _enrichAutomationsWithUserAndMandate,Yes
@@ -992,14 +401,12 @@ gateway.modules.features.chatbot.mainChatbot,asyncio,header,Yes
gateway.modules.features.chatbot.mainChatbot,base64,header,Yes
gateway.modules.features.chatbot.mainChatbot,json,header,Yes
gateway.modules.features.chatbot.mainChatbot,logging,header,Yes
-gateway.modules.features.chatbot.mainChatbot,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.features.chatbot.mainChatbot,modules.aichat.datamodelFeatureAiChat,function _emit_log_and_event,Yes
gateway.modules.features.chatbot.mainChatbot,modules.connectors.connectorPreprocessor,header,Yes
gateway.modules.features.chatbot.mainChatbot,modules.datamodels.datamodelAi,header,Yes
gateway.modules.features.chatbot.mainChatbot,modules.datamodels.datamodelDocref,header,Yes
gateway.modules.features.chatbot.mainChatbot,modules.datamodels.datamodelUam,header,Yes
gateway.modules.features.chatbot.mainChatbot,modules.features.chatbot.chatbotConstants,header,Yes
-gateway.modules.features.chatbot.mainChatbot,modules.features.chatbot.chatbotConstants,function _processChatbotMessage,Yes
+gateway.modules.features.chatbot.mainChatbot,modules.features.chatbot.datamodelFeatureChatbot,header,Yes
gateway.modules.features.chatbot.mainChatbot,modules.features.chatbot.eventManager,header,Yes
gateway.modules.features.chatbot.mainChatbot,modules.interfaces.interfaceRbac,function _convert_file_ids_to_document_references,Yes
gateway.modules.features.chatbot.mainChatbot,modules.services,header,Yes
@@ -1020,7 +427,6 @@ gateway.modules.features.chatbot.routeFeatureChatbot,logging,header,Yes
gateway.modules.features.chatbot.routeFeatureChatbot,math,header,Yes
gateway.modules.features.chatbot.routeFeatureChatbot,modules.auth,header,Yes
gateway.modules.features.chatbot.routeFeatureChatbot,modules.datamodels.datamodelPagination,header,Yes
-gateway.modules.features.chatbot.routeFeatureChatbot,modules.datamodels.datamodelPagination,function get_chatbot_threads,Yes
gateway.modules.features.chatbot.routeFeatureChatbot,modules.interfaces.interfaceRbac,header,Yes
gateway.modules.features.chatbot.routeFeatureChatbot,modules.shared.timeUtils,header,Yes
gateway.modules.features.chatbot.routeFeatureChatbot,modules.workflows.automation,header,Yes
@@ -1044,7 +450,6 @@ gateway.modules.features.neutralizer.mainNeutralizePlayground,(relative) .datamo
gateway.modules.features.neutralizer.mainNeutralizePlayground,asyncio,header,Yes
gateway.modules.features.neutralizer.mainNeutralizePlayground,logging,header,Yes
gateway.modules.features.neutralizer.mainNeutralizePlayground,modules.datamodels.datamodelUam,header,Yes
-gateway.modules.features.neutralizer.mainNeutralizePlayground,modules.datamodels.datamodelUam,function _getSharepointConnection,Yes
gateway.modules.features.neutralizer.mainNeutralizePlayground,modules.services,header,Yes
gateway.modules.features.neutralizer.mainNeutralizePlayground,modules.services.serviceSharepoint.mainServiceSharepoint,function processSharepointFiles,Yes
gateway.modules.features.neutralizer.mainNeutralizePlayground,typing,header,Yes
@@ -1203,8 +608,8 @@ gateway.modules.interfaces.interfaceAiObjects,asyncio,header,Yes
gateway.modules.interfaces.interfaceAiObjects,base64,header,Yes
gateway.modules.interfaces.interfaceAiObjects,dataclasses,header,Yes
gateway.modules.interfaces.interfaceAiObjects,logging,header,Yes
-gateway.modules.interfaces.interfaceAiObjects,modules.aichat.aicore.aicoreModelRegistry,header,Yes
-gateway.modules.interfaces.interfaceAiObjects,modules.aichat.aicore.aicoreModelSelector,header,Yes
+gateway.modules.interfaces.interfaceAiObjects,modules.aicore.aicoreModelRegistry,header,Yes
+gateway.modules.interfaces.interfaceAiObjects,modules.aicore.aicoreModelSelector,header,Yes
gateway.modules.interfaces.interfaceAiObjects,modules.datamodels.datamodelAi,header,Yes
gateway.modules.interfaces.interfaceAiObjects,modules.datamodels.datamodelExtraction,header,Yes
gateway.modules.interfaces.interfaceAiObjects,time,header,Yes
@@ -1240,6 +645,30 @@ gateway.modules.interfaces.interfaceDbApp,modules.shared.timeUtils,header,Yes
gateway.modules.interfaces.interfaceDbApp,passlib.context,header,Yes
gateway.modules.interfaces.interfaceDbApp,typing,header,Yes
gateway.modules.interfaces.interfaceDbApp,uuid,header,Yes
+gateway.modules.interfaces.interfaceDbChat,asyncio,header,Yes
+gateway.modules.interfaces.interfaceDbChat,datetime,function storeDebugMessageAndDocuments,Yes
+gateway.modules.interfaces.interfaceDbChat,json,header,Yes
+gateway.modules.interfaces.interfaceDbChat,logging,header,Yes
+gateway.modules.interfaces.interfaceDbChat,math,header,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.connectors.connectorDbPostgre,header,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.datamodels.datamodelChat,header,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.datamodels.datamodelPagination,header,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.datamodels.datamodelRbac,header,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.datamodels.datamodelUam,header,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.datamodels.datamodelUam,header,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.features.automation.datamodelFeatureAutomation,header,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.interfaces.interfaceDbApp,function _enrichAutomationsWithUserAndMandate,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.interfaces.interfaceDbManagement,function storeDebugMessageAndDocuments,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.interfaces.interfaceRbac,header,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.security.rbac,header,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.security.rootAccess,function setUserContext,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.shared.callbackRegistry,function _notifyAutomationChanged,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.shared.configuration,header,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.shared.debugLogger,function storeDebugMessageAndDocuments,Yes
+gateway.modules.interfaces.interfaceDbChat,modules.shared.timeUtils,header,Yes
+gateway.modules.interfaces.interfaceDbChat,os,function storeDebugMessageAndDocuments,Yes
+gateway.modules.interfaces.interfaceDbChat,typing,header,Yes
+gateway.modules.interfaces.interfaceDbChat,uuid,header,Yes
gateway.modules.interfaces.interfaceDbManagement,base64,header,Yes
gateway.modules.interfaces.interfaceDbManagement,hashlib,header,Yes
gateway.modules.interfaces.interfaceDbManagement,logging,header,Yes
@@ -1309,11 +738,10 @@ gateway.modules.routes.routeAdmin,typing,header,Yes
gateway.modules.routes.routeAdminAutomationEvents,fastapi,header,Yes
gateway.modules.routes.routeAdminAutomationEvents,fastapi,header,Yes
gateway.modules.routes.routeAdminAutomationEvents,logging,header,Yes
-gateway.modules.routes.routeAdminAutomationEvents,modules.aichat.interfaceFeatureAiChat,header,Yes
-gateway.modules.routes.routeAdminAutomationEvents,modules.aichat.interfaceFeatureAiChat,function sync_all_automation_events,Yes
gateway.modules.routes.routeAdminAutomationEvents,modules.auth,header,Yes
gateway.modules.routes.routeAdminAutomationEvents,modules.datamodels.datamodelUam,header,Yes
gateway.modules.routes.routeAdminAutomationEvents,modules.interfaces.interfaceDbApp,function sync_all_automation_events,Yes
+gateway.modules.routes.routeAdminAutomationEvents,modules.interfaces.interfaceDbChat,header,Yes
gateway.modules.routes.routeAdminAutomationEvents,modules.services,function sync_all_automation_events,Yes
gateway.modules.routes.routeAdminAutomationEvents,modules.shared.eventManagement,function get_all_automation_events,Yes
gateway.modules.routes.routeAdminAutomationEvents,modules.shared.eventManagement,function remove_event,Yes
@@ -1336,8 +764,6 @@ gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelRbac,funct
gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelRbac,function getFeatureInstanceAvailableRoles,Yes
gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelRbac,function _hasMandateAdminRole,Yes
gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelUam,header,Yes
-gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelUam,function listFeatureInstanceUsers,Yes
-gateway.modules.routes.routeAdminFeatures,modules.datamodels.datamodelUam,function addUserToFeatureInstance,Yes
gateway.modules.routes.routeAdminFeatures,modules.interfaces.interfaceDbApp,header,Yes
gateway.modules.routes.routeAdminFeatures,modules.interfaces.interfaceFeatures,header,Yes
gateway.modules.routes.routeAdminFeatures,pydantic,header,Yes
@@ -1358,10 +784,8 @@ gateway.modules.routes.routeAdminRbacRoles,fastapi,header,Yes
gateway.modules.routes.routeAdminRbacRoles,logging,header,Yes
gateway.modules.routes.routeAdminRbacRoles,modules.auth,header,Yes
gateway.modules.routes.routeAdminRbacRoles,modules.datamodels.datamodelMembership,header,Yes
-gateway.modules.routes.routeAdminRbacRoles,modules.datamodels.datamodelMembership,function listUsersWithRoles,Yes
gateway.modules.routes.routeAdminRbacRoles,modules.datamodels.datamodelRbac,header,Yes
gateway.modules.routes.routeAdminRbacRoles,modules.datamodels.datamodelUam,header,Yes
-gateway.modules.routes.routeAdminRbacRoles,modules.datamodels.datamodelUam,function listUsersWithRoles,Yes
gateway.modules.routes.routeAdminRbacRoles,modules.interfaces.interfaceDbApp,header,Yes
gateway.modules.routes.routeAdminRbacRoles,typing,header,Yes
gateway.modules.routes.routeAdminRbacRules,fastapi,header,Yes
@@ -1379,13 +803,19 @@ gateway.modules.routes.routeAttributes,fastapi,header,Yes
gateway.modules.routes.routeAttributes,logging,header,Yes
gateway.modules.routes.routeAttributes,modules.auth,header,Yes
gateway.modules.routes.routeAttributes,modules.shared.attributeUtils,header,Yes
+gateway.modules.routes.routeChat,(relative) .,header,Yes
+gateway.modules.routes.routeChat,fastapi,header,Yes
+gateway.modules.routes.routeChat,logging,header,Yes
+gateway.modules.routes.routeChat,modules.auth,header,Yes
+gateway.modules.routes.routeChat,modules.datamodels.datamodelChat,header,Yes
+gateway.modules.routes.routeChat,modules.workflows.automation,header,Yes
+gateway.modules.routes.routeChat,typing,header,Yes
gateway.modules.routes.routeDataConnections,fastapi,header,Yes
gateway.modules.routes.routeDataConnections,fastapi,header,Yes
gateway.modules.routes.routeDataConnections,json,header,Yes
gateway.modules.routes.routeDataConnections,logging,header,Yes
gateway.modules.routes.routeDataConnections,math,header,Yes
gateway.modules.routes.routeDataConnections,modules.auth,header,Yes
-gateway.modules.routes.routeDataConnections,modules.auth,function get_connections,Yes
gateway.modules.routes.routeDataConnections,modules.datamodels.datamodelPagination,header,Yes
gateway.modules.routes.routeDataConnections,modules.datamodels.datamodelSecurity,header,Yes
gateway.modules.routes.routeDataConnections,modules.datamodels.datamodelUam,header,Yes
@@ -1411,7 +841,6 @@ gateway.modules.routes.routeDataMandates,json,header,Yes
gateway.modules.routes.routeDataMandates,logging,header,Yes
gateway.modules.routes.routeDataMandates,modules.auth,header,Yes
gateway.modules.routes.routeDataMandates,modules.datamodels.datamodelMembership,header,Yes
-gateway.modules.routes.routeDataMandates,modules.datamodels.datamodelMembership,function delete_mandate,Yes
gateway.modules.routes.routeDataMandates,modules.datamodels.datamodelPagination,header,Yes
gateway.modules.routes.routeDataMandates,modules.datamodels.datamodelRbac,header,Yes
gateway.modules.routes.routeDataMandates,modules.datamodels.datamodelUam,header,Yes
@@ -1444,12 +873,7 @@ gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelMembership,fun
gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelMembership,function sendPasswordLink,Yes
gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelPagination,header,Yes
gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelUam,header,Yes
-gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelUam,function create_user,Yes
-gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelUam,function reset_user_password,Yes
-gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelUam,function change_password,Yes
-gateway.modules.routes.routeDataUsers,modules.datamodels.datamodelUam,function get_users,Yes
gateway.modules.routes.routeDataUsers,modules.interfaces.interfaceDbApp,header,Yes
-gateway.modules.routes.routeDataUsers,modules.interfaces.interfaceDbApp,function sendPasswordLink,Yes
gateway.modules.routes.routeDataUsers,modules.services,function sendPasswordLink,Yes
gateway.modules.routes.routeDataUsers,modules.shared.auditLogger,function reset_user_password,Yes
gateway.modules.routes.routeDataUsers,modules.shared.auditLogger,function change_password,Yes
@@ -1460,12 +884,12 @@ gateway.modules.routes.routeDataUsers,typing,header,Yes
gateway.modules.routes.routeDataWorkflows,fastapi,header,Yes
gateway.modules.routes.routeDataWorkflows,json,header,Yes
gateway.modules.routes.routeDataWorkflows,logging,header,Yes
-gateway.modules.routes.routeDataWorkflows,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.routes.routeDataWorkflows,modules.aichat.interfaceFeatureAiChat,header,Yes
-gateway.modules.routes.routeDataWorkflows,modules.aichat.interfaceFeatureAiChat,header,Yes
gateway.modules.routes.routeDataWorkflows,modules.auth,header,Yes
+gateway.modules.routes.routeDataWorkflows,modules.datamodels.datamodelChat,header,Yes
gateway.modules.routes.routeDataWorkflows,modules.datamodels.datamodelPagination,header,Yes
gateway.modules.routes.routeDataWorkflows,modules.datamodels.datamodelUam,header,Yes
+gateway.modules.routes.routeDataWorkflows,modules.interfaces.interfaceDbChat,header,Yes
+gateway.modules.routes.routeDataWorkflows,modules.interfaces.interfaceDbChat,header,Yes
gateway.modules.routes.routeDataWorkflows,modules.interfaces.interfaceRbac,header,Yes
gateway.modules.routes.routeDataWorkflows,modules.services,function get_all_actions,Yes
gateway.modules.routes.routeDataWorkflows,modules.services,function get_method_actions,Yes
@@ -1495,9 +919,6 @@ gateway.modules.routes.routeGdpr,modules.datamodels.datamodelMembership,function
gateway.modules.routes.routeGdpr,modules.datamodels.datamodelMembership,function deleteAccount,Yes
gateway.modules.routes.routeGdpr,modules.datamodels.datamodelSecurity,function deleteAccount,Yes
gateway.modules.routes.routeGdpr,modules.datamodels.datamodelUam,header,Yes
-gateway.modules.routes.routeGdpr,modules.datamodels.datamodelUam,function deleteAccount,Yes
-gateway.modules.routes.routeGdpr,modules.datamodels.datamodelUam,function exportUserData,Yes
-gateway.modules.routes.routeGdpr,modules.datamodels.datamodelUam,function exportPortableData,Yes
gateway.modules.routes.routeGdpr,modules.interfaces.interfaceDbApp,header,Yes
gateway.modules.routes.routeGdpr,modules.shared.auditLogger,header,Yes
gateway.modules.routes.routeGdpr,modules.shared.timeUtils,header,Yes
@@ -1553,13 +974,8 @@ gateway.modules.routes.routeSecurityGoogle,json,header,Yes
gateway.modules.routes.routeSecurityGoogle,logging,header,Yes
gateway.modules.routes.routeSecurityGoogle,modules.auth,header,Yes
gateway.modules.routes.routeSecurityGoogle,modules.auth,header,Yes
-gateway.modules.routes.routeSecurityGoogle,modules.auth,function verify_token,Yes
-gateway.modules.routes.routeSecurityGoogle,modules.auth,function refresh_token,Yes
-gateway.modules.routes.routeSecurityGoogle,modules.auth,function auth_callback,Yes
gateway.modules.routes.routeSecurityGoogle,modules.datamodels.datamodelSecurity,function auth_callback,Yes
gateway.modules.routes.routeSecurityGoogle,modules.datamodels.datamodelUam,header,Yes
-gateway.modules.routes.routeSecurityGoogle,modules.datamodels.datamodelUam,function login,Yes
-gateway.modules.routes.routeSecurityGoogle,modules.datamodels.datamodelUam,function auth_callback,Yes
gateway.modules.routes.routeSecurityGoogle,modules.interfaces.interfaceDbApp,header,Yes
gateway.modules.routes.routeSecurityGoogle,modules.shared.auditLogger,function logout,Yes
gateway.modules.routes.routeSecurityGoogle,modules.shared.configuration,header,Yes
@@ -1578,8 +994,6 @@ gateway.modules.routes.routeSecurityLocal,modules.auth,header,Yes
gateway.modules.routes.routeSecurityLocal,modules.datamodels.datamodelMessaging,function _sendAuthEmail,Yes
gateway.modules.routes.routeSecurityLocal,modules.datamodels.datamodelSecurity,header,Yes
gateway.modules.routes.routeSecurityLocal,modules.datamodels.datamodelUam,header,Yes
-gateway.modules.routes.routeSecurityLocal,modules.datamodels.datamodelUam,function login,Yes
-gateway.modules.routes.routeSecurityLocal,modules.datamodels.datamodelUam,function register_user,Yes
gateway.modules.routes.routeSecurityLocal,modules.interfaces.interfaceDbApp,header,Yes
gateway.modules.routes.routeSecurityLocal,modules.interfaces.interfaceMessaging,function _sendAuthEmail,Yes
gateway.modules.routes.routeSecurityLocal,modules.shared.auditLogger,function login,Yes
@@ -1597,9 +1011,6 @@ gateway.modules.routes.routeSecurityMsft,json,header,Yes
gateway.modules.routes.routeSecurityMsft,logging,header,Yes
gateway.modules.routes.routeSecurityMsft,modules.auth,header,Yes
gateway.modules.routes.routeSecurityMsft,modules.auth,header,Yes
-gateway.modules.routes.routeSecurityMsft,modules.auth,function refresh_token,Yes
-gateway.modules.routes.routeSecurityMsft,modules.auth,function refresh_token,Yes
-gateway.modules.routes.routeSecurityMsft,modules.auth,function auth_callback,Yes
gateway.modules.routes.routeSecurityMsft,modules.datamodels.datamodelSecurity,header,Yes
gateway.modules.routes.routeSecurityMsft,modules.datamodels.datamodelUam,header,Yes
gateway.modules.routes.routeSecurityMsft,modules.interfaces.interfaceDbApp,header,Yes
@@ -1648,30 +1059,576 @@ gateway.modules.security.rootAccess,modules.connectors.connectorDbPostgre,header
gateway.modules.security.rootAccess,modules.datamodels.datamodelUam,header,Yes
gateway.modules.security.rootAccess,modules.interfaces.interfaceBootstrap,function _ensureBootstrap,Yes
gateway.modules.security.rootAccess,modules.shared.configuration,header,Yes
+gateway.modules.services.__init__,(relative) .serviceAi.mainServiceAi,function __init__,Yes
gateway.modules.services.__init__,(relative) .serviceChat.mainServiceChat,function __init__,Yes
+gateway.modules.services.__init__,(relative) .serviceExtraction.mainServiceExtraction,function __init__,Yes
+gateway.modules.services.__init__,(relative) .serviceGeneration.mainServiceGeneration,function __init__,Yes
gateway.modules.services.__init__,(relative) .serviceMessaging.mainServiceMessaging,function __init__,Yes
gateway.modules.services.__init__,(relative) .serviceSecurity.mainServiceSecurity,function __init__,Yes
gateway.modules.services.__init__,(relative) .serviceSharepoint.mainServiceSharepoint,function __init__,Yes
gateway.modules.services.__init__,(relative) .serviceTicket.mainServiceTicket,function __init__,Yes
gateway.modules.services.__init__,(relative) .serviceUtils.mainServiceUtils,function __init__,Yes
+gateway.modules.services.__init__,(relative) .serviceWeb.mainServiceWeb,function __init__,Yes
gateway.modules.services.__init__,glob,header,Yes
gateway.modules.services.__init__,importlib,header,Yes
gateway.modules.services.__init__,logging,header,Yes
-gateway.modules.services.__init__,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.services.__init__,modules.datamodels.datamodelChat,header,Yes
gateway.modules.services.__init__,modules.datamodels.datamodelUam,header,Yes
gateway.modules.services.__init__,modules.interfaces.interfaceDbApp,function __init__,Yes
+gateway.modules.services.__init__,modules.interfaces.interfaceDbChat,function __init__,Yes
gateway.modules.services.__init__,modules.interfaces.interfaceDbManagement,function __init__,Yes
gateway.modules.services.__init__,os,header,Yes
gateway.modules.services.__init__,typing,header,Yes
+gateway.modules.services.serviceAi.mainAiChat,logging,header,Yes
+gateway.modules.services.serviceAi.mainAiChat,modules.aicore.aicoreModelRegistry,function onStart,Yes
+gateway.modules.services.serviceAi.mainAiChat,typing,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,(relative) .subAiCallLooping,function _initializeSubmodules,Yes
+gateway.modules.services.serviceAi.mainServiceAi,(relative) .subContentExtraction,function _initializeSubmodules,Yes
+gateway.modules.services.serviceAi.mainServiceAi,(relative) .subDocumentIntents,function _initializeSubmodules,Yes
+gateway.modules.services.serviceAi.mainServiceAi,(relative) .subJsonResponseHandling,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,(relative) .subResponseParsing,function _initializeSubmodules,Yes
+gateway.modules.services.serviceAi.mainServiceAi,(relative) .subStructureFilling,function _initializeSubmodules,Yes
+gateway.modules.services.serviceAi.mainServiceAi,(relative) .subStructureGeneration,function _initializeSubmodules,Yes
+gateway.modules.services.serviceAi.mainServiceAi,base64,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,json,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,logging,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,modules.datamodels.datamodelChat,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,modules.datamodels.datamodelWorkflow,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,modules.interfaces.interfaceAiObjects,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,modules.services.serviceExtraction.mainServiceExtraction,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,modules.services.serviceGeneration.mainServiceGeneration,function renderResult,Yes
+gateway.modules.services.serviceAi.mainServiceAi,modules.services.serviceGeneration.paths.codePath,function _handleCodeGeneration,Yes
+gateway.modules.services.serviceAi.mainServiceAi,modules.services.serviceGeneration.paths.documentPath,function _handleDocumentGeneration,Yes
+gateway.modules.services.serviceAi.mainServiceAi,modules.services.serviceGeneration.paths.imagePath,function _handleImageGeneration,Yes
+gateway.modules.services.serviceAi.mainServiceAi,modules.shared.jsonUtils,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,re,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,time,header,Yes
+gateway.modules.services.serviceAi.mainServiceAi,time,function _handleDataExtraction,Yes
+gateway.modules.services.serviceAi.mainServiceAi,typing,header,Yes
+gateway.modules.services.serviceAi.subAiCallLooping,(relative) .subJsonResponseHandling,header,Yes
+gateway.modules.services.serviceAi.subAiCallLooping,(relative) .subLoopingUseCases,header,Yes
+gateway.modules.services.serviceAi.subAiCallLooping,json,header,Yes
+gateway.modules.services.serviceAi.subAiCallLooping,logging,header,Yes
+gateway.modules.services.serviceAi.subAiCallLooping,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.services.serviceAi.subAiCallLooping,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceAi.subAiCallLooping,modules.shared.jsonContinuation,header,Yes
+gateway.modules.services.serviceAi.subAiCallLooping,modules.shared.jsonUtils,header,Yes
+gateway.modules.services.serviceAi.subAiCallLooping,modules.shared.jsonUtils,header,Yes
+gateway.modules.services.serviceAi.subAiCallLooping,modules.shared.jsonUtils,header,Yes
+gateway.modules.services.serviceAi.subAiCallLooping,modules.shared.jsonUtils,header,Yes
+gateway.modules.services.serviceAi.subAiCallLooping,modules.workflows.processing.shared.stateTools,header,Yes
+gateway.modules.services.serviceAi.subAiCallLooping,typing,header,Yes
+gateway.modules.services.serviceAi.subContentExtraction,base64,header,Yes
+gateway.modules.services.serviceAi.subContentExtraction,json,header,Yes
+gateway.modules.services.serviceAi.subContentExtraction,logging,header,Yes
+gateway.modules.services.serviceAi.subContentExtraction,modules.datamodels.datamodelAi,function extractTextFromImage,Yes
+gateway.modules.services.serviceAi.subContentExtraction,modules.datamodels.datamodelAi,function processTextContentWithAi,Yes
+gateway.modules.services.serviceAi.subContentExtraction,modules.datamodels.datamodelChat,header,Yes
+gateway.modules.services.serviceAi.subContentExtraction,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceAi.subContentExtraction,modules.workflows.processing.shared.stateTools,header,Yes
+gateway.modules.services.serviceAi.subContentExtraction,traceback,function extractTextFromImage,Yes
+gateway.modules.services.serviceAi.subContentExtraction,traceback,function processTextContentWithAi,Yes
+gateway.modules.services.serviceAi.subContentExtraction,typing,header,Yes
+gateway.modules.services.serviceAi.subDocumentIntents,json,header,Yes
+gateway.modules.services.serviceAi.subDocumentIntents,logging,header,Yes
+gateway.modules.services.serviceAi.subDocumentIntents,modules.datamodels.datamodelChat,header,Yes
+gateway.modules.services.serviceAi.subDocumentIntents,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceAi.subDocumentIntents,modules.workflows.processing.shared.stateTools,header,Yes
+gateway.modules.services.serviceAi.subDocumentIntents,traceback,function resolvePreExtractedDocument,Yes
+gateway.modules.services.serviceAi.subDocumentIntents,typing,header,Yes
+gateway.modules.services.serviceAi.subJsonMerger,datetime,header,Yes
+gateway.modules.services.serviceAi.subJsonMerger,json,header,Yes
+gateway.modules.services.serviceAi.subJsonMerger,logging,header,Yes
+gateway.modules.services.serviceAi.subJsonMerger,modules.shared.jsonUtils,header,Yes
+gateway.modules.services.serviceAi.subJsonMerger,os,header,Yes
+gateway.modules.services.serviceAi.subJsonMerger,re,header,Yes
+gateway.modules.services.serviceAi.subJsonMerger,typing,header,Yes
+gateway.modules.services.serviceAi.subJsonResponseHandling,(relative) .subJsonMerger,function mergeJsonStringsWithOverlap,Yes
+gateway.modules.services.serviceAi.subJsonResponseHandling,json,header,Yes
+gateway.modules.services.serviceAi.subJsonResponseHandling,logging,header,Yes
+gateway.modules.services.serviceAi.subJsonResponseHandling,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.services.serviceAi.subJsonResponseHandling,modules.shared.debugLogger,function mergeFragmentIntoSection,Yes
+gateway.modules.services.serviceAi.subJsonResponseHandling,modules.shared.jsonUtils,header,Yes
+gateway.modules.services.serviceAi.subJsonResponseHandling,re,header,Yes
+gateway.modules.services.serviceAi.subJsonResponseHandling,re,function _extractRowsFromFragment,Yes
+gateway.modules.services.serviceAi.subJsonResponseHandling,re,function _detectAndNormalizeFragment,Yes
+gateway.modules.services.serviceAi.subJsonResponseHandling,traceback,function _mergeJsonStructuresGeneric,Yes
+gateway.modules.services.serviceAi.subJsonResponseHandling,typing,header,Yes
+gateway.modules.services.serviceAi.subLoopingUseCases,dataclasses,header,Yes
+gateway.modules.services.serviceAi.subLoopingUseCases,json,function _handleChapterStructureFinalResult,Yes
+gateway.modules.services.serviceAi.subLoopingUseCases,json,function _handleCodeStructureFinalResult,Yes
+gateway.modules.services.serviceAi.subLoopingUseCases,json,function _handleCodeContentFinalResult,Yes
+gateway.modules.services.serviceAi.subLoopingUseCases,logging,header,Yes
+gateway.modules.services.serviceAi.subLoopingUseCases,typing,header,Yes
+gateway.modules.services.serviceAi.subResponseParsing,(relative) .subJsonResponseHandling,header,Yes
+gateway.modules.services.serviceAi.subResponseParsing,json,header,Yes
+gateway.modules.services.serviceAi.subResponseParsing,logging,header,Yes
+gateway.modules.services.serviceAi.subResponseParsing,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.services.serviceAi.subResponseParsing,modules.shared.jsonUtils,header,Yes
+gateway.modules.services.serviceAi.subResponseParsing,typing,header,Yes
+gateway.modules.services.serviceAi.subStructureFilling,asyncio,header,Yes
+gateway.modules.services.serviceAi.subStructureFilling,base64,function _processAiResponseForSection,Yes
+gateway.modules.services.serviceAi.subStructureFilling,copy,header,Yes
+gateway.modules.services.serviceAi.subStructureFilling,json,header,Yes
+gateway.modules.services.serviceAi.subStructureFilling,logging,header,Yes
+gateway.modules.services.serviceAi.subStructureFilling,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.services.serviceAi.subStructureFilling,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceAi.subStructureFilling,modules.datamodels.datamodelJson,function _getAcceptedSectionTypesForFormat,Yes
+gateway.modules.services.serviceAi.subStructureFilling,modules.datamodels.datamodelJson,function _getAcceptedSectionTypesForFormat,Yes
+gateway.modules.services.serviceAi.subStructureFilling,modules.services.serviceGeneration.renderers.registry,function _getAcceptedSectionTypesForFormat,Yes
+gateway.modules.services.serviceAi.subStructureFilling,modules.shared.jsonContinuation,function buildSectionPromptWithContinuation,Yes
+gateway.modules.services.serviceAi.subStructureFilling,modules.shared.jsonUtils,function _extractAndMergeMultipleJsonBlocks,Yes
+gateway.modules.services.serviceAi.subStructureFilling,modules.shared.jsonUtils,function _processAiResponseForSection,Yes
+gateway.modules.services.serviceAi.subStructureFilling,modules.shared.jsonUtils,function _processSingleSection,Yes
+gateway.modules.services.serviceAi.subStructureFilling,modules.workflows.processing.shared.stateTools,header,Yes
+gateway.modules.services.serviceAi.subStructureFilling,typing,header,Yes
+gateway.modules.services.serviceAi.subStructureGeneration,json,header,Yes
+gateway.modules.services.serviceAi.subStructureGeneration,logging,header,Yes
+gateway.modules.services.serviceAi.subStructureGeneration,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.services.serviceAi.subStructureGeneration,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceAi.subStructureGeneration,modules.services.serviceGeneration.renderers.registry,function generateStructure,Yes
+gateway.modules.services.serviceAi.subStructureGeneration,modules.shared,function generateStructure,Yes
+gateway.modules.services.serviceAi.subStructureGeneration,modules.shared.jsonContinuation,function generateStructure,Yes
+gateway.modules.services.serviceAi.subStructureGeneration,modules.workflows.processing.shared.stateTools,header,Yes
+gateway.modules.services.serviceAi.subStructureGeneration,typing,header,Yes
gateway.modules.services.serviceChat.mainServiceChat,json,function calculateObjectSize,Yes
gateway.modules.services.serviceChat.mainServiceChat,logging,header,Yes
-gateway.modules.services.serviceChat.mainServiceChat,modules.aichat.datamodelFeatureAiChat,header,Yes
gateway.modules.services.serviceChat.mainServiceChat,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.services.serviceChat.mainServiceChat,modules.datamodels.datamodelChat,header,Yes
gateway.modules.services.serviceChat.mainServiceChat,modules.datamodels.datamodelDocref,function getChatDocumentsFromDocumentList,Yes
gateway.modules.services.serviceChat.mainServiceChat,modules.datamodels.datamodelUam,header,Yes
gateway.modules.services.serviceChat.mainServiceChat,modules.shared.progressLogger,header,Yes
gateway.modules.services.serviceChat.mainServiceChat,sys,function calculateObjectSize,Yes
gateway.modules.services.serviceChat.mainServiceChat,typing,header,Yes
+gateway.modules.services.serviceExtraction.__init__,(relative) .mainServiceExtraction,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerImage,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerImage,PIL,function chunk,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerImage,base64,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerImage,io,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerImage,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerImage,typing,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerStructure,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerStructure,json,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerStructure,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerStructure,typing,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerTable,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerTable,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerTable,typing,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerText,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerText,logging,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerText,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.chunking.chunkerText,typing,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorBinary,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorBinary,(relative) ..subUtils,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorBinary,base64,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorBinary,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorBinary,typing,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorCsv,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorCsv,(relative) ..subUtils,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorCsv,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorCsv,typing,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorDocx,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorDocx,(relative) ..subUtils,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorDocx,docx,function _load,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorDocx,io,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorDocx,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorDocx,typing,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorHtml,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorHtml,(relative) ..subUtils,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorHtml,bs4,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorHtml,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorHtml,typing,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorImage,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorImage,(relative) ..subUtils,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorImage,PIL,function extract,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorImage,base64,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorImage,io,function extract,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorImage,logging,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorImage,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorImage,typing,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorJson,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorJson,(relative) ..subUtils,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorJson,json,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorJson,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorJson,typing,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorPdf,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorPdf,(relative) ..subUtils,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorPdf,PyPDF2,function _load,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorPdf,base64,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorPdf,fitz,function _load,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorPdf,io,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorPdf,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorPdf,typing,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorPptx,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorPptx,base64,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorPptx,io,function extract,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorPptx,logging,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorPptx,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorPptx,pptx,function _load,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorPptx,typing,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorSql,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorSql,(relative) ..subUtils,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorSql,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorSql,typing,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorText,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorText,(relative) ..subUtils,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorText,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorText,typing,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorXlsx,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorXlsx,(relative) ..subUtils,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorXlsx,datetime,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorXlsx,io,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorXlsx,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorXlsx,openpyxl,function _load,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorXlsx,typing,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorXml,(relative) ..subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorXml,(relative) ..subUtils,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorXml,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorXml,typing,header,Yes
+gateway.modules.services.serviceExtraction.extractors.extractorXml,xml.etree.ElementTree,header,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,(relative) .merging.mergerDefault,function applyMerging,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,(relative) .merging.mergerTable,function applyMerging,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,(relative) .merging.mergerText,function applyMerging,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,(relative) .subMerger,function applyMerging,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,(relative) .subPipeline,header,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,(relative) .subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,asyncio,header,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,base64,header,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,json,header,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,logging,header,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.aicore.aicoreModelRegistry,header,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.aicore.aicoreModelSelector,header,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.datamodels.datamodelChat,header,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.interfaces.interfaceDbManagement,function extractContent,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.shared.debugLogger,function extractContent,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,modules.shared.jsonUtils,header,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,time,header,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,typing,header,Yes
+gateway.modules.services.serviceExtraction.mainServiceExtraction,uuid,header,Yes
+gateway.modules.services.serviceExtraction.merging.mergerDefault,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.merging.mergerDefault,typing,header,Yes
+gateway.modules.services.serviceExtraction.merging.mergerTable,(relative) ..subUtils,header,Yes
+gateway.modules.services.serviceExtraction.merging.mergerTable,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.merging.mergerTable,typing,header,Yes
+gateway.modules.services.serviceExtraction.merging.mergerText,(relative) ..subUtils,header,Yes
+gateway.modules.services.serviceExtraction.merging.mergerText,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.merging.mergerText,typing,header,Yes
+gateway.modules.services.serviceExtraction.subMerger,(relative) .subUtils,header,Yes
+gateway.modules.services.serviceExtraction.subMerger,logging,header,Yes
+gateway.modules.services.serviceExtraction.subMerger,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.subMerger,typing,header,Yes
+gateway.modules.services.serviceExtraction.subPipeline,(relative) .mainServiceExtraction,function runExtraction,Yes
+gateway.modules.services.serviceExtraction.subPipeline,(relative) .subRegistry,header,Yes
+gateway.modules.services.serviceExtraction.subPipeline,(relative) .subUtils,header,Yes
+gateway.modules.services.serviceExtraction.subPipeline,logging,header,Yes
+gateway.modules.services.serviceExtraction.subPipeline,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.subPipeline,typing,header,Yes
+gateway.modules.services.serviceExtraction.subPromptBuilderExtraction,json,header,Yes
+gateway.modules.services.serviceExtraction.subPromptBuilderExtraction,logging,header,Yes
+gateway.modules.services.serviceExtraction.subPromptBuilderExtraction,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.services.serviceExtraction.subPromptBuilderExtraction,modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceExtraction.subPromptBuilderExtraction,modules.shared.debugLogger,function buildExtractionPrompt,Yes
+gateway.modules.services.serviceExtraction.subPromptBuilderExtraction,typing,header,Yes
+gateway.modules.services.serviceExtraction.subPromptBuilderExtraction,typing,header,Yes
+gateway.modules.services.serviceExtraction.subRegistry,(relative) .chunking.chunkerImage,function __init__,Yes
+gateway.modules.services.serviceExtraction.subRegistry,(relative) .chunking.chunkerStructure,function __init__,Yes
+gateway.modules.services.serviceExtraction.subRegistry,(relative) .chunking.chunkerTable,function __init__,Yes
+gateway.modules.services.serviceExtraction.subRegistry,(relative) .chunking.chunkerText,function __init__,Yes
+gateway.modules.services.serviceExtraction.subRegistry,(relative) .extractors.extractorBinary,function _auto_discover_extractors,Yes
+gateway.modules.services.serviceExtraction.subRegistry,importlib,function _auto_discover_extractors,Yes
+gateway.modules.services.serviceExtraction.subRegistry,logging,header,Yes
+gateway.modules.services.serviceExtraction.subRegistry,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceExtraction.subRegistry,os,function _auto_discover_extractors,Yes
+gateway.modules.services.serviceExtraction.subRegistry,pathlib,function _auto_discover_extractors,Yes
+gateway.modules.services.serviceExtraction.subRegistry,traceback,function _auto_discover_extractors,Yes
+gateway.modules.services.serviceExtraction.subRegistry,traceback,function __init__,Yes
+gateway.modules.services.serviceExtraction.subRegistry,typing,header,Yes
+gateway.modules.services.serviceExtraction.subUtils,uuid,header,Yes
+gateway.modules.services.serviceGeneration.mainServiceGeneration,(relative) .renderers.registry,function _getFormatRenderer,Yes
+gateway.modules.services.serviceGeneration.mainServiceGeneration,base64,header,Yes
+gateway.modules.services.serviceGeneration.mainServiceGeneration,logging,header,Yes
+gateway.modules.services.serviceGeneration.mainServiceGeneration,modules.datamodels.datamodelChat,header,Yes
+gateway.modules.services.serviceGeneration.mainServiceGeneration,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.mainServiceGeneration,modules.services.serviceExtraction.subPromptBuilderExtraction,function getAdaptiveExtractionPrompt,Yes
+gateway.modules.services.serviceGeneration.mainServiceGeneration,modules.services.serviceGeneration.renderers.registry,function renderReport,Yes
+gateway.modules.services.serviceGeneration.mainServiceGeneration,modules.services.serviceGeneration.subContentGenerator,function generateDocumentWithTwoPhases,Yes
+gateway.modules.services.serviceGeneration.mainServiceGeneration,modules.services.serviceGeneration.subDocumentUtility,header,Yes
+gateway.modules.services.serviceGeneration.mainServiceGeneration,modules.services.serviceGeneration.subStructureGenerator,function generateDocumentWithTwoPhases,Yes
+gateway.modules.services.serviceGeneration.mainServiceGeneration,traceback,header,Yes
+gateway.modules.services.serviceGeneration.mainServiceGeneration,typing,header,Yes
+gateway.modules.services.serviceGeneration.mainServiceGeneration,uuid,header,Yes
+gateway.modules.services.serviceGeneration.paths.codePath,json,header,Yes
+gateway.modules.services.serviceGeneration.paths.codePath,logging,header,Yes
+gateway.modules.services.serviceGeneration.paths.codePath,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.services.serviceGeneration.paths.codePath,modules.datamodels.datamodelDocument,function generateCode,Yes
+gateway.modules.services.serviceGeneration.paths.codePath,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceGeneration.paths.codePath,modules.datamodels.datamodelWorkflow,header,Yes
+gateway.modules.services.serviceGeneration.paths.codePath,modules.services.serviceGeneration.renderers.registry,function _getCodeRenderer,Yes
+gateway.modules.services.serviceGeneration.paths.codePath,modules.shared.jsonContinuation,function _generateCodeStructure,Yes
+gateway.modules.services.serviceGeneration.paths.codePath,modules.shared.jsonContinuation,function _generateSingleFileContent,Yes
+gateway.modules.services.serviceGeneration.paths.codePath,modules.shared.jsonUtils,header,Yes
+gateway.modules.services.serviceGeneration.paths.codePath,re,header,Yes
+gateway.modules.services.serviceGeneration.paths.codePath,time,header,Yes
+gateway.modules.services.serviceGeneration.paths.codePath,typing,header,Yes
+gateway.modules.services.serviceGeneration.paths.documentPath,copy,header,Yes
+gateway.modules.services.serviceGeneration.paths.documentPath,json,header,Yes
+gateway.modules.services.serviceGeneration.paths.documentPath,logging,header,Yes
+gateway.modules.services.serviceGeneration.paths.documentPath,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.services.serviceGeneration.paths.documentPath,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.paths.documentPath,modules.datamodels.datamodelExtraction,header,Yes
+gateway.modules.services.serviceGeneration.paths.documentPath,modules.datamodels.datamodelWorkflow,header,Yes
+gateway.modules.services.serviceGeneration.paths.documentPath,modules.workflows.processing.shared.stateTools,header,Yes
+gateway.modules.services.serviceGeneration.paths.documentPath,time,header,Yes
+gateway.modules.services.serviceGeneration.paths.documentPath,typing,header,Yes
+gateway.modules.services.serviceGeneration.paths.imagePath,base64,function generateImages,Yes
+gateway.modules.services.serviceGeneration.paths.imagePath,json,function generateImages,Yes
+gateway.modules.services.serviceGeneration.paths.imagePath,logging,header,Yes
+gateway.modules.services.serviceGeneration.paths.imagePath,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.services.serviceGeneration.paths.imagePath,modules.datamodels.datamodelWorkflow,header,Yes
+gateway.modules.services.serviceGeneration.paths.imagePath,time,header,Yes
+gateway.modules.services.serviceGeneration.paths.imagePath,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.codeRendererBaseTemplate,(relative) .documentRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceGeneration.renderers.codeRendererBaseTemplate,abc,header,Yes
+gateway.modules.services.serviceGeneration.renderers.codeRendererBaseTemplate,logging,header,Yes
+gateway.modules.services.serviceGeneration.renderers.codeRendererBaseTemplate,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.renderers.codeRendererBaseTemplate,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,PIL,header,Yes
+gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,abc,header,Yes
+gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,base64,header,Yes
+gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,datetime,header,Yes
+gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,io,header,Yes
+gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,json,header,Yes
+gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,logging,header,Yes
+gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,modules.datamodels.datamodelJson,header,Yes
+gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,re,header,Yes
+gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,re,function _determineFilename,Yes
+gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,threading,function _getAiStyles,Yes
+gateway.modules.services.serviceGeneration.renderers.documentRendererBaseTemplate,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.registry,(relative) .documentRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceGeneration.renderers.registry,importlib,header,Yes
+gateway.modules.services.serviceGeneration.renderers.registry,logging,header,Yes
+gateway.modules.services.serviceGeneration.renderers.registry,os,function discoverRenderers,Yes
+gateway.modules.services.serviceGeneration.renderers.registry,pathlib,function discoverRenderers,Yes
+gateway.modules.services.serviceGeneration.renderers.registry,sys,function discoverRenderers,Yes
+gateway.modules.services.serviceGeneration.renderers.registry,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeCsv,(relative) .codeRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeCsv,(relative) .rendererCsv,function render,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeCsv,csv,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeCsv,io,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeCsv,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeCsv,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeJson,(relative) .codeRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeJson,(relative) .rendererJson,function render,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeJson,json,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeJson,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeJson,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeXml,(relative) .codeRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeXml,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeXml,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeXml,xml.dom,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCodeXml,xml.etree.ElementTree,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCsv,(relative) .documentRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCsv,csv,function _convertRowsToCsv,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCsv,io,function _convertRowsToCsv,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCsv,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererCsv,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,(relative) .documentRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,(relative) .rendererHtml,function render,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,PIL,function _renderJsonImage,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,base64,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,csv,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.enum.style,function _setupDocumentStyles,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.enum.style,function _createStyle,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.enum.table,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.enum.text,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.oxml.ns,function _renderTableFastXml,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _renderTableFastXml,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _createTableBordersXml,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _createTableRowXml,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _applyHorizontalBordersOnly,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _setCellBackground,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.oxml.shared,function _setCellBackgroundFast,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,docx.shared,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,io,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,lxml,function _renderTableFastXml,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,re,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,time,function _generateDocxFromJson,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,time,function _renderJsonTable,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,time,function _renderTableFastXml,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererDocx,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererHtml,(relative) .documentRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererHtml,base64,function render,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererHtml,base64,function _replaceImageDataUris,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererHtml,html,function _renderJsonImage,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererHtml,html,function _replaceImageDataUris,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererHtml,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererHtml,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererHtml,re,function _replaceImageDataUris,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererHtml,re,function _extractImages,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererHtml,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererImage,(relative) .documentRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererImage,base64,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererImage,json,function _generateAiImage,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererImage,logging,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererImage,modules.datamodels.datamodelAi,function _generateAiImage,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererImage,modules.datamodels.datamodelAi,function _compressPromptWithAi,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererImage,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererImage,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererJson,(relative) .documentRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererJson,json,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererJson,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererJson,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererJson,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererMarkdown,(relative) .documentRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererMarkdown,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererMarkdown,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererMarkdown,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,(relative) .documentRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,(relative) .rendererHtml,function render,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,PIL,function _renderJsonImage,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,base64,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,base64,function _renderJsonImage,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,io,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,io,function _renderJsonImage,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,json,function _getAiStylesWithPdfColors,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,modules.datamodels.datamodelAi,function _getAiStylesWithPdfColors,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,re,function _getAiStylesWithPdfColors,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,re,function _renderJsonImage,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.lib,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.lib.enums,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.lib.pagesizes,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.lib.pagesizes,function _renderJsonImage,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.lib.styles,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.lib.units,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.lib.units,function _renderJsonImage,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.platypus,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,reportlab.platypus,function _renderJsonImage,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPdf,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,(relative) .documentRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,PIL,function _addImagesToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,PIL,function _addImagesToSlideInFrame,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,PIL,function _addImagesToSlideInFrame,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,base64,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,base64,function _addImagesToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,base64,function _addImagesToSlideInFrame,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,datetime,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,io,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,io,function _addImagesToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,io,function _addImagesToSlideInFrame,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,json,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,logging,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx,function render,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function render,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addImagesToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addTableToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addBulletListToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addHeadingToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addParagraphToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _addCodeBlockToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _renderSlideContentWithFrames,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _renderTextSectionsInFrame,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.dml.color,function _renderSectionToTextFrame,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function render,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _addImagesToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _addTableToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _addBulletListToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _addParagraphToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _renderSlideContentWithFrames,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _renderTextSectionsInFrame,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _renderSectionToTextFrame,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.enum.text,function _addImagesToSlideInFrame,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function render,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addImagesToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addTableToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addBulletListToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addHeadingToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addParagraphToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addCodeBlockToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _renderSlideContentWithFrames,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _renderTextSectionsInFrame,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _renderSectionToTextFrame,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addImagesToSlideInFrame,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function render,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function render,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _renderSlideContentWithFrames,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,pptx.util,function _addBulletListToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,re,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,re,function render,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,traceback,function _addImagesToSlide,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererPptx,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererText,(relative) .documentRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererText,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererText,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererText,typing,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,(relative) .documentRendererBaseTemplate,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,(relative) .rendererCsv,function render,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,base64,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,base64,function _addImageToExcel,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,datetime,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,dateutil,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,io,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,io,function _addImageToExcel,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,json,function _getAiStylesWithExcelColors,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,modules.datamodels.datamodelAi,function _getAiStylesWithExcelColors,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,modules.datamodels.datamodelDocument,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,modules.datamodels.datamodelJson,function getAcceptedSectionTypes,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,openpyxl,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,openpyxl.drawing.image,function _addImageToExcel,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,openpyxl.styles,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,openpyxl.utils,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,openpyxl.worksheet.table,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,re,header,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,re,function _getAiStylesWithExcelColors,Yes
+gateway.modules.services.serviceGeneration.renderers.rendererXlsx,typing,header,Yes
+gateway.modules.services.serviceGeneration.subContentGenerator,asyncio,header,Yes
+gateway.modules.services.serviceGeneration.subContentGenerator,base64,header,Yes
+gateway.modules.services.serviceGeneration.subContentGenerator,base64,function _generateImageSection,Yes
+gateway.modules.services.serviceGeneration.subContentGenerator,json,header,Yes
+gateway.modules.services.serviceGeneration.subContentGenerator,logging,header,Yes
+gateway.modules.services.serviceGeneration.subContentGenerator,modules.datamodels.datamodelAi,function _generateSimpleSection,Yes
+gateway.modules.services.serviceGeneration.subContentGenerator,modules.datamodels.datamodelAi,function _generateImageSection,Yes
+gateway.modules.services.serviceGeneration.subContentGenerator,modules.services.serviceGeneration.subContentIntegrator,header,Yes
+gateway.modules.services.serviceGeneration.subContentGenerator,modules.shared.jsonUtils,function _generateSimpleSection,Yes
+gateway.modules.services.serviceGeneration.subContentGenerator,modules.workflows.processing.shared.stateTools,header,Yes
+gateway.modules.services.serviceGeneration.subContentGenerator,re,header,Yes
+gateway.modules.services.serviceGeneration.subContentGenerator,traceback,header,Yes
+gateway.modules.services.serviceGeneration.subContentGenerator,typing,header,Yes
+gateway.modules.services.serviceGeneration.subContentIntegrator,json,function integrateContent,Yes
+gateway.modules.services.serviceGeneration.subContentIntegrator,logging,header,Yes
+gateway.modules.services.serviceGeneration.subContentIntegrator,typing,header,Yes
+gateway.modules.services.serviceGeneration.subDocumentUtility,csv,function convertDocumentDataToString,Yes
+gateway.modules.services.serviceGeneration.subDocumentUtility,csv,function convertDocumentDataToString,Yes
+gateway.modules.services.serviceGeneration.subDocumentUtility,io,function convertDocumentDataToString,Yes
+gateway.modules.services.serviceGeneration.subDocumentUtility,io,function convertDocumentDataToString,Yes
+gateway.modules.services.serviceGeneration.subDocumentUtility,json,header,Yes
+gateway.modules.services.serviceGeneration.subDocumentUtility,logging,header,Yes
+gateway.modules.services.serviceGeneration.subDocumentUtility,os,header,Yes
+gateway.modules.services.serviceGeneration.subDocumentUtility,typing,header,Yes
+gateway.modules.services.serviceGeneration.subJsonSchema,typing,header,Yes
+gateway.modules.services.serviceGeneration.subPromptBuilderGeneration,logging,header,Yes
+gateway.modules.services.serviceGeneration.subPromptBuilderGeneration,modules.datamodels.datamodelJson,header,Yes
+gateway.modules.services.serviceGeneration.subPromptBuilderGeneration,typing,header,Yes
+gateway.modules.services.serviceGeneration.subStructureGenerator,json,header,Yes
+gateway.modules.services.serviceGeneration.subStructureGenerator,json,function _createStructurePrompt,Yes
+gateway.modules.services.serviceGeneration.subStructureGenerator,logging,header,Yes
+gateway.modules.services.serviceGeneration.subStructureGenerator,modules.datamodels.datamodelAi,function generateStructure,Yes
+gateway.modules.services.serviceGeneration.subStructureGenerator,modules.datamodels.datamodelJson,header,Yes
+gateway.modules.services.serviceGeneration.subStructureGenerator,typing,header,Yes
gateway.modules.services.serviceMessaging.mainServiceMessaging,html,function _textToHtml,Yes
gateway.modules.services.serviceMessaging.mainServiceMessaging,importlib,function _loadSubscriptionFunction,Yes
gateway.modules.services.serviceMessaging.mainServiceMessaging,logging,header,Yes
@@ -1701,7 +1658,7 @@ gateway.modules.services.serviceTicket.mainServiceTicket,modules.interfaces.inte
gateway.modules.services.serviceTicket.mainServiceTicket,typing,header,Yes
gateway.modules.services.serviceUtils.mainServiceUtils,json,function writeDebugArtifact,Yes
gateway.modules.services.serviceUtils.mainServiceUtils,logging,header,Yes
-gateway.modules.services.serviceUtils.mainServiceUtils,modules.aichat.interfaceFeatureAiChat,function storeDebugMessageAndDocuments,Yes
+gateway.modules.services.serviceUtils.mainServiceUtils,modules.interfaces.interfaceDbChat,function storeDebugMessageAndDocuments,Yes
gateway.modules.services.serviceUtils.mainServiceUtils,modules.shared,header,Yes
gateway.modules.services.serviceUtils.mainServiceUtils,modules.shared.configuration,header,Yes
gateway.modules.services.serviceUtils.mainServiceUtils,modules.shared.debugLogger,function writeDebugFile,Yes
@@ -1711,6 +1668,14 @@ gateway.modules.services.serviceUtils.mainServiceUtils,modules.shared.eventManag
gateway.modules.services.serviceUtils.mainServiceUtils,modules.shared.timeUtils,header,Yes
gateway.modules.services.serviceUtils.mainServiceUtils,re,function sanitizePromptContent,Yes
gateway.modules.services.serviceUtils.mainServiceUtils,typing,header,Yes
+gateway.modules.services.serviceWeb.mainServiceWeb,asyncio,header,Yes
+gateway.modules.services.serviceWeb.mainServiceWeb,json,header,Yes
+gateway.modules.services.serviceWeb.mainServiceWeb,logging,header,Yes
+gateway.modules.services.serviceWeb.mainServiceWeb,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.services.serviceWeb.mainServiceWeb,time,header,Yes
+gateway.modules.services.serviceWeb.mainServiceWeb,time,function _processCrawlResultsWithHierarchy,Yes
+gateway.modules.services.serviceWeb.mainServiceWeb,typing,header,Yes
+gateway.modules.services.serviceWeb.mainServiceWeb,urllib.parse,header,Yes
gateway.modules.shared.__init__,(relative) .,header,Yes
gateway.modules.shared.__init__,(relative) .,header,Yes
gateway.modules.shared.__init__,(relative) .,header,Yes
@@ -1797,8 +1762,9 @@ gateway.modules.workflows.automation.__init__,(relative) .mainWorkflow,header,Ye
gateway.modules.workflows.automation.mainWorkflow,(relative) .subAutomationUtils,header,Yes
gateway.modules.workflows.automation.mainWorkflow,json,header,Yes
gateway.modules.workflows.automation.mainWorkflow,logging,header,Yes
-gateway.modules.workflows.automation.mainWorkflow,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.automation.mainWorkflow,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.automation.mainWorkflow,modules.datamodels.datamodelUam,header,Yes
+gateway.modules.workflows.automation.mainWorkflow,modules.features.automation.datamodelFeatureAutomation,header,Yes
gateway.modules.workflows.automation.mainWorkflow,modules.services,header,Yes
gateway.modules.workflows.automation.mainWorkflow,modules.shared.eventManagement,header,Yes
gateway.modules.workflows.automation.mainWorkflow,modules.shared.timeUtils,header,Yes
@@ -1821,11 +1787,11 @@ gateway.modules.workflows.methods.methodAi.actions.__init__,(relative) .summariz
gateway.modules.workflows.methods.methodAi.actions.__init__,(relative) .translateDocument,header,Yes
gateway.modules.workflows.methods.methodAi.actions.__init__,(relative) .webResearch,header,Yes
gateway.modules.workflows.methods.methodAi.actions.convertDocument,logging,header,Yes
-gateway.modules.workflows.methods.methodAi.actions.convertDocument,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodAi.actions.convertDocument,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodAi.actions.convertDocument,typing,header,Yes
gateway.modules.workflows.methods.methodAi.actions.generateCode,logging,header,Yes
-gateway.modules.workflows.methods.methodAi.actions.generateCode,modules.aichat.datamodelFeatureAiChat,header,Yes
gateway.modules.workflows.methods.methodAi.actions.generateCode,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.workflows.methods.methodAi.actions.generateCode,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodAi.actions.generateCode,modules.datamodels.datamodelDocref,function generateCode,Yes
gateway.modules.workflows.methods.methodAi.actions.generateCode,modules.datamodels.datamodelExtraction,header,Yes
gateway.modules.workflows.methods.methodAi.actions.generateCode,modules.datamodels.datamodelWorkflow,header,Yes
@@ -1833,8 +1799,8 @@ gateway.modules.workflows.methods.methodAi.actions.generateCode,re,function gene
gateway.modules.workflows.methods.methodAi.actions.generateCode,time,header,Yes
gateway.modules.workflows.methods.methodAi.actions.generateCode,typing,header,Yes
gateway.modules.workflows.methods.methodAi.actions.generateDocument,logging,header,Yes
-gateway.modules.workflows.methods.methodAi.actions.generateDocument,modules.aichat.datamodelFeatureAiChat,header,Yes
gateway.modules.workflows.methods.methodAi.actions.generateDocument,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.workflows.methods.methodAi.actions.generateDocument,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodAi.actions.generateDocument,modules.datamodels.datamodelDocref,function generateDocument,Yes
gateway.modules.workflows.methods.methodAi.actions.generateDocument,modules.datamodels.datamodelExtraction,header,Yes
gateway.modules.workflows.methods.methodAi.actions.generateDocument,modules.datamodels.datamodelWorkflow,header,Yes
@@ -1843,10 +1809,8 @@ gateway.modules.workflows.methods.methodAi.actions.generateDocument,time,header,
gateway.modules.workflows.methods.methodAi.actions.generateDocument,typing,header,Yes
gateway.modules.workflows.methods.methodAi.actions.process,json,header,Yes
gateway.modules.workflows.methods.methodAi.actions.process,logging,header,Yes
-gateway.modules.workflows.methods.methodAi.actions.process,modules.aichat.datamodelFeatureAiChat,header,Yes
gateway.modules.workflows.methods.methodAi.actions.process,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.workflows.methods.methodAi.actions.process,modules.datamodels.datamodelAi,function process,Yes
-gateway.modules.workflows.methods.methodAi.actions.process,modules.datamodels.datamodelAi,function process,Yes
+gateway.modules.workflows.methods.methodAi.actions.process,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodAi.actions.process,modules.datamodels.datamodelDocref,function process,Yes
gateway.modules.workflows.methods.methodAi.actions.process,modules.datamodels.datamodelDocref,function process,Yes
gateway.modules.workflows.methods.methodAi.actions.process,modules.datamodels.datamodelExtraction,header,Yes
@@ -1854,13 +1818,13 @@ gateway.modules.workflows.methods.methodAi.actions.process,modules.datamodels.da
gateway.modules.workflows.methods.methodAi.actions.process,time,header,Yes
gateway.modules.workflows.methods.methodAi.actions.process,typing,header,Yes
gateway.modules.workflows.methods.methodAi.actions.summarizeDocument,logging,header,Yes
-gateway.modules.workflows.methods.methodAi.actions.summarizeDocument,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodAi.actions.summarizeDocument,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodAi.actions.summarizeDocument,typing,header,Yes
gateway.modules.workflows.methods.methodAi.actions.translateDocument,logging,header,Yes
-gateway.modules.workflows.methods.methodAi.actions.translateDocument,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodAi.actions.translateDocument,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodAi.actions.translateDocument,typing,header,Yes
gateway.modules.workflows.methods.methodAi.actions.webResearch,logging,header,Yes
-gateway.modules.workflows.methods.methodAi.actions.webResearch,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodAi.actions.webResearch,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodAi.actions.webResearch,re,header,Yes
gateway.modules.workflows.methods.methodAi.actions.webResearch,time,header,Yes
gateway.modules.workflows.methods.methodAi.actions.webResearch,typing,header,Yes
@@ -1891,8 +1855,8 @@ gateway.modules.workflows.methods.methodBase,typing,header,Yes
gateway.modules.workflows.methods.methodChatbot.__init__,(relative) .methodChatbot,header,Yes
gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,json,header,Yes
gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,logging,header,Yes
-gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,modules.aichat.datamodelFeatureAiChat,header,Yes
gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,modules.connectors.connectorPreprocessor,header,Yes
+gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,modules.datamodels.datamodelDocref,function queryDatabase,Yes
gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,modules.workflows.methods.methodBase,header,Yes
gateway.modules.workflows.methods.methodChatbot.actions.queryDatabase,time,header,Yes
@@ -1908,17 +1872,17 @@ gateway.modules.workflows.methods.methodContext.actions.__init__,(relative) .get
gateway.modules.workflows.methods.methodContext.actions.__init__,(relative) .neutralizeData,header,Yes
gateway.modules.workflows.methods.methodContext.actions.__init__,(relative) .triggerPreprocessingServer,header,Yes
gateway.modules.workflows.methods.methodContext.actions.extractContent,logging,header,Yes
-gateway.modules.workflows.methods.methodContext.actions.extractContent,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodContext.actions.extractContent,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodContext.actions.extractContent,modules.datamodels.datamodelDocref,header,Yes
gateway.modules.workflows.methods.methodContext.actions.extractContent,modules.datamodels.datamodelExtraction,header,Yes
gateway.modules.workflows.methods.methodContext.actions.extractContent,time,header,Yes
gateway.modules.workflows.methods.methodContext.actions.extractContent,typing,header,Yes
gateway.modules.workflows.methods.methodContext.actions.getDocumentIndex,json,header,Yes
gateway.modules.workflows.methods.methodContext.actions.getDocumentIndex,logging,header,Yes
-gateway.modules.workflows.methods.methodContext.actions.getDocumentIndex,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodContext.actions.getDocumentIndex,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodContext.actions.getDocumentIndex,typing,header,Yes
gateway.modules.workflows.methods.methodContext.actions.neutralizeData,logging,header,Yes
-gateway.modules.workflows.methods.methodContext.actions.neutralizeData,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodContext.actions.neutralizeData,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodContext.actions.neutralizeData,modules.datamodels.datamodelDocref,header,Yes
gateway.modules.workflows.methods.methodContext.actions.neutralizeData,modules.datamodels.datamodelExtraction,header,Yes
gateway.modules.workflows.methods.methodContext.actions.neutralizeData,time,header,Yes
@@ -1926,7 +1890,7 @@ gateway.modules.workflows.methods.methodContext.actions.neutralizeData,typing,he
gateway.modules.workflows.methods.methodContext.actions.triggerPreprocessingServer,aiohttp,header,Yes
gateway.modules.workflows.methods.methodContext.actions.triggerPreprocessingServer,json,header,Yes
gateway.modules.workflows.methods.methodContext.actions.triggerPreprocessingServer,logging,header,Yes
-gateway.modules.workflows.methods.methodContext.actions.triggerPreprocessingServer,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodContext.actions.triggerPreprocessingServer,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodContext.actions.triggerPreprocessingServer,modules.shared.configuration,header,Yes
gateway.modules.workflows.methods.methodContext.actions.triggerPreprocessingServer,typing,header,Yes
gateway.modules.workflows.methods.methodContext.helpers.documentIndex,datetime,header,Yes
@@ -1955,7 +1919,7 @@ gateway.modules.workflows.methods.methodJira.actions.__init__,(relative) .parseC
gateway.modules.workflows.methods.methodJira.actions.__init__,(relative) .parseExcelContent,header,Yes
gateway.modules.workflows.methods.methodJira.actions.connectJira,json,header,Yes
gateway.modules.workflows.methods.methodJira.actions.connectJira,logging,header,Yes
-gateway.modules.workflows.methods.methodJira.actions.connectJira,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodJira.actions.connectJira,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodJira.actions.connectJira,modules.shared.configuration,header,Yes
gateway.modules.workflows.methods.methodJira.actions.connectJira,typing,header,Yes
gateway.modules.workflows.methods.methodJira.actions.connectJira,uuid,header,Yes
@@ -1965,7 +1929,7 @@ gateway.modules.workflows.methods.methodJira.actions.createCsvContent,datetime,h
gateway.modules.workflows.methods.methodJira.actions.createCsvContent,io,header,Yes
gateway.modules.workflows.methods.methodJira.actions.createCsvContent,json,header,Yes
gateway.modules.workflows.methods.methodJira.actions.createCsvContent,logging,header,Yes
-gateway.modules.workflows.methods.methodJira.actions.createCsvContent,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodJira.actions.createCsvContent,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodJira.actions.createCsvContent,pandas,header,Yes
gateway.modules.workflows.methods.methodJira.actions.createCsvContent,typing,header,Yes
gateway.modules.workflows.methods.methodJira.actions.createExcelContent,base64,header,Yes
@@ -1974,31 +1938,31 @@ gateway.modules.workflows.methods.methodJira.actions.createExcelContent,datetime
gateway.modules.workflows.methods.methodJira.actions.createExcelContent,io,header,Yes
gateway.modules.workflows.methods.methodJira.actions.createExcelContent,json,header,Yes
gateway.modules.workflows.methods.methodJira.actions.createExcelContent,logging,header,Yes
-gateway.modules.workflows.methods.methodJira.actions.createExcelContent,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodJira.actions.createExcelContent,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodJira.actions.createExcelContent,pandas,header,Yes
gateway.modules.workflows.methods.methodJira.actions.createExcelContent,typing,header,Yes
gateway.modules.workflows.methods.methodJira.actions.exportTicketsAsJson,json,header,Yes
gateway.modules.workflows.methods.methodJira.actions.exportTicketsAsJson,logging,header,Yes
-gateway.modules.workflows.methods.methodJira.actions.exportTicketsAsJson,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodJira.actions.exportTicketsAsJson,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodJira.actions.exportTicketsAsJson,typing,header,Yes
gateway.modules.workflows.methods.methodJira.actions.importTicketsFromJson,json,header,Yes
gateway.modules.workflows.methods.methodJira.actions.importTicketsFromJson,logging,header,Yes
-gateway.modules.workflows.methods.methodJira.actions.importTicketsFromJson,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodJira.actions.importTicketsFromJson,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodJira.actions.importTicketsFromJson,typing,header,Yes
gateway.modules.workflows.methods.methodJira.actions.mergeTicketData,json,header,Yes
gateway.modules.workflows.methods.methodJira.actions.mergeTicketData,logging,header,Yes
-gateway.modules.workflows.methods.methodJira.actions.mergeTicketData,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodJira.actions.mergeTicketData,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodJira.actions.mergeTicketData,typing,header,Yes
gateway.modules.workflows.methods.methodJira.actions.parseCsvContent,io,header,Yes
gateway.modules.workflows.methods.methodJira.actions.parseCsvContent,json,header,Yes
gateway.modules.workflows.methods.methodJira.actions.parseCsvContent,logging,header,Yes
-gateway.modules.workflows.methods.methodJira.actions.parseCsvContent,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodJira.actions.parseCsvContent,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodJira.actions.parseCsvContent,pandas,header,Yes
gateway.modules.workflows.methods.methodJira.actions.parseCsvContent,typing,header,Yes
gateway.modules.workflows.methods.methodJira.actions.parseExcelContent,io,header,Yes
gateway.modules.workflows.methods.methodJira.actions.parseExcelContent,json,header,Yes
gateway.modules.workflows.methods.methodJira.actions.parseExcelContent,logging,header,Yes
-gateway.modules.workflows.methods.methodJira.actions.parseExcelContent,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodJira.actions.parseExcelContent,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodJira.actions.parseExcelContent,pandas,header,Yes
gateway.modules.workflows.methods.methodJira.actions.parseExcelContent,typing,header,Yes
gateway.modules.workflows.methods.methodJira.helpers.adfConverter,logging,header,Yes
@@ -2030,7 +1994,7 @@ gateway.modules.workflows.methods.methodOutlook.actions.__init__,(relative) .sen
gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,base64,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,json,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,logging,header,Yes
-gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,modules.datamodels.datamodelDocref,function composeAndDraftEmailWithContext,Yes
gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,modules.datamodels.datamodelDocref,function composeAndDraftEmailWithContext,Yes
gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,modules.datamodels.datamodelDocref,function composeAndDraftEmailWithContext,Yes
@@ -2041,18 +2005,18 @@ gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWith
gateway.modules.workflows.methods.methodOutlook.actions.composeAndDraftEmailWithContext,typing,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.readEmails,json,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.readEmails,logging,header,Yes
-gateway.modules.workflows.methods.methodOutlook.actions.readEmails,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodOutlook.actions.readEmails,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.readEmails,requests,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.readEmails,time,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.readEmails,typing,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.searchEmails,json,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.searchEmails,logging,header,Yes
-gateway.modules.workflows.methods.methodOutlook.actions.searchEmails,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodOutlook.actions.searchEmails,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.searchEmails,requests,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.searchEmails,typing,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail,json,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail,logging,header,Yes
-gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail,modules.datamodels.datamodelDocref,function sendDraftEmail,Yes
gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail,requests,header,Yes
gateway.modules.workflows.methods.methodOutlook.actions.sendDraftEmail,time,header,Yes
@@ -2091,53 +2055,53 @@ gateway.modules.workflows.methods.methodSharepoint.actions.__init__,(relative) .
gateway.modules.workflows.methods.methodSharepoint.actions.analyzeFolderUsage,datetime,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.analyzeFolderUsage,json,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.analyzeFolderUsage,logging,header,Yes
-gateway.modules.workflows.methods.methodSharepoint.actions.analyzeFolderUsage,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodSharepoint.actions.analyzeFolderUsage,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.analyzeFolderUsage,time,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.analyzeFolderUsage,typing,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.copyFile,json,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.copyFile,logging,header,Yes
-gateway.modules.workflows.methods.methodSharepoint.actions.copyFile,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodSharepoint.actions.copyFile,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.copyFile,modules.datamodels.datamodelDocref,function copyFile,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.copyFile,typing,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath,base64,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath,json,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath,logging,header,Yes
-gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath,modules.datamodels.datamodelDocref,function downloadFileByPath,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath,os,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.downloadFileByPath,typing,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.findDocumentPath,json,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.findDocumentPath,logging,header,Yes
-gateway.modules.workflows.methods.methodSharepoint.actions.findDocumentPath,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodSharepoint.actions.findDocumentPath,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.findDocumentPath,time,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.findDocumentPath,typing,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.findDocumentPath,urllib.parse,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.findSiteByUrl,json,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.findSiteByUrl,logging,header,Yes
-gateway.modules.workflows.methods.methodSharepoint.actions.findSiteByUrl,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodSharepoint.actions.findSiteByUrl,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.findSiteByUrl,typing,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.listDocuments,json,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.listDocuments,logging,header,Yes
-gateway.modules.workflows.methods.methodSharepoint.actions.listDocuments,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodSharepoint.actions.listDocuments,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.listDocuments,time,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.listDocuments,typing,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.listDocuments,urllib.parse,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.readDocuments,base64,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.readDocuments,json,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.readDocuments,logging,header,Yes
-gateway.modules.workflows.methods.methodSharepoint.actions.readDocuments,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodSharepoint.actions.readDocuments,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.readDocuments,time,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.readDocuments,typing,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.uploadDocument,json,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.uploadDocument,logging,header,Yes
-gateway.modules.workflows.methods.methodSharepoint.actions.uploadDocument,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodSharepoint.actions.uploadDocument,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.uploadDocument,time,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.uploadDocument,typing,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.uploadDocument,urllib.parse,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile,base64,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile,json,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile,logging,header,Yes
-gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile,modules.datamodels.datamodelDocref,function uploadFile,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile,modules.datamodels.datamodelDocref,function uploadFile,Yes
gateway.modules.workflows.methods.methodSharepoint.actions.uploadFile,typing,header,Yes
@@ -2198,23 +2162,22 @@ gateway.modules.workflows.processing.adaptive.progressTracker,datetime,header,Ye
gateway.modules.workflows.processing.adaptive.progressTracker,logging,header,Yes
gateway.modules.workflows.processing.adaptive.progressTracker,typing,header,Yes
gateway.modules.workflows.processing.core.actionExecutor,logging,header,Yes
-gateway.modules.workflows.processing.core.actionExecutor,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.workflows.processing.core.actionExecutor,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.processing.core.actionExecutor,modules.datamodels.datamodelChat,header,Yes
+gateway.modules.workflows.processing.core.actionExecutor,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.processing.core.actionExecutor,modules.workflows.processing.core.messageCreator,function _createActionCompletionMessage,Yes
gateway.modules.workflows.processing.core.actionExecutor,modules.workflows.processing.shared.methodDiscovery,header,Yes
gateway.modules.workflows.processing.core.actionExecutor,modules.workflows.processing.shared.stateTools,header,Yes
gateway.modules.workflows.processing.core.actionExecutor,time,function executeSingleAction,Yes
gateway.modules.workflows.processing.core.actionExecutor,typing,header,Yes
gateway.modules.workflows.processing.core.messageCreator,logging,header,Yes
-gateway.modules.workflows.processing.core.messageCreator,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.workflows.processing.core.messageCreator,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.processing.core.messageCreator,modules.datamodels.datamodelChat,header,Yes
+gateway.modules.workflows.processing.core.messageCreator,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.processing.core.messageCreator,modules.workflows.processing.shared.stateTools,header,Yes
gateway.modules.workflows.processing.core.messageCreator,typing,header,Yes
gateway.modules.workflows.processing.core.taskPlanner,json,header,Yes
gateway.modules.workflows.processing.core.taskPlanner,logging,header,Yes
-gateway.modules.workflows.processing.core.taskPlanner,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.workflows.processing.core.taskPlanner,modules.aichat.datamodelFeatureAiChat,function generateTaskPlan,Yes
gateway.modules.workflows.processing.core.taskPlanner,modules.datamodels.datamodelAi,header,Yes
+gateway.modules.workflows.processing.core.taskPlanner,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.processing.core.taskPlanner,modules.workflows.processing.shared.promptGenerationTaskplan,header,Yes
gateway.modules.workflows.processing.core.taskPlanner,modules.workflows.processing.shared.stateTools,header,Yes
gateway.modules.workflows.processing.core.taskPlanner,typing,header,Yes
@@ -2223,8 +2186,8 @@ gateway.modules.workflows.processing.core.validator,typing,header,Yes
gateway.modules.workflows.processing.modes.modeAutomation,datetime,function _createActionItem,Yes
gateway.modules.workflows.processing.modes.modeAutomation,json,header,Yes
gateway.modules.workflows.processing.modes.modeAutomation,logging,header,Yes
-gateway.modules.workflows.processing.modes.modeAutomation,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.workflows.processing.modes.modeAutomation,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.processing.modes.modeAutomation,modules.datamodels.datamodelChat,header,Yes
+gateway.modules.workflows.processing.modes.modeAutomation,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.processing.modes.modeAutomation,modules.shared.timeUtils,header,Yes
gateway.modules.workflows.processing.modes.modeAutomation,modules.workflows.processing.modes.modeBase,header,Yes
gateway.modules.workflows.processing.modes.modeAutomation,modules.workflows.processing.shared.stateTools,header,Yes
@@ -2233,8 +2196,8 @@ gateway.modules.workflows.processing.modes.modeAutomation,uuid,header,Yes
gateway.modules.workflows.processing.modes.modeAutomation,uuid,function _createActionItem,Yes
gateway.modules.workflows.processing.modes.modeBase,abc,header,Yes
gateway.modules.workflows.processing.modes.modeBase,logging,header,Yes
-gateway.modules.workflows.processing.modes.modeBase,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.workflows.processing.modes.modeBase,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.processing.modes.modeBase,modules.datamodels.datamodelChat,header,Yes
+gateway.modules.workflows.processing.modes.modeBase,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.processing.modes.modeBase,modules.workflows.processing.core.actionExecutor,header,Yes
gateway.modules.workflows.processing.modes.modeBase,modules.workflows.processing.core.messageCreator,header,Yes
gateway.modules.workflows.processing.modes.modeBase,modules.workflows.processing.core.taskPlanner,header,Yes
@@ -2243,13 +2206,11 @@ gateway.modules.workflows.processing.modes.modeBase,typing,header,Yes
gateway.modules.workflows.processing.modes.modeDynamic,datetime,header,Yes
gateway.modules.workflows.processing.modes.modeDynamic,json,header,Yes
gateway.modules.workflows.processing.modes.modeDynamic,logging,header,Yes
-gateway.modules.workflows.processing.modes.modeDynamic,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.workflows.processing.modes.modeDynamic,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.workflows.processing.modes.modeDynamic,modules.aichat.datamodelFeatureAiChat,function _refineDecide,Yes
-gateway.modules.workflows.processing.modes.modeDynamic,modules.aichat.datamodelFeatureAiChat,function _refineDecide,Yes
gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelAi,function _planSelect,Yes
gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelAi,function _actExecute,Yes
gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelAi,function _refineDecide,Yes
+gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelChat,header,Yes
+gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelDocref,function _actExecute,Yes
gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelDocref,function _planSelect,Yes
gateway.modules.workflows.processing.modes.modeDynamic,modules.datamodels.datamodelDocref,function _planSelect,Yes
@@ -2274,7 +2235,7 @@ gateway.modules.workflows.processing.modes.modeDynamic,typing,header,Yes
gateway.modules.workflows.processing.modes.modeDynamic,uuid,function _createActionItem,Yes
gateway.modules.workflows.processing.modes.modeDynamic,uuid,function _createActionItem,Yes
gateway.modules.workflows.processing.shared.executionState,logging,header,Yes
-gateway.modules.workflows.processing.shared.executionState,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.processing.shared.executionState,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.processing.shared.executionState,typing,header,Yes
gateway.modules.workflows.processing.shared.methodDiscovery,importlib,header,Yes
gateway.modules.workflows.processing.shared.methodDiscovery,inspect,header,Yes
@@ -2284,42 +2245,35 @@ gateway.modules.workflows.processing.shared.methodDiscovery,pkgutil,header,Yes
gateway.modules.workflows.processing.shared.methodDiscovery,typing,header,Yes
gateway.modules.workflows.processing.shared.placeholderFactory,json,header,Yes
gateway.modules.workflows.processing.shared.placeholderFactory,logging,header,Yes
-gateway.modules.workflows.processing.shared.placeholderFactory,modules.aichat.datamodelFeatureAiChat,function extractReviewContent,Yes
-gateway.modules.workflows.processing.shared.placeholderFactory,modules.aichat.datamodelFeatureAiChat,function extractReviewContent,Yes
-gateway.modules.workflows.processing.shared.placeholderFactory,modules.aichat.interfaceFeatureAiChat,function extractLatestRefinementFeedback,Yes
+gateway.modules.workflows.processing.shared.placeholderFactory,modules.datamodels.datamodelChat,function extractReviewContent,Yes
+gateway.modules.workflows.processing.shared.placeholderFactory,modules.datamodels.datamodelChat,function extractReviewContent,Yes
gateway.modules.workflows.processing.shared.placeholderFactory,modules.interfaces.interfaceDbApp,function extractLatestRefinementFeedback,Yes
+gateway.modules.workflows.processing.shared.placeholderFactory,modules.interfaces.interfaceDbChat,function extractLatestRefinementFeedback,Yes
gateway.modules.workflows.processing.shared.placeholderFactory,modules.workflows.processing.shared.methodDiscovery,header,Yes
gateway.modules.workflows.processing.shared.placeholderFactory,typing,header,Yes
gateway.modules.workflows.processing.shared.promptGenerationActionsDynamic,json,header,Yes
-gateway.modules.workflows.processing.shared.promptGenerationActionsDynamic,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.processing.shared.promptGenerationActionsDynamic,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.processing.shared.promptGenerationActionsDynamic,modules.workflows.processing.shared.methodDiscovery,header,Yes
gateway.modules.workflows.processing.shared.promptGenerationActionsDynamic,modules.workflows.processing.shared.placeholderFactory,header,Yes
gateway.modules.workflows.processing.shared.promptGenerationActionsDynamic,typing,header,Yes
gateway.modules.workflows.processing.shared.promptGenerationTaskplan,logging,header,Yes
-gateway.modules.workflows.processing.shared.promptGenerationTaskplan,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.modules.workflows.processing.shared.promptGenerationTaskplan,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.processing.shared.promptGenerationTaskplan,modules.workflows.processing.shared.placeholderFactory,header,Yes
gateway.modules.workflows.processing.shared.promptGenerationTaskplan,typing,header,Yes
gateway.modules.workflows.processing.shared.stateTools,logging,header,Yes
gateway.modules.workflows.processing.shared.stateTools,typing,header,Yes
gateway.modules.workflows.processing.workflowProcessor,json,header,Yes
gateway.modules.workflows.processing.workflowProcessor,logging,header,Yes
-gateway.modules.workflows.processing.workflowProcessor,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.workflows.processing.workflowProcessor,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.workflows.processing.workflowProcessor,modules.aichat.datamodelFeatureAiChat,function fastPathExecute,Yes
-gateway.modules.workflows.processing.workflowProcessor,modules.aichat.datamodelFeatureAiChat,function persistTaskResult,Yes
gateway.modules.workflows.processing.workflowProcessor,modules.datamodels,header,Yes
gateway.modules.workflows.processing.workflowProcessor,modules.datamodels.datamodelAi,header,Yes
-gateway.modules.workflows.processing.workflowProcessor,modules.datamodels.datamodelAi,function fastPathExecute,Yes
+gateway.modules.workflows.processing.workflowProcessor,modules.datamodels.datamodelChat,header,Yes
+gateway.modules.workflows.processing.workflowProcessor,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.processing.workflowProcessor,modules.datamodels.datamodelWorkflow,header,Yes
-gateway.modules.workflows.processing.workflowProcessor,modules.datamodels.datamodelWorkflow,function initialUnderstanding,Yes
-gateway.modules.workflows.processing.workflowProcessor,modules.datamodels.datamodelWorkflow,function initialUnderstanding,Yes
gateway.modules.workflows.processing.workflowProcessor,modules.shared.jsonUtils,header,Yes
-gateway.modules.workflows.processing.workflowProcessor,modules.shared.jsonUtils,function initialUnderstanding,Yes
gateway.modules.workflows.processing.workflowProcessor,modules.workflows.processing.modes.modeAutomation,header,Yes
gateway.modules.workflows.processing.workflowProcessor,modules.workflows.processing.modes.modeBase,header,Yes
gateway.modules.workflows.processing.workflowProcessor,modules.workflows.processing.modes.modeDynamic,header,Yes
gateway.modules.workflows.processing.workflowProcessor,modules.workflows.processing.shared.stateTools,header,Yes
-gateway.modules.workflows.processing.workflowProcessor,modules.workflows.processing.shared.stateTools,function persistTaskResult,Yes
gateway.modules.workflows.processing.workflowProcessor,time,function generateTaskPlan,Yes
gateway.modules.workflows.processing.workflowProcessor,time,function executeTask,Yes
gateway.modules.workflows.processing.workflowProcessor,traceback,function fastPathExecute,Yes
@@ -2327,11 +2281,8 @@ gateway.modules.workflows.processing.workflowProcessor,typing,header,Yes
gateway.modules.workflows.workflowManager,asyncio,header,Yes
gateway.modules.workflows.workflowManager,json,header,Yes
gateway.modules.workflows.workflowManager,logging,header,Yes
-gateway.modules.workflows.workflowManager,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.workflows.workflowManager,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.modules.workflows.workflowManager,modules.aichat.datamodelFeatureAiChat,function _executeTasks,Yes
-gateway.modules.workflows.workflowManager,modules.aichat.datamodelFeatureAiChat,function _sendFirstMessage,Yes
-gateway.modules.workflows.workflowManager,modules.aichat.datamodelFeatureAiChat,function _sendFirstMessage,Yes
+gateway.modules.workflows.workflowManager,modules.datamodels.datamodelChat,header,Yes
+gateway.modules.workflows.workflowManager,modules.datamodels.datamodelChat,header,Yes
gateway.modules.workflows.workflowManager,modules.datamodels.datamodelWorkflow,function _executeTasks,Yes
gateway.modules.workflows.workflowManager,modules.workflows.processing.shared.methodDiscovery,function workflowStart,Yes
gateway.modules.workflows.workflowManager,modules.workflows.processing.shared.methodDiscovery,function workflowStart,Yes
@@ -2340,6 +2291,10 @@ gateway.modules.workflows.workflowManager,modules.workflows.processing.shared.st
gateway.modules.workflows.workflowManager,modules.workflows.processing.workflowProcessor,header,Yes
gateway.modules.workflows.workflowManager,typing,header,Yes
gateway.modules.workflows.workflowManager,uuid,header,Yes
+gateway.scripts.script_analyze_function_imports,collections,header,Yes
+gateway.scripts.script_analyze_function_imports,csv,header,Yes
+gateway.scripts.script_analyze_function_imports,pathlib,header,Yes
+gateway.scripts.script_analyze_function_imports,typing,header,Yes
gateway.scripts.script_analyze_imports,ast,header,Yes
gateway.scripts.script_analyze_imports,csv,header,Yes
gateway.scripts.script_analyze_imports,os,header,Yes
@@ -2376,6 +2331,24 @@ gateway.scripts.script_db_export_migration,psycopg2,header,Yes
gateway.scripts.script_db_export_migration,psycopg2.extras,header,Yes
gateway.scripts.script_db_export_migration,sys,header,Yes
gateway.scripts.script_db_export_migration,typing,header,Yes
+gateway.scripts.script_generate_container_diagram,collections,header,Yes
+gateway.scripts.script_generate_container_diagram,csv,header,Yes
+gateway.scripts.script_generate_container_diagram,html,header,Yes
+gateway.scripts.script_generate_container_diagram,math,header,Yes
+gateway.scripts.script_generate_container_diagram,pathlib,header,Yes
+gateway.scripts.script_generate_container_diagram,typing,header,Yes
+gateway.scripts.script_generate_import_diagram,collections,header,Yes
+gateway.scripts.script_generate_import_diagram,csv,header,Yes
+gateway.scripts.script_generate_import_diagram,html,header,Yes
+gateway.scripts.script_generate_import_diagram,pathlib,header,Yes
+gateway.scripts.script_generate_import_diagram,typing,header,Yes
+gateway.scripts.script_generate_import_diagram,xml.etree.ElementTree,header,Yes
+gateway.scripts.script_remove_redundant_imports,ast,header,Yes
+gateway.scripts.script_remove_redundant_imports,collections,header,Yes
+gateway.scripts.script_remove_redundant_imports,csv,header,Yes
+gateway.scripts.script_remove_redundant_imports,pathlib,header,Yes
+gateway.scripts.script_remove_redundant_imports,re,header,Yes
+gateway.scripts.script_remove_redundant_imports,typing,header,Yes
gateway.scripts.script_security_encrypt_all_env_files,argparse,header,Yes
gateway.scripts.script_security_encrypt_all_env_files,datetime,header,Yes
gateway.scripts.script_security_encrypt_all_env_files,modules.shared.configuration,header,Yes
@@ -2418,13 +2391,13 @@ gateway.tests.conftest,pathlib,header,Yes
gateway.tests.conftest,sys,header,Yes
gateway.tests.functional.test01_ai_model_selection,asyncio,header,Yes
gateway.tests.functional.test01_ai_model_selection,base64,header,Yes
-gateway.tests.functional.test01_ai_model_selection,modules.aichat.aicore.aicoreModelRegistry,header,Yes
-gateway.tests.functional.test01_ai_model_selection,modules.aichat.aicore.aicoreModelSelector,header,Yes
-gateway.tests.functional.test01_ai_model_selection,modules.aichat.serviceAi.mainServiceAi,function initialize,Yes
+gateway.tests.functional.test01_ai_model_selection,modules.aicore.aicoreModelRegistry,header,Yes
+gateway.tests.functional.test01_ai_model_selection,modules.aicore.aicoreModelSelector,header,Yes
gateway.tests.functional.test01_ai_model_selection,modules.datamodels.datamodelAi,header,Yes
gateway.tests.functional.test01_ai_model_selection,modules.datamodels.datamodelUam,header,Yes
gateway.tests.functional.test01_ai_model_selection,modules.interfaces.interfaceAiObjects,function initialize,Yes
gateway.tests.functional.test01_ai_model_selection,modules.services,header,Yes
+gateway.tests.functional.test01_ai_model_selection,modules.services.serviceAi.mainServiceAi,function initialize,Yes
gateway.tests.functional.test01_ai_model_selection,os,header,Yes
gateway.tests.functional.test01_ai_model_selection,sys,header,Yes
gateway.tests.functional.test02_ai_models,asyncio,header,Yes
@@ -2438,21 +2411,21 @@ gateway.tests.functional.test02_ai_models,json,header,Yes
gateway.tests.functional.test02_ai_models,json,function testModelOperation,Yes
gateway.tests.functional.test02_ai_models,json,function testModelOperation,Yes
gateway.tests.functional.test02_ai_models,logging,function initialize,Yes
-gateway.tests.functional.test02_ai_models,modules.aichat.aicore.aicoreModelRegistry,function initialize,Yes
-gateway.tests.functional.test02_ai_models,modules.aichat.aicore.aicoreModelRegistry,function testModel,Yes
-gateway.tests.functional.test02_ai_models,modules.aichat.aicore.aicoreModelRegistry,function getAllAvailableModels,Yes
-gateway.tests.functional.test02_ai_models,modules.aichat.aicore.aicorePluginPerplexity,function initialize,Yes
-gateway.tests.functional.test02_ai_models,modules.aichat.aicore.aicorePluginTavily,function initialize,Yes
-gateway.tests.functional.test02_ai_models,modules.aichat.datamodelFeatureAiChat,function initialize,Yes
-gateway.tests.functional.test02_ai_models,modules.aichat.serviceAi.mainServiceAi,function initialize,Yes
-gateway.tests.functional.test02_ai_models,modules.aichat.serviceExtraction.mainServiceExtraction,function initialize,Yes
+gateway.tests.functional.test02_ai_models,modules.aicore.aicoreModelRegistry,function initialize,Yes
+gateway.tests.functional.test02_ai_models,modules.aicore.aicoreModelRegistry,function testModel,Yes
+gateway.tests.functional.test02_ai_models,modules.aicore.aicoreModelRegistry,function getAllAvailableModels,Yes
+gateway.tests.functional.test02_ai_models,modules.aicore.aicorePluginPerplexity,function initialize,Yes
+gateway.tests.functional.test02_ai_models,modules.aicore.aicorePluginTavily,function initialize,Yes
gateway.tests.functional.test02_ai_models,modules.datamodels.datamodelAi,header,Yes
gateway.tests.functional.test02_ai_models,modules.datamodels.datamodelAi,function _getTestPromptForOperation,Yes
gateway.tests.functional.test02_ai_models,modules.datamodels.datamodelAi,function getAllAvailableModels,Yes
gateway.tests.functional.test02_ai_models,modules.datamodels.datamodelAi,function testModelOperation,Yes
gateway.tests.functional.test02_ai_models,modules.datamodels.datamodelAi,function testModelOperation,Yes
+gateway.tests.functional.test02_ai_models,modules.datamodels.datamodelChat,function initialize,Yes
gateway.tests.functional.test02_ai_models,modules.datamodels.datamodelUam,header,Yes
gateway.tests.functional.test02_ai_models,modules.services,header,Yes
+gateway.tests.functional.test02_ai_models,modules.services.serviceAi.mainServiceAi,function initialize,Yes
+gateway.tests.functional.test02_ai_models,modules.services.serviceExtraction.mainServiceExtraction,function initialize,Yes
gateway.tests.functional.test02_ai_models,modules.shared.configuration,function _testTavilyDirect,Yes
gateway.tests.functional.test02_ai_models,os,header,Yes
gateway.tests.functional.test02_ai_models,sys,header,Yes
@@ -2464,15 +2437,15 @@ gateway.tests.functional.test03_ai_operations,datetime,header,Yes
gateway.tests.functional.test03_ai_operations,json,function printSummary,Yes
gateway.tests.functional.test03_ai_operations,json,function testOperation,Yes
gateway.tests.functional.test03_ai_operations,logging,function initialize,Yes
-gateway.tests.functional.test03_ai_operations,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.tests.functional.test03_ai_operations,modules.aichat.datamodelFeatureAiChat,function _prepareTestImageDocument,Yes
-gateway.tests.functional.test03_ai_operations,modules.aichat.datamodelFeatureAiChat,function _prepareTestImageDocument,Yes
-gateway.tests.functional.test03_ai_operations,modules.aichat.interfaceFeatureAiChat,function initialize,Yes
-gateway.tests.functional.test03_ai_operations,modules.aichat.interfaceFeatureAiChat,function _prepareTestImageDocument,Yes
-gateway.tests.functional.test03_ai_operations,modules.aichat.interfaceFeatureAiChat,function testOperation,Yes
gateway.tests.functional.test03_ai_operations,modules.datamodels.datamodelAi,header,Yes
+gateway.tests.functional.test03_ai_operations,modules.datamodels.datamodelChat,header,Yes
+gateway.tests.functional.test03_ai_operations,modules.datamodels.datamodelChat,function _prepareTestImageDocument,Yes
+gateway.tests.functional.test03_ai_operations,modules.datamodels.datamodelChat,function _prepareTestImageDocument,Yes
gateway.tests.functional.test03_ai_operations,modules.datamodels.datamodelUam,header,Yes
gateway.tests.functional.test03_ai_operations,modules.interfaces.interfaceDbApp,function __init__,Yes
+gateway.tests.functional.test03_ai_operations,modules.interfaces.interfaceDbChat,function initialize,Yes
+gateway.tests.functional.test03_ai_operations,modules.interfaces.interfaceDbChat,function _prepareTestImageDocument,Yes
+gateway.tests.functional.test03_ai_operations,modules.interfaces.interfaceDbChat,function testOperation,Yes
gateway.tests.functional.test03_ai_operations,modules.services,function initialize,Yes
gateway.tests.functional.test03_ai_operations,modules.workflows.methods.methodAi,function initialize,Yes
gateway.tests.functional.test03_ai_operations,os,header,Yes
@@ -2488,12 +2461,12 @@ gateway.tests.functional.test04_ai_behavior,asyncio,header,Yes
gateway.tests.functional.test04_ai_behavior,glob,function _getLatestDebugResponse,Yes
gateway.tests.functional.test04_ai_behavior,json,header,Yes
gateway.tests.functional.test04_ai_behavior,logging,function initialize,Yes
-gateway.tests.functional.test04_ai_behavior,modules.aichat.datamodelFeatureAiChat,function initialize,Yes
-gateway.tests.functional.test04_ai_behavior,modules.aichat.interfaceFeatureAiChat,function initialize,Yes
gateway.tests.functional.test04_ai_behavior,modules.datamodels.datamodelAi,header,Yes
+gateway.tests.functional.test04_ai_behavior,modules.datamodels.datamodelChat,function initialize,Yes
gateway.tests.functional.test04_ai_behavior,modules.datamodels.datamodelUam,header,Yes
gateway.tests.functional.test04_ai_behavior,modules.datamodels.datamodelWorkflow,header,Yes
gateway.tests.functional.test04_ai_behavior,modules.interfaces.interfaceDbApp,function __init__,Yes
+gateway.tests.functional.test04_ai_behavior,modules.interfaces.interfaceDbChat,function initialize,Yes
gateway.tests.functional.test04_ai_behavior,modules.services,header,Yes
gateway.tests.functional.test04_ai_behavior,os,header,Yes
gateway.tests.functional.test04_ai_behavior,sys,header,Yes
@@ -2504,10 +2477,10 @@ gateway.tests.functional.test04_ai_behavior,uuid,function initialize,Yes
gateway.tests.functional.test05_workflow_with_documents,asyncio,header,Yes
gateway.tests.functional.test05_workflow_with_documents,json,header,Yes
gateway.tests.functional.test05_workflow_with_documents,logging,function initialize,Yes
-gateway.tests.functional.test05_workflow_with_documents,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.tests.functional.test05_workflow_with_documents,modules.aichat.interfaceFeatureAiChat,header,Yes
+gateway.tests.functional.test05_workflow_with_documents,modules.datamodels.datamodelChat,header,Yes
gateway.tests.functional.test05_workflow_with_documents,modules.datamodels.datamodelUam,header,Yes
gateway.tests.functional.test05_workflow_with_documents,modules.interfaces.interfaceDbApp,function __init__,Yes
+gateway.tests.functional.test05_workflow_with_documents,modules.interfaces.interfaceDbChat,header,Yes
gateway.tests.functional.test05_workflow_with_documents,modules.services,header,Yes
gateway.tests.functional.test05_workflow_with_documents,modules.workflows.automation,header,Yes
gateway.tests.functional.test05_workflow_with_documents,os,header,Yes
@@ -2518,10 +2491,10 @@ gateway.tests.functional.test05_workflow_with_documents,typing,header,Yes
gateway.tests.functional.test06_workflow_prompt_variations,asyncio,header,Yes
gateway.tests.functional.test06_workflow_prompt_variations,json,header,Yes
gateway.tests.functional.test06_workflow_prompt_variations,logging,function initialize,Yes
-gateway.tests.functional.test06_workflow_prompt_variations,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.tests.functional.test06_workflow_prompt_variations,modules.aichat.interfaceFeatureAiChat,header,Yes
+gateway.tests.functional.test06_workflow_prompt_variations,modules.datamodels.datamodelChat,header,Yes
gateway.tests.functional.test06_workflow_prompt_variations,modules.datamodels.datamodelUam,header,Yes
gateway.tests.functional.test06_workflow_prompt_variations,modules.interfaces.interfaceDbApp,function __init__,Yes
+gateway.tests.functional.test06_workflow_prompt_variations,modules.interfaces.interfaceDbChat,header,Yes
gateway.tests.functional.test06_workflow_prompt_variations,modules.services,header,Yes
gateway.tests.functional.test06_workflow_prompt_variations,modules.workflows.automation,header,Yes
gateway.tests.functional.test06_workflow_prompt_variations,os,header,Yes
@@ -2533,13 +2506,13 @@ gateway.tests.functional.test06_workflow_prompt_variations,traceback,function te
gateway.tests.functional.test06_workflow_prompt_variations,traceback,function runAllTests,Yes
gateway.tests.functional.test06_workflow_prompt_variations,typing,header,Yes
gateway.tests.functional.test07_json_merge,json,header,Yes
-gateway.tests.functional.test07_json_merge,modules.aichat.serviceAi.subJsonResponseHandling,header,Yes
+gateway.tests.functional.test07_json_merge,modules.services.serviceAi.subJsonResponseHandling,header,Yes
gateway.tests.functional.test07_json_merge,modules.shared.jsonUtils,header,Yes
gateway.tests.functional.test07_json_merge,os,header,Yes
gateway.tests.functional.test07_json_merge,sys,header,Yes
gateway.tests.functional.test07_json_merge,traceback,header,Yes
gateway.tests.functional.test08_json_finalization,json,header,Yes
-gateway.tests.functional.test08_json_finalization,modules.aichat.serviceAi.subJsonResponseHandling,header,Yes
+gateway.tests.functional.test08_json_finalization,modules.services.serviceAi.subJsonResponseHandling,header,Yes
gateway.tests.functional.test08_json_finalization,modules.shared.jsonUtils,header,Yes
gateway.tests.functional.test08_json_finalization,os,header,Yes
gateway.tests.functional.test08_json_finalization,sys,header,Yes
@@ -2549,10 +2522,10 @@ gateway.tests.functional.test09_document_generation_formats,asyncio,header,Yes
gateway.tests.functional.test09_document_generation_formats,base64,header,Yes
gateway.tests.functional.test09_document_generation_formats,json,header,Yes
gateway.tests.functional.test09_document_generation_formats,logging,function initialize,Yes
-gateway.tests.functional.test09_document_generation_formats,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.tests.functional.test09_document_generation_formats,modules.aichat.interfaceFeatureAiChat,header,Yes
+gateway.tests.functional.test09_document_generation_formats,modules.datamodels.datamodelChat,header,Yes
gateway.tests.functional.test09_document_generation_formats,modules.datamodels.datamodelUam,header,Yes
gateway.tests.functional.test09_document_generation_formats,modules.interfaces.interfaceDbApp,function __init__,Yes
+gateway.tests.functional.test09_document_generation_formats,modules.interfaces.interfaceDbChat,header,Yes
gateway.tests.functional.test09_document_generation_formats,modules.services,header,Yes
gateway.tests.functional.test09_document_generation_formats,modules.shared.configuration,function initialize,Yes
gateway.tests.functional.test09_document_generation_formats,modules.workflows.automation,header,Yes
@@ -2568,10 +2541,10 @@ gateway.tests.functional.test10_document_generation_formats,asyncio,header,Yes
gateway.tests.functional.test10_document_generation_formats,base64,header,Yes
gateway.tests.functional.test10_document_generation_formats,json,header,Yes
gateway.tests.functional.test10_document_generation_formats,logging,function initialize,Yes
-gateway.tests.functional.test10_document_generation_formats,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.tests.functional.test10_document_generation_formats,modules.aichat.interfaceFeatureAiChat,header,Yes
+gateway.tests.functional.test10_document_generation_formats,modules.datamodels.datamodelChat,header,Yes
gateway.tests.functional.test10_document_generation_formats,modules.datamodels.datamodelUam,header,Yes
gateway.tests.functional.test10_document_generation_formats,modules.interfaces.interfaceDbApp,function __init__,Yes
+gateway.tests.functional.test10_document_generation_formats,modules.interfaces.interfaceDbChat,header,Yes
gateway.tests.functional.test10_document_generation_formats,modules.services,header,Yes
gateway.tests.functional.test10_document_generation_formats,modules.shared.configuration,function initialize,Yes
gateway.tests.functional.test10_document_generation_formats,modules.workflows.automation,header,Yes
@@ -2587,10 +2560,10 @@ gateway.tests.functional.test11_code_generation_formats,csv,header,Yes
gateway.tests.functional.test11_code_generation_formats,io,header,Yes
gateway.tests.functional.test11_code_generation_formats,json,header,Yes
gateway.tests.functional.test11_code_generation_formats,logging,function initialize,Yes
-gateway.tests.functional.test11_code_generation_formats,modules.aichat.datamodelFeatureAiChat,header,Yes
-gateway.tests.functional.test11_code_generation_formats,modules.aichat.interfaceFeatureAiChat,header,Yes
+gateway.tests.functional.test11_code_generation_formats,modules.datamodels.datamodelChat,header,Yes
gateway.tests.functional.test11_code_generation_formats,modules.datamodels.datamodelUam,header,Yes
gateway.tests.functional.test11_code_generation_formats,modules.interfaces.interfaceDbApp,function __init__,Yes
+gateway.tests.functional.test11_code_generation_formats,modules.interfaces.interfaceDbChat,header,Yes
gateway.tests.functional.test11_code_generation_formats,modules.services,header,Yes
gateway.tests.functional.test11_code_generation_formats,modules.shared.configuration,function initialize,Yes
gateway.tests.functional.test11_code_generation_formats,modules.workflows.automation,header,Yes
@@ -2603,7 +2576,7 @@ gateway.tests.functional.test11_code_generation_formats,typing,header,Yes
gateway.tests.functional.test11_code_generation_formats,xml.etree.ElementTree,header,Yes
gateway.tests.functional.test12_json_split_merge,asyncio,header,Yes
gateway.tests.functional.test12_json_split_merge,json,header,Yes
-gateway.tests.functional.test12_json_split_merge,modules.aichat.serviceAi.subJsonMerger,header,Yes
+gateway.tests.functional.test12_json_split_merge,modules.services.serviceAi.subJsonMerger,header,Yes
gateway.tests.functional.test12_json_split_merge,modules.shared.jsonContinuation,header,Yes
gateway.tests.functional.test12_json_split_merge,modules.shared.jsonUtils,function _loadTableJsonExample,Yes
gateway.tests.functional.test12_json_split_merge,modules.shared.jsonUtils,function testJsonSplitMerge,Yes
@@ -2632,22 +2605,22 @@ gateway.tests.functional.test14_json_continuation_context,traceback,function tes
gateway.tests.functional.test14_json_continuation_context,traceback,function runTest,Yes
gateway.tests.functional.test14_json_continuation_context,typing,header,Yes
gateway.tests.functional.test_kpi_full,json,header,Yes
-gateway.tests.functional.test_kpi_full,modules.aichat.serviceAi.subJsonResponseHandling,header,Yes
gateway.tests.functional.test_kpi_full,modules.datamodels.datamodelAi,header,Yes
+gateway.tests.functional.test_kpi_full,modules.services.serviceAi.subJsonResponseHandling,header,Yes
gateway.tests.functional.test_kpi_full,modules.shared.jsonUtils,header,Yes
gateway.tests.functional.test_kpi_full,os,header,Yes
gateway.tests.functional.test_kpi_full,pytest,header,Yes
gateway.tests.functional.test_kpi_full,sys,header,Yes
gateway.tests.functional.test_kpi_incomplete,json,header,Yes
-gateway.tests.functional.test_kpi_incomplete,modules.aichat.serviceAi.subJsonResponseHandling,header,Yes
gateway.tests.functional.test_kpi_incomplete,modules.datamodels.datamodelAi,header,Yes
+gateway.tests.functional.test_kpi_incomplete,modules.services.serviceAi.subJsonResponseHandling,header,Yes
gateway.tests.functional.test_kpi_incomplete,modules.shared.jsonUtils,header,Yes
gateway.tests.functional.test_kpi_incomplete,os,header,Yes
gateway.tests.functional.test_kpi_incomplete,pytest,header,Yes
gateway.tests.functional.test_kpi_incomplete,sys,header,Yes
gateway.tests.functional.test_kpi_incomplete,traceback,header,Yes
gateway.tests.functional.test_kpi_path,json,header,Yes
-gateway.tests.functional.test_kpi_path,modules.aichat.serviceAi.subJsonResponseHandling,header,Yes
+gateway.tests.functional.test_kpi_path,modules.services.serviceAi.subJsonResponseHandling,header,Yes
gateway.tests.functional.test_kpi_path,os,header,Yes
gateway.tests.functional.test_kpi_path,sys,header,Yes
gateway.tests.functional.test_kpi_path,traceback,header,Yes
@@ -2656,7 +2629,7 @@ gateway.tests.integration.rbac.test_rbac_database,modules.datamodels.datamodelUa
gateway.tests.integration.rbac.test_rbac_database,modules.datamodels.datamodelUam,function testBuildRbacWhereClauseUserConnectionTable,Yes
gateway.tests.integration.rbac.test_rbac_database,modules.shared.configuration,header,Yes
gateway.tests.integration.rbac.test_rbac_database,pytest,header,Yes
-gateway.tests.integration.workflows.test_workflow_execution,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.tests.integration.workflows.test_workflow_execution,modules.datamodels.datamodelChat,header,Yes
gateway.tests.integration.workflows.test_workflow_execution,modules.datamodels.datamodelDocref,header,Yes
gateway.tests.integration.workflows.test_workflow_execution,modules.datamodels.datamodelWorkflow,header,Yes
gateway.tests.integration.workflows.test_workflow_execution,modules.datamodels.datamodelWorkflow,function test_extractContentParameters_structure,Yes
@@ -2687,8 +2660,8 @@ gateway.tests.unit.rbac.test_rbac_permissions,modules.security.rbac,header,Yes
gateway.tests.unit.rbac.test_rbac_permissions,pytest,header,Yes
gateway.tests.unit.rbac.test_rbac_permissions,unittest.mock,header,Yes
gateway.tests.unit.services.test_json_extraction_merging,json,header,Yes
-gateway.tests.unit.services.test_json_extraction_merging,modules.aichat.serviceExtraction.mainServiceExtraction,header,Yes
gateway.tests.unit.services.test_json_extraction_merging,modules.datamodels.datamodelExtraction,header,Yes
+gateway.tests.unit.services.test_json_extraction_merging,modules.services.serviceExtraction.mainServiceExtraction,header,Yes
gateway.tests.unit.services.test_json_extraction_merging,os,header,Yes
gateway.tests.unit.services.test_json_extraction_merging,sys,header,Yes
gateway.tests.unit.services.test_json_extraction_merging,traceback,function main,Yes
@@ -2696,11 +2669,11 @@ gateway.tests.unit.utils.test_json_utils,json,header,Yes
gateway.tests.unit.utils.test_json_utils,modules.datamodels.datamodelWorkflow,header,Yes
gateway.tests.unit.utils.test_json_utils,modules.shared.jsonUtils,header,Yes
gateway.tests.unit.utils.test_json_utils,pytest,header,Yes
-gateway.tests.unit.workflows.test_state_management,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.tests.unit.workflows.test_state_management,modules.datamodels.datamodelChat,header,Yes
gateway.tests.unit.workflows.test_state_management,modules.datamodels.datamodelWorkflow,header,Yes
gateway.tests.unit.workflows.test_state_management,pytest,header,Yes
gateway.tests.unit.workflows.test_state_management,uuid,header,Yes
-gateway.tests.validation.test_architecture_validation,modules.aichat.datamodelFeatureAiChat,header,Yes
+gateway.tests.validation.test_architecture_validation,modules.datamodels.datamodelChat,header,Yes
gateway.tests.validation.test_architecture_validation,modules.datamodels.datamodelDocref,header,Yes
gateway.tests.validation.test_architecture_validation,modules.datamodels.datamodelWorkflow,header,Yes
gateway.tests.validation.test_architecture_validation,modules.shared.jsonUtils,header,Yes
diff --git a/scripts/import_diagram.drawio b/scripts/import_diagram.drawio
new file mode 100644
index 00000000..64e6a59b
--- /dev/null
+++ b/scripts/import_diagram.drawio
@@ -0,0 +1 @@
+7V3bduM2sv2afhwv8U49+tKd9Kz2iVe7czJvXjQFy5ymSA1Jte18/QElQReDpWgSHWykhJmsxLpYpjY2gdq7CoUPwfXs9acmmz/f1hNRfvBHk9cPwc0H34/D2JP/6Z95Wz3jhYG/embaFJP1c9sn7ovfxfrJ0frZRTER7d4bu7ouu2K+/2ReV5XIu73nsqapX/bf9lSX+391nk2F9sR9npX6s78Vk+559WwwGo22L/wsiunz+k/7m1dmmXr3+on2OZvULztPBR8/BNdNXXern2av16Ls4VPArH7vE/Hq5soaUXXH/IKEqMuKSjQPWZE/Z93q939k5WL9XXefbrs3BUH7UszKrJKPrp7kR9yvX/Hk4/y5KCdfsrd60V9B22X5d/Xo6rluit/7P1mu3yxfbrr1CAejvXfc978pn+6fbUQr33Onvpb37qnb7HXvjV+ytls/kddlmc3b4nFzfbOsmRbVVd119Wz9ppfnohP38yzv3/MiWdtfSDdTF/lUlOV1XdbN8rsHk0ikk1A+r4O9xv+HaDrxuvPUGvyfRD0TXfMm37J+9R9RsGbC+mYIxuvHL3vMWj33vEsqT/1mtqbzdPPp2wGXP6zHfHj8K3l3PvhDo1434mL1n6usFRoB5PfrluPX1N+FAqeqV4zYwWv9VFYW00o+LMVT/2s9QIW8oS7XT8+KyaT/5KtWDkJRTb8s33YTbp/5uv7m/VO1/PWncnnbPMtfFPITruZ1UXVLIKIr+Y+E5np0EX2I5LVey8fe9rH8p397013Xlbx8yf7+c4WkzIvoaXPV1F3WZSvCHMOOnv8rBnujQVYQN9kfk0Rx4khKnIwQwWFCLKf0r2JatOrDHTMwzIhNMyM8ghn3opSrrhxjxwwcM45dRk7GjOgwM+7KhVx1L6vuuannRe64AeSG55smR3wMOT5XnWgqGRo6bgC5EZnmRnIMN36ZiyorHDOQzEhNMyM9hhl3opmX4rXoXCSKZMfGnDHGjvEx7PiW/ShKxwwoM0LTzFBU1Gysi4mEZtZrlE8i6xaNuCyuh9wtRw+D9EiM08Oj6FH0EeiTxMLRwxZ6bKhgjh6DdmhPj6ZedI4a9lDDuC/q6cZoK5ofRS7pcDGT3+VePXLEQBLDuC3q6b7olhjt4lHOFllZfqnruRwaxw0kN4wbo57ujO5xQ0LXya/38VXil3dFXTl+APkRGvdGPd0c3ePHTZ0vZvL7fV7SpHXsQLLDuDvq6fboHjv+2dbVrWimwqXboMQwbo56ujuqEeOraOcSQfFzVk1KF3lgKRIZd0g93SLdo4iix13WtI4dYHYYd0lVoEOx475rFnlvdXySQ+3oAaaHcZfU113SYXr8JOTXypxwgZeCGWeIbpTmz4vquxyIi+UPovk860upHS2AtDBukvq6SfqeFpu5w1EDSQ3jNqmv26TvqfFtiZCjBZAWxh1SX3dINVr0BHCswLEiMe6L+rovKlYeed20F5sfr4oqc7sQsNww7or6uis6xI3r9ocjBpIYxl1RX3dFh4hxU+evjhlAZqTGzVBfN0OHmPFzj4JjBpAZxo1Q9UF/wAznZcCpYdwEDXQTdIgafa7NMQO629E4M3Tzc4gZd5MnRwwkMczvndftz0FizDsXgUKZYdz9DHT3c4gZ9/9xASiUGMb9z0D3P4eI4TxQ9A7YkXETNDjOBP1X2brVBEsN4x5ocJwH+i/nZ4CZYdwEDcjS0O0mg93tSm7rgR1M8YybooFuis5E3x5vejFbFpXfiKdsUbqwA8sL45ao+oMkL1yZBp4Vxt3QUHdD37HCKRR4Zy/jpNCNUD3YaBePbpOSBeww7oaG5I75fXbcFXNRyq/m+AHlh/l+ouTG+Xf8aOrZvLtaFOVENE6vWEIX405pSO6l36eLa05sAz8C43ZpSO6l3+5S2nU+3N4lS5hi3D0Ndfd0nnXP7UUuX73rj2lwhEASwrhpGuqm6YoQk3X/DUcKNClC4/5oqPujK1IUfTGgYwScEcadUbVQ7TBCfh8pSkSzWju+rh/1p6Z8E7N5mXVO1WJJYtwojXSjdEsStZ44othGlMi4eRrp5umWKI0TsTaQwrhnGume6S4pVj9dy3e67W1obhj3SyPdLx3mhtuSACeH+SOYdHd0mByuJgzMjdi4MxrpzugAN9yCAuaFcR800n1QnRduuzScGMb90Ej3Q3ViuN3SaGIkxj3RSPdEdWK4zdJ4Zhj3RpUaOsgMJ0zgxDDuh8aH/FD1023WfJ/UL44cUHKkxj3Q+LAHuvrJ7aNH88K4DRofY4O6bfRwYhj3QONjPFC3FQFODOP+Z3yM/+m2SqOJMTZ//PwxZaHbo7jWT8oRdzxB8sS4GRqThy0N8qQ/kWvqiIIninFzNCZ32O8TRZ3d9mtXlO6EevBB0yPjVmlMHsC0T5O93U1uT4IldDHunypf7o/o8v7oHbf+gJli3FBNyMOZfhOPuxuc5EPHDSQ3PJN+6s7VzucaQzbP7XChfSlmZbYa+h6M9Ss9OPmzXI6+ZG/1or/Ctsvy7+rR1XPdFL/3f0whKV9uFJTBaO8d9/1vrsejEa18z50C2Hv31G32uvfGL1k/qssn8ross3lbPG6ub5b1rSeu6q6rZ0cO9w65P/jBJBPpUz447N7R47x+9egNbBs+/PU5QPfNh0bY3e1/6m7f3D/HnyyOudEXag/SLg8WAxuTzvlWf3oScX6iW33bRUMN/LGBou+d7N7XcyODY+5u/j9182/vKSvv/hUF9CxIf90X/b/kd5Lj5iQklBHG82KJnv5YMuLfL91aDTg2wNhgPBmW6DmPJRs6OdLVbVZlrhsXkg+e8SRYoic3toT4Kp5kHPZ8uxyxF/ktHTVw1DCe90r0dIZGDbeEwHlhMs21vVT5UyWWTcU1krx/yanNpdoU3iQSyWnU5j+2vZE2SuNYu9lPTjZB6Ims7dhfbH68ebyr227qVo8TzRLarWevHFVz0x8w5Fa0bdZ3DP44ywq3dQhNE+MaNdUTVwdpcj/TlxZHErMkMS5dUz2zMUSSu0bMmzqXVHEJcDhJzOvZVPfAh1hy/1K07bd6Xt9m817DONcDzxXjAjfVzfIhrnwr8u+ia69L+d+FS6XCeWK8rjPVLfQDPPln0WSOJGCS+MarOlPdWR8iyf/WfeFeXU9LJ4fhJDFZy7m94IlEYiYpU+rW2fuXnHW2tM6enp78UxVqvDfO/PGxU8U4PNlcoSddDoy8mxb+zLSg3WUWu2R6omV79RebHy8LRw0wNYyXdKe6xT5IjcWkcBub0ewwf1KnMuH+gB43dd4I1yoDzg/jDsdYN9YJfiw3JDqGoBli3FUf6676EEPc4WrWcMR8fDrWPfUhjnwSWb/90AkYOEOMh6lj3UkfZEhROnrA6RGYD1N1A32IHp+rH0XnNihYwRHzoarunw9xxDUKtYEd5sPUQ47plh23YvYomva5cGlaNEdC82HqcTbqporMUQRNEfNx6nF26l3PDxeI2MCRyHiwuunF8Ack+fqY5Y4eaHoYj1O90XGe6r3IF43r7mYBRYwHq97oOFN1XTDmGAJmSGw8VPVGx1mq3+raFYTg+WE8TvVGxxmqv2Yzxw50TQggQj3OT+37y7rZA84PQIh6nJe6rEV2/EDzAxCfHuem/lY335ej4SiCpYj5Y3a80XFmqqLI5bI2xC02cKaYDFW3F/y0Lv3oO5jUsx3ndIc+6j0X79/jNjn03z0QvniaZIPM+K83OSRqyP/rTQ6n60TrjXSzfTv0F40cOrEuGbqkGeEmkD8zgdD3o5W7IAYuvG+r/Vh3GoM2s8jeG9wUcropZJvjP5oBJ5sy1Cy1u4lyNc5qvJc3U1Y51/TUM8X+DWflNLHmyECzmDVH3peiXhNzhKMKgirmXVRPz8Moqogfy9nZNTy1hx/mt0953kC3mDVBJHJyICQubi6xkSvmTVVvoFvMmiv90TqOH1bxw7yp6g10iVnzY1frOp7YxBO0zF3/8FVMi1Z92qDcHXyjk70nd860vrpHy+ATOmeenr87mghuHvlL88jwDWmlHB64+kosJHCl/NINzSDtTW4a+X834I+fRjbdd08wjehp3p2x19yS/znACzer/KVZRb8vrZxR1rTRU7+7tHkvjB1tbKQNwGzT0327tOk18pYqd2X2NpWyqJo4zljDGYABp/pDE6TZFc5unrGSM+aNOF9PAK2Pud5QZFVisHPi9f4rjj/28MekUTdw6Y3ISglU1glaML1/j9NLp9NLaiuwf+w84vunm0j09OB2qDV59FW+9HGYBW76+EvTh3YPWiyOfD1juMOZ99rIccY+zphXRr6eOdzhTB+lOJ7YxxOEGtJTiDtE2RVDjjAWEsakFBq48q5ZtJ04EMfuvcEFsSc3/d/nDo8Pajdn2pxgDtFzh+tx1yLabwQf3Azyl2aQ/fvQ5lhWzw8pqrwPZB1VbKIKIITVc0KKKrthiaOJTTQxGsFuL3szd+jnG71/yQUhyyDkKc3Fqc43el95cHwQEp7QWdNzgduh3y4ul8Uvj/8WudvMc6IJQ7vzLA4+1Cf9AUWu6rrrYZw7ioApYj7oCPRE3xBFbh4v544eaHoA7LJAz98M82O1z8udcGMDTczXCwR6ymaIJu74ElsoYn7vTqBnaIYo4lqH28IRRMCqJ2eGOOLaQttAD0CwqvvuQ/RY9fx1stcOnpg/CskLdNN9iCfL3oyOJpbQBJPZXTrruom6+7QzUJcG6mSUC+EPjv9/X4qY+EeO9ukOhPcCPb+yGuZVeuVyMitc1fJppoG9u8pmg1T30DVKbBvnfez72biVAkkR8zGnmn8OUcTZGhZQA2COhrp5rnGj16ofX3skHTuQ7DDviYa6dT7Ijq+1O7EXTA7zbmg4sMdhkBwLRw4sOQBhaTiwmWGXHF3XFI+DAtURwyAxAMHowOaFHWLcSIAkfJVwJwXA2QGwPUPdHn/Pjk+FW07AvAAEorod/p4Xt1k1ydyCAqYGIAw97In21Lhr6tnc2V5QZpg/6N0LD1ujPTN+bUXjeAHlhfkQVC1fB3ihDqxy3EByA3Cqe3TYD/1pMm8cJZCUMB97RodN0M/Vj6LLnFqFM8N86BkddkBdHagNvAAc2x4dNj/vRb5oiu7NlWvAuQEIPg/7n4obP9X1tHQ7pKGFGoDo87D9qcjxpZaD6LiB5AYgDD1sgSpu3LZPrkwDSg1AHHrYAr1/ll9vCbkjBpAYgOPZo8MO6HL3gIs08MzAHMferpcMjSP7L7jNA/13D56ySZKdqPuK1gLu6M0EJ+xrrE6QGRj4i3nWti91M/m1K0pna51mbnh3u1m8pyAeap2/ZkbjNq6iCWHetIh1C3yPED+Lcu4SqWheALYPxLoDviVGXXeXeS5axwswLzD7Utenreg7U/dfcOHlMrx89CaTp2EG/PXmfkeHlyds7hfrSRBy4N188Ofmg70bzOaAUk96qIu/eHgoqqJ7eHCkgJICEFTqyY71xfeHn+8ey9U/dvSA0gMRW+oJj/XVbwordkniqi0sYYr51Fis5z/axWObN8V8WZd1IR/d7zxx/9Z2YvaxaWqnWdFsMZ8ti/WkyPrqVQ51d1q5p7xwxxOTPAEErSoiGuDJJqG6xxSXZrWEK+Zj2YQ8bHbVyW+XJ6tnHEewGth8PJsMmejLq19m2XYp4tJuFjAE5Jr2q8hEZ8rO084xXTqmk1BMTnWwcHR0sWd0ujPYkoHkyfAwuzv/T935u7eSxe5oMuCULy/9IlNtUtyCgKYFIKYcMM3XtFhMiu5LPZ2KxnECyAmAKZoMmOYrUshRKx/lUv1VTItWfbZjBogZ5k3QZMAuXzOjrp6K6aJZblJ1tEDSwrzbmQx44ytaTB5vF2VXfBNVVnW/zLtiVvzu9jHDOYIIQAcc8TVHxONi6iINPCnMh59K5+qkED+WWt8dlmYBMQA+Zjrgda+I8dTIbyOqybe3uSvywtLCfPyZDtjbK1r8u60riVxXVAsXgsKZYT4ETSmfc8kMZ22hKQFozZeSlue8qaeNaFsXdOJ5AQg6Sc9TylPngsMpYbQj3/ZiX/bbMe6w44Vs1HjOqdGnqP//IAP+8l7l41OlXjo+3cSg+96bob/INudbucnhJJPD+/vN4uRpqtveWzosa2pUL1fHDSw3YvPc0L3vHW60i8ftwXj3+bOYLFwfFDRJAOpUN7+z1eEjfeKsv/KbOl84oxPPDe/YXaynI4ei4wA5pkJ+mayT4z5xswaaGebtzrHugr9nhps3LGFHap4duhmu2DFvatcTA08K33zibKz74IoU7WImRb/8zm7OsIQeoXl66J64oodErWpLt6TYQw/z1vhYt8YVPV7E41fRiqzJnx0x0AaYeWLo1qj8pOd6cllcqB8cLcC0MG+MjnVjdMWGds2Kq6x1whXNC/Om6HjAFF2vI/9ZiOatP/7s0VEDTw3zVuhYt0JXU0XfgOmx7i72HjmCYAkSGrdDffXpA3OHHPtG/ny9rAB13EBzw7gh6o8OGaKbHMrnaiK/gWMHlh3GDVF/RBuilVhI4Mre/JJIOW5guWH+zFV/RPuiXVP0ZaB3jVjb5nKA+h4prjIUzhPjBqk/0g3SdUDaBx2vm/B09cgRBEwQ4xapP6ItUvmFKpF3/ywat8LA68DME0O3SDfEaERfxNH+cMrFDnYYd0r90UAJ6R47Pr7monT8sIMfxh1Tf0Q7puK1x2/V0bG9bP/ZuhJ0OEGM+6b+iC4hLWY7BPnU1DNHETxFjj4O5XQUUap6gCIz0UzXTWGdAWIBOcxbpx5tncov17ro1B5ymHdOPdo5XZLDBaf20CM1b556unn6vDqN8WKyzrncSZq4c1Hw5DDvmHqUY9r7YBfbHx01wNQw75V6h7xSKVpacVlNbprsqfs4y4ryt6J7dsa6FWQZm/dPPdo/bUQ2WTLE7WhB88K8c+rRzumqHN0xwwpmmPdMPdozbcXuwuK4AeaGebvUo8pMf1l0ZV1/v9h75AgC3j07Mu+Wqr84MHtkVVa+/S4+1eVENL+22dQVqsMJYt4x9WnHNK/nb58K18kFTwvzXqlPe6WT+qUq62zSU+Pq7S7r3FZJNEHMH58iP4okyFMhw9KNY+rogaeHeb/Up7fg9/S4l6hcvf3aONEC54Z5w9SnDdOyaDcbXJzZgeaGb94f9Q/7o44b1nDDvEfq0x7pYt5HpK6niy3kMG+T+rRNuiKHU7I2EMO8R+rrHqkr67CTHYF5f1R9kuag3/dd/ZeAX7x/wvEEzRPzNmmg26TbfbQX2SSbd8UPt77AmWHeKQ0GnNI1HTa8+CKyppLD87Gayi/oWAJmSWjeLg10uzSvG8mQZYz68VXki06OsWMGmBnmndJAd0qXzJjJtSWbiut+36RjBp4Z5n3SQPdJl8zosvb7XZlVlevdAadFZN4iDXSLdEkL+biYuLnCBlKY90aDgR6l8oX2ov/3pTvVyxpqmHdGA90Z3VLDta61gRTmXdFgoHJ0Q4qbtyqbFbnjBZgXsXk/VOkf/dhYsdSo/QFvEik3Z8C5Yd4DDXUPdM2NlUN+U7R5PxRvjhxocpi3QUPdBlXnkJcSjOdllfmnLJf6xPEDzY+jDx4+IT90A3R7Tv1s3v20OupNri+Xq7S9C0Is4Yp5SzTULVGCK9+y9rucX5yuhbPEvD0a6vbomiVtH6F+q2u3XxbOi9S8Pxrq/uhOql59lbvVU84txVPEvFsa6m7p5vo3DLnNqmzqUix4fpi0TMVk2vNDt0yfRTYZIENTL6qJmKzxktA+19O6ysovdT1fo/Rv0XVva5iyRVeTGKbyYZk9ivIqy79Pl5+suPTBD56W/+s/bzGb36+vIGvyQdzXSr2tF00udpifrFValzVT0e2+sA7P++9/cFQaUWbLUqfdv3MCxIeqNFkj7qlWMCjIlYF0RpCrKj4Y5LqDxh7yFAy57kuxh3wMhnyokSJvyJVHAoNcd0zYQ46ey3X7gT3k4CAx0pU9e8hDMOS6UmYPeQSG/OzEpxeipdD5qU9lgaEgj89PfYZgKRSfn/oMwVIoPj/1GYGlUHx+6jMCS6H4/NSnspVgkJ+f+ozA6jM+P/UZgdVnfH7qMwKrz/j81GcEVp/x+anPCKw+k/NTnxFYfSbnpz4jsPpUV7YD+VP1IbgsiyfRzgeqZtkgn4BX0eT8RGiCntLPT4SmYKslOT8RmoJjxYSrCKUQT9FhC1cJGhCAJ+ighasApQCHM5yr/KQA90ZgWyvlqj5JxFXqEYY4V/FJI+6DEde1Jw/EQ0un8ZSr5IxsBZyr4KQAh0v8lKvejG2lOFe1mdgKOFe1SQGOn1O4ys3UVopzlZsU4N4IXLgy5io3ScTRk8qYq9wcWzqpjLmqTQpw/KTCVW6SiMMnFV1vLrP5i/kk68Snpp7di1LkXXFxcfF3HwTVn26A9+hR4KpBacgTsF0+5qpCachTcP3KmKsO9TwCcnTac8xVh5KIj9GIcxWiJOLeCFswtOnadU6QYxfPYKRL0WXU+CCqpsift0eDcIgayVEAN34KRro+XY5C29WNuBGPi+nt6rgv3qPgg0eBq2Y9ADk2kAxGXJOkNOTgWpdgpCvU1Vwjul9b0VxLmPoOpnzxxzpjwUiXq6sVt6q74untTFbcBFsoHYzOTsGiDcpgpEvYMwxywEZCMDo/WQt2ywKPraz1CcjB7aIDxYXzQRy98yhQV8YPcks3ZgQeW7lKIa7qJmCIs1WrJOJgS8Zjm06ldx+Bw3SPbTqVhNwHx+QeWzFKQp6iI0S2+VRLNyAFHlvhSSGOXjx9trqTQtxL0ZCzFZ405OCZ3GcrPCnIfXAL+sDXlefSyRWvXZPl3Tf5377e9POMg5Nr6f7SwGcrRinE4espWzFKIY6fadiKUWpPL5zkbLUohTie5Gy1KLmtFx40shWjlu7rDQJdjC5jxpmQF/qpyaYz+d0+V13NIWakd56CncaArT4lIUdPNaqqlR/klu72DQK2iVFy8ymc5FzFqE/twYOTnKsYJRFHK6OAKtyVl3mZ52Leick9kw3W9CCAy4wCXZ4uB+FxUZQr9Ovqrqlnc86DAE9zBEQp78PaAb6sJrd9XH/LexTQiy5XEUtCDrdqQq4pVfWCdXFOyFWxkoij45xQF6zLyX0qKtFknbjvmkXeLRrBdgQ8dP16SCRYz2gI0CFOyFbRUpDjF1e2kta3darnml71bS1oD7mmV31bqyBDrtlV39Y6mZCtLrW1aCNiK0upCgI44mxlKZVIhSOuy1ImiFNZPTjiXPOoga0ppoir6Awo0QlHnKvmVGUn9iHOVXMGtmrOiKvmDGzVnBFXzRnYqjkjrpozsFVzxlw1Z2Cr5oy5as7A1qJ1dUrq+SAO5/jhraXL7qTV3747KQk/vAdyTJwicy74ozdoxGz1qLUbNGK2gtRWYzHmKkhDW43FmKsgVeWB9iHOVZCq8kDrEE+4CtLQVmMx4SpIQ1ubqCW6IN1uf/m4itGXO2AYbLwgBwEepCdcE6OhrfZuwjUxGpL2rgdGnKsQDSl7Fz63E/tLVdH/tbxItuDD6c5WktqazUjYSlKy6xG6tXeia1K1g307xfR7izhEj3TvKTDxU7Y61dp2XylboWpr5lTdZOeDODqCSdmKUltz1SlbUUrm6tARTMpWlVKQw3flplzTo2qbmn1rJ1stSvavg88rXMVoRGak0eEK1/yo2hlo3bQy5qo7ScTRHFd//4wQB7cHVJKAH+K2nok55io7I3JzERpxrrIzIrPPaMS5qs7I1uzzmKvojGxNgI6JxrrvmxtzOJ+BHgR0+MJWhtrqmo+JlChL2pODgKV9OCLOhtnkpS+Lz7Ns+revfoksdRzDEVuhSm6Bwc474YirUI0tNRzDEdlTl99MTw8Ceqbnql3V3nz7aK9rV760t9SWDEeHjo4pll+3/a3onu84DIJva5DDNa1KIg6fe4hjYljOPeQgoOceronW2NKUSOgRcpYl7clBANPe4yppY0vzUqGnS1q+tCcHAU17QuW+jzQ/chgEKl+IjjQ9tirX0gxt6J2TyiUHAT330Cp3fWxVMZuX4l5wGAQqcw6fe4g87lkNAnrDWehxTeSSkKP3KYQeW51L5rDA871P6lxmpxQmlh4CH6pPYsd5EnE453WRywRxS7cthD7XAuOE7G+l6mFgkHPVrwcgBwtYn2uJ8QHIQzDkXGuMacgDNMu5pmBpyGOwEvWJHGwj/rMoGnH/1l5OZkXFdwASsC71uerSA5Bjd3OHAdedrgll/eIhZ6tESchT8MSijgrhBzlp66Kj9ICtFqUhB0fpAXEgjbzMT41on7/V38XfP3oh4UdH7AGdWD0H+NHRe8BWo5KQwyMZthqVzpaiIxmu2dKE7oiKhpytKqV7F4IjmZBIlzbiqV9JH8TrvGjE5KFjUJlBjwI6oFEHRp33KKDjGnWI1BlNP2gfMmSrXemTJdGQs82j0o08wanrkG0elYYcHdew1agk5GiNGrLVqCTk8Lmcq0ZNqVI7PMu5alR1HIl9kEdcM6fqPBILIeeaOU2prcF4yLmqz5QutvPBkHNVnylZHwCHnKv6TK3NHUVc1WdKSyGw+oy4qk8acrQUiriqzzEthdAs56o+x3SQiIacq/oc03W7YMhjruqThhw9l8dc1eeYLpVGs5yr+qQhh7Ocq/ockwVGcJZzVZ9jOsOPhpyr+qQhh08sXNXnJpFvIc25ys/N9hYLMeeqPw9gDp9buArQTcWKfTxPuCrQA5ijea46zzDE3FoNmnDVoN6ITg6hMecqQg9gDp9buKpQb2St8k+4ytADmKP7jSZ8dSi9nwsMOV8Zaq3DlfCVobTFBd4wl/CVofSWCizkKV8VSkIOZrm6y84I8gQcs6iS7DOCXJ02DYOcOB1GvIp80YmHHrlZxuOYjANzTQwOY1K+qtTaOtGUryqlC0XBzdJTtqrUs/VEgJQ4/mUxn2Sd+NTUs3tR9ichcZjhVdA4EMCDNwKkbIUqjTl8hmcrVGnM0f76mK1S9ajC9AQcw6uj9s4IcrRsGrNVqiTk8EYuY7bZ0gOYg1fQMdFr90FUTZE/Xyp3oGIRPJLDgG5RNyZ67rZd3Ygb8biY3oq2zaYcjnA8NAw+eBj4qlcac3Q8yTapSmMeo6cb4oSYVnS/tqK5ljiJ147zAIATIWNduK6W3aruiqe3c1l2E6xbGY3OT8uiG2ZEqvr+zEMdsKcQqVY174dhIkrRie0EdMN7GFKs5o1GZ6h5wQ5mNGKbi/XoZmBgyNmmYknIVa0LDHK+WpaEHJuJjUZ8pSwF+Rg9sfDNutp6inI0osRrXlc/RNM9PBWleCgmLYvQkT5ZGRzGeHzFK320Mpj6ni5e2WOODtc9Xamyx3wMNsY8vrKU2qANro2PPL6qlIIcXOQReXxVKdmGAB618JWltvbCizy+upTGHL2C8hWmtrYhiDy+5cD04ZrgucXnq0JtbUEY+XxVKL0/Gzy3+HxVqK2bJiOf2Ls6b+pctO39s/x687qoOBzce2AYErDH7rNVpj61pw9tBvhslamaR+2LHn22ypTGHB7JsFWmvqWbySKfrTAlIUfvbIp8tsL0AObg6TxgK0xpzNFmQMBWmNKYg/dyRGrPFPO9HAcGAByrB2xzpTTm6E0EAV9JShY3omnOV5JaW2kX8JWk1pZ4BXwlqa2lLwFfSUpBDp/N+SpSW6uNQr6C1NZDT6KQryC19dCTKNQFKRfMqcoXtKcb8pWgFOTw2ZyvAiXru9A2eshXgtKYo2dzvhKUxBxto4d8JSiJOdpGD8+jJdKBAQAr0pCvIqULpsE2esRXklLFu2ivK+KrSCnI0aF6xFeQ0tsCwMtpxFeR0pijpxa+kpSqjUYjzleQUoiD5WjEV45SiKO7GkV81SgFuer+D4OcbUI0IHdcoINEtvKThHwMVp8xW/VJQg630GO28vMA5uCYJWarP2nM0c5WTGwdfcjm8/LtJuuyx6wVv8xZbB09MAzg2DFmK0mVwWJdIBOz1aQk5GOwDRCzFaU05OAUacxWlNKQo5dUvqKUhBw9l/MVpRTkcIWU8FWlNObgbFHCV5XSmINVacJXlZKYo4uMEkKVysv8Wtfd56oTzVMmvw3jIQDH6sn5KVK4GZOcnySFd9ZJ+GpSn8Ac7bwkfDUpBfkYHcTw1aQk5GBLN+GrSUnIwRNLyleSUpDDbYCUrySlMQfP5urIvLPCHBwnpmwLdQ9gDj4bIOWrQUnM0dZLqmtQjvu7DgwA2HhJz0+Qwo2X9PwUKdx4SflKUltbGqd8JSkFObrkZaxL0tVy+lblX+tStJ+aevZNzOYs6uvIUQDP72O+ItXaXt5qbwhDzMnWo2jI+WpUEnKwXBrzlajkUfZgY31MKNS+OEDkdTORUvW3onv+ymJJJXuRgmPJMV+ZSnZphC+pfGUqjTnYax/zlakk5mgPcsxXp9KYY4VqPCKEat6IrBPfivy7WNXdsVhVqaawKXa2iVWB8ZmPAtaajEd8pSvVYg18DHg84itdbW1ZGo/4alcaczTP+Zb4kpjDp3O+UtXS7o3xiK9SJdvawadzvkrV1vaN8YivUiUxBxdrxB7fKl+qz5oHprn6+2cEOXoF9fhqUJLl6BXUI7ad9sUaD1lZPvTYzeRfZuG+kMOAXlQ9XZee4zCAD3iMPTrPujcKNe9hABd1xJ6uXs/xbkAblB5bRRuSrWbRIRBbQUtCDi5XjT1dz67aQU5X2z/6ktXP1eeq5TDZ0KMAVrg+kYs9r1FAl9vEPlvVewBzcNDps5W9NOZoveWzzb0ewBy80Ppsc6/qKGnrwkmfbeqVhBy/hLJNvR7AHL2E8lWqJObwJZSvVCUxR5d1+LpW5YK5b+kSGrBNvZKQo70ANbOdEeTwqEU1TTgrzMFRS8BXhJKYo6OWgK8IJVtwoFdQviKUbP6A3akaB3w1qK3NH+KArwalMUevoHw1KIk5fAXlq0Gp9g/oFTTkq0EpyL0EPLUoE4gh5mR/DTTN+WpQCnJ0oBjylaB0ew3wAhrylaC2tjSJQ74alMQcHSiGfEUojbkPxpyvCCUxRyflQr4ilOpWAo8U+WpQCnLwcUpxxFeDkpCDg/OIrwSlIIcHihFfDUpijg5aIr4ilMQcbW9FfEUo1ZQHHbREfDUoBTm6kijiK0FJyNFBC18FSndYA6eeI74K1NpOghFfCUpijnYUY74alMQcHSjGfEUojTnYUYz5ilBbuzfGfDUoBTk6Uoz5SlBrG2bGfDUojTl6NucrQukmpWBLMearQm3t3hjrInTZwWUiStGJh0XLGXy00RXzVaMk5ODwJeErRsmOdOjwJeErRknM0aZLoovRVTNGUU3usrZ9qZvJl6L6zngI0G1JE6JJbyNa0S1X1of5ciRYNEcjhwFtyyRUk97zuRPQjfATtvo1ovvTgSFnK19pyNFLLlv1SkKOVq8J2xQqCTlcQLHVrAfmcnAkmbIVrTTmAThsTHXRun+oQN4VddUyHgG0fkp1Ccue9ei6gZTQrGfDej8ER5Ep2/yq2hhhXRSZEufHiNe5RLXvY3+TdRlf/NFnOaTEwTFngz861NGF63nhD7bH0oM52Ms8l3B0fOGHt3ZI+UpaGnNwoDnmK2lJzNE5wTHbPCyNOTr7NOYrYknM0a0dxmyrgtU+Z+sk1JhIsuaNyDrxufpRdP0BnBXfEUCLqDHfHCsJOXqeIXTrw3PW3mbVRDL/cjIrqq8cCjzIUYDvoxzzzbvSmKPDd76JVxJzePiuy9R1Pdm0aDvRXFaTyzwX8473dBNjp5tkRJx5ej6hDrqeLFGG0TnNPmBRlYz4CllLj+BIRnx1LHkERwqGnG/21dJTT5IRX+Fq66knyYhvdbCtp54kIyLL2rsF35piOhXNnWhmRcsifLf1IJRkxFe50pj7YMwJ5dqtaH+/eGzzpph3BW/qgwsqE49vztXSM4ASj69SJSEHx5OeLlTXNtmP+rt46OS/qvbh8e2BxWRDjQK4pinx+GpX8vArcB1T4vEVrzTm6DWVr3olMUeH8B5f9UofrIeez/kmWS09WC/xiLJgidjzQ56V5aMEhS/8+OWUb1mwrSe+JT5fiWrriW+J+qT380wpAV0w2HdAAg+uDU58XamyJzs6jvH56lJbj9pLfL661NKj9hKf2NL60He9upQB5MdZVpR88UfXEfh8JSp9CBw6juErUW09eC/x+WZT6YP30DwnsqnnMrd7AZj0AVEBLAVTwaDslz79EBxHqhvvnCYbtF5SpSMMMbf0xMkk4CtR6XPhwGtqwFei2noWXxLwTZ3aehZfEhBbVrl4vbYeDpcEfMUpjTk6duErTknM0V5vwDdpaukhiEnIN2dq64l8ieoSek6Yo2OXkK8UJTFHbxkI+WrRsa3TOV8pSkGOn875SlES8wAcnYdsU6Tq8HXrtsaEbEUoCTl6H0zIVoOSkMN3t4dsNegBzMEraMRWhMa+rTxXHVjPCnM0z9mK0JhsgwSOWiK2GpSEHE9zop/vg6jaRSOu6rpruyabMx6CAD27s9WkNObojFHEV5PSW77AkPPVpNbusouInaUPD0VVdA8PjKFHJzEiXZueDfQ+FvqYr0Sl9weAIeerUCnIU/DOIyWdB07wvH7Oups6X8zk12s/cWh/RI7CGE18vprV2r1IMdvEKY15isacr0ilSuzQW0tjvhqVLptG05yvSLW2kjTmmzmlyr3gUwvfxKmt1V4JX1FKV3uBPZiErSpV32xgBY3BmBOytO3qRtyIx8X0VrRtNhUcZKn6svowoJnPVpbSkMNneLay9ADm4DxeQrQ/emmKbjXbfCrkd2Y8AOCajYStSKUxT8GeY8JWpB7AHCxSEyqTuqqT+VwVXZGVEikWYQ3ZKRk921BJ1bMahRQ8CilbKZtS8w862ZeyVbIpVSMGh1wXslwgpzvFgCFnq1oPQA7OeKRsVSuNOXqzdco2mUpjjhZNKVuhegBzsGhK2QrV1NpGDikhVFt5qX//vl807gk475Hq0pQL1+n8HhbyMVsdqr6ZfZCz1aEk5GgdOtZ16LrOtxJN1olreZF80UfX947ZSlIach8MOVtFemBaB+dRx2wVqVqx7FtK2QpSEnL4Uqrr0b2lVO2Z4TsC8OWUba0vDTl6OWUrTA9M7djlNB3xVaa+nctpqmqNzwhy8HKajghlOm/qXLQtX+DBq2g64itKScixq2g6Ivoksec6fi3lK03prmBgyPlK09BWyNmmSseWNqRKR3y1KN26AR0y8hWjdOsG7F6w1OMrRumqOvDc4vFVozTm4LnF0+UoF8zp45HAkPMVohTkqiwcBjkhRP+zEM3bTdZlj1nLoB6A7JyBZjxfNUqXeaEndr5ylMQcHjRy1aP+yNLautTjqkdpyOGzOVc5egBycPzic1WjvspAWjexqE9iCLlvK+RctSgNOXou97lq0QOQo+dyrpW6/sjW1JzPVX8egBzcZCr1uepPf0SnQ8Ga3+erP0nM0Zrf5ytAbc1B+3wFKAk5ejoP+CpQS4+HSQO+CtTSXjqpOoSJIeS2ZkMDvgrU0hYAacBWgXq2pikCtgpUFe3YBzlbAapqduyDnK3+9CifBW3gBmzlp2etzRKw1Z805mibJWSrPz1bbZZQ15/Lorm8ns3rVlxWk5sme+o+zhj0jaZHAT3Bh2wlqWer8RKylaSercZLyFeS2mq8hMQpMK3YTOxZUfLFHz6x89Wn1hZFh3wFqrVF0SFbherb6jaGbAWqesU6yCNdn67F0vyNw2lqNPLodTRimyb1fVvJrmvSJdkn9UtV1tmkJ/zV213WcXAGyFGAE5+tTPVtLSSN2MpU39YeLxHbzKlvq/EbsVWmvq2WY8RWmPq2Wo4RX11qq+UY6bp0GTcu5ipq5Is9OlqMCYEqv1W76eH9pWh5xOyUGwYfBbZiNaDNMLDpG+tqlT3maNM3ZqtNA1u1acxWmwa2atOYrTYNbNWmMVttSkKO7lgfs9Wmga3aNGarTWnIwefupjHbpGlgqx+QsC3qDSgBCoecKOp9mJdZdS9Kkf/tD/KiwUevpImuRFfgZ3n38VXki+7vb4CR4KOtl0SXpOfDfPiBJAnRgfc80E8DMPp8hSqNOTieTNgq1dDWuseEOKpUvHaNXGK/ih+FeLmWYHHIcaiNQfaNgi5ed0fhS9aJVo7FU8F7FMAOfELkWs9sFALwMKRsJW5oayJE5b4YQm5rIkSd78EQclsrxlK2GVYS8hSsYVO2GVYacrBjlrIVrgcmFjTN+QpX+rhBsEGTss2xhrbmWFNCpj6IlRP/LWu//+2PqD4Ev6lpRj5s6rrbee2nJps/38qr6N/xfw==
\ No newline at end of file
diff --git a/scripts/import_diagram_containers.drawio b/scripts/import_diagram_containers.drawio
new file mode 100644
index 00000000..7ee90533
--- /dev/null
+++ b/scripts/import_diagram_containers.drawio
@@ -0,0 +1 @@
+7ZpLc9owEMc/DTPtoR3LT7iGpumhPXHoMSOs9SMRFiPLPPrpK2EJLDuEZKZUDMQcsP67sqz9aWVLMAqmi80Dx8viFyNAR75HNqPg28j3/Unoyy+lbLUSoqRVcl6SVkMHYVb+AS16Wm1KArXlKBijolzaYsqqClJhaZhztrbdMkbtVpc4h4EwSzEdqr9LIgqtxp53MPyAMi9M076xLLDx1kJdYMLWHSm4HwVTzphozxabKVAVPhOYtt73I9b9nXGoxFsqyBAJXFbAH3GZFli09VeYNrqvWo6m1afEUz1gpKFQf9a3L7YmKJw1FQF1WTQK7tZFKWC2xKmyruU4kFohFlSbs5LSKaOM7+oGJIIxCaVeC86eoWOJd4eqIW90pltDptyODKTKw47rWKyAC9h0JB2IB2ALEHwrXbQ1NlD0uEx0cd1hHGqt6OCNtYb1sMr3Vz4EXp7o2J/k0MjGBhSUqBjE50KQZRCnqWsEyWRiIUBJ6IJBBlg0HGoFg8mcLVk1QGJ8vnZ8FCF0LkLgQ0awa0IIBXaWRLGTNNkjUtPTnA0nrj0f43DW9LkQOF5sw4knbuFU0AiOqewlPw6o66QgRdcNadJjNA7cMuIgX2xqgQUcR9TxUYTC6yaUeD1CjrNI8KYW8Aoe46DYBNfNBnljG07oO4FTA1+VqVyF9KHsDQrG5Fww5oiQzHMNI0I2C+QmUdaMP2dULev6MA6W3dPfP9vbc6Q+rnGEPRxfov+IA0gOj8jz/AGEODgRa8ZFwXJWYfqTsaUWn0CIrQ6QesW249/G2ay+o148VWJQPAd6h9PnfNeYtdRRxwtInprF0pQxT1+DUrOGp3BiIArMcxB9p+5CWwXtVbIcqFxarOyNh3+Ayey4dDCNz02pP+pdUeoCeBlRj6MzStEwmfxboXR8DfEyM/uB7A7Z+HaRvWn6uxBOMRpwQrfC6fQEeNiEdAYouWFA7537LgFX8IFrsJVy0TOg2Vr/IHaS2CXkV/xBy94Iu1hU4xt+ctlzm3NEsnj4LX1n6/wnIbj/Cw==
\ No newline at end of file
diff --git a/scripts/script_analyze_function_imports.py b/scripts/script_analyze_function_imports.py
new file mode 100644
index 00000000..6a3118d2
--- /dev/null
+++ b/scripts/script_analyze_function_imports.py
@@ -0,0 +1,223 @@
+# Copyright (c) 2025 Patrick Motsch
+# All rights reserved.
+"""
+Analyze function-level imports to determine which could be moved to header.
+
+Categories:
+1. CIRCULAR - Import would cause circular dependency (must stay in function)
+2. REDUNDANT - Same import already exists in header (can be removed)
+3. MOVABLE - Could potentially be moved to header
+"""
+
+import csv
+from pathlib import Path
+from typing import Dict, List, Set, Tuple
+from collections import defaultdict
+
+# Paths
+SCRIPT_DIR = Path(__file__).parent
+INPUT_FILE = SCRIPT_DIR / "import_analysis.csv"
+OUTPUT_FILE = SCRIPT_DIR / "function_imports_analysis.txt"
+
+
+def _getContainer(moduleName: str) -> str:
+ """Extract container name from module path."""
+ if moduleName == "gateway.app":
+ return "app"
+
+ parts = moduleName.replace("gateway.", "").split(".")
+ if len(parts) < 2:
+ return "app"
+
+ container = parts[1]
+
+ # Skip tests and scripts
+ if container in ("tests", "scripts") or container.startswith("script_"):
+ return None
+ if parts[0] in ("tests", "scripts"):
+ return None
+
+ # Handle features sub-containers
+ if container == "features" and len(parts) > 2:
+ return f"features.{parts[2]}"
+
+ return container
+
+
+def _analyzeImports() -> Tuple[Dict, Dict, Dict, Set]:
+ """
+ Analyze imports and return:
+ - headerImports: Dict[module] -> Set[imported_modules]
+ - functionImports: Dict[module] -> List[(imported_module, function_name)]
+ - allModuleImports: Dict[module] -> Set[all_imports] (for circular detection)
+ - allModules: Set of all modules
+ """
+ headerImports = defaultdict(set)
+ functionImports = defaultdict(list)
+ allModuleImports = defaultdict(set)
+ allModules = set()
+
+ with open(INPUT_FILE, "r", encoding="utf-8") as f:
+ reader = csv.DictReader(f)
+ for row in reader:
+ sourceFull = row["module_name"]
+ targetFull = row["imported_module_name"]
+ position = row["position"]
+
+ # Skip external imports and relative imports
+ if not targetFull.startswith("modules."):
+ continue
+ if targetFull.startswith("(relative)"):
+ continue
+
+ # Skip tests/scripts
+ sourceContainer = _getContainer(sourceFull)
+ if sourceContainer is None:
+ continue
+
+ # Add gateway prefix for consistency
+ targetFull = f"gateway.{targetFull}"
+
+ allModules.add(sourceFull)
+ allModules.add(targetFull)
+ allModuleImports[sourceFull].add(targetFull)
+
+ if position == "header":
+ headerImports[sourceFull].add(targetFull)
+ else:
+ # Extract function name
+ funcName = position.replace("function ", "")
+ functionImports[sourceFull].append((targetFull, funcName))
+
+ return dict(headerImports), dict(functionImports), dict(allModuleImports), allModules
+
+
+def _detectCircularDependency(source: str, target: str, allModuleImports: Dict) -> bool:
+ """
+ Check if moving target import to header would create circular dependency.
+ Returns True if target already imports source (directly or indirectly).
+ """
+ visited = set()
+
+ def _canReach(current: str, goal: str) -> bool:
+ if current == goal:
+ return True
+ if current in visited:
+ return False
+ visited.add(current)
+
+ for imported in allModuleImports.get(current, []):
+ if _canReach(imported, goal):
+ return True
+ return False
+
+ # Check if target can reach source through its imports
+ return _canReach(target, source)
+
+
+def main():
+ """Main analysis function."""
+ print("Analyzing function imports...")
+ headerImports, functionImports, allModuleImports, allModules = _analyzeImports()
+
+ # Categorize function imports
+ circular = [] # Must stay in function (would cause circular import)
+ redundant = [] # Already imported in header (can be removed)
+ movable = [] # Could be moved to header
+
+ totalFunctionImports = 0
+
+ for source, imports in sorted(functionImports.items()):
+ headerSet = headerImports.get(source, set())
+
+ for target, funcName in imports:
+ totalFunctionImports += 1
+
+ # Check if already in header
+ if target in headerSet:
+ redundant.append((source, target, funcName))
+ continue
+
+ # Check for circular dependency
+ if _detectCircularDependency(source, target, allModuleImports):
+ circular.append((source, target, funcName))
+ continue
+
+ # Otherwise, could be moved to header
+ movable.append((source, target, funcName))
+
+ # Generate report
+ lines = []
+ lines.append("=" * 80)
+ lines.append("FUNCTION IMPORTS ANALYSIS")
+ lines.append("=" * 80)
+ lines.append(f"\nTotal function imports (internal modules): {totalFunctionImports}")
+ lines.append(f" - CIRCULAR (must stay): {len(circular):4}")
+ lines.append(f" - REDUNDANT (can remove): {len(redundant):4}")
+ lines.append(f" - MOVABLE (can move): {len(movable):4}")
+
+ # Group movable by source module
+ movableBySource = defaultdict(list)
+ for source, target, funcName in movable:
+ movableBySource[source].append((target, funcName))
+
+ lines.append(f"\n\n{'=' * 80}")
+ lines.append("MOVABLE TO HEADER (grouped by source module)")
+ lines.append("These imports could potentially be moved to the module header.")
+ lines.append("=" * 80)
+
+ for source in sorted(movableBySource.keys()):
+ imports = movableBySource[source]
+ lines.append(f"\n{source}")
+ lines.append("-" * len(source))
+ for target, funcName in sorted(set(imports)):
+ shortTarget = target.replace("gateway.", "")
+ lines.append(f" [{funcName}] {shortTarget}")
+
+ # Redundant imports
+ if redundant:
+ lines.append(f"\n\n{'=' * 80}")
+ lines.append("REDUNDANT IMPORTS (already in header - can be removed)")
+ lines.append("=" * 80)
+
+ redundantBySource = defaultdict(list)
+ for source, target, funcName in redundant:
+ redundantBySource[source].append((target, funcName))
+
+ for source in sorted(redundantBySource.keys()):
+ imports = redundantBySource[source]
+ lines.append(f"\n{source}")
+ lines.append("-" * len(source))
+ for target, funcName in sorted(set(imports)):
+ shortTarget = target.replace("gateway.", "")
+ lines.append(f" [{funcName}] {shortTarget}")
+
+ # Circular imports (for reference)
+ if circular:
+ lines.append(f"\n\n{'=' * 80}")
+ lines.append("CIRCULAR DEPENDENCY (must stay in function)")
+ lines.append("=" * 80)
+
+ circularBySource = defaultdict(list)
+ for source, target, funcName in circular:
+ circularBySource[source].append((target, funcName))
+
+ for source in sorted(circularBySource.keys()):
+ imports = circularBySource[source]
+ lines.append(f"\n{source}")
+ lines.append("-" * len(source))
+ for target, funcName in sorted(set(imports)):
+ shortTarget = target.replace("gateway.", "")
+ lines.append(f" [{funcName}] {shortTarget}")
+
+ # Write report
+ report = "\n".join(lines)
+ with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
+ f.write(report)
+
+ print(report)
+ print(f"\n\nReport saved to: {OUTPUT_FILE}")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/script_generate_container_diagram.py b/scripts/script_generate_container_diagram.py
new file mode 100644
index 00000000..7f6243c9
--- /dev/null
+++ b/scripts/script_generate_container_diagram.py
@@ -0,0 +1,221 @@
+# Copyright (c) 2025 Patrick Motsch
+# All rights reserved.
+"""
+Generate a simplified draw.io diagram showing container-to-container imports.
+Aggregates all module imports into container-level relationships.
+"""
+
+import csv
+from pathlib import Path
+from typing import Dict, Tuple
+from collections import defaultdict
+import html
+import math
+
+# Paths
+SCRIPT_DIR = Path(__file__).parent
+INPUT_FILE = SCRIPT_DIR / "import_analysis.csv"
+OUTPUT_FILE = SCRIPT_DIR / "import_diagram_containers.drawio"
+
+# Container colors
+CONTAINER_COLORS = {
+ "app": "#dae8fc", # Light blue
+ "aichat": "#d5e8d4", # Light green
+ "auth": "#ffe6cc", # Light orange
+ "connectors": "#e1d5e7", # Light purple
+ "datamodels": "#fff2cc", # Light yellow
+ "interfaces": "#f8cecc", # Light red
+ "routes": "#d0cee2", # Light violet
+ "security": "#fad7ac", # Peach
+ "services": "#b1ddf0", # Sky blue
+ "shared": "#f0fff0", # Honeydew
+ "workflows": "#f5f5f5", # Light gray
+ "features": "#e2efda", # Sage green
+}
+
+
+def _getContainer(moduleName: str) -> str:
+ """Extract container name from module path."""
+ if moduleName == "gateway.app":
+ return "app"
+
+ parts = moduleName.replace("gateway.", "").split(".")
+ if len(parts) < 2:
+ return "app"
+
+ container = parts[1] # modules.XXX or tests.XXX or scripts
+
+ # Skip tests and scripts
+ if container in ("tests", "scripts") or container.startswith("script_"):
+ return None
+ if parts[0] in ("tests", "scripts"):
+ return None
+
+ # Handle features sub-containers
+ if container == "features" and len(parts) > 2:
+ return f"features.{parts[2]}"
+
+ return container
+
+
+def _parseContainerImports() -> Tuple[Dict[str, int], Dict[Tuple[str, str], int]]:
+ """
+ Parse import_analysis.csv and return:
+ - containerModuleCounts: Dict mapping container name to module count
+ - containerEdges: Dict mapping (source_container, target_container) to import count
+ """
+ containerModules = defaultdict(set)
+ containerEdges = defaultdict(int)
+
+ with open(INPUT_FILE, "r", encoding="utf-8") as f:
+ reader = csv.DictReader(f)
+ for row in reader:
+ sourceFull = row["module_name"]
+ targetFull = row["imported_module_name"]
+
+ # Skip external imports and relative imports
+ if not targetFull.startswith("modules."):
+ continue
+ if targetFull.startswith("(relative)"):
+ continue
+
+ # Add gateway prefix to target for consistency
+ targetFull = f"gateway.{targetFull}"
+
+ # Get containers
+ sourceContainer = _getContainer(sourceFull)
+ targetContainer = _getContainer(targetFull)
+
+ # Skip if either is None (tests/scripts)
+ if sourceContainer is None or targetContainer is None:
+ continue
+
+ # Track modules per container
+ containerModules[sourceContainer].add(sourceFull)
+ containerModules[targetContainer].add(targetFull)
+
+ # Skip self-imports (within same container)
+ if sourceContainer == targetContainer:
+ continue
+
+ # Count container-to-container imports
+ containerEdges[(sourceContainer, targetContainer)] += 1
+
+ # Convert module sets to counts
+ containerModuleCounts = {k: len(v) for k, v in containerModules.items()}
+
+ return containerModuleCounts, dict(containerEdges)
+
+
+def _generateDrawio(containerModuleCounts: Dict[str, int],
+ containerEdges: Dict[Tuple[str, str], int]) -> str:
+ """Generate draw.io XML content with container nodes and aggregated edges."""
+
+ containers = sorted(containerModuleCounts.keys())
+ numContainers = len(containers)
+
+ # Arrange containers in a circle for better visibility
+ centerX = 600
+ centerY = 500
+ radius = 400
+ nodeWidth = 140
+ nodeHeight = 60
+
+ # Calculate positions
+ containerPositions = {}
+ for i, container in enumerate(containers):
+ angle = (2 * math.pi * i / numContainers) - math.pi / 2 # Start from top
+ x = centerX + radius * math.cos(angle) - nodeWidth / 2
+ y = centerY + radius * math.sin(angle) - nodeHeight / 2
+ containerPositions[container] = (int(x), int(y))
+
+ cells = []
+
+ # Create container nodes
+ for container in containers:
+ x, y = containerPositions[container]
+ moduleCount = containerModuleCounts[container]
+
+ # Get color
+ baseContainer = container.split(".")[0]
+ color = CONTAINER_COLORS.get(baseContainer, "#ffffff")
+
+ # Create node
+ label = f"{container}\\n({moduleCount} modules)"
+ cells.append(f'''
+
+ ''')
+
+ # Create edges with import counts
+ edgeId = 1000
+ for (source, target), count in sorted(containerEdges.items(), key=lambda x: -x[1]):
+ sourceId = f"container_{source.replace('.', '_')}"
+ targetId = f"container_{target.replace('.', '_')}"
+
+ # Thicker line for more imports
+ strokeWidth = min(1 + count // 10, 5)
+
+ cells.append(f'''
+
+ ''')
+ edgeId += 1
+
+ # Assemble XML
+ xml = f'''
+
+
+
+
+
+
+{chr(10).join(cells)}
+
+
+
+'''
+
+ return xml
+
+
+def main():
+ """Main function."""
+ print("Parsing container imports...")
+ containerModuleCounts, containerEdges = _parseContainerImports()
+
+ print(f"Found {len(containerModuleCounts)} containers")
+ print(f"Found {len(containerEdges)} container-to-container relationships")
+
+ # Print summary
+ print("\nContainer Import Summary:")
+ print("-" * 60)
+
+ # Sort by total imports (outgoing)
+ outgoingCounts = defaultdict(int)
+ incomingCounts = defaultdict(int)
+ for (source, target), count in containerEdges.items():
+ outgoingCounts[source] += count
+ incomingCounts[target] += count
+
+ for container in sorted(containerModuleCounts.keys()):
+ modules = containerModuleCounts[container]
+ outgoing = outgoingCounts.get(container, 0)
+ incoming = incomingCounts.get(container, 0)
+ print(f" {container:25} {modules:3} modules | imports: {outgoing:4} out, {incoming:4} in")
+
+ print("\nTop 15 Container Dependencies:")
+ print("-" * 60)
+ sortedEdges = sorted(containerEdges.items(), key=lambda x: -x[1])[:15]
+ for (source, target), count in sortedEdges:
+ print(f" {source:25} -> {target:25} : {count:4} imports")
+
+ print("\nGenerating draw.io diagram...")
+ xml = _generateDrawio(containerModuleCounts, containerEdges)
+
+ with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
+ f.write(xml)
+
+ print(f"\nDiagram saved to: {OUTPUT_FILE}")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/script_generate_import_diagram.py b/scripts/script_generate_import_diagram.py
new file mode 100644
index 00000000..0a7dcdd9
--- /dev/null
+++ b/scripts/script_generate_import_diagram.py
@@ -0,0 +1,251 @@
+# Copyright (c) 2025 Patrick Motsch
+# All rights reserved.
+"""
+Generate a draw.io diagram from import_analysis.csv
+Shows all modules and their imports, grouped by container.
+"""
+
+import csv
+import xml.etree.ElementTree as ET
+from pathlib import Path
+from typing import Dict, List, Set, Tuple
+from collections import defaultdict
+import html
+
+# Paths
+SCRIPT_DIR = Path(__file__).parent
+INPUT_FILE = SCRIPT_DIR / "import_analysis.csv"
+OUTPUT_FILE = SCRIPT_DIR / "import_diagram.drawio"
+
+# Container colors
+CONTAINER_COLORS = {
+ "app": "#dae8fc", # Light blue
+ "aichat": "#d5e8d4", # Light green
+ "auth": "#ffe6cc", # Light orange
+ "connectors": "#e1d5e7", # Light purple
+ "datamodels": "#fff2cc", # Light yellow
+ "interfaces": "#f8cecc", # Light red
+ "routes": "#d0cee2", # Light violet
+ "security": "#fad7ac", # Peach
+ "services": "#b1ddf0", # Sky blue
+ "shared": "#d4edda", # Mint
+ "workflows": "#f5f5f5", # Light gray
+ "features": "#e2efda", # Sage green
+}
+
+def _getContainer(moduleName: str) -> str:
+ """Extract container name from module path."""
+ if moduleName == "gateway.app":
+ return "app"
+
+ parts = moduleName.replace("gateway.", "").split(".")
+ if len(parts) < 2:
+ return "app"
+
+ container = parts[1] # modules.XXX or tests.XXX or scripts
+
+ # Skip tests and scripts
+ if container in ("tests", "scripts") or container.startswith("script_"):
+ return None
+ if parts[0] in ("tests", "scripts"):
+ return None
+
+ # Handle features sub-containers
+ if container == "features" and len(parts) > 2:
+ return f"features.{parts[2]}"
+
+ return container
+
+def _getShortName(moduleName: str) -> str:
+ """Get short display name for module."""
+ parts = moduleName.replace("gateway.", "").split(".")
+ if moduleName == "gateway.app":
+ return "app"
+ # Return last part(s) for readability
+ if len(parts) > 2:
+ return ".".join(parts[-2:])
+ return parts[-1] if parts else moduleName
+
+def _parseImports() -> Tuple[Dict[str, Set[str]], List[Tuple[str, str, str]]]:
+ """
+ Parse import_analysis.csv and return:
+ - containers: Dict mapping container name to set of modules
+ - edges: List of (source, target, label) tuples
+ """
+ containers = defaultdict(set)
+ edges = []
+ seenEdges = set()
+
+ with open(INPUT_FILE, "r", encoding="utf-8") as f:
+ reader = csv.DictReader(f)
+ for row in reader:
+ sourceFull = row["module_name"]
+ targetFull = row["imported_module_name"]
+ position = row["position"]
+
+ # Skip external imports and relative imports
+ if not targetFull.startswith("modules."):
+ continue
+ if targetFull.startswith("(relative)"):
+ continue
+
+ # Add gateway prefix to target for consistency
+ targetFull = f"gateway.{targetFull}"
+
+ # Get containers
+ sourceContainer = _getContainer(sourceFull)
+ targetContainer = _getContainer(targetFull)
+
+ # Skip if either is None (tests/scripts)
+ if sourceContainer is None or targetContainer is None:
+ continue
+
+ # Add to containers
+ containers[sourceContainer].add(sourceFull)
+ containers[targetContainer].add(targetFull)
+
+ # Create edge key to avoid duplicates
+ edgeKey = (sourceFull, targetFull)
+ if edgeKey not in seenEdges:
+ seenEdges.add(edgeKey)
+ # Simplify label
+ label = "header" if position == "header" else position.replace("function ", "fn:")
+ edges.append((sourceFull, targetFull, label))
+
+ return dict(containers), edges
+
+def _generateDrawio(containers: Dict[str, Set[str]], edges: List[Tuple[str, str, str]]) -> str:
+ """Generate draw.io XML content."""
+
+ # Create module ID mapping
+ moduleIds = {}
+ idCounter = [2] # Start at 2 (0 and 1 are reserved)
+
+ def _getModuleId(moduleName: str) -> str:
+ if moduleName not in moduleIds:
+ moduleIds[moduleName] = f"node_{idCounter[0]}"
+ idCounter[0] += 1
+ return moduleIds[moduleName]
+
+ # Calculate positions
+ containerX = 0
+ containerY = 0
+ containerWidth = 300
+ containerHeight = 0
+ containerPadding = 50
+ moduleHeight = 30
+ moduleWidth = 250
+ modulePadding = 10
+
+ cells = []
+
+ # Sort containers
+ sortedContainers = sorted(containers.keys())
+
+ # Create container groups and modules
+ containerPositions = {}
+ currentY = 0
+ currentX = 0
+ maxHeightInRow = 0
+ containersPerRow = 3
+ containerCount = 0
+
+ for containerName in sortedContainers:
+ modules = sorted(containers[containerName])
+
+ # Calculate container size
+ numModules = len(modules)
+ height = numModules * (moduleHeight + modulePadding) + 60
+
+ # Position container
+ if containerCount > 0 and containerCount % containersPerRow == 0:
+ currentY += maxHeightInRow + containerPadding
+ currentX = 0
+ maxHeightInRow = 0
+
+ containerPositions[containerName] = (currentX, currentY)
+ maxHeightInRow = max(maxHeightInRow, height)
+
+ # Get color
+ baseContainer = containerName.split(".")[0]
+ color = CONTAINER_COLORS.get(baseContainer, "#ffffff")
+
+ # Create container (swimlane)
+ containerId = f"container_{containerName.replace('.', '_')}"
+ cells.append(f'''
+
+ ''')
+
+ # Create module nodes inside container
+ moduleY = 30
+ for moduleName in modules:
+ moduleId = _getModuleId(moduleName)
+ shortName = _getShortName(moduleName)
+ cells.append(f'''
+
+ ''')
+ moduleY += moduleHeight + modulePadding
+
+ currentX += containerWidth + containerPadding
+ containerCount += 1
+
+ # Create edges (only between different containers to reduce clutter)
+ edgeId = idCounter[0]
+ for source, target, label in edges:
+ sourceContainer = _getContainer(source)
+ targetContainer = _getContainer(target)
+
+ # Skip internal container edges for clarity
+ if sourceContainer == targetContainer:
+ continue
+
+ sourceId = _getModuleId(source)
+ targetId = _getModuleId(target)
+
+ # Shorten label if too long
+ displayLabel = label[:20] + "..." if len(label) > 20 else label
+
+ cells.append(f'''
+
+ ''')
+ edgeId += 1
+
+ # Assemble XML
+ xml = f'''
+
+
+
+
+
+
+{chr(10).join(cells)}
+
+
+
+'''
+
+ return xml
+
+def main():
+ """Main function."""
+ print("Parsing imports...")
+ containers, edges = _parseImports()
+
+ print(f"Found {len(containers)} containers with {sum(len(m) for m in containers.values())} modules")
+ print(f"Found {len(edges)} unique import edges")
+
+ print("Generating draw.io diagram...")
+ xml = _generateDrawio(containers, edges)
+
+ with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
+ f.write(xml)
+
+ print(f"Diagram saved to: {OUTPUT_FILE}")
+
+ # Print container summary
+ print("\nContainers:")
+ for name, modules in sorted(containers.items()):
+ print(f" {name}: {len(modules)} modules")
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/script_remove_redundant_imports.py b/scripts/script_remove_redundant_imports.py
new file mode 100644
index 00000000..1c83eb9e
--- /dev/null
+++ b/scripts/script_remove_redundant_imports.py
@@ -0,0 +1,245 @@
+# Copyright (c) 2025 Patrick Motsch
+# All rights reserved.
+"""
+Remove redundant function-level imports that already exist in the header.
+"""
+
+import csv
+import re
+import ast
+from pathlib import Path
+from typing import Dict, List, Set, Tuple
+from collections import defaultdict
+
+# Paths
+SCRIPT_DIR = Path(__file__).parent
+GATEWAY_ROOT = SCRIPT_DIR.parent
+INPUT_FILE = SCRIPT_DIR / "import_analysis.csv"
+
+
+def _getContainer(moduleName: str) -> str:
+ """Extract container name from module path."""
+ if moduleName == "gateway.app":
+ return "app"
+
+ parts = moduleName.replace("gateway.", "").split(".")
+ if len(parts) < 2:
+ return "app"
+
+ container = parts[1]
+
+ if container in ("tests", "scripts") or container.startswith("script_"):
+ return None
+ if parts[0] in ("tests", "scripts"):
+ return None
+
+ if container == "features" and len(parts) > 2:
+ return f"features.{parts[2]}"
+
+ return container
+
+
+def _findRedundantImports() -> Dict[str, List[Tuple[str, str]]]:
+ """
+ Find redundant function imports (already in header).
+ Returns: Dict[source_module] -> List[(target_module, function_name)]
+ """
+ headerImports = defaultdict(set)
+ functionImports = defaultdict(list)
+
+ with open(INPUT_FILE, "r", encoding="utf-8") as f:
+ reader = csv.DictReader(f)
+ for row in reader:
+ sourceFull = row["module_name"]
+ targetFull = row["imported_module_name"]
+ position = row["position"]
+
+ if not targetFull.startswith("modules."):
+ continue
+ if targetFull.startswith("(relative)"):
+ continue
+
+ sourceContainer = _getContainer(sourceFull)
+ if sourceContainer is None:
+ continue
+
+ targetFull = f"gateway.{targetFull}"
+
+ if position == "header":
+ headerImports[sourceFull].add(targetFull)
+ else:
+ funcName = position.replace("function ", "")
+ functionImports[sourceFull].append((targetFull, funcName))
+
+ # Find redundant
+ redundant = defaultdict(list)
+ for source, imports in functionImports.items():
+ headerSet = headerImports.get(source, set())
+ for target, funcName in imports:
+ if target in headerSet:
+ redundant[source].append((target, funcName))
+
+ return dict(redundant)
+
+
+def _modulePathToFilePath(moduleName: str) -> Path:
+ """Convert module name to file path."""
+ # gateway.modules.xxx.yyy -> modules/xxx/yyy.py
+ parts = moduleName.replace("gateway.", "").split(".")
+ filePath = GATEWAY_ROOT
+ for part in parts:
+ filePath = filePath / part
+ return filePath.with_suffix(".py")
+
+
+def _removeImportFromFunction(filePath: Path, targetModule: str, funcName: str) -> bool:
+ """
+ Remove a specific import statement from inside a function.
+ Returns True if successful.
+ """
+ if not filePath.exists():
+ print(f" File not found: {filePath}")
+ return False
+
+ with open(filePath, "r", encoding="utf-8") as f:
+ content = f.read()
+
+ # The import we're looking for (without gateway prefix)
+ importModule = targetModule.replace("gateway.", "")
+
+ # Build regex patterns for different import styles
+ patterns = [
+ # from modules.xxx import yyy
+ rf'(\n[ \t]+)(from {re.escape(importModule)} import [^\n]+)',
+ # import modules.xxx
+ rf'(\n[ \t]+)(import {re.escape(importModule)}[^\n]*)',
+ # from modules.xxx.yyy import zzz (partial match)
+ rf'(\n[ \t]+)(from {re.escape(importModule.rsplit(".", 1)[0])} import [^\n]*{re.escape(importModule.rsplit(".", 1)[-1])}[^\n]*)',
+ ]
+
+ modified = False
+ for pattern in patterns:
+ matches = list(re.finditer(pattern, content))
+ for match in matches:
+ # Check if this import is inside the target function
+ # by looking backwards for the function definition
+ startPos = match.start()
+ beforeMatch = content[:startPos]
+
+ # Find the most recent function definition
+ funcPattern = rf'def {re.escape(funcName)}\s*\('
+ funcMatches = list(re.finditer(funcPattern, beforeMatch))
+
+ if funcMatches:
+ lastFuncStart = funcMatches[-1].start()
+ # Check there's no other function definition between the func and the import
+ betweenText = beforeMatch[lastFuncStart:]
+ otherFuncs = re.findall(r'\ndef [a-zA-Z_][a-zA-Z0-9_]*\s*\(', betweenText)
+
+ if len(otherFuncs) <= 1: # Only our target function
+ # Remove this import line
+ indent = match.group(1)
+ importLine = match.group(2)
+ fullMatch = match.group(0)
+ content = content[:match.start()] + content[match.end():]
+ modified = True
+ print(f" Removed: {importLine.strip()}")
+ break
+
+ if modified:
+ break
+
+ if modified:
+ with open(filePath, "w", encoding="utf-8") as f:
+ f.write(content)
+ return True
+
+ return False
+
+
+def _removeImportsWithAst(filePath: Path, redundantImports: List[Tuple[str, str]]) -> int:
+ """
+ Use AST to properly identify and remove redundant imports.
+ Returns count of removed imports.
+ """
+ if not filePath.exists():
+ return 0
+
+ with open(filePath, "r", encoding="utf-8") as f:
+ lines = f.readlines()
+
+ content = "".join(lines)
+
+ try:
+ tree = ast.parse(content)
+ except SyntaxError:
+ print(f" Syntax error in {filePath}")
+ return 0
+
+ # Group by function
+ importsByFunc = defaultdict(set)
+ for target, funcName in redundantImports:
+ importModule = target.replace("gateway.", "")
+ importsByFunc[funcName].add(importModule)
+
+ # Find imports inside functions
+ linesToRemove = set()
+
+ for node in ast.walk(tree):
+ if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)):
+ funcName = node.name
+ if funcName not in importsByFunc:
+ continue
+
+ targetModules = importsByFunc[funcName]
+
+ # Walk the function body for imports
+ for child in ast.walk(node):
+ if isinstance(child, ast.ImportFrom):
+ if child.module and child.module in targetModules:
+ linesToRemove.add(child.lineno)
+ elif isinstance(child, ast.Import):
+ for alias in child.names:
+ if alias.name in targetModules:
+ linesToRemove.add(child.lineno)
+
+ if not linesToRemove:
+ return 0
+
+ # Remove the lines
+ newLines = []
+ for i, line in enumerate(lines, 1):
+ if i not in linesToRemove:
+ newLines.append(line)
+ else:
+ print(f" Line {i}: {line.strip()}")
+
+ with open(filePath, "w", encoding="utf-8") as f:
+ f.writelines(newLines)
+
+ return len(linesToRemove)
+
+
+def main():
+ """Main function."""
+ print("Finding redundant imports...")
+ redundant = _findRedundantImports()
+
+ totalCount = sum(len(v) for v in redundant.values())
+ print(f"Found {totalCount} redundant imports in {len(redundant)} files\n")
+
+ removedCount = 0
+
+ for source, imports in sorted(redundant.items()):
+ filePath = _modulePathToFilePath(source)
+ print(f"\n{source}")
+ print(f" File: {filePath}")
+
+ removed = _removeImportsWithAst(filePath, imports)
+ removedCount += removed
+
+ print(f"\n\nTotal removed: {removedCount} imports")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/tests/functional/test01_ai_model_selection.py b/tests/functional/test01_ai_model_selection.py
index 1d4f2d49..b06e9c64 100644
--- a/tests/functional/test01_ai_model_selection.py
+++ b/tests/functional/test01_ai_model_selection.py
@@ -29,8 +29,8 @@ from modules.datamodels.datamodelAi import (
ProcessingModeEnum,
)
from modules.datamodels.datamodelUam import User
-from modules.aichat.aicore.aicoreModelRegistry import modelRegistry
-from modules.aichat.aicore.aicoreModelSelector import modelSelector
+from modules.aicore.aicoreModelRegistry import modelRegistry
+from modules.aicore.aicoreModelSelector import modelSelector
class ModelSelectionTester:
@@ -46,7 +46,7 @@ class ModelSelectionTester:
self.services = getServices(testUser, None)
async def initialize(self) -> None:
- from modules.aichat.serviceAi.mainServiceAi import AiService
+ from modules.services.serviceAi.mainServiceAi import AiService
from modules.interfaces.interfaceAiObjects import AiObjects
self.services.ai = await AiService.create(self.services)
diff --git a/tests/functional/test02_ai_models.py b/tests/functional/test02_ai_models.py
index 2f348595..12a374f8 100644
--- a/tests/functional/test02_ai_models.py
+++ b/tests/functional/test02_ai_models.py
@@ -68,24 +68,24 @@ class AIModelsTester:
logging.getLogger().setLevel(logging.DEBUG)
# Initialize the model registry with all connectors
- from modules.aichat.aicore.aicoreModelRegistry import modelRegistry
- from modules.aichat.aicore.aicorePluginTavily import AiTavily
- from modules.aichat.aicore.aicorePluginPerplexity import AiPerplexity
+ from modules.aicore.aicoreModelRegistry import modelRegistry
+ from modules.aicore.aicorePluginTavily import AiTavily
+ from modules.aicore.aicorePluginPerplexity import AiPerplexity
# Note: We don't need to register web connectors for IMAGE_ANALYSE testing
# modelRegistry.registerConnector(AiTavily())
# modelRegistry.registerConnector(AiPerplexity())
# The AI service needs to be recreated with proper initialization
- from modules.aichat.serviceAi.mainServiceAi import AiService
+ from modules.services.serviceAi.mainServiceAi import AiService
self.services.ai = await AiService.create(self.services)
# Also initialize extraction service for image processing
- from modules.aichat.serviceExtraction.mainServiceExtraction import ExtractionService
+ from modules.services.serviceExtraction.mainServiceExtraction import ExtractionService
self.services.extraction = ExtractionService(self.services)
# Create a minimal workflow context
- from modules.aichat.datamodelFeatureAiChat import ChatWorkflow, WorkflowModeEnum
+ from modules.datamodels.datamodelChat import ChatWorkflow, WorkflowModeEnum
import uuid
self.services.currentWorkflow = ChatWorkflow(
@@ -311,7 +311,7 @@ class AIModelsTester:
print(f"{'='*60}")
# Get model from registry
- from modules.aichat.aicore.aicoreModelRegistry import modelRegistry
+ from modules.aicore.aicoreModelRegistry import modelRegistry
model = modelRegistry.getModel(modelName)
if not model:
@@ -693,7 +693,7 @@ Width: {crawlWidth}
def getAllAvailableModels(self) -> List[Dict[str, Any]]:
"""Get all available models with their supported operation types."""
- from modules.aichat.aicore.aicoreModelRegistry import modelRegistry
+ from modules.aicore.aicoreModelRegistry import modelRegistry
from modules.datamodels.datamodelAi import OperationTypeEnum
# Get all models from registry
diff --git a/tests/functional/test03_ai_operations.py b/tests/functional/test03_ai_operations.py
index de891238..a80be79c 100644
--- a/tests/functional/test03_ai_operations.py
+++ b/tests/functional/test03_ai_operations.py
@@ -18,7 +18,7 @@ if _gateway_path not in sys.path:
sys.path.insert(0, _gateway_path)
from modules.datamodels.datamodelAi import OperationTypeEnum
-from modules.aichat.datamodelFeatureAiChat import ChatWorkflow, ChatDocument, WorkflowModeEnum
+from modules.datamodels.datamodelChat import ChatWorkflow, ChatDocument, WorkflowModeEnum
from modules.datamodels.datamodelUam import User
@@ -94,7 +94,7 @@ class MethodAiOperationsTester:
logging.getLogger().setLevel(logging.DEBUG)
# Import and initialize services - use the same approach as routeChatPlayground
- import modules.aichat.interfaceFeatureAiChat as interfaceFeatureAiChat
+ import modules.interfaces.interfaceDbChat as interfaceFeatureAiChat
interfaceDbChat = interfaceDbChat.getInterface(self.testUser)
# Import and initialize services
@@ -174,7 +174,7 @@ class MethodAiOperationsTester:
imageData = f.read()
# Create a ChatDocument
- from modules.aichat.datamodelFeatureAiChat import ChatDocument
+ from modules.datamodels.datamodelChat import ChatDocument
import uuid
testImageDoc = ChatDocument(
@@ -186,7 +186,7 @@ class MethodAiOperationsTester:
)
# Create a message with this document
- from modules.aichat.datamodelFeatureAiChat import ChatMessage
+ from modules.datamodels.datamodelChat import ChatMessage
import time
testMessage = ChatMessage(
@@ -201,7 +201,7 @@ class MethodAiOperationsTester:
# Save message to database
if self.services.workflow:
- import modules.aichat.interfaceFeatureAiChat as interfaceFeatureAiChat
+ import modules.interfaces.interfaceDbChat as interfaceFeatureAiChat
interfaceDbChat = interfaceDbChat.getInterface(self.testUser)
messageDict = testMessage.model_dump()
interfaceDbChat.createMessage(messageDict)
@@ -283,7 +283,7 @@ class MethodAiOperationsTester:
maxSteps=5
)
# Save workflow to database
- import modules.aichat.interfaceFeatureAiChat as interfaceFeatureAiChat
+ import modules.interfaces.interfaceDbChat as interfaceFeatureAiChat
interfaceDbChat = interfaceDbChat.getInterface(self.testUser)
workflowDict = testWorkflow.model_dump()
interfaceDbChat.createWorkflow(workflowDict)
diff --git a/tests/functional/test04_ai_behavior.py b/tests/functional/test04_ai_behavior.py
index 4cf21e10..657946a9 100644
--- a/tests/functional/test04_ai_behavior.py
+++ b/tests/functional/test04_ai_behavior.py
@@ -42,10 +42,10 @@ class AIBehaviorTester:
logging.getLogger().setLevel(logging.DEBUG)
# Create and save workflow in database using the interface
- from modules.aichat.datamodelFeatureAiChat import ChatWorkflow, WorkflowModeEnum
+ from modules.datamodels.datamodelChat import ChatWorkflow, WorkflowModeEnum
import uuid
import time
- import modules.aichat.interfaceFeatureAiChat as interfaceFeatureAiChat
+ import modules.interfaces.interfaceDbChat as interfaceFeatureAiChat
currentTimestamp = time.time()
diff --git a/tests/functional/test05_workflow_with_documents.py b/tests/functional/test05_workflow_with_documents.py
index 501204ad..fac1ab41 100644
--- a/tests/functional/test05_workflow_with_documents.py
+++ b/tests/functional/test05_workflow_with_documents.py
@@ -20,10 +20,10 @@ if _gateway_path not in sys.path:
# Import the service initialization
from modules.services import getInterface as getServices
-from modules.aichat.datamodelFeatureAiChat import UserInputRequest, WorkflowModeEnum
+from modules.datamodels.datamodelChat import UserInputRequest, WorkflowModeEnum
from modules.datamodels.datamodelUam import User
from modules.workflows.automation import chatStart
-import modules.aichat.interfaceFeatureAiChat as interfaceFeatureAiChat
+import modules.interfaces.interfaceDbChat as interfaceFeatureAiChat
class WorkflowWithDocumentsTester:
diff --git a/tests/functional/test06_workflow_prompt_variations.py b/tests/functional/test06_workflow_prompt_variations.py
index e2138a6b..4b39454a 100644
--- a/tests/functional/test06_workflow_prompt_variations.py
+++ b/tests/functional/test06_workflow_prompt_variations.py
@@ -22,10 +22,10 @@ if _gateway_path not in sys.path:
# Import the service initialization
from modules.services import getInterface as getServices
-from modules.aichat.datamodelFeatureAiChat import UserInputRequest, WorkflowModeEnum
+from modules.datamodels.datamodelChat import UserInputRequest, WorkflowModeEnum
from modules.datamodels.datamodelUam import User
from modules.workflows.automation import chatStart
-import modules.aichat.interfaceFeatureAiChat as interfaceFeatureAiChat
+import modules.interfaces.interfaceDbChat as interfaceFeatureAiChat
class WorkflowPromptVariationsTester:
diff --git a/tests/functional/test07_json_merge.py b/tests/functional/test07_json_merge.py
index 897c6a4f..de70052f 100644
--- a/tests/functional/test07_json_merge.py
+++ b/tests/functional/test07_json_merge.py
@@ -11,7 +11,7 @@ if _gateway_path not in sys.path:
sys.path.insert(0, _gateway_path)
# Import after path setup
-from modules.aichat.serviceAi.subJsonResponseHandling import JsonResponseHandler # type: ignore
+from modules.services.serviceAi.subJsonResponseHandling import JsonResponseHandler # type: ignore
from modules.shared.jsonUtils import extractSectionsFromDocument # type: ignore
diff --git a/tests/functional/test08_json_finalization.py b/tests/functional/test08_json_finalization.py
index f6345150..a05daccc 100644
--- a/tests/functional/test08_json_finalization.py
+++ b/tests/functional/test08_json_finalization.py
@@ -32,7 +32,7 @@ if _gateway_path not in sys.path:
sys.path.insert(0, _gateway_path)
# Import after path setup
-from modules.aichat.serviceAi.subJsonResponseHandling import JsonResponseHandler # type: ignore
+from modules.services.serviceAi.subJsonResponseHandling import JsonResponseHandler # type: ignore
from modules.shared.jsonUtils import extractSectionsFromDocument, extractJsonString, repairBrokenJson # type: ignore
diff --git a/tests/functional/test09_document_generation_formats.py b/tests/functional/test09_document_generation_formats.py
index 5ecf5a1f..a6f99236 100644
--- a/tests/functional/test09_document_generation_formats.py
+++ b/tests/functional/test09_document_generation_formats.py
@@ -21,10 +21,10 @@ if _gateway_path not in sys.path:
# Import the service initialization
from modules.services import getInterface as getServices
-from modules.aichat.datamodelFeatureAiChat import UserInputRequest, WorkflowModeEnum
+from modules.datamodels.datamodelChat import UserInputRequest, WorkflowModeEnum
from modules.datamodels.datamodelUam import User
from modules.workflows.automation import chatStart
-import modules.aichat.interfaceFeatureAiChat as interfaceFeatureAiChat
+import modules.interfaces.interfaceDbChat as interfaceFeatureAiChat
class DocumentGenerationFormatsTester:
diff --git a/tests/functional/test10_document_generation_formats.py b/tests/functional/test10_document_generation_formats.py
index fb1ec6c7..e1990910 100644
--- a/tests/functional/test10_document_generation_formats.py
+++ b/tests/functional/test10_document_generation_formats.py
@@ -21,10 +21,10 @@ if _gateway_path not in sys.path:
# Import the service initialization
from modules.services import getInterface as getServices
-from modules.aichat.datamodelFeatureAiChat import UserInputRequest, WorkflowModeEnum
+from modules.datamodels.datamodelChat import UserInputRequest, WorkflowModeEnum
from modules.datamodels.datamodelUam import User
from modules.workflows.automation import chatStart
-import modules.aichat.interfaceFeatureAiChat as interfaceFeatureAiChat
+import modules.interfaces.interfaceDbChat as interfaceFeatureAiChat
class DocumentGenerationFormatsTester10:
diff --git a/tests/functional/test11_code_generation_formats.py b/tests/functional/test11_code_generation_formats.py
index 0c58f8ce..43c294e4 100644
--- a/tests/functional/test11_code_generation_formats.py
+++ b/tests/functional/test11_code_generation_formats.py
@@ -23,10 +23,10 @@ if _gateway_path not in sys.path:
# Import the service initialization
from modules.services import getInterface as getServices
-from modules.aichat.datamodelFeatureAiChat import UserInputRequest, WorkflowModeEnum
+from modules.datamodels.datamodelChat import UserInputRequest, WorkflowModeEnum
from modules.datamodels.datamodelUam import User
from modules.workflows.automation import chatStart
-import modules.aichat.interfaceFeatureAiChat as interfaceFeatureAiChat
+import modules.interfaces.interfaceDbChat as interfaceFeatureAiChat
class CodeGenerationFormatsTester11:
diff --git a/tests/functional/test12_json_split_merge.py b/tests/functional/test12_json_split_merge.py
index ec882824..4dac56cb 100644
--- a/tests/functional/test12_json_split_merge.py
+++ b/tests/functional/test12_json_split_merge.py
@@ -20,7 +20,7 @@ if _gateway_path not in sys.path:
sys.path.insert(0, _gateway_path)
# Import JSON merger from workflow tools
-from modules.aichat.serviceAi.subJsonMerger import ModularJsonMerger, JsonMergeLogger
+from modules.services.serviceAi.subJsonMerger import ModularJsonMerger, JsonMergeLogger
from modules.shared.jsonContinuation import getContexts
diff --git a/tests/functional/test_kpi_full.py b/tests/functional/test_kpi_full.py
index c25f48bc..32e40f07 100644
--- a/tests/functional/test_kpi_full.py
+++ b/tests/functional/test_kpi_full.py
@@ -11,7 +11,7 @@ _gateway_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".
if _gateway_path not in sys.path:
sys.path.insert(0, _gateway_path)
-from modules.aichat.serviceAi.subJsonResponseHandling import JsonResponseHandler
+from modules.services.serviceAi.subJsonResponseHandling import JsonResponseHandler
from modules.datamodels.datamodelAi import JsonAccumulationState
# Load actual JSON response
diff --git a/tests/functional/test_kpi_incomplete.py b/tests/functional/test_kpi_incomplete.py
index d7170f48..f6e60aa0 100644
--- a/tests/functional/test_kpi_incomplete.py
+++ b/tests/functional/test_kpi_incomplete.py
@@ -11,7 +11,7 @@ _gateway_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".
if _gateway_path not in sys.path:
sys.path.insert(0, _gateway_path)
-from modules.aichat.serviceAi.subJsonResponseHandling import JsonResponseHandler
+from modules.services.serviceAi.subJsonResponseHandling import JsonResponseHandler
from modules.datamodels.datamodelAi import JsonAccumulationState
from modules.shared.jsonUtils import extractJsonString, repairBrokenJson
diff --git a/tests/functional/test_kpi_path.py b/tests/functional/test_kpi_path.py
index 824b145c..0c54e3c2 100644
--- a/tests/functional/test_kpi_path.py
+++ b/tests/functional/test_kpi_path.py
@@ -10,7 +10,7 @@ _gateway_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".
if _gateway_path not in sys.path:
sys.path.insert(0, _gateway_path)
-from modules.aichat.serviceAi.subJsonResponseHandling import JsonResponseHandler
+from modules.services.serviceAi.subJsonResponseHandling import JsonResponseHandler
# Test JSON matching the actual response
test_json = {
diff --git a/tests/integration/workflows/test_workflow_execution.py b/tests/integration/workflows/test_workflow_execution.py
index 50fafe83..a2b69576 100644
--- a/tests/integration/workflows/test_workflow_execution.py
+++ b/tests/integration/workflows/test_workflow_execution.py
@@ -10,7 +10,7 @@ import pytest
import uuid
from unittest.mock import Mock, AsyncMock, patch
-from modules.aichat.datamodelFeatureAiChat import ChatWorkflow, TaskContext, TaskStep
+from modules.datamodels.datamodelChat import ChatWorkflow, TaskContext, TaskStep
from modules.datamodels.datamodelWorkflow import ActionDefinition
from modules.datamodels.datamodelDocref import DocumentReferenceList, DocumentListReference, DocumentItemReference
diff --git a/tests/unit/services/test_json_extraction_merging.py b/tests/unit/services/test_json_extraction_merging.py
index 100e3f67..07ecfa4b 100644
--- a/tests/unit/services/test_json_extraction_merging.py
+++ b/tests/unit/services/test_json_extraction_merging.py
@@ -14,7 +14,7 @@ import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../../..'))
from modules.datamodels.datamodelExtraction import ContentPart
-from modules.aichat.serviceExtraction.mainServiceExtraction import ExtractionService
+from modules.services.serviceExtraction.mainServiceExtraction import ExtractionService
def test_detects_json_with_code_fences():
diff --git a/tests/unit/workflows/test_state_management.py b/tests/unit/workflows/test_state_management.py
index afa873a8..ae502397 100644
--- a/tests/unit/workflows/test_state_management.py
+++ b/tests/unit/workflows/test_state_management.py
@@ -9,7 +9,7 @@ Tests state increment methods, helper methods, and updateFromSelection.
import pytest
import uuid
-from modules.aichat.datamodelFeatureAiChat import ChatWorkflow, TaskContext, TaskStep
+from modules.datamodels.datamodelChat import ChatWorkflow, TaskContext, TaskStep
from modules.datamodels.datamodelWorkflow import ActionDefinition
diff --git a/tests/validation/test_architecture_validation.py b/tests/validation/test_architecture_validation.py
index 1bde895f..09f6e92c 100644
--- a/tests/validation/test_architecture_validation.py
+++ b/tests/validation/test_architecture_validation.py
@@ -15,7 +15,7 @@ sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
from modules.datamodels.datamodelWorkflow import ActionDefinition, AiResponse
from modules.datamodels.datamodelDocref import DocumentReferenceList, DocumentListReference
-from modules.aichat.datamodelFeatureAiChat import ChatWorkflow
+from modules.datamodels.datamodelChat import ChatWorkflow
from modules.shared.jsonUtils import parseJsonWithModel