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