isage-middleware 0.1.1__py3-none-any.whl → 0.1.3.1__py3-none-any.whl

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 (377) hide show
  1. isage_middleware-0.1.3.1.dist-info/METADATA +115 -0
  2. isage_middleware-0.1.3.1.dist-info/RECORD +288 -0
  3. sage/middleware/__init__.py +52 -79
  4. sage/middleware/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  5. sage/middleware/__pycache__/__init__.cpython-311.pyc +0 -0
  6. sage/middleware/__pycache__/_version.cpython-311.opt-2.pyc +0 -0
  7. sage/middleware/__pycache__/_version.cpython-311.pyc +0 -0
  8. sage/middleware/_version.py +38 -0
  9. sage/middleware/api/__init__.py +52 -18
  10. sage/middleware/api/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  11. sage/middleware/api/__pycache__/__init__.cpython-311.pyc +0 -0
  12. sage/middleware/api/__pycache__/graph_api.cpython-311.opt-2.pyc +0 -0
  13. sage/middleware/api/__pycache__/graph_api.cpython-311.pyc +0 -0
  14. sage/middleware/api/__pycache__/kv_api.cpython-311.opt-2.pyc +0 -0
  15. sage/middleware/api/__pycache__/kv_api.cpython-311.pyc +0 -0
  16. sage/middleware/api/__pycache__/memory_api.cpython-311.opt-2.pyc +0 -0
  17. sage/middleware/api/__pycache__/memory_api.cpython-311.pyc +0 -0
  18. sage/middleware/api/__pycache__/vdb_api.cpython-311.opt-2.pyc +0 -0
  19. sage/middleware/api/__pycache__/vdb_api.cpython-311.pyc +0 -0
  20. sage/middleware/components/enterprise/__init__.py +56 -0
  21. sage/middleware/components/enterprise/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  22. sage/middleware/components/enterprise/__pycache__/__init__.cpython-311.pyc +0 -0
  23. sage/middleware/components/neuromem/__init__.py +56 -0
  24. sage/middleware/components/neuromem/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  25. sage/middleware/components/neuromem/__pycache__/__init__.cpython-311.pyc +0 -0
  26. sage/middleware/components/neuromem/__pycache__/memory_manager.cpython-311.opt-2.pyc +0 -0
  27. sage/middleware/components/neuromem/__pycache__/memory_manager.cpython-311.pyc +0 -0
  28. sage/middleware/components/neuromem/__pycache__/memory_service.cpython-311.opt-2.pyc +0 -0
  29. sage/middleware/components/neuromem/__pycache__/memory_service.cpython-311.pyc +0 -0
  30. sage/middleware/components/neuromem/memory_collection/__init__.py +56 -0
  31. sage/middleware/components/neuromem/memory_collection/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  32. sage/middleware/components/neuromem/memory_collection/__pycache__/__init__.cpython-311.pyc +0 -0
  33. sage/middleware/components/neuromem/memory_collection/__pycache__/base_collection.cpython-311.opt-2.pyc +0 -0
  34. sage/middleware/components/neuromem/memory_collection/__pycache__/base_collection.cpython-311.pyc +0 -0
  35. sage/middleware/components/neuromem/memory_collection/__pycache__/graph_collection.cpython-311.opt-2.pyc +0 -0
  36. sage/middleware/components/neuromem/memory_collection/__pycache__/graph_collection.cpython-311.pyc +0 -0
  37. sage/middleware/components/neuromem/memory_collection/__pycache__/kv_collection.cpython-311.opt-2.pyc +0 -0
  38. sage/middleware/components/neuromem/memory_collection/__pycache__/kv_collection.cpython-311.pyc +0 -0
  39. sage/middleware/components/neuromem/memory_collection/__pycache__/vdb_collection.cpython-311.opt-2.pyc +0 -0
  40. sage/middleware/components/neuromem/memory_collection/__pycache__/vdb_collection.cpython-311.pyc +0 -0
  41. sage/middleware/components/neuromem/memory_collection/base_collection.py +167 -0
  42. sage/middleware/components/neuromem/memory_collection/graph_collection.py +11 -0
  43. sage/middleware/components/neuromem/memory_collection/kv_collection.py +709 -0
  44. sage/middleware/components/neuromem/memory_collection/vdb_collection.py +922 -0
  45. sage/middleware/components/neuromem/memory_manager.py +401 -0
  46. sage/middleware/components/neuromem/memory_service.py +324 -0
  47. sage/middleware/components/neuromem/micro_service/__init__.py +56 -0
  48. sage/middleware/components/neuromem/micro_service/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  49. sage/middleware/components/neuromem/micro_service/__pycache__/__init__.cpython-311.pyc +0 -0
  50. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb.cpython-311.opt-2.pyc +0 -0
  51. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb.cpython-311.pyc +0 -0
  52. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb_service.cpython-311.opt-2.pyc +0 -0
  53. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb_service.cpython-311.pyc +0 -0
  54. sage/middleware/components/neuromem/micro_service/neuromem_vdb.py +198 -0
  55. sage/middleware/components/neuromem/micro_service/neuromem_vdb_service.py +118 -0
  56. sage/middleware/components/neuromem/search_engine/__init__.py +56 -0
  57. sage/middleware/components/neuromem/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  58. sage/middleware/components/neuromem/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  59. sage/middleware/components/neuromem/search_engine/graph_index/__init__.py +56 -0
  60. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  61. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/__init__.cpython-311.pyc +0 -0
  62. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/base_graph_index.cpython-311.opt-2.pyc +0 -0
  63. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/base_graph_index.cpython-311.pyc +0 -0
  64. sage/middleware/components/neuromem/search_engine/graph_index/base_graph_index.py +40 -0
  65. sage/middleware/components/neuromem/search_engine/hybird_index/__init__.py +56 -0
  66. sage/middleware/components/neuromem/search_engine/hybird_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  67. sage/middleware/components/neuromem/search_engine/hybird_index/__pycache__/__init__.cpython-311.pyc +0 -0
  68. sage/middleware/components/neuromem/search_engine/kv_index/__init__.py +56 -0
  69. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  70. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/__init__.cpython-311.pyc +0 -0
  71. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/base_kv_index.cpython-311.opt-2.pyc +0 -0
  72. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/base_kv_index.cpython-311.pyc +0 -0
  73. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/bm25s_index.cpython-311.opt-2.pyc +0 -0
  74. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/bm25s_index.cpython-311.pyc +0 -0
  75. sage/middleware/components/neuromem/search_engine/kv_index/base_kv_index.py +76 -0
  76. sage/middleware/components/neuromem/search_engine/kv_index/bm25s_index.py +320 -0
  77. sage/middleware/components/neuromem/search_engine/vdb_index/__init__.py +56 -0
  78. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  79. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/__init__.cpython-311.pyc +0 -0
  80. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/base_vdb_index.cpython-311.opt-2.pyc +0 -0
  81. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/base_vdb_index.cpython-311.pyc +0 -0
  82. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/faiss_index.cpython-311.opt-2.pyc +0 -0
  83. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/faiss_index.cpython-311.pyc +0 -0
  84. sage/middleware/components/neuromem/search_engine/vdb_index/base_vdb_index.py +53 -0
  85. sage/middleware/components/neuromem/search_engine/vdb_index/faiss_index.py +700 -0
  86. sage/middleware/components/neuromem/storage_engine/__init__.py +56 -0
  87. sage/middleware/components/neuromem/storage_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  88. sage/middleware/components/neuromem/storage_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  89. sage/middleware/components/neuromem/storage_engine/__pycache__/metadata_storage.cpython-311.opt-2.pyc +0 -0
  90. sage/middleware/components/neuromem/storage_engine/__pycache__/metadata_storage.cpython-311.pyc +0 -0
  91. sage/middleware/components/neuromem/storage_engine/__pycache__/text_storage.cpython-311.opt-2.pyc +0 -0
  92. sage/middleware/components/neuromem/storage_engine/__pycache__/text_storage.cpython-311.pyc +0 -0
  93. sage/middleware/components/neuromem/storage_engine/__pycache__/vector_storage.cpython-311.opt-2.pyc +0 -0
  94. sage/middleware/components/neuromem/storage_engine/__pycache__/vector_storage.cpython-311.pyc +0 -0
  95. sage/middleware/components/neuromem/storage_engine/kv_backend/__init__.py +56 -0
  96. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  97. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/__init__.cpython-311.pyc +0 -0
  98. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/base_kv_backend.cpython-311.opt-2.pyc +0 -0
  99. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/base_kv_backend.cpython-311.pyc +0 -0
  100. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/dict_kv_backend.cpython-311.opt-2.pyc +0 -0
  101. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/dict_kv_backend.cpython-311.pyc +0 -0
  102. sage/middleware/components/neuromem/storage_engine/kv_backend/base_kv_backend.py +65 -0
  103. sage/middleware/components/neuromem/storage_engine/kv_backend/dict_kv_backend.py +54 -0
  104. sage/middleware/components/neuromem/storage_engine/metadata_storage.py +260 -0
  105. sage/middleware/components/neuromem/storage_engine/text_storage.py +106 -0
  106. sage/middleware/components/neuromem/storage_engine/vector_storage.py +85 -0
  107. sage/middleware/components/neuromem/tests/__init__.py +56 -0
  108. sage/middleware/components/neuromem/tests/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  109. sage/middleware/components/neuromem/tests/__pycache__/__init__.cpython-311.pyc +0 -0
  110. sage/middleware/components/neuromem/tests/__pycache__/test_memory_service.cpython-311.opt-2.pyc +0 -0
  111. sage/middleware/components/neuromem/tests/__pycache__/test_memory_service.cpython-311.pyc +0 -0
  112. sage/middleware/components/neuromem/tests/core_test/__init__.py +56 -0
  113. sage/middleware/components/neuromem/tests/core_test/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  114. sage/middleware/components/neuromem/tests/core_test/__pycache__/__init__.cpython-311.pyc +0 -0
  115. sage/middleware/components/neuromem/tests/core_test/collection_test/__init__.py +56 -0
  116. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  117. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/__init__.cpython-311.pyc +0 -0
  118. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/kv_collection_test.cpython-311.opt-2.pyc +0 -0
  119. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/kv_collection_test.cpython-311.pyc +0 -0
  120. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/vdb_collection_test.cpython-311.opt-2.pyc +0 -0
  121. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/vdb_collection_test.cpython-311.pyc +0 -0
  122. sage/middleware/components/neuromem/tests/core_test/collection_test/kv_collection_test.py +60 -0
  123. sage/middleware/components/neuromem/tests/core_test/collection_test/vdb_collection_test.py +88 -0
  124. sage/middleware/components/neuromem/tests/core_test/manager_test.py +154 -0
  125. sage/middleware/components/neuromem/tests/test_memory_service.py +293 -0
  126. sage/middleware/components/neuromem/utils/__init__.py +56 -0
  127. sage/middleware/components/neuromem/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  128. sage/middleware/components/neuromem/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  129. sage/middleware/components/neuromem/utils/__pycache__/path_utils.cpython-311.opt-2.pyc +0 -0
  130. sage/middleware/components/neuromem/utils/__pycache__/path_utils.cpython-311.pyc +0 -0
  131. sage/middleware/components/neuromem/utils/path_utils.py +25 -0
  132. sage/middleware/components/sage_db/__init__.py +56 -0
  133. sage/middleware/components/sage_db/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  134. sage/middleware/components/sage_db/__pycache__/__init__.cpython-311.pyc +0 -0
  135. sage/middleware/components/sage_db/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
  136. sage/middleware/components/sage_db/__pycache__/sage_db.cpython-311.pyc +0 -0
  137. sage/middleware/components/sage_db/python/__init__.py +56 -0
  138. sage/middleware/components/sage_db/python/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  139. sage/middleware/components/sage_db/python/__pycache__/__init__.cpython-311.pyc +0 -0
  140. sage/middleware/components/sage_db/python/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
  141. sage/middleware/components/sage_db/python/__pycache__/sage_db.cpython-311.pyc +0 -0
  142. sage/middleware/{enterprise → components}/sage_db/sage_db.py +3 -211
  143. sage/middleware/components/sage_db/tests/__pycache__/test_python.cpython-311.opt-2.pyc +0 -0
  144. sage/middleware/components/sage_db/tests/__pycache__/test_python.cpython-311.pyc +0 -0
  145. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-311.opt-2.pyc +0 -0
  146. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-311.pyc +0 -0
  147. sage/middleware/examples/__pycache__/microservices_demo.cpython-311.opt-2.pyc +0 -0
  148. sage/middleware/examples/__pycache__/microservices_demo.cpython-311.pyc +0 -0
  149. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-311.opt-2.pyc +0 -0
  150. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-311.pyc +0 -0
  151. sage/middleware/examples/api_usage_tutorial.py +3 -3
  152. sage/middleware/examples/dag_microservices_demo.py +7 -8
  153. sage/middleware/examples/microservices_integration_demo.py +8 -11
  154. sage/middleware/examples/microservices_registration_demo.py +8 -12
  155. sage/middleware/services/__init__.py +56 -0
  156. sage/middleware/services/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  157. sage/middleware/services/__pycache__/__init__.cpython-311.pyc +0 -0
  158. sage/middleware/services/graph/__init__.py +52 -4
  159. sage/middleware/services/graph/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  160. sage/middleware/services/graph/__pycache__/__init__.cpython-311.pyc +0 -0
  161. sage/middleware/services/graph/__pycache__/graph_index.cpython-311.opt-2.pyc +0 -0
  162. sage/middleware/services/graph/__pycache__/graph_index.cpython-311.pyc +0 -0
  163. sage/middleware/services/graph/__pycache__/graph_service.cpython-311.opt-2.pyc +0 -0
  164. sage/middleware/services/graph/__pycache__/graph_service.cpython-311.pyc +0 -0
  165. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-311.opt-2.pyc +0 -0
  166. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-311.pyc +0 -0
  167. sage/middleware/services/graph/examples/graph_demo.py +3 -2
  168. sage/middleware/services/graph/graph_service.py +68 -0
  169. sage/middleware/services/graph/search_engine/__init__.py +56 -0
  170. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  171. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  172. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-311.opt-2.pyc +0 -0
  173. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-311.pyc +0 -0
  174. sage/middleware/services/kv/__init__.py +52 -4
  175. sage/middleware/services/kv/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  176. sage/middleware/services/kv/__pycache__/__init__.cpython-311.pyc +0 -0
  177. sage/middleware/services/kv/__pycache__/kv_service.cpython-311.opt-2.pyc +0 -0
  178. sage/middleware/services/kv/__pycache__/kv_service.cpython-311.pyc +0 -0
  179. sage/middleware/services/kv/examples/__pycache__/{kv_demo.cpython-313.opt-2.pyc → kv_demo.cpython-311.opt-2.pyc} +0 -0
  180. sage/middleware/services/kv/examples/__pycache__/{kv_demo.cpython-313.pyc → kv_demo.cpython-311.pyc} +0 -0
  181. sage/middleware/services/kv/examples/kv_demo.py +1 -1
  182. sage/middleware/services/kv/search_engine/__init__.py +56 -0
  183. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  184. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  185. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-311.opt-2.pyc +0 -0
  186. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-311.pyc +0 -0
  187. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-311.opt-2.pyc +0 -0
  188. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-311.pyc +0 -0
  189. sage/middleware/services/memory/__init__.py +52 -8
  190. sage/middleware/services/memory/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  191. sage/middleware/services/memory/__pycache__/__init__.cpython-311.pyc +0 -0
  192. sage/middleware/services/memory/__pycache__/memory_service.cpython-311.opt-2.pyc +0 -0
  193. sage/middleware/services/memory/__pycache__/memory_service.cpython-311.pyc +0 -0
  194. sage/middleware/services/memory/examples/__pycache__/{memory_demo.cpython-313.opt-2.pyc → memory_demo.cpython-311.opt-2.pyc} +0 -0
  195. sage/middleware/services/memory/examples/__pycache__/{memory_demo.cpython-313.pyc → memory_demo.cpython-311.pyc} +0 -0
  196. sage/middleware/services/memory/examples/dag_microservices_demo.py +8 -9
  197. sage/middleware/services/memory/examples/memory_demo.py +4 -4
  198. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-311.opt-2.pyc +0 -0
  199. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-311.pyc +0 -0
  200. sage/middleware/services/memory/memory_service.py +14 -11
  201. sage/middleware/services/memory/utils/__init__.py +56 -0
  202. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  203. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  204. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-311.opt-2.pyc +0 -0
  205. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-311.pyc +0 -0
  206. sage/middleware/services/vdb/__init__.py +52 -4
  207. sage/middleware/services/vdb/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  208. sage/middleware/services/vdb/__pycache__/__init__.cpython-311.pyc +0 -0
  209. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-311.opt-2.pyc +0 -0
  210. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-311.pyc +0 -0
  211. sage/middleware/services/vdb/examples/__pycache__/{vdb_demo.cpython-313.opt-2.pyc → vdb_demo.cpython-311.opt-2.pyc} +0 -0
  212. sage/middleware/services/vdb/examples/__pycache__/{vdb_demo.cpython-313.pyc → vdb_demo.cpython-311.pyc} +0 -0
  213. sage/middleware/services/vdb/examples/vdb_demo.py +2 -2
  214. sage/middleware/services/vdb/search_engine/__init__.py +56 -0
  215. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  216. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  217. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-311.opt-2.pyc +0 -0
  218. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-311.pyc +0 -0
  219. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-311.opt-2.pyc +0 -0
  220. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-311.pyc +0 -0
  221. sage/middleware/services/vdb/vdb_service.py +44 -41
  222. sage/middleware/utils/__init__.py +53 -2
  223. sage/middleware/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  224. sage/middleware/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  225. sage/middleware/utils/embedding/__init__.py +52 -31
  226. sage/middleware/utils/embedding/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  227. sage/middleware/utils/embedding/__pycache__/__init__.cpython-311.pyc +0 -0
  228. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-311.opt-2.pyc +0 -0
  229. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-311.pyc +0 -0
  230. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-311.opt-2.pyc +0 -0
  231. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-311.pyc +0 -0
  232. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-311.opt-2.pyc +0 -0
  233. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-311.pyc +0 -0
  234. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-311.opt-2.pyc +0 -0
  235. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-311.pyc +0 -0
  236. sage/middleware/utils/embedding/__pycache__/hf.cpython-311.opt-2.pyc +0 -0
  237. sage/middleware/utils/embedding/__pycache__/hf.cpython-311.pyc +0 -0
  238. sage/middleware/utils/embedding/__pycache__/instructor.cpython-311.opt-2.pyc +0 -0
  239. sage/middleware/utils/embedding/__pycache__/instructor.cpython-311.pyc +0 -0
  240. sage/middleware/utils/embedding/__pycache__/jina.cpython-311.opt-2.pyc +0 -0
  241. sage/middleware/utils/embedding/__pycache__/jina.cpython-311.pyc +0 -0
  242. sage/middleware/utils/embedding/__pycache__/lollms.cpython-311.opt-2.pyc +0 -0
  243. sage/middleware/utils/embedding/__pycache__/lollms.cpython-311.pyc +0 -0
  244. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-311.opt-2.pyc +0 -0
  245. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-311.pyc +0 -0
  246. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-311.opt-2.pyc +0 -0
  247. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-311.pyc +0 -0
  248. sage/middleware/utils/embedding/__pycache__/ollama.cpython-311.opt-2.pyc +0 -0
  249. sage/middleware/utils/embedding/__pycache__/ollama.cpython-311.pyc +0 -0
  250. sage/middleware/utils/embedding/__pycache__/openai.cpython-311.opt-2.pyc +0 -0
  251. sage/middleware/utils/embedding/__pycache__/openai.cpython-311.pyc +0 -0
  252. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-311.opt-2.pyc +0 -0
  253. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-311.pyc +0 -0
  254. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-311.opt-2.pyc +0 -0
  255. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-311.pyc +0 -0
  256. isage_middleware-0.1.1.dist-info/METADATA +0 -424
  257. isage_middleware-0.1.1.dist-info/RECORD +0 -182
  258. sage/__init__.py +0 -2
  259. sage/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  260. sage/__pycache__/__init__.cpython-313.pyc +0 -0
  261. sage/middleware/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  262. sage/middleware/__pycache__/__init__.cpython-313.pyc +0 -0
  263. sage/middleware/api/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  264. sage/middleware/api/__pycache__/__init__.cpython-313.pyc +0 -0
  265. sage/middleware/api/__pycache__/graph_api.cpython-313.opt-2.pyc +0 -0
  266. sage/middleware/api/__pycache__/graph_api.cpython-313.pyc +0 -0
  267. sage/middleware/api/__pycache__/kv_api.cpython-313.opt-2.pyc +0 -0
  268. sage/middleware/api/__pycache__/kv_api.cpython-313.pyc +0 -0
  269. sage/middleware/api/__pycache__/memory_api.cpython-313.opt-2.pyc +0 -0
  270. sage/middleware/api/__pycache__/memory_api.cpython-313.pyc +0 -0
  271. sage/middleware/api/__pycache__/vdb_api.cpython-313.opt-2.pyc +0 -0
  272. sage/middleware/api/__pycache__/vdb_api.cpython-313.pyc +0 -0
  273. sage/middleware/enterprise/__init__.py +0 -75
  274. sage/middleware/enterprise/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  275. sage/middleware/enterprise/__pycache__/__init__.cpython-313.pyc +0 -0
  276. sage/middleware/enterprise/sage_db/__init__.py +0 -132
  277. sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  278. sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-313.pyc +0 -0
  279. sage/middleware/enterprise/sage_db/__pycache__/sage_db.cpython-313.opt-2.pyc +0 -0
  280. sage/middleware/enterprise/sage_db/__pycache__/sage_db.cpython-313.pyc +0 -0
  281. sage/middleware/enterprise/sage_db/python/__init__.py +0 -7
  282. sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  283. sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-313.pyc +0 -0
  284. sage/middleware/enterprise/sage_db/python/__pycache__/sage_db.cpython-313.opt-2.pyc +0 -0
  285. sage/middleware/enterprise/sage_db/python/__pycache__/sage_db.cpython-313.pyc +0 -0
  286. sage/middleware/enterprise/sage_db/tests/__pycache__/test_python.cpython-313.opt-2.pyc +0 -0
  287. sage/middleware/enterprise/sage_db/tests/__pycache__/test_python.cpython-313.pyc +0 -0
  288. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-313.opt-2.pyc +0 -0
  289. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-313.pyc +0 -0
  290. sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-313.opt-2.pyc +0 -0
  291. sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-313.pyc +0 -0
  292. sage/middleware/examples/__pycache__/microservices_demo.cpython-313.opt-2.pyc +0 -0
  293. sage/middleware/examples/__pycache__/microservices_demo.cpython-313.pyc +0 -0
  294. sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-313.opt-2.pyc +0 -0
  295. sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-313.pyc +0 -0
  296. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-313.opt-2.pyc +0 -0
  297. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-313.pyc +0 -0
  298. sage/middleware/services/graph/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  299. sage/middleware/services/graph/__pycache__/__init__.cpython-313.pyc +0 -0
  300. sage/middleware/services/graph/__pycache__/graph_index.cpython-313.opt-2.pyc +0 -0
  301. sage/middleware/services/graph/__pycache__/graph_index.cpython-313.pyc +0 -0
  302. sage/middleware/services/graph/__pycache__/graph_service.cpython-313.opt-2.pyc +0 -0
  303. sage/middleware/services/graph/__pycache__/graph_service.cpython-313.pyc +0 -0
  304. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-313.opt-2.pyc +0 -0
  305. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-313.pyc +0 -0
  306. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  307. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-313.pyc +0 -0
  308. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-313.opt-2.pyc +0 -0
  309. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-313.pyc +0 -0
  310. sage/middleware/services/kv/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  311. sage/middleware/services/kv/__pycache__/__init__.cpython-313.pyc +0 -0
  312. sage/middleware/services/kv/__pycache__/kv_service.cpython-313.opt-2.pyc +0 -0
  313. sage/middleware/services/kv/__pycache__/kv_service.cpython-313.pyc +0 -0
  314. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  315. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-313.pyc +0 -0
  316. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-313.opt-2.pyc +0 -0
  317. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-313.pyc +0 -0
  318. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-313.opt-2.pyc +0 -0
  319. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-313.pyc +0 -0
  320. sage/middleware/services/memory/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  321. sage/middleware/services/memory/__pycache__/__init__.cpython-313.pyc +0 -0
  322. sage/middleware/services/memory/__pycache__/memory_service.cpython-313.opt-2.pyc +0 -0
  323. sage/middleware/services/memory/__pycache__/memory_service.cpython-313.pyc +0 -0
  324. sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-313.opt-2.pyc +0 -0
  325. sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-313.pyc +0 -0
  326. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-313.opt-2.pyc +0 -0
  327. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-313.pyc +0 -0
  328. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  329. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-313.pyc +0 -0
  330. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-313.opt-2.pyc +0 -0
  331. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-313.pyc +0 -0
  332. sage/middleware/services/vdb/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  333. sage/middleware/services/vdb/__pycache__/__init__.cpython-313.pyc +0 -0
  334. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-313.opt-2.pyc +0 -0
  335. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-313.pyc +0 -0
  336. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  337. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-313.pyc +0 -0
  338. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-313.opt-2.pyc +0 -0
  339. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-313.pyc +0 -0
  340. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-313.opt-2.pyc +0 -0
  341. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-313.pyc +0 -0
  342. sage/middleware/utils/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  343. sage/middleware/utils/__pycache__/__init__.cpython-313.pyc +0 -0
  344. sage/middleware/utils/embedding/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  345. sage/middleware/utils/embedding/__pycache__/__init__.cpython-313.pyc +0 -0
  346. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-313.opt-2.pyc +0 -0
  347. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-313.pyc +0 -0
  348. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-313.opt-2.pyc +0 -0
  349. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-313.pyc +0 -0
  350. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-313.opt-2.pyc +0 -0
  351. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-313.pyc +0 -0
  352. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-313.opt-2.pyc +0 -0
  353. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-313.pyc +0 -0
  354. sage/middleware/utils/embedding/__pycache__/hf.cpython-313.opt-2.pyc +0 -0
  355. sage/middleware/utils/embedding/__pycache__/hf.cpython-313.pyc +0 -0
  356. sage/middleware/utils/embedding/__pycache__/instructor.cpython-313.opt-2.pyc +0 -0
  357. sage/middleware/utils/embedding/__pycache__/instructor.cpython-313.pyc +0 -0
  358. sage/middleware/utils/embedding/__pycache__/jina.cpython-313.opt-2.pyc +0 -0
  359. sage/middleware/utils/embedding/__pycache__/jina.cpython-313.pyc +0 -0
  360. sage/middleware/utils/embedding/__pycache__/lollms.cpython-313.opt-2.pyc +0 -0
  361. sage/middleware/utils/embedding/__pycache__/lollms.cpython-313.pyc +0 -0
  362. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-313.opt-2.pyc +0 -0
  363. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-313.pyc +0 -0
  364. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-313.opt-2.pyc +0 -0
  365. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-313.pyc +0 -0
  366. sage/middleware/utils/embedding/__pycache__/ollama.cpython-313.opt-2.pyc +0 -0
  367. sage/middleware/utils/embedding/__pycache__/ollama.cpython-313.pyc +0 -0
  368. sage/middleware/utils/embedding/__pycache__/openai.cpython-313.opt-2.pyc +0 -0
  369. sage/middleware/utils/embedding/__pycache__/openai.cpython-313.pyc +0 -0
  370. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-313.opt-2.pyc +0 -0
  371. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-313.pyc +0 -0
  372. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-313.opt-2.pyc +0 -0
  373. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-313.pyc +0 -0
  374. {isage_middleware-0.1.1.dist-info → isage_middleware-0.1.3.1.dist-info}/WHEEL +0 -0
  375. {isage_middleware-0.1.1.dist-info → isage_middleware-0.1.3.1.dist-info}/top_level.txt +0 -0
  376. /sage/middleware/{enterprise → components}/sage_db/python/sage_db.py +0 -0
  377. /sage/middleware/{enterprise → components}/sage_db/tests/test_python.py +0 -0
