trustgraph-flow 1.3.0__tar.gz → 1.3.2__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 (291) hide show
  1. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/PKG-INFO +2 -2
  2. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/pyproject.toml +1 -1
  3. trustgraph_flow-1.3.2/trustgraph/flow_version.py +1 -0
  4. trustgraph_flow-1.3.2/trustgraph/gateway/dispatch/document_embeddings_export.py +91 -0
  5. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/document_embeddings_import.py +10 -2
  6. trustgraph_flow-1.3.2/trustgraph/gateway/dispatch/entity_contexts_export.py +91 -0
  7. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/entity_contexts_import.py +10 -2
  8. trustgraph_flow-1.3.2/trustgraph/gateway/dispatch/graph_embeddings_export.py +91 -0
  9. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/graph_embeddings_import.py +10 -2
  10. trustgraph_flow-1.3.2/trustgraph/gateway/dispatch/triples_export.py +91 -0
  11. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/triples_import.py +10 -2
  12. trustgraph_flow-1.3.2/trustgraph/gateway/endpoint/socket.py +152 -0
  13. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph_flow.egg-info/PKG-INFO +2 -2
  14. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph_flow.egg-info/requires.txt +1 -1
  15. trustgraph_flow-1.3.0/trustgraph/flow_version.py +0 -1
  16. trustgraph_flow-1.3.0/trustgraph/gateway/dispatch/document_embeddings_export.py +0 -71
  17. trustgraph_flow-1.3.0/trustgraph/gateway/dispatch/entity_contexts_export.py +0 -71
  18. trustgraph_flow-1.3.0/trustgraph/gateway/dispatch/graph_embeddings_export.py +0 -71
  19. trustgraph_flow-1.3.0/trustgraph/gateway/dispatch/triples_export.py +0 -71
  20. trustgraph_flow-1.3.0/trustgraph/gateway/endpoint/socket.py +0 -111
  21. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/README.md +0 -0
  22. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/setup.cfg +0 -0
  23. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/__init__.py +0 -0
  24. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/agent/__init__.py +0 -0
  25. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/agent/mcp_tool/__init__.py +0 -0
  26. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/agent/mcp_tool/__main__.py +0 -0
  27. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/agent/mcp_tool/service.py +0 -0
  28. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/agent/react/__init__.py +0 -0
  29. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/agent/react/__main__.py +0 -0
  30. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/agent/react/agent_manager.py +0 -0
  31. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/agent/react/service.py +0 -0
  32. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/agent/react/tools.py +0 -0
  33. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/agent/react/types.py +0 -0
  34. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/chunking/__init__.py +0 -0
  35. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/chunking/recursive/__init__.py +0 -0
  36. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/chunking/recursive/__main__.py +0 -0
  37. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/chunking/recursive/chunker.py +0 -0
  38. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/chunking/token/__init__.py +0 -0
  39. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/chunking/token/__main__.py +0 -0
  40. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/chunking/token/chunker.py +0 -0
  41. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/config/service/__init__.py +0 -0
  42. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/config/service/__main__.py +0 -0
  43. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/config/service/config.py +0 -0
  44. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/config/service/flow.py +0 -0
  45. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/config/service/service.py +0 -0
  46. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/cores/__init__.py +0 -0
  47. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/cores/__main__.py +0 -0
  48. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/cores/knowledge.py +0 -0
  49. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/cores/service.py +0 -0
  50. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/decoding/__init__.py +0 -0
  51. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/decoding/mistral_ocr/__init__.py +0 -0
  52. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/decoding/mistral_ocr/__main__.py +0 -0
  53. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/decoding/mistral_ocr/processor.py +0 -0
  54. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/decoding/pdf/__init__.py +0 -0
  55. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/decoding/pdf/__main__.py +0 -0
  56. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/decoding/pdf/pdf_decoder.py +0 -0
  57. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/direct/__init__.py +0 -0
  58. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/direct/cassandra.py +0 -0
  59. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/direct/milvus_doc_embeddings.py +0 -0
  60. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/direct/milvus_graph_embeddings.py +0 -0
  61. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/direct/milvus_object_embeddings.py +0 -0
  62. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/embeddings/__init__.py +0 -0
  63. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/embeddings/document_embeddings/__init__.py +0 -0
  64. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/embeddings/document_embeddings/__main__.py +0 -0
  65. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/embeddings/document_embeddings/embeddings.py +0 -0
  66. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/embeddings/fastembed/__init__.py +0 -0
  67. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/embeddings/fastembed/__main__.py +0 -0
  68. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/embeddings/fastembed/processor.py +0 -0
  69. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/embeddings/graph_embeddings/__init__.py +0 -0
  70. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/embeddings/graph_embeddings/__main__.py +0 -0
  71. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/embeddings/graph_embeddings/embeddings.py +0 -0
  72. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/embeddings/ollama/__init__.py +0 -0
  73. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/embeddings/ollama/__main__.py +0 -0
  74. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/embeddings/ollama/processor.py +0 -0
  75. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/external/__init__.py +0 -0
  76. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/external/wikipedia/__init__.py +0 -0
  77. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/external/wikipedia/__main__.py +0 -0
  78. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/external/wikipedia/service.py +0 -0
  79. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/__init__.py +0 -0
  80. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/__init__.py +0 -0
  81. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/agent/__init__.py +0 -0
  82. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/agent/__main__.py +0 -0
  83. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/agent/extract.py +0 -0
  84. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/definitions/__init__.py +0 -0
  85. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/definitions/__main__.py +0 -0
  86. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/definitions/extract.py +0 -0
  87. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/objects/__init__.py +0 -0
  88. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/objects/__main__.py +0 -0
  89. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/objects/processor.py +0 -0
  90. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/relationships/__init__.py +0 -0
  91. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/relationships/__main__.py +0 -0
  92. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/relationships/extract.py +0 -0
  93. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/topics/__init__.py +0 -0
  94. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/topics/__main__.py +0 -0
  95. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/extract/kg/topics/extract.py +0 -0
  96. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/__init__.py +0 -0
  97. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/__main__.py +0 -0
  98. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/auth.py +0 -0
  99. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/config/receiver.py +0 -0
  100. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/agent.py +0 -0
  101. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/config.py +0 -0
  102. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/core_export.py +0 -0
  103. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/core_import.py +0 -0
  104. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/document_load.py +0 -0
  105. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/document_rag.py +0 -0
  106. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/embeddings.py +0 -0
  107. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/flow.py +0 -0
  108. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/graph_embeddings_query.py +0 -0
  109. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/graph_rag.py +0 -0
  110. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/knowledge.py +0 -0
  111. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/librarian.py +0 -0
  112. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/manager.py +0 -0
  113. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/mcp_tool.py +0 -0
  114. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/mux.py +0 -0
  115. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/prompt.py +0 -0
  116. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/requestor.py +0 -0
  117. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/sender.py +0 -0
  118. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/serialize.py +0 -0
  119. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/streamer.py +0 -0
  120. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/text_completion.py +0 -0
  121. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/text_load.py +0 -0
  122. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/dispatch/triples_query.py +0 -0
  123. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/endpoint/constant_endpoint.py +0 -0
  124. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/endpoint/manager.py +0 -0
  125. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/endpoint/metrics.py +0 -0
  126. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/endpoint/stream_endpoint.py +0 -0
  127. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/endpoint/variable_endpoint.py +0 -0
  128. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/running.py +0 -0
  129. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/service.py +0 -0
  130. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/unused/dbpedia.py +0 -0
  131. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/unused/encyclopedia.py +0 -0
  132. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/gateway/unused/internet_search.py +0 -0
  133. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/librarian/__init__.py +0 -0
  134. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/librarian/__main__.py +0 -0
  135. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/librarian/blob_store.py +0 -0
  136. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/librarian/librarian.py +0 -0
  137. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/librarian/service.py +0 -0
  138. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/metering/__init__.py +0 -0
  139. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/metering/__main__.py +0 -0
  140. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/metering/counter.py +0 -0
  141. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/__init__.py +0 -0
  142. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/__init__.py +0 -0
  143. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/azure/__init__.py +0 -0
  144. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/azure/__main__.py +0 -0
  145. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/azure/llm.py +0 -0
  146. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/azure_openai/__init__.py +0 -0
  147. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/azure_openai/__main__.py +0 -0
  148. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/azure_openai/llm.py +0 -0
  149. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/claude/__init__.py +0 -0
  150. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/claude/__main__.py +0 -0
  151. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/claude/llm.py +0 -0
  152. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/cohere/__init__.py +0 -0
  153. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/cohere/__main__.py +0 -0
  154. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/cohere/llm.py +0 -0
  155. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/googleaistudio/__init__.py +0 -0
  156. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/googleaistudio/__main__.py +0 -0
  157. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/googleaistudio/llm.py +0 -0
  158. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/llamafile/__init__.py +0 -0
  159. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/llamafile/__main__.py +0 -0
  160. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/llamafile/llm.py +0 -0
  161. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/lmstudio/__init__.py +0 -0
  162. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/lmstudio/__main__.py +0 -0
  163. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/lmstudio/llm.py +0 -0
  164. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/mistral/__init__.py +0 -0
  165. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/mistral/__main__.py +0 -0
  166. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/mistral/llm.py +0 -0
  167. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/ollama/__init__.py +0 -0
  168. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/ollama/__main__.py +0 -0
  169. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/ollama/llm.py +0 -0
  170. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/openai/__init__.py +0 -0
  171. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/openai/__main__.py +0 -0
  172. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/openai/llm.py +0 -0
  173. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/tgi/__init__.py +0 -0
  174. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/tgi/__main__.py +0 -0
  175. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/tgi/llm.py +0 -0
  176. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/vllm/__init__.py +0 -0
  177. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/vllm/__main__.py +0 -0
  178. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/model/text_completion/vllm/llm.py +0 -0
  179. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/processing/__init__.py +0 -0
  180. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/processing/__main__.py +0 -0
  181. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/processing/processing.py +0 -0
  182. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/prompt/__init__.py +0 -0
  183. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/prompt/template/__init__.py +0 -0
  184. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/prompt/template/__main__.py +0 -0
  185. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/prompt/template/service.py +0 -0
  186. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/__init__.py +0 -0
  187. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/doc_embeddings/__init__.py +0 -0
  188. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/doc_embeddings/milvus/__init__.py +0 -0
  189. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/doc_embeddings/milvus/__main__.py +0 -0
  190. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/doc_embeddings/milvus/service.py +0 -0
  191. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/doc_embeddings/pinecone/__init__.py +0 -0
  192. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/doc_embeddings/pinecone/__main__.py +0 -0
  193. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/doc_embeddings/pinecone/service.py +0 -0
  194. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/doc_embeddings/qdrant/__init__.py +0 -0
  195. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/doc_embeddings/qdrant/__main__.py +0 -0
  196. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/doc_embeddings/qdrant/service.py +0 -0
  197. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/graph_embeddings/__init__.py +0 -0
  198. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/graph_embeddings/milvus/__init__.py +0 -0
  199. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/graph_embeddings/milvus/__main__.py +0 -0
  200. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/graph_embeddings/milvus/service.py +0 -0
  201. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/graph_embeddings/pinecone/__init__.py +0 -0
  202. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/graph_embeddings/pinecone/__main__.py +0 -0
  203. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/graph_embeddings/pinecone/service.py +0 -0
  204. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/graph_embeddings/qdrant/__init__.py +0 -0
  205. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/graph_embeddings/qdrant/__main__.py +0 -0
  206. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/graph_embeddings/qdrant/service.py +0 -0
  207. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/triples/__init__.py +0 -0
  208. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/triples/cassandra/__init__.py +0 -0
  209. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/triples/cassandra/__main__.py +0 -0
  210. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/triples/cassandra/service.py +0 -0
  211. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/triples/falkordb/__init__.py +0 -0
  212. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/triples/falkordb/__main__.py +0 -0
  213. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/triples/falkordb/service.py +0 -0
  214. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/triples/memgraph/__init__.py +0 -0
  215. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/triples/memgraph/__main__.py +0 -0
  216. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/triples/memgraph/service.py +0 -0
  217. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/triples/neo4j/__init__.py +0 -0
  218. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/triples/neo4j/__main__.py +0 -0
  219. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/query/triples/neo4j/service.py +0 -0
  220. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/retrieval/__init__.py +0 -0
  221. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/retrieval/document_rag/__init__.py +0 -0
  222. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/retrieval/document_rag/__main__.py +0 -0
  223. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/retrieval/document_rag/document_rag.py +0 -0
  224. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/retrieval/document_rag/rag.py +0 -0
  225. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/retrieval/graph_rag/__init__.py +0 -0
  226. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/retrieval/graph_rag/__main__.py +0 -0
  227. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/retrieval/graph_rag/graph_rag.py +0 -0
  228. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/retrieval/graph_rag/rag.py +0 -0
  229. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/rev_gateway/__init__.py +0 -0
  230. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/rev_gateway/__main__.py +0 -0
  231. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/rev_gateway/dispatcher.py +0 -0
  232. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/rev_gateway/service.py +0 -0
  233. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/__init__.py +0 -0
  234. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/doc_embeddings/__init__.py +0 -0
  235. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/doc_embeddings/milvus/__init__.py +0 -0
  236. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/doc_embeddings/milvus/__main__.py +0 -0
  237. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/doc_embeddings/milvus/write.py +0 -0
  238. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/doc_embeddings/pinecone/__init__.py +0 -0
  239. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/doc_embeddings/pinecone/__main__.py +0 -0
  240. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/doc_embeddings/pinecone/write.py +0 -0
  241. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/doc_embeddings/qdrant/__init__.py +0 -0
  242. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/doc_embeddings/qdrant/__main__.py +0 -0
  243. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/doc_embeddings/qdrant/write.py +0 -0
  244. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/graph_embeddings/__init__.py +0 -0
  245. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/graph_embeddings/milvus/__init__.py +0 -0
  246. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/graph_embeddings/milvus/__main__.py +0 -0
  247. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/graph_embeddings/milvus/write.py +0 -0
  248. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/graph_embeddings/pinecone/__init__.py +0 -0
  249. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/graph_embeddings/pinecone/__main__.py +0 -0
  250. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/graph_embeddings/pinecone/write.py +0 -0
  251. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/graph_embeddings/qdrant/__init__.py +0 -0
  252. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/graph_embeddings/qdrant/__main__.py +0 -0
  253. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/graph_embeddings/qdrant/write.py +0 -0
  254. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/knowledge/__init__.py +0 -0
  255. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/knowledge/__main__.py +0 -0
  256. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/knowledge/store.py +0 -0
  257. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/object_embeddings/__init__.py +0 -0
  258. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/object_embeddings/milvus/__init__.py +0 -0
  259. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/object_embeddings/milvus/__main__.py +0 -0
  260. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/object_embeddings/milvus/write.py +0 -0
  261. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/objects/__init__.py +0 -0
  262. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/objects/cassandra/__init__.py +0 -0
  263. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/objects/cassandra/__main__.py +0 -0
  264. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/objects/cassandra/write.py +0 -0
  265. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/rows/__init__.py +0 -0
  266. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/rows/cassandra/__init__.py +0 -0
  267. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/rows/cassandra/__main__.py +0 -0
  268. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/rows/cassandra/write.py +0 -0
  269. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/triples/__init__.py +0 -0
  270. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/triples/cassandra/__init__.py +0 -0
  271. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/triples/cassandra/__main__.py +0 -0
  272. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/triples/cassandra/write.py +0 -0
  273. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/triples/falkordb/__init__.py +0 -0
  274. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/triples/falkordb/__main__.py +0 -0
  275. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/triples/falkordb/write.py +0 -0
  276. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/triples/memgraph/__init__.py +0 -0
  277. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/triples/memgraph/__main__.py +0 -0
  278. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/triples/memgraph/write.py +0 -0
  279. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/triples/neo4j/__init__.py +0 -0
  280. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/triples/neo4j/__main__.py +0 -0
  281. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/storage/triples/neo4j/write.py +0 -0
  282. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/tables/__init__.py +0 -0
  283. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/tables/config.py +0 -0
  284. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/tables/knowledge.py +0 -0
  285. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/tables/library.py +0 -0
  286. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/template/__init__.py +0 -0
  287. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph/template/prompt_manager.py +0 -0
  288. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph_flow.egg-info/SOURCES.txt +0 -0
  289. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph_flow.egg-info/dependency_links.txt +0 -0
  290. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph_flow.egg-info/entry_points.txt +0 -0
  291. {trustgraph_flow-1.3.0 → trustgraph_flow-1.3.2}/trustgraph_flow.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: trustgraph-flow
