trustgraph-flow 1.3.17__tar.gz → 1.3.19__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 (301) hide show
  1. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/PKG-INFO +1 -1
  2. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/pyproject.toml +0 -1
  3. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/direct/milvus_doc_embeddings.py +34 -11
  4. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/direct/milvus_graph_embeddings.py +34 -11
  5. trustgraph_flow-1.3.19/trustgraph/flow_version.py +1 -0
  6. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/doc_embeddings/milvus/service.py +6 -1
  7. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/doc_embeddings/pinecone/service.py +35 -0
  8. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/doc_embeddings/qdrant/service.py +20 -0
  9. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/graph_embeddings/milvus/service.py +6 -1
  10. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/graph_embeddings/pinecone/service.py +35 -0
  11. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/graph_embeddings/qdrant/service.py +20 -0
  12. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/doc_embeddings/milvus/write.py +5 -1
  13. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/graph_embeddings/milvus/write.py +5 -1
  14. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph_flow.egg-info/PKG-INFO +1 -1
  15. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph_flow.egg-info/SOURCES.txt +0 -4
  16. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph_flow.egg-info/entry_points.txt +0 -1
  17. trustgraph_flow-1.3.17/trustgraph/direct/milvus_object_embeddings.py +0 -157
  18. trustgraph_flow-1.3.17/trustgraph/flow_version.py +0 -1
  19. trustgraph_flow-1.3.17/trustgraph/storage/object_embeddings/milvus/write.py +0 -61
  20. trustgraph_flow-1.3.17/trustgraph/storage/triples/neo4j/__init__.py +0 -3
  21. trustgraph_flow-1.3.17/trustgraph/storage/triples/neo4j/__main__.py +0 -7
  22. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/README.md +0 -0
  23. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/setup.cfg +0 -0
  24. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/__init__.py +0 -0
  25. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/agent/__init__.py +0 -0
  26. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/agent/mcp_tool/__init__.py +0 -0
  27. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/agent/mcp_tool/__main__.py +0 -0
  28. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/agent/mcp_tool/service.py +0 -0
  29. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/agent/react/__init__.py +0 -0
  30. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/agent/react/__main__.py +0 -0
  31. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/agent/react/agent_manager.py +0 -0
  32. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/agent/react/service.py +0 -0
  33. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/agent/react/tools.py +0 -0
  34. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/agent/react/types.py +0 -0
  35. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/agent/tool_filter.py +0 -0
  36. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/chunking/__init__.py +0 -0
  37. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/chunking/recursive/__init__.py +0 -0
  38. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/chunking/recursive/__main__.py +0 -0
  39. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/chunking/recursive/chunker.py +0 -0
  40. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/chunking/token/__init__.py +0 -0
  41. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/chunking/token/__main__.py +0 -0
  42. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/chunking/token/chunker.py +0 -0
  43. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/config/service/__init__.py +0 -0
  44. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/config/service/__main__.py +0 -0
  45. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/config/service/config.py +0 -0
  46. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/config/service/flow.py +0 -0
  47. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/config/service/service.py +0 -0
  48. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/cores/__init__.py +0 -0
  49. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/cores/__main__.py +0 -0
  50. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/cores/knowledge.py +0 -0
  51. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/cores/service.py +0 -0
  52. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/decoding/__init__.py +0 -0
  53. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/decoding/mistral_ocr/__init__.py +0 -0
  54. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/decoding/mistral_ocr/__main__.py +0 -0
  55. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/decoding/mistral_ocr/processor.py +0 -0
  56. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/decoding/pdf/__init__.py +0 -0
  57. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/decoding/pdf/__main__.py +0 -0
  58. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/decoding/pdf/pdf_decoder.py +0 -0
  59. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/direct/__init__.py +0 -0
  60. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/direct/cassandra.py +0 -0
  61. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/embeddings/__init__.py +0 -0
  62. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/embeddings/document_embeddings/__init__.py +0 -0
  63. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/embeddings/document_embeddings/__main__.py +0 -0
  64. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/embeddings/document_embeddings/embeddings.py +0 -0
  65. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/embeddings/fastembed/__init__.py +0 -0
  66. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/embeddings/fastembed/__main__.py +0 -0
  67. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/embeddings/fastembed/processor.py +0 -0
  68. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/embeddings/graph_embeddings/__init__.py +0 -0
  69. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/embeddings/graph_embeddings/__main__.py +0 -0
  70. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/embeddings/graph_embeddings/embeddings.py +0 -0
  71. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/embeddings/ollama/__init__.py +0 -0
  72. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/embeddings/ollama/__main__.py +0 -0
  73. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/embeddings/ollama/processor.py +0 -0
  74. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/external/__init__.py +0 -0
  75. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/external/wikipedia/__init__.py +0 -0
  76. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/external/wikipedia/__main__.py +0 -0
  77. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/external/wikipedia/service.py +0 -0
  78. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/__init__.py +0 -0
  79. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/__init__.py +0 -0
  80. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/agent/__init__.py +0 -0
  81. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/agent/__main__.py +0 -0
  82. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/agent/extract.py +0 -0
  83. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/definitions/__init__.py +0 -0
  84. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/definitions/__main__.py +0 -0
  85. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/definitions/extract.py +0 -0
  86. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/objects/__init__.py +0 -0
  87. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/objects/__main__.py +0 -0
  88. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/objects/processor.py +0 -0
  89. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/relationships/__init__.py +0 -0
  90. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/relationships/__main__.py +0 -0
  91. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/relationships/extract.py +0 -0
  92. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/topics/__init__.py +0 -0
  93. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/topics/__main__.py +0 -0
  94. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/extract/kg/topics/extract.py +0 -0
  95. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/__init__.py +0 -0
  96. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/__main__.py +0 -0
  97. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/auth.py +0 -0
  98. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/config/receiver.py +0 -0
  99. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/agent.py +0 -0
  100. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/config.py +0 -0
  101. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/core_export.py +0 -0
  102. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/core_import.py +0 -0
  103. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/document_embeddings_export.py +0 -0
  104. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/document_embeddings_import.py +0 -0
  105. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/document_load.py +0 -0
  106. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/document_rag.py +0 -0
  107. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/embeddings.py +0 -0
  108. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/entity_contexts_export.py +0 -0
  109. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/entity_contexts_import.py +0 -0
  110. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/flow.py +0 -0
  111. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/graph_embeddings_export.py +0 -0
  112. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/graph_embeddings_import.py +0 -0
  113. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/graph_embeddings_query.py +0 -0
  114. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/graph_rag.py +0 -0
  115. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/knowledge.py +0 -0
  116. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/librarian.py +0 -0
  117. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/manager.py +0 -0
  118. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/mcp_tool.py +0 -0
  119. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/mux.py +0 -0
  120. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/nlp_query.py +0 -0
  121. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/objects_import.py +0 -0
  122. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/objects_query.py +0 -0
  123. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/prompt.py +0 -0
  124. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/requestor.py +0 -0
  125. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/sender.py +0 -0
  126. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/serialize.py +0 -0
  127. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/streamer.py +0 -0
  128. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/structured_query.py +0 -0
  129. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/text_completion.py +0 -0
  130. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/text_load.py +0 -0
  131. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/triples_export.py +0 -0
  132. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/triples_import.py +0 -0
  133. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/dispatch/triples_query.py +0 -0
  134. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/endpoint/constant_endpoint.py +0 -0
  135. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/endpoint/manager.py +0 -0
  136. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/endpoint/metrics.py +0 -0
  137. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/endpoint/socket.py +0 -0
  138. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/endpoint/stream_endpoint.py +0 -0
  139. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/endpoint/variable_endpoint.py +0 -0
  140. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/running.py +0 -0
  141. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/service.py +0 -0
  142. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/unused/dbpedia.py +0 -0
  143. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/unused/encyclopedia.py +0 -0
  144. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/gateway/unused/internet_search.py +0 -0
  145. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/librarian/__init__.py +0 -0
  146. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/librarian/__main__.py +0 -0
  147. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/librarian/blob_store.py +0 -0
  148. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/librarian/librarian.py +0 -0
  149. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/librarian/service.py +0 -0
  150. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/metering/__init__.py +0 -0
  151. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/metering/__main__.py +0 -0
  152. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/metering/counter.py +0 -0
  153. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/__init__.py +0 -0
  154. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/__init__.py +0 -0
  155. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/azure/__init__.py +0 -0
  156. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/azure/__main__.py +0 -0
  157. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/azure/llm.py +0 -0
  158. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/azure_openai/__init__.py +0 -0
  159. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/azure_openai/__main__.py +0 -0
  160. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/azure_openai/llm.py +0 -0
  161. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/claude/__init__.py +0 -0
  162. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/claude/__main__.py +0 -0
  163. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/claude/llm.py +0 -0
  164. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/cohere/__init__.py +0 -0
  165. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/cohere/__main__.py +0 -0
  166. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/cohere/llm.py +0 -0
  167. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/googleaistudio/__init__.py +0 -0
  168. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/googleaistudio/__main__.py +0 -0
  169. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/googleaistudio/llm.py +0 -0
  170. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/llamafile/__init__.py +0 -0
  171. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/llamafile/__main__.py +0 -0
  172. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/llamafile/llm.py +0 -0
  173. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/lmstudio/__init__.py +0 -0
  174. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/lmstudio/__main__.py +0 -0
  175. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/lmstudio/llm.py +0 -0
  176. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/mistral/__init__.py +0 -0
  177. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/mistral/__main__.py +0 -0
  178. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/mistral/llm.py +0 -0
  179. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/ollama/__init__.py +0 -0
  180. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/ollama/__main__.py +0 -0
  181. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/ollama/llm.py +0 -0
  182. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/openai/__init__.py +0 -0
  183. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/openai/__main__.py +0 -0
  184. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/openai/llm.py +0 -0
  185. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/tgi/__init__.py +0 -0
  186. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/tgi/__main__.py +0 -0
  187. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/tgi/llm.py +0 -0
  188. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/vllm/__init__.py +0 -0
  189. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/vllm/__main__.py +0 -0
  190. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/model/text_completion/vllm/llm.py +0 -0
  191. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/processing/__init__.py +0 -0
  192. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/processing/__main__.py +0 -0
  193. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/processing/processing.py +0 -0
  194. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/prompt/__init__.py +0 -0
  195. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/prompt/template/__init__.py +0 -0
  196. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/prompt/template/__main__.py +0 -0
  197. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/prompt/template/service.py +0 -0
  198. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/__init__.py +0 -0
  199. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/doc_embeddings/__init__.py +0 -0
  200. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/doc_embeddings/milvus/__init__.py +0 -0
  201. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/doc_embeddings/milvus/__main__.py +0 -0
  202. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/doc_embeddings/pinecone/__init__.py +0 -0
  203. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/doc_embeddings/pinecone/__main__.py +0 -0
  204. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/doc_embeddings/qdrant/__init__.py +0 -0
  205. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/doc_embeddings/qdrant/__main__.py +0 -0
  206. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/graph_embeddings/__init__.py +0 -0
  207. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/graph_embeddings/milvus/__init__.py +0 -0
  208. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/graph_embeddings/milvus/__main__.py +0 -0
  209. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/graph_embeddings/pinecone/__init__.py +0 -0
  210. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/graph_embeddings/pinecone/__main__.py +0 -0
  211. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/graph_embeddings/qdrant/__init__.py +0 -0
  212. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/graph_embeddings/qdrant/__main__.py +0 -0
  213. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/objects/__init__.py +0 -0
  214. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/objects/cassandra/__init__.py +0 -0
  215. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/objects/cassandra/__main__.py +0 -0
  216. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/objects/cassandra/service.py +0 -0
  217. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/triples/__init__.py +0 -0
  218. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/triples/cassandra/__init__.py +0 -0
  219. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/triples/cassandra/__main__.py +0 -0
  220. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/triples/cassandra/service.py +0 -0
  221. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/triples/falkordb/__init__.py +0 -0
  222. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/triples/falkordb/__main__.py +0 -0
  223. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/triples/falkordb/service.py +0 -0
  224. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/triples/memgraph/__init__.py +0 -0
  225. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/triples/memgraph/__main__.py +0 -0
  226. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/triples/memgraph/service.py +0 -0
  227. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/triples/neo4j/__init__.py +0 -0
  228. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/triples/neo4j/__main__.py +0 -0
  229. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/query/triples/neo4j/service.py +0 -0
  230. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/retrieval/__init__.py +0 -0
  231. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/retrieval/document_rag/__init__.py +0 -0
  232. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/retrieval/document_rag/__main__.py +0 -0
  233. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/retrieval/document_rag/document_rag.py +0 -0
  234. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/retrieval/document_rag/rag.py +0 -0
  235. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/retrieval/graph_rag/__init__.py +0 -0
  236. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/retrieval/graph_rag/__main__.py +0 -0
  237. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/retrieval/graph_rag/graph_rag.py +0 -0
  238. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/retrieval/graph_rag/rag.py +0 -0
  239. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/retrieval/nlp_query/__init__.py +0 -0
  240. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/retrieval/nlp_query/__main__.py +0 -0
  241. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/retrieval/nlp_query/service.py +0 -0
  242. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/retrieval/structured_query/__init__.py +0 -0
  243. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/retrieval/structured_query/__main__.py +0 -0
  244. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/retrieval/structured_query/service.py +0 -0
  245. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/rev_gateway/__init__.py +0 -0
  246. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/rev_gateway/__main__.py +0 -0
  247. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/rev_gateway/dispatcher.py +0 -0
  248. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/rev_gateway/service.py +0 -0
  249. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/__init__.py +0 -0
  250. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/doc_embeddings/__init__.py +0 -0
  251. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/doc_embeddings/milvus/__init__.py +0 -0
  252. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/doc_embeddings/milvus/__main__.py +0 -0
  253. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/doc_embeddings/pinecone/__init__.py +0 -0
  254. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/doc_embeddings/pinecone/__main__.py +0 -0
  255. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/doc_embeddings/pinecone/write.py +0 -0
  256. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/doc_embeddings/qdrant/__init__.py +0 -0
  257. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/doc_embeddings/qdrant/__main__.py +0 -0
  258. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/doc_embeddings/qdrant/write.py +0 -0
  259. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/graph_embeddings/__init__.py +0 -0
  260. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/graph_embeddings/milvus/__init__.py +0 -0
  261. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/graph_embeddings/milvus/__main__.py +0 -0
  262. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/graph_embeddings/pinecone/__init__.py +0 -0
  263. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/graph_embeddings/pinecone/__main__.py +0 -0
  264. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/graph_embeddings/pinecone/write.py +0 -0
  265. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/graph_embeddings/qdrant/__init__.py +0 -0
  266. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/graph_embeddings/qdrant/__main__.py +0 -0
  267. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/graph_embeddings/qdrant/write.py +0 -0
  268. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/knowledge/__init__.py +0 -0
  269. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/knowledge/__main__.py +0 -0
  270. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/knowledge/store.py +0 -0
  271. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/object_embeddings/__init__.py +0 -0
  272. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/objects/__init__.py +0 -0
  273. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/objects/cassandra/__init__.py +0 -0
  274. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/objects/cassandra/__main__.py +0 -0
  275. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/objects/cassandra/write.py +0 -0
  276. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/rows/__init__.py +0 -0
  277. {trustgraph_flow-1.3.17/trustgraph/storage/object_embeddings/milvus → trustgraph_flow-1.3.19/trustgraph/storage/rows/cassandra}/__init__.py +0 -0
  278. {trustgraph_flow-1.3.17/trustgraph/storage/object_embeddings/milvus → trustgraph_flow-1.3.19/trustgraph/storage/rows/cassandra}/__main__.py +0 -0
  279. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/rows/cassandra/write.py +0 -0
  280. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/triples/__init__.py +0 -0
  281. {trustgraph_flow-1.3.17/trustgraph/storage/rows → trustgraph_flow-1.3.19/trustgraph/storage/triples}/cassandra/__init__.py +0 -0
  282. {trustgraph_flow-1.3.17/trustgraph/storage/rows → trustgraph_flow-1.3.19/trustgraph/storage/triples}/cassandra/__main__.py +0 -0
  283. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/triples/cassandra/write.py +0 -0
  284. {trustgraph_flow-1.3.17/trustgraph/storage/triples/cassandra → trustgraph_flow-1.3.19/trustgraph/storage/triples/falkordb}/__init__.py +0 -0
  285. {trustgraph_flow-1.3.17/trustgraph/storage/triples/cassandra → trustgraph_flow-1.3.19/trustgraph/storage/triples/falkordb}/__main__.py +0 -0
  286. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/triples/falkordb/write.py +0 -0
  287. {trustgraph_flow-1.3.17/trustgraph/storage/triples/falkordb → trustgraph_flow-1.3.19/trustgraph/storage/triples/memgraph}/__init__.py +0 -0
  288. {trustgraph_flow-1.3.17/trustgraph/storage/triples/falkordb → trustgraph_flow-1.3.19/trustgraph/storage/triples/memgraph}/__main__.py +0 -0
  289. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/triples/memgraph/write.py +0 -0
  290. {trustgraph_flow-1.3.17/trustgraph/storage/triples/memgraph → trustgraph_flow-1.3.19/trustgraph/storage/triples/neo4j}/__init__.py +0 -0
  291. {trustgraph_flow-1.3.17/trustgraph/storage/triples/memgraph → trustgraph_flow-1.3.19/trustgraph/storage/triples/neo4j}/__main__.py +0 -0
  292. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/storage/triples/neo4j/write.py +0 -0
  293. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/tables/__init__.py +0 -0
  294. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/tables/config.py +0 -0
  295. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/tables/knowledge.py +0 -0
  296. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/tables/library.py +0 -0
  297. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/template/__init__.py +0 -0
  298. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph/template/prompt_manager.py +0 -0
  299. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph_flow.egg-info/dependency_links.txt +0 -0
  300. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/trustgraph_flow.egg-info/requires.txt +0 -0
  301. {trustgraph_flow-1.3.17 → trustgraph_flow-1.3.19}/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.17