@@ -1,218 +1,10 @@
1
1
  """
2
- SAGE DB - 高性能向量数据库
2
+ SAGE DB - High-performance vector database with FAISS backend
3
3
 
4
- 直接导出 C++ 扩展中的类和函数
4
+ This module provides a Python interface to the SAGE DB vector database,
5
+ which supports efficient similarity search with metadata filtering.
5
6
  """
6
7
 
7
- # 直接从 C++ 扩展导入所有必要的类
8
- try:
9
- from ._sage_db import (
10
- SageDB,
11
- DatabaseConfig,
12
- IndexType,
13
- DistanceMetric,
14
- QueryResult,
15
- SearchParams,
16
- SageDBException,
17
- create_database,
18
- index_type_to_string,
19
- string_to_index_type,
20
- distance_metric_to_string,
21
- string_to_distance_metric
22
- )
23
- print("✓ SAGE DB C++ extension loaded successfully")
24
- except ImportError as e:
25
- raise ImportError(f"Failed to import SAGE DB C++ extension: {e}")
26
-
27
- # 导出所有API
28
- __all__ = [
29
- 'SageDB',
30
- 'DatabaseConfig',
31
- 'IndexType',
32
- 'DistanceMetric',
33
- 'QueryResult',
34
- 'SearchParams',
35
- 'SageDBException',
36
- 'create_database',
37
- 'index_type_to_string',
38
- 'string_to_index_type',
39
- 'distance_metric_to_string',
40
- 'string_to_distance_metric'
41
- ]
42
-
43
- import numpy as np
44
- from typing import List, Dict, Any, Optional, Callable, Tuple, Union
45
-
46
- # 尝试导入C++扩展
47
- try:
48
- from . import _sage_db
49
- _cpp_available = True
50
- except ImportError:
51
- try:
52
- import _sage_db
53
- _cpp_available = True
54
- except ImportError:
55
- _cpp_available = False
56
- raise ImportError("SAGE DB C++ extension not available")
57
-
58
- # 重新导出C++类和枚举
59
- IndexType = _sage_db.IndexType
60
- DistanceMetric = _sage_db.DistanceMetric
61
- QueryResult = _sage_db.QueryResult
62
- SearchParams = _sage_db.SearchParams
63
- DatabaseConfig = _sage_db.DatabaseConfig
64
- SageDBException = _sage_db.SageDBException
65
-
66
- class SageDB:
67
- """
68
- High-performance vector database with FAISS backend.
69
-
70
- Supports efficient similarity search, metadata filtering, and hybrid search.
71
- """
72
-
73
- def __init__(self, dimension: int,
74
- index_type: IndexType = IndexType.AUTO,
75
- metric: DistanceMetric = DistanceMetric.L2):
76
- """
77
- Initialize a new SageDB instance.
78
-
79
- Args:
80
- dimension: Vector dimension
81
- index_type: Index type for similarity search
82
- metric: Distance metric
83
- """
84
- self._db = _sage_db.create_database(dimension, index_type, metric)
85
-
86
- @classmethod
87
- def from_config(cls, config: DatabaseConfig):
88
- """Create SageDB from configuration object."""
89
- instance = cls.__new__(cls)
90
- instance._db = _sage_db.create_database(config)
91
- return instance
92
-
93
- def add(self, vector: Union[List[float], np.ndarray],
94
- metadata: Optional[Dict[str, str]] = None) -> int:
95
- """Add a single vector with optional metadata."""
96
- if isinstance(vector, np.ndarray):
97
- vector = vector.tolist()
98
- return self._db.add(vector, metadata or {})
99
-
100
- def add_batch(self, vectors: Union[List[List[float]], np.ndarray],
101
- metadata: Optional[List[Dict[str, str]]] = None) -> List[int]:
102
- """Add multiple vectors with optional metadata."""
103
- if isinstance(vectors, np.ndarray):
104
- if len(vectors.shape) != 2:
105
- raise ValueError("Vectors array must be 2-dimensional")
106
- return _sage_db.add_numpy(self._db, vectors, metadata or [])
107
- else:
108
- return self._db.add_batch(vectors, metadata or [])
109
-
110
- def search(self, query: Union[List[float], np.ndarray],
111
- k: int = 10, include_metadata: bool = True) -> List[QueryResult]:
112
- """Search for similar vectors."""
113
- if isinstance(query, np.ndarray):
114
- return _sage_db.search_numpy(self._db, query, SearchParams(k))
115
- return self._db.search(query, k, include_metadata)
116
-
117
- def search_with_params(self, query: Union[List[float], np.ndarray],
118
- params: SearchParams) -> List[QueryResult]:
119
- """Search with custom parameters."""
120
- if isinstance(query, np.ndarray):
121
- return _sage_db.search_numpy(self._db, query, params)
122
- return self._db.search(query, params)
123
-
124
- def filtered_search(self, query: Union[List[float], np.ndarray],
125
- params: SearchParams,
126
- filter_fn: Callable[[Dict[str, str]], bool]) -> List[QueryResult]:
127
- """Search with metadata filtering."""
128
- if isinstance(query, np.ndarray):
129
- query = query.tolist()
130
- return self._db.filtered_search(query, params, filter_fn)
131
-
132
- def remove(self, vector_id: int) -> bool:
133
- """Remove a vector by ID."""
134
- return self._db.remove(vector_id)
135
-
136
- def update(self, vector_id: int, vector: Union[List[float], np.ndarray],
137
- metadata: Optional[Dict[str, str]] = None) -> bool:
138
- """Update a vector and its metadata."""
139
- if isinstance(vector, np.ndarray):
140
- vector = vector.tolist()
141
- return self._db.update(vector_id, vector, metadata or {})
142
-
143
- def build_index(self):
144
- """Build the search index."""
145
- self._db.build_index()
146
-
147
- def train_index(self, training_data: Optional[List[List[float]]] = None):
148
- """Train the index with training data."""
149
- self._db.train_index(training_data or [])
150
-
151
- def is_trained(self) -> bool:
152
- """Check if the index is trained."""
153
- return self._db.is_trained()
154
-
155
- def set_metadata(self, vector_id: int, metadata: Dict[str, str]) -> bool:
156
- """Set metadata for a vector."""
157
- return self._db.set_metadata(vector_id, metadata)
158
-
159
- def get_metadata(self, vector_id: int) -> Optional[Dict[str, str]]:
160
- """Get metadata for a vector."""
161
- result = self._db.get_metadata(vector_id)
162
- return result if result is not None else None
163
-
164
- def find_by_metadata(self, key: str, value: str) -> List[int]:
165
- """Find vectors by metadata key-value pair."""
166
- return self._db.find_by_metadata(key, value)
167
-
168
- def save(self, filepath: str):
169
- """Save database to file."""
170
- self._db.save(filepath)
171
-
172
- def load(self, filepath: str):
173
- """Load database from file."""
174
- self._db.load(filepath)
175
-
176
- def size(self) -> int:
177
- """Get number of vectors in database."""
178
- return self._db.size()
179
-
180
- def dimension(self) -> int:
181
- """Get vector dimension."""
182
- return self._db.dimension()
183
-
184
- def index_type(self) -> IndexType:
185
- """Get index type."""
186
- return self._db.index_type()
187
-
188
- def config(self) -> DatabaseConfig:
189
- """Get database configuration."""
190
- return self._db.config()
191
-
192
- # 高级功能访问
193
- def query_engine(self):
194
- """Get query engine for advanced search operations."""
195
- return self._db.query_engine()
196
-
197
- def vector_store(self):
198
- """Get vector store for low-level operations."""
199
- return self._db.vector_store()
200
-
201
- def metadata_store(self):
202
- """Get metadata store for metadata operations."""
203
- return self._db.metadata_store()
204
-
205
- # 导出的API
206
- __all__ = [
207
- 'SageDB',
208
- 'IndexType',
209
- 'DistanceMetric',
210
- 'QueryResult',
211
- 'SearchParams',
212
- 'DatabaseConfig',
213
- 'SageDBException'
214
- ]
215
-
216
8
  import numpy as np