3
- Version: 1.3.0
3
+ Version: 1.3.2
4
4
  Summary: TrustGraph provides a means to run a pipeline of flexible AI processing components in a flexible means to achieve a processing pipeline.
5
5
  Author-email: "trustgraph.ai" <security@trustgraph.ai>
6
6
  Project-URL: Homepage, https://github.com/trustgraph-ai/trustgraph
@@ -8,7 +8,7 @@ Classifier: Programming Language :: Python :: 3
8
8
  Classifier: Operating System :: OS Independent
9
9
  Requires-Python: >=3.8
10
10
  Description-Content-Type: text/markdown
11
- Requires-Dist: trustgraph-base<1.3,>=1.2
11
+ Requires-Dist: trustgraph-base<1.4,>=1.3
12
12
  Requires-Dist: aiohttp
13
13
  Requires-Dist: anthropic
14
14
  Requires-Dist: cassandra-driver
@@ -10,7 +10,7 @@ description = "TrustGraph provides a means to run a pipeline of flexible AI proc
10
10
  readme = "README.md"
11
11
  requires-python = ">=3.8"
12
12
  dependencies = [
13
- "trustgraph-base>=1.2,<1.3",
13
+ "trustgraph-base>=1.3,<1.4",
14
14
  "aiohttp",
15
15
  "anthropic",
16
16
  "cassandra-driver",
@@ -0,0 +1 @@
1
+ __version__ = "1.3.2"
@@ -0,0 +1,91 @@
1
+
2
+ import asyncio
3
+ import queue
4
+ import uuid
5
+ import logging
6
+
7
+ from ... schema import DocumentEmbeddings
8
+ from ... base import Subscriber
9
+
10
+ from . serialize import serialize_document_embeddings
11
+
12
+ # Module logger
13
+ logger = logging.getLogger(__name__)
14
+
15
+ class DocumentEmbeddingsExport:
16
+
17
+ def __init__(
18
+ self, ws, running, pulsar_client, queue, consumer, subscriber
19
+ ):
20
+
21
+ self.ws = ws
22
+ self.running = running
23
+ self.pulsar_client = pulsar_client
24
+ self.queue = queue
25
+ self.consumer = consumer
26
+ self.subscriber = subscriber
27
+
28
+ async def destroy(self):
29
+ # Step 1: Signal stop to prevent new messages
30
+ self.running.stop()
31
+
32
+ # Step 2: Wait briefly for in-flight messages
33
+ await asyncio.sleep(0.5)
34
+
35
+ # Step 3: Unsubscribe and stop subscriber (triggers queue drain)
36
+ if hasattr(self, 'subs'):
37
+ await self.subs.unsubscribe_all(self.id)
38
+ await self.subs.stop()
39
+
40
+ # Step 4: Close websocket last
41
+ if self.ws and not self.ws.closed:
42
+ await self.ws.close()
43
+
44
+ async def receive(self, msg):
45
+ # Ignore incoming info from websocket
46
+ pass
47
+
48
+ async def run(self):
49
+ """Enhanced run with better error handling"""
50
+ self.subs = Subscriber(
51
+ client = self.pulsar_client,
52
+ topic = self.queue,
53
+ consumer_name = self.consumer,
54
+ subscription = self.subscriber,
55
+ schema = DocumentEmbeddings,
56
+ backpressure_strategy = "block" # Configurable
57
+ )
58
+
59
+ await self.subs.start()
60
+
61
+ self.id = str(uuid.uuid4())
62
+ q = await self.subs.subscribe_all(self.id)
63
+
64
+ consecutive_errors = 0
65
+ max_consecutive_errors = 5
66
+
67
+ while self.running.get():
68
+ try:
69
+ resp = await asyncio.wait_for(q.get(), timeout=0.5)
70
+ await self.ws.send_json(serialize_document_embeddings(resp))
71
+ consecutive_errors = 0 # Reset on success
72
+
73
+ except asyncio.TimeoutError:
74
+ continue
75
+
76
+ except queue.Empty:
77
+ continue
78
+
79
+ except Exception as e:
80
+ logger.error(f"Exception sending to websocket: {str(e)}")
81
+ consecutive_errors += 1
82
+
83
+ if consecutive_errors >= max_consecutive_errors:
84
+ logger.error("Too many consecutive errors, shutting down")
85
+ break
86
+
87
+ # Brief pause before retry
88
+ await asyncio.sleep(0.1)
89
+
90
+ # Graceful cleanup handled in destroy()
91
+
@@ -1,6 +1,7 @@
1
1
 
2
2
  import asyncio
3
3
  import uuid
4
+ import logging
4
5
  from aiohttp import WSMsgType
5
6
 
6
7
  from ... schema import Metadata
@@ -8,6 +9,9 @@ from ... schema import DocumentEmbeddings, ChunkEmbeddings
8
9
  from ... base import Publisher
9
10
  from ... messaging.translators.document_loading import DocumentEmbeddingsTranslator
10
11
 
12
+ # Module logger
13
+ logger = logging.getLogger(__name__)
14
+
11
15
  class DocumentEmbeddingsImport:
12
16
 
13
17
  def __init__(
@@ -26,13 +30,17 @@ class DocumentEmbeddingsImport:
26
30
  await self.publisher.start()
27
31
 
28
32
  async def destroy(self):
33
+ # Step 1: Stop accepting new messages
29
34
  self.running.stop()
30
35
 
36
+ # Step 2: Wait for publisher to drain its queue
37
+ logger.info("Draining publisher queue...")
38
+ await self.publisher.stop()
39
+
40
+ # Step 3: Close websocket only after queue is drained
31
41
  if self.ws:
32
42
  await self.ws.close()
33
43
 
34
- await self.publisher.stop()
35
-
36
44
  async def receive(self, msg):
37
45
 
38
46
  data = msg.json()
@@ -0,0 +1,91 @@
1
+
2
+ import asyncio
3
+ import queue
4
+ import uuid
5
+ import logging
6
+
7
+ from ... schema import EntityContexts
8
+ from ... base import Subscriber
9
+
10
+ from . serialize import serialize_entity_contexts
11
+
12
+ # Module logger
13
+ logger = logging.getLogger(__name__)
14
+
15
+ class EntityContextsExport:
16
+
17
+ def __init__(
18
+ self, ws, running, pulsar_client, queue, consumer, subscriber
19
+ ):
20
+
21
+ self.ws = ws
22
+ self.running = running
23
+ self.pulsar_client = pulsar_client
24
+ self.queue = queue
25
+ self.consumer = consumer
26
+ self.subscriber = subscriber
27
+
28
+ async def destroy(self):
29
+ # Step 1: Signal stop to prevent new messages
30
+ self.running.stop()
31
+
32
+ # Step 2: Wait briefly for in-flight messages
33
+ await asyncio.sleep(0.5)
34
+
35
+ # Step 3: Unsubscribe and stop subscriber (triggers queue drain)
36
+ if hasattr(self, 'subs'):
37
+ await self.subs.unsubscribe_all(self.id)
38
+ await self.subs.stop()
39
+
40
+ # Step 4: Close websocket last
41
+ if self.ws and not self.ws.closed:
42
+ await self.ws.close()
43
+
44
+ async def receive(self, msg):
45
+ # Ignore incoming info from websocket
46
+ pass
47
+
48
+ async def run(self):
49
+ """Enhanced run with better error handling"""
50
+ self.subs = Subscriber(
51
+ client = self.pulsar_client,
52
+ topic = self.queue,
53
+ consumer_name = self.consumer,
54
+ subscription = self.subscriber,
55
+ schema = EntityContexts,
56
+ backpressure_strategy = "block" # Configurable
57
+ )
58
+
59
+ await self.subs.start()
60
+
61
+ self.id = str(uuid.uuid4())
62
+ q = await self.subs.subscribe_all(self.id)
63
+
64
+ consecutive_errors = 0
65
+ max_consecutive_errors = 5
66
+
67
+ while self.running.get():
68
+ try:
69
+ resp = await asyncio.wait_for(q.get(), timeout=0.5)
70
+ await self.ws.send_json(serialize_entity_contexts(resp))
71
+ consecutive_errors = 0 # Reset on success
72
+
73
+ except asyncio.TimeoutError:
74
+ continue
75
+
76
+ except queue.Empty:
77
+ continue
78
+
79
+ except Exception as e:
80
+ logger.error(f"Exception sending to websocket: {str(e)}")
81
+ consecutive_errors += 1
82
+
83
+ if consecutive_errors >= max_consecutive_errors:
84
+ logger.error("Too many consecutive errors, shutting down")
85
+ break
86
+
87
+ # Brief pause before retry
88
+ await asyncio.sleep(0.1)
89
+
90
+ # Graceful cleanup handled in destroy()
91
+
@@ -1,6 +1,7 @@
1
1
 
2
2
  import asyncio
3
3
  import uuid
4
+ import logging
4
5
  from aiohttp import WSMsgType
5
6
 
6
7
  from ... schema import Metadata
@@ -9,6 +10,9 @@ from ... base import Publisher
9
10
 
10
11
  from . serialize import to_subgraph, to_value
11
12
 
13
+ # Module logger
14
+ logger = logging.getLogger(__name__)
15
+
12
16
  class EntityContextsImport:
13
17
 
14
18
  def __init__(
@@ -26,13 +30,17 @@ class EntityContextsImport:
26
30
  await self.publisher.start()
27
31
 
28
32
  async def destroy(self):
33
+ # Step 1: Stop accepting new messages
29
34
  self.running.stop()
30
35
 
36
+ # Step 2: Wait for publisher to drain its queue
37
+ logger.info("Draining publisher queue...")
38
+ await self.publisher.stop()
39
+
40
+ # Step 3: Close websocket only after queue is drained
31
41
  if self.ws:
32
42
  await self.ws.close()
33
43
 
34
- await self.publisher.stop()
35
-
36
44
  async def receive(self, msg):
37
45
 
38
46
  data = msg.json()
@@ -0,0 +1,91 @@
1
+
2
+ import asyncio
3
+ import queue
4
+ import uuid
5
+ import logging
6
+
7
+ from ... schema import GraphEmbeddings
8
+ from ... base import Subscriber
9
+
10
+ from . serialize import serialize_graph_embeddings
11
+
12
+ # Module logger
13
+ logger = logging.getLogger(__name__)
14
+
15
+ class GraphEmbeddingsExport:
16
+
17
+ def __init__(
18
+ self, ws, running, pulsar_client, queue, consumer, subscriber
19
+ ):
20
+
21
+ self.ws = ws
22
+ self.running = running
23
+ self.pulsar_client = pulsar_client
24
+ self.queue = queue
25
+ self.consumer = consumer
26
+ self.subscriber = subscriber
27
+
28
+ async def destroy(self):
29
+ # Step 1: Signal stop to prevent new messages
30
+ self.running.stop()
31
+
32
+ # Step 2: Wait briefly for in-flight messages
33
+ await asyncio.sleep(0.5)
34
+
35
+ # Step 3: Unsubscribe and stop subscriber (triggers queue drain)
36
+ if hasattr(self, 'subs'):
37
+ await self.subs.unsubscribe_all(self.id)
38
+ await self.subs.stop()
39
+
40
+ # Step 4: Close websocket last
41
+ if self.ws and not self.ws.closed:
42
+ await self.ws.close()
43
+
44
+ async def receive(self, msg):
45
+ # Ignore incoming info from websocket
46
+ pass
47
+
48
+ async def run(self):
49
+ """Enhanced run with better error handling"""
50
+ self.subs = Subscriber(
51
+ client = self.pulsar_client,
52
+ topic = self.queue,
53
+ consumer_name = self.consumer,
54
+ subscription = self.subscriber,
55
+ schema = GraphEmbeddings,
56
+ backpressure_strategy = "block" # Configurable
57
+ )
58
+
59
+ await self.subs.start()
60
+
61
+ self.id = str(uuid.uuid4())
62
+ q = await self.subs.subscribe_all(self.id)
63
+
64
+ consecutive_errors = 0
65
+ max_consecutive_errors = 5
66
+
67
+ while self.running.get():
68
+ try:
69
+ resp = await asyncio.wait_for(q.get(), timeout=0.5)
70
+ await self.ws.send_json(serialize_graph_embeddings(resp))
71
+ consecutive_errors = 0 # Reset on success
72
+
73
+ except asyncio.TimeoutError:
74
+ continue
75
+
76
+ except queue.Empty:
77
+ continue
78
+
79
+ except Exception as e:
80
+ logger.error(f"Exception sending to websocket: {str(e)}")
81
+ consecutive_errors += 1
82
+
83
+ if consecutive_errors >= max_consecutive_errors:
84
+ logger.error("Too many consecutive errors, shutting down")
85
+ break
86
+
87
+ # Brief pause before retry
88
+ await asyncio.sleep(0.1)
89
+
90
+ # Graceful cleanup handled in destroy()
91
+
@@ -1,6 +1,7 @@
1
1
 
2
2
  import asyncio
3
3
  import uuid
4
+ import logging
4
5
  from aiohttp import WSMsgType
5
6
 
6
7
  from ... schema import Metadata
@@ -9,6 +10,9 @@ from ... base import Publisher
9
10
 
10
11
  from . serialize import to_subgraph, to_value
11
12
 
13
+ # Module logger
14
+ logger = logging.getLogger(__name__)
15
+
12
16
  class GraphEmbeddingsImport:
13
17
 
14
18
  def __init__(
@@ -26,13 +30,17 @@ class GraphEmbeddingsImport:
26
30
  await self.publisher.start()
27
31
 
28
32
  async def destroy(self):
33
+ # Step 1: Stop accepting new messages
29
34
  self.running.stop()
30
35
 
36
+ # Step 2: Wait for publisher to drain its queue
37
+ logger.info("Draining publisher queue...")
38
+ await self.publisher.stop()
39
+
40
+ # Step 3: Close websocket only after queue is drained
31
41
  if self.ws:
32
42
  await self.ws.close()
33
43
 
34
- await self.publisher.stop()
35
-
36
44
  async def receive(self, msg):
37
45
 
38
46
  data = msg.json()
@@ -0,0 +1,91 @@
1
+
2
+ import asyncio
3
+ import queue
4
+ import uuid
5
+ import logging
6
+
7
+ from ... schema import Triples
8
+ from ... base import Subscriber
9
+
10
+ from . serialize import serialize_triples
11
+
12
+ # Module logger
13
+ logger = logging.getLogger(__name__)
14
+
15
+ class TriplesExport:
16
+
17
+ def __init__(
18
+ self, ws, running, pulsar_client, queue, consumer, subscriber
19
+ ):
20
+
21
+ self.ws = ws
22
+ self.running = running
23
+ self.pulsar_client = pulsar_client
24
+ self.queue = queue
25
+ self.consumer = consumer
26
+ self.subscriber = subscriber
27
+
28
+ async def destroy(self):
29
+ # Step 1: Signal stop to prevent new messages
30
+ self.running.stop()
31
+
32
+ # Step 2: Wait briefly for in-flight messages
33
+ await asyncio.sleep(0.5)
34
+
35
+ # Step 3: Unsubscribe and stop subscriber (triggers queue drain)
36
+ if hasattr(self, 'subs'):
37
+ await self.subs.unsubscribe_all(self.id)
38
+ await self.subs.stop()
39
+
40
+ # Step 4: Close websocket last
41
+ if self.ws and not self.ws.closed:
42
+ await self.ws.close()
43
+
44
+ async def receive(self, msg):
45
+ # Ignore incoming info from websocket
46
+ pass
47
+
48
+ async def run(self):
49
+ """Enhanced run with better error handling"""
50
+ self.subs = Subscriber(
51
+ client = self.pulsar_client,
52
+ topic = self.queue,
53
+ consumer_name = self.consumer,
54
+ subscription = self.subscriber,
55
+ schema = Triples,
56
+ backpressure_strategy = "block" # Configurable
57
+ )
58
+
59
+ await self.subs.start()
60
+
61
+ self.id = str(uuid.uuid4())
62
+ q = await self.subs.subscribe_all(self.id)
63
+
64
+ consecutive_errors = 0
65
+ max_consecutive_errors = 5
66
+
67
+ while self.running.get():
68
+ try:
69
+ resp = await asyncio.wait_for(q.get(), timeout=0.5)
70
+ await self.ws.send_json(serialize_triples(resp))
71
+ consecutive_errors = 0 # Reset on success
72
+
73
+ except asyncio.TimeoutError:
74
+ continue
75
+
76
+ except queue.Empty:
77
+ continue
78
+
79
+ except Exception as e:
80
+ logger.error(f"Exception sending to websocket: {str(e)}")
81
+ consecutive_errors += 1
82
+
83
+ if consecutive_errors >= max_consecutive_errors:
84
+ logger.error("Too many consecutive errors, shutting down")
85
+ break
86
+
87
+ # Brief pause before retry
88
+ await asyncio.sleep(0.1)
89
+
90
+ # Graceful cleanup handled in destroy()
91
+
@@ -1,6 +1,7 @@
1
1
 
2
2
  import asyncio
3
3
  import uuid
4
+ import logging
4
5
  from aiohttp import WSMsgType
5
6
 
6
7
  from ... schema import Metadata
@@ -9,6 +10,9 @@ from ... base import Publisher
9
10
 
10
11
  from . serialize import to_subgraph
11
12
 
13
+ # Module logger
14
+ logger = logging.getLogger(__name__)
15
+
12
16
  class TriplesImport:
13
17
 
14
18
  def __init__(
@@ -26,13 +30,17 @@ class TriplesImport:
26
30
  await self.publisher.start()
27
31
 
28
32
  async def destroy(self):
33
+ # Step 1: Stop accepting new messages
29
34
  self.running.stop()
30
35
 
36
+ # Step 2: Wait for publisher to drain its queue
37
+ logger.info("Draining publisher queue...")
38
+ await self.publisher.stop()
39
+
40
+ # Step 3: Close websocket only after queue is drained
31
41
  if self.ws:
32
42
  await self.ws.close()
33
43
 
34
- await self.publisher.stop()
35
-
36
44
  async def receive(self, msg):
37
45
 
38
46
  data = msg.json()
@@ -0,0 +1,152 @@
1
+
2
+ import asyncio
3
+ from aiohttp import web, WSMsgType
4
+ import logging
5
+
6
+ from .. running import Running
7
+
8
+ logger = logging.getLogger("socket")
9
+ logger.setLevel(logging.INFO)
10
+
11
+ class SocketEndpoint:
12
+
13
+ def __init__(
14
+ self, endpoint_path, auth, dispatcher,
15
+ ):
16
+
17
+ self.path = endpoint_path
18
+ self.auth = auth
19
+ self.operation = "socket"
20
+
21
+ self.dispatcher = dispatcher
22
+
23
+ async def worker(self, ws, dispatcher, running):
24
+
25
+ await dispatcher.run()
26
+
27
+ async def listener(self, ws, dispatcher, running):
28
+ """Enhanced listener with graceful shutdown"""
29
+ try:
30
+ async for msg in ws:
31
+ # On error, finish
32
+ if msg.type == WSMsgType.TEXT:
33
+ await dispatcher.receive(msg)
34
+ continue
35
+ elif msg.type == WSMsgType.BINARY:
36
+ await dispatcher.receive(msg)
37
+ continue
38
+ else:
39
+ # Graceful shutdown on close
40
+ logger.info("Websocket closing, initiating graceful shutdown")
41
+ running.stop()
42
+
43
+ # Allow time for dispatcher cleanup
44
+ await asyncio.sleep(1.0)
45
+
46
+ # Close websocket if not already closed
47
+ if not ws.closed:
48
+ await ws.close()
49
+ break
50
+ else:
51
+ # This executes when the async for loop completes normally (no break)
52
+ logger.debug("Websocket iteration completed, performing cleanup")
53
+ running.stop()
54
+ if not ws.closed:
55
+ await ws.close()
56
+ except Exception:
57
+ # Handle exceptions and cleanup
58
+ running.stop()
59
+ if not ws.closed:
60
+ await ws.close()
61
+ raise
62
+
63
+ async def handle(self, request):
64
+ """Enhanced handler with better cleanup"""
65
+ try:
66
+ token = request.query['token']
67
+ except:
68
+ token = ""
69
+
70
+ if not self.auth.permitted(token, self.operation):
71
+ return web.HTTPUnauthorized()
72
+
73
+ # 50MB max message size
74
+ ws = web.WebSocketResponse(max_msg_size=52428800)
75
+
76
+ await ws.prepare(request)
77
+
78
+ dispatcher = None
79
+
80
+ try:
81
+
82
+ async with asyncio.TaskGroup() as tg:
83
+
84
+ running = Running()
85
+
86
+ dispatcher = await self.dispatcher(
87
+ ws, running, request.match_info
88
+ )
89
+
90
+ worker_task = tg.create_task(
91
+ self.worker(ws, dispatcher, running)
92
+ )
93
+
94
+ lsnr_task = tg.create_task(
95
+ self.listener(ws, dispatcher, running)
96
+ )
97
+
98
+ logger.debug("Created task group, waiting for completion...")
99
+
100
+ # Wait for threads to complete
101
+
102
+ logger.debug("Task group closed")
103
+
104
+ except ExceptionGroup as e:
105
+
106
+ logger.error("Exception group occurred:", exc_info=True)
107
+
108
+ for se in e.exceptions:
109
+ logger.error(f" Exception type: {type(se)}")
110
+ logger.error(f" Exception: {se}")
111
+
112
+ # Attempt graceful dispatcher shutdown
113
+ if dispatcher and hasattr(dispatcher, 'destroy'):
114
+ try:
115
+ await asyncio.wait_for(
116
+ dispatcher.destroy(),
117
+ timeout=5.0
118
+ )
119
+ except asyncio.TimeoutError:
120
+ logger.warning("Dispatcher shutdown timed out")
121
+ except Exception as de:
122
+ logger.error(f"Error during dispatcher cleanup: {de}")
123
+
124
+ except Exception as e:
125
+ logger.error(f"Socket exception: {e}", exc_info=True)
126
+
127
+ finally:
128
+ # Ensure dispatcher cleanup
129
+ if dispatcher and hasattr(dispatcher, 'destroy'):
130
+ try:
131
+ await dispatcher.destroy()
132
+ except Exception as de:
133
+ logger.error(f"Error in final dispatcher cleanup: {de}")
134
+
135
+ # Ensure websocket is closed
136
+ if ws and not ws.closed:
137
+ await ws.close()
138
+
139
+ return ws
140
+
141
+ async def start(self):
142
+ pass
143
+
144
+ async def stop(self):
145
+ self.running.stop()
146
+
147
+ def add_routes(self, app):
148
+
149
+ app.add_routes([
150
+ web.get(self.path, self.handle),
151
+ ])
152
+