3
+ Version: 1.3.19
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
@@ -90,7 +90,6 @@ metering = "trustgraph.metering:run"
90
90
  nlp-query = "trustgraph.retrieval.nlp_query:run"
91
91
  objects-write-cassandra = "trustgraph.storage.objects.cassandra:run"
92
92
  objects-query-cassandra = "trustgraph.query.objects.cassandra:run"
93
- oe-write-milvus = "trustgraph.storage.object_embeddings.milvus:run"
94
93
  pdf-decoder = "trustgraph.decoding.pdf:run"
95
94
  pdf-ocr-mistral = "trustgraph.decoding.mistral_ocr:run"
96
95
  prompt-template = "trustgraph.prompt.template:run"
@@ -2,9 +2,32 @@
2
2
  from pymilvus import MilvusClient, CollectionSchema, FieldSchema, DataType
3
3
  import time
4
4
  import logging
5
+ import re
5
6
 
6
7
  logger = logging.getLogger(__name__)
7
8
 
9
+ def make_safe_collection_name(user, collection, dimension, prefix):
10
+ """
11
+ Create a safe Milvus collection name from user/collection parameters.
12
+ Milvus only allows letters, numbers, and underscores.
13
+ """
14
+ def sanitize(s):
15
+ # Replace non-alphanumeric characters (except underscore) with underscore
16
+ # Then collapse multiple underscores into single underscore
17
+ safe = re.sub(r'[^a-zA-Z0-9_]', '_', s)
18
+ safe = re.sub(r'_+', '_', safe)
19
+ # Remove leading/trailing underscores
20
+ safe = safe.strip('_')
21
+ # Ensure it's not empty
22
+ if not safe:
23
+ safe = 'default'
24
+ return safe
25
+
26
+ safe_user = sanitize(user)
27
+ safe_collection = sanitize(collection)
28
+
29
+ return f"{prefix}_{safe_user}_{safe_collection}_{dimension}"
30
+
8
31
  class DocVectors:
9
32
 
10
33
  def __init__(self, uri="http://localhost:19530", prefix='doc'):
@@ -26,9 +49,9 @@ class DocVectors:
26
49
  self.next_reload = time.time() + self.reload_time
27
50
  logger.debug(f"Reload at {self.next_reload}")
28
51
 
29
- def init_collection(self, dimension):
52
+ def init_collection(self, dimension, user, collection):
30
53
 
31
- collection_name = self.prefix + "_" + str(dimension)
54
+ collection_name = make_safe_collection_name(user, collection, dimension, self.prefix)
32
55
 
33
56
  pkey_field = FieldSchema(
34
57
  name="id",
@@ -75,14 +98,14 @@ class DocVectors:
75
98
  index_params=index_params
76
99
  )
77
100
 
78
- self.collections[dimension] = collection_name
101
+ self.collections[(dimension, user, collection)] = collection_name
79
102
 
80
- def insert(self, embeds, doc):
103
+ def insert(self, embeds, doc, user, collection):
81
104
 
82
105
  dim = len(embeds)
83
106
 
84
- if dim not in self.collections:
85
- self.init_collection(dim)
107
+ if (dim, user, collection) not in self.collections:
108
+ self.init_collection(dim, user, collection)
86
109
 
87
110
  data = [
88
111
  {
@@ -92,18 +115,18 @@ class DocVectors:
92
115
  ]
93
116
 
94
117
  self.client.insert(
95
- collection_name=self.collections[dim],
118
+ collection_name=self.collections[(dim, user, collection)],
96
119
  data=data
97
120
  )
98
121
 
99
- def search(self, embeds, fields=["doc"], limit=10):
122
+ def search(self, embeds, user, collection, fields=["doc"], limit=10):
100
123
 
101
124
  dim = len(embeds)
102
125
 
103
- if dim not in self.collections:
104
- self.init_collection(dim)
126
+ if (dim, user, collection) not in self.collections:
127
+ self.init_collection(dim, user, collection)
105
128
 
106
- coll = self.collections[dim]
129
+ coll = self.collections[(dim, user, collection)]
107
130
 
108
131
  search_params = {
109
132
  "metric_type": "COSINE",
@@ -2,9 +2,32 @@
2
2
  from pymilvus import MilvusClient, CollectionSchema, FieldSchema, DataType
3
3
  import time
4
4
  import logging
5
+ import re
5
6
 
6
7
  logger = logging.getLogger(__name__)
7
8
 
9
+ def make_safe_collection_name(user, collection, dimension, prefix):
10
+ """
11
+ Create a safe Milvus collection name from user/collection parameters.
12
+ Milvus only allows letters, numbers, and underscores.
13
+ """
14
+ def sanitize(s):
15
+ # Replace non-alphanumeric characters (except underscore) with underscore
16
+ # Then collapse multiple underscores into single underscore
17
+ safe = re.sub(r'[^a-zA-Z0-9_]', '_', s)
18
+ safe = re.sub(r'_+', '_', safe)
19
+ # Remove leading/trailing underscores
20
+ safe = safe.strip('_')
21
+ # Ensure it's not empty
22
+ if not safe:
23
+ safe = 'default'
24
+ return safe
25
+
26
+ safe_user = sanitize(user)
27
+ safe_collection = sanitize(collection)
28
+
29
+ return f"{prefix}_{safe_user}_{safe_collection}_{dimension}"
30
+
8
31
  class EntityVectors:
9
32
 
10
33
  def __init__(self, uri="http://localhost:19530", prefix='entity'):
@@ -26,9 +49,9 @@ class EntityVectors:
26
49
  self.next_reload = time.time() + self.reload_time
27
50
  logger.debug(f"Reload at {self.next_reload}")
28
51
 
29
- def init_collection(self, dimension):
52
+ def init_collection(self, dimension, user, collection):
30
53
 
31
- collection_name = self.prefix + "_" + str(dimension)
54
+ collection_name = make_safe_collection_name(user, collection, dimension, self.prefix)
32
55
 
33
56
  pkey_field = FieldSchema(
34
57
  name="id",
@@ -75,14 +98,14 @@ class EntityVectors:
75
98
  index_params=index_params
76
99
  )
77
100
 
78
- self.collections[dimension] = collection_name
101
+ self.collections[(dimension, user, collection)] = collection_name
79
102
 
80
- def insert(self, embeds, entity):
103
+ def insert(self, embeds, entity, user, collection):
81
104
 
82
105
  dim = len(embeds)
83
106
 
84
- if dim not in self.collections:
85
- self.init_collection(dim)
107
+ if (dim, user, collection) not in self.collections:
108
+ self.init_collection(dim, user, collection)
86
109
 
87
110
  data = [
88
111
  {
@@ -92,18 +115,18 @@ class EntityVectors:
92
115
  ]
93
116
 
94
117
  self.client.insert(
95
- collection_name=self.collections[dim],
118
+ collection_name=self.collections[(dim, user, collection)],
96
119
  data=data
97
120
  )
98
121
 
99
- def search(self, embeds, fields=["entity"], limit=10):
122
+ def search(self, embeds, user, collection, fields=["entity"], limit=10):
100
123
 
101
124
  dim = len(embeds)
102
125
 
103
- if dim not in self.collections:
104
- self.init_collection(dim)
126
+ if (dim, user, collection) not in self.collections:
127
+ self.init_collection(dim, user, collection)
105
128
 
106
- coll = self.collections[dim]
129
+ coll = self.collections[(dim, user, collection)]
107
130
 
108
131
  search_params = {
109
132
  "metric_type": "COSINE",
@@ -0,0 +1 @@
1
+ __version__ = "1.3.19"
@@ -43,7 +43,12 @@ class Processor(DocumentEmbeddingsQueryService):
43
43
 
44
44
  for vec in msg.vectors:
45
45
 
46
- resp = self.vecstore.search(vec, limit=msg.limit)
46
+ resp = self.vecstore.search(
47
+ vec,
48
+ msg.user,
49
+ msg.collection,
50
+ limit=msg.limit
51
+ )
47
52
 
48
53
  for r in resp:
49
54
  chunk = r["entity"]["doc"]
@@ -47,6 +47,39 @@ class Processor(DocumentEmbeddingsQueryService):
47
47
  }
48
48
  )
49
49
 
50
+ self.last_index_name = None
51
+
52
+ def ensure_index_exists(self, index_name, dim):
53
+ """Ensure index exists, create if it doesn't"""
54
+ if index_name != self.last_index_name:
55
+ if not self.pinecone.has_index(index_name):
56
+ try:
57
+ self.pinecone.create_index(
58
+ name=index_name,
59
+ dimension=dim,
60
+ metric="cosine",
61
+ spec=ServerlessSpec(
62
+ cloud="aws",
63
+ region="us-east-1",
64
+ )
65
+ )
66
+ logger.info(f"Created index: {index_name}")
67
+
68
+ # Wait for index to be ready
69
+ import time
70
+ for i in range(0, 1000):
71
+ if self.pinecone.describe_index(index_name).status["ready"]:
72
+ break
73
+ time.sleep(1)
74
+
75
+ if not self.pinecone.describe_index(index_name).status["ready"]:
76
+ raise RuntimeError("Gave up waiting for index creation")
77
+
78
+ except Exception as e:
79
+ logger.error(f"Pinecone index creation failed: {e}")
80
+ raise e
81
+ self.last_index_name = index_name
82
+
50
83
  async def query_document_embeddings(self, msg):
51
84
 
52
85
  try:
@@ -65,6 +98,8 @@ class Processor(DocumentEmbeddingsQueryService):
65
98
  "d-" + msg.user + "-" + msg.collection + "-" + str(dim)
66
99
  )
67
100
 
101
+ self.ensure_index_exists(index_name, dim)
102
+
68
103
  index = self.pinecone.Index(index_name)
69
104
 
70
105
  results = index.query(
@@ -38,6 +38,24 @@ class Processor(DocumentEmbeddingsQueryService):
38
38
  )
39
39
 
40
40
  self.qdrant = QdrantClient(url=store_uri, api_key=api_key)
41
+ self.last_collection = None
42
+
43
+ def ensure_collection_exists(self, collection, dim):
44
+ """Ensure collection exists, create if it doesn't"""
45
+ if collection != self.last_collection:
46
+ if not self.qdrant.collection_exists(collection):
47
+ try:
48
+ self.qdrant.create_collection(
49
+ collection_name=collection,
50
+ vectors_config=VectorParams(
51
+ size=dim, distance=Distance.COSINE
52
+ ),
53
+ )
54
+ logger.info(f"Created collection: {collection}")
55
+ except Exception as e:
56
+ logger.error(f"Qdrant collection creation failed: {e}")
57
+ raise e
58
+ self.last_collection = collection
41
59
 
42
60
  async def query_document_embeddings(self, msg):
43
61
 
@@ -53,6 +71,8 @@ class Processor(DocumentEmbeddingsQueryService):
53
71
  str(dim)
54
72
  )