217
9
  from typing import List, Dict, Any, Optional, Callable, Tuple, Union
218
10
  try:
@@ -10,10 +10,10 @@ from typing import List, Dict, Any
10
10
  from sage.middleware.api import KVServiceAPI, VDBServiceAPI, MemoryServiceAPI, GraphServiceAPI
11
11
 
12
12
  # 导入具体服务实现和工厂函数
13
- from sage.middleware import (
13
+ from sage.middleware.services import (
14
14
  KVService, VDBService, MemoryService, GraphService,
15
- create_kv_service_factory, create_vdb_service_factory,
16
- create_memory_service_factory, create_graph_service_factory
15
+ create_kv_service_factory, create_vdb_service_factory,
16
+ create_memory_service_factory, create_graph_service_factory,
17
17
  )
18
18
  from sage.core.api.local_environment import LocalEnvironment
19
19
 
@@ -12,8 +12,8 @@ from sage.core.api.local_environment import LocalEnvironment
12
12
  from sage.middleware.services import (
13
13
  MemoryService,
14
14
  create_kv_service_factory,
15
- create_vdb_service_factory,
16
- create_memory_service_factory
15
+ create_vdb_service_factory,
16
+ create_memory_service_factory,
17
17
  )
18
18
 
19
19
 
@@ -35,16 +35,15 @@ class SampleApplication:
35
35
  max_size=1000,
36
36
  ttl_seconds=3600 # 1小时过期
37
37
  )
