OpenRAG 0.5.0__tar.gz → 0.5.0.dev1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. {openrag-0.5.0/src/openrag.egg-info → openrag-0.5.0.dev1}/PKG-INFO +4 -3
  2. {openrag-0.5.0 → openrag-0.5.0.dev1}/pyproject.toml +4 -3
  3. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/agent.py +28 -26
  4. openrag-0.5.0.dev1/src/api/connector_router.py +82 -0
  5. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/connectors.py +114 -809
  6. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/documents.py +18 -74
  7. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/langflow_files.py +20 -23
  8. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/settings.py +0 -4
  9. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/config/settings.py +0 -1
  10. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/google_drive/connector.py +154 -145
  11. openrag-0.5.0.dev1/src/connectors/langflow_connector_service.py +416 -0
  12. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/onedrive/connector.py +150 -234
  13. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/onedrive/oauth.py +47 -88
  14. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/service.py +86 -186
  15. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/sharepoint/connector.py +232 -326
  16. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/dependencies.py +14 -22
  17. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/main.py +14 -11
  18. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/models/processors.py +297 -398
  19. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/models/tasks.py +1 -10
  20. {openrag-0.5.0 → openrag-0.5.0.dev1/src/openrag.egg-info}/PKG-INFO +4 -3
  21. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/openrag.egg-info/SOURCES.txt +2 -1
  22. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/openrag.egg-info/requires.txt +3 -2
  23. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/auth_service.py +3 -1
  24. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/langflow_file_service.py +9 -17
  25. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/task_service.py +7 -17
  26. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/_assets/flows/ingestion_flow.json +16 -16
  27. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/managers/docling_manager.py +45 -42
  28. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/screens/monitor.py +93 -85
  29. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/file_utils.py +1 -20
  30. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/opensearch_utils.py +0 -15
  31. openrag-0.5.0/src/utils/opensearch_delete.py +0 -105
  32. {openrag-0.5.0 → openrag-0.5.0.dev1}/LICENSE +0 -0
  33. {openrag-0.5.0 → openrag-0.5.0.dev1}/MANIFEST.in +0 -0
  34. {openrag-0.5.0 → openrag-0.5.0.dev1}/README.md +0 -0
  35. {openrag-0.5.0 → openrag-0.5.0.dev1}/setup.cfg +0 -0
  36. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/__init__.py +0 -0
  37. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/auth.py +0 -0
  38. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/chat.py +0 -0
  39. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/docling.py +0 -0
  40. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/flows.py +0 -0
  41. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/keys.py +0 -0
  42. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/knowledge_filter.py +0 -0
  43. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/models.py +0 -0
  44. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/nudges.py +0 -0
  45. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/oidc.py +0 -0
  46. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/provider_health.py +0 -0
  47. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/provider_validation.py +0 -0
  48. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/router.py +0 -0
  49. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/search.py +0 -0
  50. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/tasks.py +0 -0
  51. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/upload.py +0 -0
  52. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/v1/__init__.py +0 -0
  53. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/v1/chat.py +0 -0
  54. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/v1/documents.py +0 -0
  55. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/v1/knowledge_filters.py +0 -0
  56. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/v1/models.py +0 -0
  57. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/v1/search.py +0 -0
  58. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/api/v1/settings.py +0 -0
  59. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/auth/__init__.py +0 -0
  60. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/auth/ibm_auth.py +0 -0
  61. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/auth_context.py +0 -0
  62. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/bootstrap.py +0 -0
  63. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/config/__init__.py +0 -0
  64. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/config/config_manager.py +0 -0
  65. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/config/embedding_constants.py +0 -0
  66. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/config/model_constants.py +0 -0
  67. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/config/paths.py +0 -0
  68. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/__init__.py +0 -0
  69. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/aws_s3/__init__.py +0 -0
  70. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/aws_s3/api.py +0 -0
  71. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/aws_s3/auth.py +0 -0
  72. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/aws_s3/connector.py +0 -0
  73. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/aws_s3/models.py +0 -0
  74. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/aws_s3/support.py +0 -0
  75. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/base.py +0 -0
  76. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/connection_manager.py +0 -0
  77. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/google_drive/__init__.py +0 -0
  78. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/google_drive/oauth.py +0 -0
  79. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/ibm_cos/__init__.py +0 -0
  80. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/ibm_cos/api.py +0 -0
  81. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/ibm_cos/auth.py +0 -0
  82. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/ibm_cos/connector.py +0 -0
  83. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/ibm_cos/models.py +0 -0
  84. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/ibm_cos/support.py +0 -0
  85. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/onedrive/__init__.py +0 -0
  86. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/sharepoint/__init__.py +0 -0
  87. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/sharepoint/oauth.py +0 -0
  88. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/connectors/sharepoint/utils.py +0 -0
  89. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/mcp_http/__init__.py +0 -0
  90. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/mcp_http/server.py +0 -0
  91. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/models/__init__.py +0 -0
  92. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/models/url.py +0 -0
  93. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/openrag.egg-info/dependency_links.txt +0 -0
  94. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/openrag.egg-info/entry_points.txt +0 -0
  95. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/openrag.egg-info/top_level.txt +0 -0
  96. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/__init__.py +0 -0
  97. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/api_key_service.py +0 -0
  98. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/chat_service.py +0 -0
  99. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/conversation_persistence_service.py +0 -0
  100. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/document_service.py +0 -0
  101. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/flows_service.py +0 -0
  102. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/knowledge_filter_service.py +0 -0
  103. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/langflow_history_service.py +0 -0
  104. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/langflow_mcp_service.py +0 -0
  105. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/models_service.py +0 -0
  106. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/monitor_service.py +0 -0
  107. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/search_service.py +0 -0
  108. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/services/session_ownership_service.py +0 -0
  109. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/session_manager.py +0 -0
  110. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/__init__.py +0 -0
  111. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/_assets/docker-compose.gpu.yml +0 -0
  112. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/_assets/docker-compose.yml +0 -0
  113. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/_assets/flows/components/ollama_embedding.json +0 -0
  114. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/_assets/flows/components/ollama_llm.json +0 -0
  115. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/_assets/flows/components/ollama_llm_text.json +0 -0
  116. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/_assets/flows/components/watsonx_embedding.json +0 -0
  117. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/_assets/flows/components/watsonx_llm.json +0 -0
  118. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/_assets/flows/components/watsonx_llm_text.json +0 -0
  119. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/_assets/flows/openrag_agent.json +0 -0
  120. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/_assets/flows/openrag_nudges.json +0 -0
  121. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/_assets/flows/openrag_url_mcp.json +0 -0
  122. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/_assets/openrag-documents/docling.pdf +0 -0
  123. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/_assets/openrag-documents/ibm_anthropic.pdf +0 -0
  124. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/_assets/openrag-documents/warmup_ocr.pdf +0 -0
  125. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/cli.py +0 -0
  126. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/config_fields.py +0 -0
  127. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/main.py +0 -0
  128. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/managers/__init__.py +0 -0
  129. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/managers/container_manager.py +0 -0
  130. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/managers/env_manager.py +0 -0
  131. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/screens/__init__.py +0 -0
  132. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/screens/config.py +0 -0
  133. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/screens/diagnostics.py +0 -0
  134. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/screens/logs.py +0 -0
  135. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/screens/welcome.py +0 -0
  136. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/utils/__init__.py +0 -0
  137. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/utils/clipboard.py +0 -0
  138. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/utils/platform.py +0 -0
  139. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/utils/startup_checks.py +0 -0
  140. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/utils/validation.py +0 -0
  141. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/utils/version_check.py +0 -0
  142. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/widgets/__init__.py +0 -0
  143. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/widgets/command_modal.py +0 -0
  144. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/widgets/diagnostics_notification.py +0 -0
  145. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/widgets/error_notification.py +0 -0
  146. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/widgets/factory_reset_warning_modal.py +0 -0
  147. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/widgets/flow_backup_warning_modal.py +0 -0
  148. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/widgets/prune_options_modal.py +0 -0
  149. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/widgets/upgrade_instructions_modal.py +0 -0
  150. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/widgets/version_mismatch_warning_modal.py +0 -0
  151. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/tui/widgets/waves.py +0 -0
  152. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/__init__.py +0 -0
  153. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/acl_utils.py +0 -0
  154. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/container_utils.py +0 -0
  155. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/docling_client.py +0 -0
  156. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/document_processing.py +0 -0
  157. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/embedding_fields.py +0 -0
  158. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/embeddings.py +0 -0
  159. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/encryption.py +0 -0
  160. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/env_utils.py +0 -0
  161. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/gpu_detection.py +0 -0
  162. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/hash_utils.py +0 -0
  163. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/langflow_headers.py +0 -0
  164. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/langflow_utils.py +0 -0
  165. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/logging_config.py +0 -0
  166. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/opensearch_queries.py +0 -0
  167. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/paths.py +0 -0
  168. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/run_mode_utils.py +0 -0
  169. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/telemetry/__init__.py +0 -0
  170. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/telemetry/category.py +0 -0
  171. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/telemetry/client.py +0 -0
  172. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/telemetry/message_id.py +0 -0
  173. {openrag-0.5.0 → openrag-0.5.0.dev1}/src/utils/version_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openrag