55
73
 
74
+ self.ensure_collection_exists(collection, dim)
75
+
56
76
  search_result = self.qdrant.query_points(
57
77
  collection_name=collection,
58
78
  query=vec,
@@ -50,7 +50,12 @@ class Processor(GraphEmbeddingsQueryService):
50
50
 
51
51
  for vec in msg.vectors:
52
52
 
53
- resp = self.vecstore.search(vec, limit=msg.limit * 2)
53
+ resp = self.vecstore.search(
54
+ vec,
55
+ msg.user,
56
+ msg.collection,
57
+ limit=msg.limit * 2
58
+ )
54
59
 
55
60
  for r in resp:
56
61
  ent = r["entity"]["entity"]
@@ -49,6 +49,39 @@ class Processor(GraphEmbeddingsQueryService):
49
49
  }
50
50
  )
51
51
 
52
+ self.last_index_name = None
53
+
54
+ def ensure_index_exists(self, index_name, dim):
55
+ """Ensure index exists, create if it doesn't"""
56
+ if index_name != self.last_index_name:
57
+ if not self.pinecone.has_index(index_name):
58
+ try:
59
+ self.pinecone.create_index(
60
+ name=index_name,
61
+ dimension=dim,
62
+ metric="cosine",
63
+ spec=ServerlessSpec(
64
+ cloud="aws",
65
+ region="us-east-1",
66
+ )
67
+ )
68
+ logger.info(f"Created index: {index_name}")
69
+
70
+ # Wait for index to be ready
71
+ import time
72
+ for i in range(0, 1000):
73
+ if self.pinecone.describe_index(index_name).status["ready"]:
74
+ break
75
+ time.sleep(1)
76
+
77
+ if not self.pinecone.describe_index(index_name).status["ready"]:
78
+ raise RuntimeError("Gave up waiting for index creation")
79
+
80
+ except Exception as e:
81
+ logger.error(f"Pinecone index creation failed: {e}")
82
+ raise e
83
+ self.last_index_name = index_name
84
+
52
85
  def create_value(self, ent):