38
- self.env.register_service("kv_service", kv_factory.service_class, kv_factory)
38
+ self.env.register_service_factory("kv_service", kv_factory)
39
39
 
40
40
  # 注册VDB服务
41
41
  vdb_factory = create_vdb_service_factory(
42
42
  service_name="vdb_service",
43
- collection_name="demo_vectors",
44
- dimension=384,
45
- persist_directory="./demo_vectors"
43
+ embedding_dimension=384,
44
+ index_type="IndexFlatL2",
46
45
  )
47
- self.env.register_service("vdb_service", vdb_factory.service_class, vdb_factory)
46
+ self.env.register_service_factory("vdb_service", vdb_factory)
48
47
 
49
48
  # 注册Memory编排服务
50
49
  memory_factory = create_memory_service_factory(
@@ -52,7 +51,7 @@ class SampleApplication:
52
51
  kv_service_name="kv_service",
53
52
  vdb_service_name="vdb_service"
54
53
  )
55
- self.env.register_service("memory_service", memory_factory.service_class, memory_factory)
54
+ self.env.register_service_factory("memory_service", memory_factory)
56
55
 
57
56
  print("✅ 所有服务已注册")
58
57
 
@@ -6,7 +6,7 @@ import time
6
6
  import numpy as np
7
7
  from typing import Dict, List, Any