3
- Version: 0.5.0
3
+ Version: 0.5.0.dev1
4
4
  Summary: OpenRAG is a comprehensive Retrieval-Augmented Generation platform that enables intelligent document search and AI-powered conversations.
5
5
  Classifier: Development Status :: 4 - Beta
6
6
  Classifier: Environment :: Console
@@ -39,11 +39,12 @@ Requires-Dist: textual-fspicker>=0.6.0
39
39
  Requires-Dist: structlog>=25.4.0
40
40
  Requires-Dist: zxcvbn>=4.5.0
41
41
  Requires-Dist: prometheus-fastapi-instrumentator>=7.1.0
42
- Requires-Dist: litellm==1.83.14
42
+ Requires-Dist: litellm==1.83.3
43
43
  Requires-Dist: pyyaml>=6.0
44
44
  Requires-Dist: tiktoken>=0.7.0
45
+ Requires-Dist: prometheus-fastapi-instrumentator>=7.1.0
45
46
  Requires-Dist: fastmcp>=3.2.3
46
- Requires-Dist: openai==2.24.0
47
+ Requires-Dist: openai>=2.30.0
47
48
  Requires-Dist: tenacity>=9.1.4
48
49
  Requires-Dist: pygments>=2.20.0
49
50
  Requires-Dist: pyasn1>=0.6.3
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "openrag"
7
- version = "0.5.0"
7
+ version = "0.5.0.dev1"
8
8
  description = "OpenRAG is a comprehensive Retrieval-Augmented Generation platform that enables intelligent document search and AI-powered conversations."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -45,11 +45,12 @@ dependencies = [
45
45
  "structlog>=25.4.0",
46
46
  "zxcvbn>=4.5.0",
47
47
  "prometheus-fastapi-instrumentator>=7.1.0",
48
- "litellm==1.83.14",
48
+ "litellm==1.83.3",
49
49
  "pyyaml>=6.0",
50
50
  "tiktoken>=0.7.0",
51
+ "prometheus-fastapi-instrumentator>=7.1.0",
51
52
  "fastmcp>=3.2.3",
52
- "openai==2.24.0",
53
+ "openai>=2.30.0",
53
54
  "tenacity>=9.1.4",
54
55
  "pygments>=2.20.0",
55
56
  "pyasn1>=0.6.3",
@@ -515,24 +515,25 @@ async def async_chat_stream(
515
515
  yield chunk
516
516
 
517
517
  # Add the complete assistant response to message history with response_id and timestamp
518
- assistant_message = {
519
- "role": "assistant",
520
- "content": full_response,
521
- "response_id": response_id,
522
- "timestamp": datetime.now(),
523
- }
524
- # Store usage data if available (from response.completed event)
525
- if usage_data:
526
- assistant_message["response_data"] = {"usage": usage_data}
527
- conversation_state["messages"].append(assistant_message)
518
+ if full_response:
519
+ assistant_message = {
520
+ "role": "assistant",
521
+ "content": full_response,
522
+ "response_id": response_id,
523
+ "timestamp": datetime.now(),
524
+ }
525
+ # Store usage data if available (from response.completed event)
526
+ if usage_data:
527
+ assistant_message["response_data"] = {"usage": usage_data}
528
+ conversation_state["messages"].append(assistant_message)
528
529
 
529
- # Store the conversation thread with its response_id
530
- if response_id:
531
- conversation_state["last_activity"] = datetime.now()
532
- await store_conversation_thread(user_id, response_id, conversation_state)
533
- logger.debug(
534
- f"Stored conversation thread for user {user_id} with response_id: {response_id}"
535
- )
530
+ # Store the conversation thread with its response_id
531
+ if response_id:
532
+ conversation_state["last_activity"] = datetime.now()
533
+ await store_conversation_thread(user_id, response_id, conversation_state)
534
+ logger.debug(
535
+ f"Stored conversation thread for user {user_id} with response_id: {response_id}"
536
+ )
536
537
 
537
538
 
538
539
  # Async langflow function with conversation storage (non-streaming)
@@ -788,15 +789,16 @@ async def async_langflow_chat_stream(
788
789
  yield chunk
789
790
 
790
791
  # Add the complete assistant response to message history with response_id, timestamp, and function call data
791
- assistant_message = {
792
- "role": "assistant",
793
- "content": full_response,
794
- "response_id": response_id,
795
- "timestamp": datetime.now(),
796
- "chunks": collected_chunks, # Store complete chunk data for function calls
797
- "error": error_occurred, # Mark if this was an error response
798
- }
799
- # Store usage data if available (from response.completed event)
792
+ if full_response:
793
+ assistant_message = {
794
+ "role": "assistant",
795
+ "content": full_response,
796
+ "response_id": response_id,
797
+ "timestamp": datetime.now(),
798
+ "chunks": collected_chunks, # Store complete chunk data for function calls
799
+ "error": error_occurred, # Mark if this was an error response
800
+ }
801
+ # Store usage data if available (from response.completed event)
800
802
  if usage_data:
801
803
  assistant_message["response_data"] = {"usage": usage_data}
802
804
  conversation_state["messages"].append(assistant_message)
@@ -0,0 +1,82 @@
1
+ """Connector router that automatically routes based on configuration settings."""
2
+
3
+ from config.settings import DISABLE_INGEST_WITH_LANGFLOW
4
+ from utils.logging_config import get_logger
5
+
6
+ logger = get_logger(__name__)
7
+
8
+
9
+ class ConnectorRouter:
10
+ """
11
+ Router that automatically chooses between LangflowConnectorService and ConnectorService
12
+ based on the DISABLE_INGEST_WITH_LANGFLOW configuration.
13
+
14
+ - If DISABLE_INGEST_WITH_LANGFLOW is False (default): uses LangflowConnectorService
15
+ - If DISABLE_INGEST_WITH_LANGFLOW is True: uses traditional ConnectorService
16
+ """
17
+
18
+ def __init__(self, langflow_connector_service, openrag_connector_service):
19
+ self.langflow_connector_service = langflow_connector_service
20
+ self.openrag_connector_service = openrag_connector_service
21
+ logger.debug(
22
+ "ConnectorRouter initialized",
23
+ disable_langflow_ingest=DISABLE_INGEST_WITH_LANGFLOW,
24
+ )
25
+
26
+ def get_active_service(self):
27
+ """Get the currently active connector service based on configuration."""
28
+ if DISABLE_INGEST_WITH_LANGFLOW:
29
+ logger.debug("Using traditional OpenRAG connector service")
30
+ return self.openrag_connector_service
31
+ else:
32
+ logger.debug("Using Langflow connector service")
33
+ return self.langflow_connector_service
34
+
35
+ # Proxy all connector service methods to the active service
36
+
37
+ async def initialize(self):
38
+ """Initialize the active connector service."""
39
+ # Initialize OpenSearch index if using traditional OpenRAG connector service
40
+
41
+ return await self.get_active_service().initialize()
42
+
43
+ @property
44
+ def connection_manager(self):
45
+ """Get the connection manager from the active service."""
46
+ return self.get_active_service().connection_manager
47
+
48
+ async def get_connector(self, connection_id: str):
49
+ """Get a connector instance from the active service."""
50
+ return await self.get_active_service().get_connector(connection_id)
51
+
52
+ async def sync_specific_files(
53
+ self,
54
+ connection_id: str,
55
+ user_id: str,
56
+ file_list: list,
57
+ jwt_token: str = None,
58
+ file_infos: list = None,
59
+ ingest_settings: dict = None,
60
+ ):
61
+ """Sync specific files using the active service."""
62
+ return await self.get_active_service().sync_specific_files(
63
+ connection_id,
64
+ user_id,
65
+ file_list,
66
+ jwt_token,
67
+ file_infos=file_infos,
68
+ ingest_settings=ingest_settings,
69
+ )
70
+
71
+ def __getattr__(self, name):
72
+ """
73
+ Proxy any other method calls to the active service.
74
+ This ensures compatibility with any methods we might have missed.
75
+ """
76
+ active_service = self.get_active_service()
77
+ if hasattr(active_service, name):
78
+ return getattr(active_service, name)
79
+ else:
80
+ raise AttributeError(
81
+ f"'{type(active_service).__name__}' object has no attribute '{name}'"
82
+ )