53
86
  if ent.startswith("http://") or ent.startswith("https://"):
54
87
  return Value(value=ent, is_uri=True)
@@ -74,6 +107,8 @@ class Processor(GraphEmbeddingsQueryService):
74
107
  "t-" + msg.user + "-" + msg.collection + "-" + str(dim)
75
108
  )
76
109
 
110
+ self.ensure_index_exists(index_name, dim)
111
+
77
112
  index = self.pinecone.Index(index_name)
78
113
 
79
114
  # Heuristic hack, get (2*limit), so that we have more chance
@@ -38,6 +38,24 @@ class Processor(GraphEmbeddingsQueryService):
38
38
  )
39
39
 
40
40
  self.qdrant = QdrantClient(url=store_uri, api_key=api_key)
41
+ self.last_collection = None
42
+
43
+ def ensure_collection_exists(self, collection, dim):
44
+ """Ensure collection exists, create if it doesn't"""
45
+ if collection != self.last_collection:
46
+ if not self.qdrant.collection_exists(collection):
47
+ try:
48
+ self.qdrant.create_collection(
49
+ collection_name=collection,
50
+ vectors_config=VectorParams(
51
+ size=dim, distance=Distance.COSINE
52
+ ),
53
+ )
54
+ logger.info(f"Created collection: {collection}")
55
+ except Exception as e:
56
+ logger.error(f"Qdrant collection creation failed: {e}")
57
+ raise e
58
+ self.last_collection = collection
41
59
 