8
8
  from sage.core.api.local_environment import LocalEnvironment
9
- from sage.middleware import (
9
+ from sage.middleware.services import (
10
10
  create_kv_service_factory,
11
11
  create_vdb_service_factory,
12
12
  create_graph_service_factory,
@@ -37,29 +37,27 @@ class SAGEMicroservicesDemo:
37
37
  max_size=100000,
38
38
  enable_text_index=True
39
39
  )
40
- self.env.register_service("production_kv", kv_factory)
40
+ self.env.register_service_factory("production_kv", kv_factory)
41
41
  print(" ✅ KV Service ready - Key-Value storage + BM25 text search")
42
42
 
43
43
  # 2. VDB服务 - 向量数据库和语义搜索
44
44
  print("🔍 Setting up VDB Service...")
45
45
  vdb_factory = create_vdb_service_factory(
46
46
  service_name="production_vdb",
47
- embedding_dimension=768, # 常用的BERT embedding维度
47
+ embedding_dimension=768,
48
48
  index_type="IndexFlatL2",
49
- metric="L2"
50
49
  )
51
- self.env.register_service("production_vdb", vdb_factory)
50
+ self.env.register_service_factory("production_vdb", vdb_factory)
52
51
  print(" ✅ VDB Service ready - FAISS vector search")
53
52
 
54
53
  # 3. Graph服务 - 知识图谱和关系查询
55
54
  print("🕸️ Setting up Graph Service...")
56
55
  graph_factory = create_graph_service_factory(
57
56
  service_name="production_graph",
58
- backend_type="memory", # 生产环境可以用专门的图数据库
57
+ backend_type="memory",
59
58
  max_nodes=50000,
60
- enable_inference=True
61
59
  )
62
- self.env.register_service("production_graph", graph_factory)
60
+ self.env.register_service_factory("production_graph", graph_factory)
63
61
  print(" ✅ Graph Service ready - Knowledge graph + inference")
64
62
 
65
63
  # 4. Memory服务 - 智能记忆编排
@@ -67,12 +65,11 @@ class SAGEMicroservicesDemo:
67
65
  memory_factory = create_memory_service_factory(
68
66
  service_name="production_memory",
69
67
  kv_service_name="production_kv",
70
- vdb_service_name="production_vdb",
68
+ vdb_service_name="production_vdb",
71
69
  graph_service_name="production_graph",
72
70
  enable_knowledge_graph=True,
73
- enable_cross_service_transactions=True
74
71
  )
75
- self.env.register_service("production_memory", memory_factory)
72
+ self.env.register_service_factory("production_memory", memory_factory)
76
73
  print(" ✅ Memory Service ready - Intelligent memory orchestration")
77
74
 
78
75
  print("\n🎯 All microservices are now registered and ready!")
@@ -5,10 +5,10 @@ SAGE 微服务集成示例
5
5
  import time
6
6
  from sage.core.api.local_environment import LocalEnvironment
7
7
  from sage.middleware.services import (
8
- create_kv_service_factory,
8
+ create_kv_service_factory,
9
9
  create_vdb_service_factory,
10
10
  create_graph_service_factory,
11
- create_memory_service_factory
11
+ create_memory_service_factory,
12
12
  )
13
13
 
14
14
 
@@ -52,20 +52,16 @@ def test_microservices_registration():
52
52
  max_size=50000,
53
53
  ttl_seconds=3600
54
54
  )
55
- env2.register_service("redis_kv_service", kv_factory)
55
+ env2.register_service_factory("redis_kv_service", kv_factory)
56
56
  print(" ✅ Registered redis_kv_service")
57
57
 
58
58
  # VDB服务 - 使用ChromaDB后端
59
59
  vdb_factory = create_vdb_service_factory(
60
- service_name="chroma_vdb_service",
61
- backend_type="memory", # 可以改为"chroma"
62
- # chroma_host="localhost",
63
- # chroma_port=8000,
64
- collection_name="sage_knowledge_base",
60
+ service_name="chroma_vdb_service",
65
61
  embedding_dimension=768,
66
- distance_metric="cosine"
62
+ index_type="IndexFlatL2",
67
63
  )
68
- env2.register_service("chroma_vdb_service", vdb_factory)
64
+ env2.register_service_factory("chroma_vdb_service", vdb_factory)
69
65
  print(" ✅ Registered chroma_vdb_service")
70
66
 
71
67
  # Graph服务 - 支持知识图谱
@@ -78,7 +74,7 @@ def test_microservices_registration():
78
74
  max_nodes=500000,
79
75
  max_relationships=2000000
80
76
  )
81
- env2.register_service("knowledge_graph_service", graph_factory)
77
+ env2.register_service_factory("knowledge_graph_service", graph_factory)
82
78
  print(" ✅ Registered knowledge_graph_service")