42
60
  def create_value(self, ent):
43
61
  if ent.startswith("http://") or ent.startswith("https://"):
@@ -60,6 +78,8 @@ class Processor(GraphEmbeddingsQueryService):
60
78
  str(dim)
61
79
  )
62
80
 
81
+ self.ensure_collection_exists(collection, dim)
82
+
63
83
  # Heuristic hack, get (2*limit), so that we have more chance
64
84
  # of getting (limit) entities
65
85
  search_result = self.qdrant.query_points(
@@ -33,7 +33,11 @@ class Processor(DocumentEmbeddingsStoreService):
33
33
  if chunk == "": continue
34
34
 
35
35
  for vec in emb.vectors:
36
- self.vecstore.insert(vec, chunk)
36
+ self.vecstore.insert(
37
+ vec, chunk,
38
+ message.metadata.user,
39
+ message.metadata.collection
40
+ )
37
41
 
38
42
  @staticmethod
39
43
  def add_args(parser):
@@ -29,7 +29,11 @@ class Processor(GraphEmbeddingsStoreService):
29
29
 
30
30
  if entity.entity.value != "" and entity.entity.value is not None:
31
31
  for vec in entity.vectors:
32
- self.vecstore.insert(vec, entity.entity.value)
32
+ self.vecstore.insert(
33
+ vec, entity.entity.value,
34
+ message.metadata.user,
35
+ message.metadata.collection
36
+ )
33
37
 
34
38
  @staticmethod
35
39
  def add_args(parser):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: trustgraph-flow
3
- Version: 1.3.17
3
+ Version: 1.3.19
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
@@ -40,7 +40,6 @@ trustgraph/direct/__init__.py
40
40
  trustgraph/direct/cassandra.py
41
41
  trustgraph/direct/milvus_doc_embeddings.py
42
42
  trustgraph/direct/milvus_graph_embeddings.py
43
- trustgraph/direct/milvus_object_embeddings.py
44
43
  trustgraph/embeddings/__init__.py
45
44
  trustgraph/embeddings/document_embeddings/__init__.py
46
45
  trustgraph/embeddings/document_embeddings/__main__.py
@@ -260,9 +259,6 @@ trustgraph/storage/knowledge/__init__.py
260
259
  trustgraph/storage/knowledge/__main__.py
261
260
  trustgraph/storage/knowledge/store.py
262
261
  trustgraph/storage/object_embeddings/__init__.py
263
- trustgraph/storage/object_embeddings/milvus/__init__.py
264
- trustgraph/storage/object_embeddings/milvus/__main__.py
265
- trustgraph/storage/object_embeddings/milvus/write.py
266
262
  trustgraph/storage/objects/__init__.py
267
263
  trustgraph/storage/objects/cassandra/__init__.py
268
264
  trustgraph/storage/objects/cassandra/__main__.py
@@ -35,7 +35,6 @@ metering = trustgraph.metering:run
35
35
  nlp-query = trustgraph.retrieval.nlp_query:run
36
36
  objects-query-cassandra = trustgraph.query.objects.cassandra:run
37
37
  objects-write-cassandra = trustgraph.storage.objects.cassandra:run
38
- oe-write-milvus = trustgraph.storage.object_embeddings.milvus:run
39
38
  pdf-decoder = trustgraph.decoding.pdf:run
40
39
  pdf-ocr-mistral = trustgraph.decoding.mistral_ocr:run
41
40
  prompt-template = trustgraph.prompt.template:run
@@ -1,157 +0,0 @@
1
-
2
- from pymilvus import MilvusClient, CollectionSchema, FieldSchema, DataType
3
- import time
4
- import logging
5
-
6
- logger = logging.getLogger(__name__)
7
-
8
- class ObjectVectors:
9
-
10
- def __init__(self, uri="http://localhost:19530", prefix='obj'):
11
-
12
- self.client = MilvusClient(uri=uri)
13
-
14
- # Strategy is to create collections per dimension. Probably only
15
- # going to be using 1 anyway, but that means we don't need to
16
- # hard-code the dimension anywhere, and no big deal if more than
17
- # one are created.
18
- self.collections = {}
19
-
20
- self.prefix = prefix
21
-
22
- # Time between reloads
23
- self.reload_time = 90
24
-
25
- # Next time to reload - this forces a reload at next window
26
- self.next_reload = time.time() + self.reload_time
27
- logger.debug(f"Reload at {self.next_reload}")
28
-
29
- def init_collection(self, dimension, name):
30
-
31
- collection_name = self.prefix + "_" + name + "_" + str(dimension)
32
-
33
- pkey_field = FieldSchema(
34
- name="id",
35
- dtype=DataType.INT64,
36
- is_primary=True,
37
- auto_id=True,
38
- )
39
-
40
- vec_field = FieldSchema(
41
- name="vector",
42
- dtype=DataType.FLOAT_VECTOR,
43
- dim=dimension,
44
- )
45
-
46
- name_field = FieldSchema(
47
- name="name",
48
- dtype=DataType.VARCHAR,
49
- max_length=65535,
50
- )
51
-
52
- key_name_field = FieldSchema(
53
- name="key_name",
54
- dtype=DataType.VARCHAR,
55
- max_length=65535,
56
- )
57
-
58
- key_field = FieldSchema(
59
- name="key",
60
- dtype=DataType.VARCHAR,
61
- max_length=65535,
62
- )
63
-
64
- schema = CollectionSchema(
65
- fields = [
66
- pkey_field, vec_field, name_field, key_name_field, key_field
67
- ],
68
- description = "Object embedding schema",
69
- )
70
-
71
- self.client.create_collection(
72
- collection_name=collection_name,
73
- schema=schema,
74
- metric_type="COSINE",
75
- )
76
-
77
- index_params = MilvusClient.prepare_index_params()
78
-
79
- index_params.add_index(
80
- field_name="vector",
81
- metric_type="COSINE",
82
- index_type="IVF_SQ8",
83
- index_name="vector_index",
84
- params={ "nlist": 128 }
85
- )
86
-
87
- self.client.create_index(
88
- collection_name=collection_name,
89
- index_params=index_params
90
- )
91
-
92
- self.collections[(dimension, name)] = collection_name
93
-
94
- def insert(self, embeds, name, key_name, key):
95
-
96
- dim = len(embeds)
97
-
98
- if (dim, name) not in self.collections:
99
- self.init_collection(dim, name)
100
-
101
- data = [
102
- {
103
- "vector": embeds,
104
- "name": name,
105
- "key_name": key_name,
106
- "key": key,
107
- }
108
- ]
109
-
110
- self.client.insert(
111
- collection_name=self.collections[(dim, name)],
112
- data=data
113
- )
114
-
115
- def search(self, embeds, name, fields=["key_name", "name"], limit=10):
116
-
117
- dim = len(embeds)
118
-
119
- if dim not in self.collections:
120
- self.init_collection(dim, name)
121
-
122
- coll = self.collections[(dim, name)]
123
-
124
- search_params = {
125
- "metric_type": "COSINE",
126
- "params": {
127
- "radius": 0.1,
128
- "range_filter": 0.8
129
- }
130
- }
131
-
132
- logger.debug("Loading...")
133
- self.client.load_collection(
134
- collection_name=coll,
135
- )
136
-
137
- logger.debug("Searching...")
138
-
139
- res = self.client.search(
140
- collection_name=coll,
141
- data=[embeds],
142
- limit=limit,
143
- output_fields=fields,
144
- search_params=search_params,
145
- )[0]
146
-
147
-
148
- # If reload time has passed, unload collection
149
- if time.time() > self.next_reload:
150
- logger.debug(f"Unloading, reload at {self.next_reload}")
151
- self.client.release_collection(
152
- collection_name=coll,
153
- )
154
- self.next_reload = time.time() + self.reload_time
155
-
156
- return res
157
-
@@ -1 +0,0 @@
1
- __version__ = "1.3.17"
@@ -1,61 +0,0 @@
1
-
2
- """
3
- Accepts entity/vector pairs and writes them to a Milvus store.
4
- """
5
-
6
- from .... schema import ObjectEmbeddings
7
- from .... schema import object_embeddings_store_queue
8
- from .... log_level import LogLevel
9
- from .... direct.milvus_object_embeddings import ObjectVectors
10
- from .... base import Consumer
11
-
12
- module = "oe-write"
13
-
14
- default_input_queue = object_embeddings_store_queue
15
- default_subscriber = module
16
- default_store_uri = 'http://localhost:19530'
17
-
18
- class Processor(Consumer):
19
-
20
- def __init__(self, **params):
21
-
22
- input_queue = params.get("input_queue", default_input_queue)
23
- subscriber = params.get("subscriber", default_subscriber)
24
- store_uri = params.get("store_uri", default_store_uri)
25
-
26
- super(Processor, self).__init__(
27
- **params | {
28
- "input_queue": input_queue,
29
- "subscriber": subscriber,
30
- "input_schema": ObjectEmbeddings,
31
- "store_uri": store_uri,
32
- }
33
- )
34
-
35
- self.vecstore = ObjectVectors(store_uri)
36
-
37
- async def handle(self, msg):
38
-
39
- v = msg.value()
40
-
41
- if v.id != "" and v.id is not None:
42
- for vec in v.vectors:
43
- self.vecstore.insert(vec, v.name, v.key_name, v.id)
44
-
45
- @staticmethod
46
- def add_args(parser):
47
-
48
- Consumer.add_args(
49
- parser, default_input_queue, default_subscriber,
50
- )
51
-
52
- parser.add_argument(
53
- '-t', '--store-uri',
54
- default=default_store_uri,
55
- help=f'Milvus store URI (default: {default_store_uri})'
56
- )
57
-
58
- def run():
59
-
60
- Processor.launch(module, __doc__)
61
-