83
79
 
84
80
  # Memory服务 - 协调所有服务
@@ -92,7 +88,7 @@ def test_microservices_registration():
92
88
  enable_caching=True,
93
89
  enable_knowledge_graph=True
94
90
  )
95
- env2.register_service("unified_memory_service", memory_factory)
91
+ env2.register_service_factory("unified_memory_service", memory_factory)
96
92
  print(" ✅ Registered unified_memory_service")
97
93
 
98
94
  print("\n🎯 Service registration completed successfully!")
@@ -0,0 +1,56 @@
1
+ """
2
+ SAGE - Streaming-Augmented Generative Execution
3
+ """
4
+
5
+ # 动态版本加载
6
+ def _load_version():
7
+ """从 sage-common 包加载版本信息"""
8
+ try:
9
+ # 优先从 sage-common 包加载版本
10
+ from sage.common._version import __version__
11
+ return {
12
+ 'version': __version__,
13
+ 'author': 'SAGE Team',
14
+ 'email': 'shuhao_zhang@hust.edu.cn'
15
+ }
16
+ except ImportError:
17
+ # 如果 sage-common 不可用,从项目根目录加载(开发环境)
18
+ try:
19
+ from pathlib import Path
20
+ current_file = Path(__file__).resolve()
21
+ # 根据当前文件位置计算到项目根目录的层数
22
+ parts = current_file.parts
23
+ sage_index = -1
24
+ for i, part in enumerate(parts):
25
+ if part == 'SAGE':
26
+ sage_index = i
27
+ break
28
+
29
+ if sage_index >= 0:
30
+ root_dir = Path(*parts[:sage_index+1])
31
+ version_file = root_dir / "_version.py"
32
+
33
+ if version_file.exists():
34
+ version_globals = {}
35
+ with open(version_file, 'r', encoding='utf-8') as f:
36
+ exec(f.read(), version_globals)
37
+ return {
38
+ 'version': version_globals.get('__version__', '0.1.3'),
39
+ 'author': version_globals.get('__author__', 'SAGE Team'),
40
+ 'email': version_globals.get('__email__', 'shuhao_zhang@hust.edu.cn')
41
+ }
42
+ except Exception:
43
+ pass
44
+
45
+ # 最后的默认值
46
+ return {
47
+ 'version': '0.1.3',
48
+ 'author': 'SAGE Team',
49
+ 'email': 'shuhao_zhang@hust.edu.cn'
50
+ }
51
+
52
+ # 加载信息
53
+ _info = _load_version()
54
+ __version__ = _info['version']
55
+ __author__ = _info['author']
56
+ __email__ = _info['email']
@@ -1,8 +1,56 @@
1
1
  """
2
- Graph Service Module
3
- 图数据库服务模块
2
+ SAGE - Streaming-Augmented Generative Execution
4
3
  """
5
4
 
6
- from .graph_service import GraphService, create_graph_service_factory
5
+ # 动态版本加载
6
+ def _load_version():
7
+ """从 sage-common 包加载版本信息"""
8
+ try:
9
+ # 优先从 sage-common 包加载版本
10
+ from sage.common._version import __version__
11
+ return {
12
+ 'version': __version__,
13
+ 'author': 'SAGE Team',
14
+ 'email': 'shuhao_zhang@hust.edu.cn'
15
+ }
16
+ except ImportError:
17
+ # 如果 sage-common 不可用,从项目根目录加载(开发环境)
18
+ try:
19
+ from pathlib import Path
20
+ current_file = Path(__file__).resolve()
21
+ # 根据当前文件位置计算到项目根目录的层数
22
+ parts = current_file.parts
23
+ sage_index = -1
24
+ for i, part in enumerate(parts):
25
+ if part == 'SAGE':
26
+ sage_index = i
27
+ break
28
+
29
+ if sage_index >= 0:
30
+ root_dir = Path(*parts[:sage_index+1])
31
+ version_file = root_dir / "_version.py"
32
+
33
+ if version_file.exists():
34
+ version_globals = {}
35
+ with open(version_file, 'r', encoding='utf-8') as f:
36
+ exec(f.read(), version_globals)
37
+ return {
38
+ 'version': version_globals.get('__version__', '0.1.3'),
39
+ 'author': version_globals.get('__author__', 'SAGE Team'),
40
+ 'email': version_globals.get('__email__', 'shuhao_zhang@hust.edu.cn')
41
+ }
42
+ except Exception:
43
+ pass
44
+
45
+ # 最后的默认值
46
+ return {
47
+ 'version': '0.1.3',
48
+ 'author': 'SAGE Team',
49
+ 'email': 'shuhao_zhang@hust.edu.cn'
50
+ }
7
51
 
8
- __all__ = ["GraphService", "create_graph_service_factory"]
52
+ # 加载信息
53
+ _info = _load_version()
54
+ __version__ = _info['version']
55
+ __author__ = _info['author']
56
+ __email__ = _info['email']
@@ -3,7 +3,7 @@ Graph Service 使用示例
3
3
  展示如何使用Graph微服务进行知识图谱构建和查询
4
4
  """
5
5
  from sage.core.api.local_environment import LocalEnvironment
6
- from sage.middleware.services.services.graph import create_graph_service_factory
6
+ from sage.middleware.services.graph import create_graph_service_factory
7
7
 
8
8
 
9
9
  def test_graph_service():
@@ -21,7 +21,8 @@ def test_graph_service():
21
21
  max_nodes=10000,
22
22
  max_relationships=50000
23
23
  )
24
- env.register_service("demo_graph_service", graph_factory)
24
+ # 使用服务工厂注册(与 SAGE Kernel 的 ServiceFactory 对齐)
25
+ env.register_service_factory("demo_graph_service", graph_factory)
25
26
 
26
27
  print("✅ Graph Service registered with memory backend")
27
28
  print(" - Max nodes: 10,000")
@@ -371,6 +371,14 @@ class GraphService(BaseService):
371
371
 
372
372
  # Graph操作方法 - 这些方法可以通过服务调用机制被调用
373
373
 
374
+ # 兼容API:add_node(dict) 与 create_node(labels, properties, node_id)
375
+ def add_node(self, node: Dict[str, Any]) -> str:
376
+ """兼容 MemoryService 的 add_node 接口: {'id','labels','properties'}"""
377
+ labels = node.get("labels", []) or []
378
+ properties = node.get("properties", {}) or {}
379
+ node_id = node.get("id")
380
+ return self.create_node(labels=labels, properties=properties, node_id=node_id)
381
+
374
382
  def create_node(self, labels: List[str], properties: Dict[str, Any],
375
383
  node_id: Optional[str] = None) -> str:
376
384
  """创建节点"""
@@ -386,6 +394,17 @@ class GraphService(BaseService):
386
394
  self.logger.debug(f"Created node: {result}")
387
395
  return result
388
396
 
397
+ # 兼容API:add_relationship(dict) 与 create_relationship(from,to,type,...)
398
+ def add_relationship(self, rel: Dict[str, Any]) -> str:
399
+ """兼容 MemoryService 的 add_relationship 接口: {'from_node','to_node','rel_type','properties','id'}"""
400
+ return self.create_relationship(
401
+ from_node=rel.get("from_node"),
402
+ to_node=rel.get("to_node"),
403
+ rel_type=rel.get("rel_type"),
404
+ properties=rel.get("properties"),
405
+ rel_id=rel.get("id")
406
+ )
407
+
389
408
  def create_relationship(self, from_node: str, to_node: str, rel_type: str,
390
409
  properties: Optional[Dict[str, Any]] = None,
391
410
  rel_id: Optional[str] = None) -> str:
@@ -417,6 +436,55 @@ class GraphService(BaseService):
417
436
  "created_at": node.created_at
418
437
  }
419
438
  return None
439
+
440
+ # 兼容 MemoryService 查询使用的便捷方法
441
+ def get_node_context(self, node_id: str, depth: int = 1) -> Dict[str, Any]:
442
+ """获取节点的邻域上下文(简单一层或多层展开)"""
443
+ context = {"node": self.get_node(node_id), "neighbors": [], "relationships": []}
444
+ if not context["node"]:
445
+ return context
446
+ rels = self.get_node_relationships(node_id, direction="both") if hasattr(self.backend, 'get_node_relationships') else []
447
+ context["relationships"] = rels
448
+ neighbor_ids = set()
449
+ for r in rels:
450
+ neighbor_ids.add(r.get("from_node") if isinstance(r, dict) else r.from_node)
451
+ neighbor_ids.add(r.get("to_node") if isinstance(r, dict) else r.to_node)
452
+ neighbor_ids.discard(node_id)
453
+ for nid in neighbor_ids:
454
+ n = self.get_node(nid)
455
+ if n:
456
+ context["neighbors"].append(n)
457
+ return context
458
+
459
+ def get_session_graph(self, session_id: str) -> Dict[str, Any]:
460
+ """根据会话ID返回简单的图统计(基于节点属性 session_id)"""
461
+ # 简单按属性筛选
462
+ try:
463
+ nodes = self.find_nodes(properties={"session_id": session_id})
464
+ except Exception:
465
+ nodes = []
466
+ node_ids = {n["id"] if isinstance(n, dict) else n.id for n in nodes}
467
+ # 关系筛选
468
+ relationships = []
469
+ if hasattr(self.backend, 'relationships'):
470
+ for rel in getattr(self.backend, 'relationships', {}).values():
471
+ src = rel.get("from_node") if isinstance(rel, dict) else rel.from_node
472
+ dst = rel.get("to_node") if isinstance(rel, dict) else rel.to_node
473
+ if src in node_ids or dst in node_ids:
474
+ relationships.append({
475
+ "id": rel.get("id") if isinstance(rel, dict) else rel.id,
476
+ "from_node": src,
477
+ "to_node": dst,
478
+ "rel_type": rel.get("rel_type") if isinstance(rel, dict) else rel.rel_type,
479
+ "properties": rel.get("properties") if isinstance(rel, dict) else rel.properties,
480
+ })
481
+ return {
482
+ "session_id": session_id,
483
+ "node_count": len(nodes),
484
+ "relationship_count": len(relationships),
485
+ "nodes": nodes,
486
+ "relationships": relationships,
487
+ }
420
488
 
421
489
  def find_nodes(self, labels: Optional[List[str]] = None,
422
490
  properties: Optional[Dict[str, Any]] = None) -> List[Dict[str, Any]]: