isage-middleware 0.1.1__py3-none-any.whl → 0.1.4__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.

Potentially problematic release.


This version of isage-middleware might be problematic. Click here for more details.

Files changed (376) hide show
  1. isage_middleware-0.1.4.dist-info/METADATA +115 -0
  2. isage_middleware-0.1.4.dist-info/RECORD +288 -0
  3. sage/__init__.py +37 -2
  4. sage/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  5. sage/__pycache__/__init__.cpython-311.pyc +0 -0
  6. sage/middleware/__init__.py +31 -77
  7. sage/middleware/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  8. sage/middleware/__pycache__/__init__.cpython-311.pyc +0 -0
  9. sage/middleware/api/__init__.py +32 -17
  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 +37 -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 +37 -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 +37 -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 +37 -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 +37 -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 +37 -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 +37 -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 +37 -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 +37 -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 +37 -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 +37 -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 +37 -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 +37 -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 +37 -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 +37 -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 +37 -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 +37 -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/components/sage_db/tests/__pycache__/test_python.cpython-311.opt-2.pyc +0 -0
  143. sage/middleware/components/sage_db/tests/__pycache__/test_python.cpython-311.pyc +0 -0
  144. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-311.opt-2.pyc +0 -0
  145. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-311.pyc +0 -0
  146. sage/middleware/examples/__pycache__/microservices_demo.cpython-311.opt-2.pyc +0 -0
  147. sage/middleware/examples/__pycache__/microservices_demo.cpython-311.pyc +0 -0
  148. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-311.opt-2.pyc +0 -0
  149. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-311.pyc +0 -0
  150. sage/middleware/examples/api_usage_tutorial.py +3 -3
  151. sage/middleware/examples/dag_microservices_demo.py +7 -8
  152. sage/middleware/examples/microservices_integration_demo.py +8 -11
  153. sage/middleware/examples/microservices_registration_demo.py +8 -12
  154. sage/middleware/services/__init__.py +37 -0
  155. sage/middleware/services/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  156. sage/middleware/services/__pycache__/__init__.cpython-311.pyc +0 -0
  157. sage/middleware/services/graph/__init__.py +33 -4
  158. sage/middleware/services/graph/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  159. sage/middleware/services/graph/__pycache__/__init__.cpython-311.pyc +0 -0
  160. sage/middleware/services/graph/__pycache__/graph_index.cpython-311.opt-2.pyc +0 -0
  161. sage/middleware/services/graph/__pycache__/graph_index.cpython-311.pyc +0 -0
  162. sage/middleware/services/graph/__pycache__/graph_service.cpython-311.opt-2.pyc +0 -0
  163. sage/middleware/services/graph/__pycache__/graph_service.cpython-311.pyc +0 -0
  164. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-311.opt-2.pyc +0 -0
  165. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-311.pyc +0 -0
  166. sage/middleware/services/graph/examples/graph_demo.py +3 -2
  167. sage/middleware/services/graph/graph_service.py +68 -0
  168. sage/middleware/services/graph/search_engine/__init__.py +37 -0
  169. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  170. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  171. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-311.opt-2.pyc +0 -0
  172. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-311.pyc +0 -0
  173. sage/middleware/services/kv/__init__.py +33 -4
  174. sage/middleware/services/kv/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  175. sage/middleware/services/kv/__pycache__/__init__.cpython-311.pyc +0 -0
  176. sage/middleware/services/kv/__pycache__/kv_service.cpython-311.opt-2.pyc +0 -0
  177. sage/middleware/services/kv/__pycache__/kv_service.cpython-311.pyc +0 -0
  178. sage/middleware/services/kv/examples/__pycache__/{kv_demo.cpython-313.opt-2.pyc → kv_demo.cpython-311.opt-2.pyc} +0 -0
  179. sage/middleware/services/kv/examples/__pycache__/{kv_demo.cpython-313.pyc → kv_demo.cpython-311.pyc} +0 -0
  180. sage/middleware/services/kv/examples/kv_demo.py +1 -1
  181. sage/middleware/services/kv/search_engine/__init__.py +37 -0
  182. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  183. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  184. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-311.opt-2.pyc +0 -0
  185. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-311.pyc +0 -0
  186. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-311.opt-2.pyc +0 -0
  187. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-311.pyc +0 -0
  188. sage/middleware/services/memory/__init__.py +33 -8
  189. sage/middleware/services/memory/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  190. sage/middleware/services/memory/__pycache__/__init__.cpython-311.pyc +0 -0
  191. sage/middleware/services/memory/__pycache__/memory_service.cpython-311.opt-2.pyc +0 -0
  192. sage/middleware/services/memory/__pycache__/memory_service.cpython-311.pyc +0 -0
  193. sage/middleware/services/memory/examples/__pycache__/{memory_demo.cpython-313.opt-2.pyc → memory_demo.cpython-311.opt-2.pyc} +0 -0
  194. sage/middleware/services/memory/examples/__pycache__/{memory_demo.cpython-313.pyc → memory_demo.cpython-311.pyc} +0 -0
  195. sage/middleware/services/memory/examples/dag_microservices_demo.py +8 -9
  196. sage/middleware/services/memory/examples/memory_demo.py +4 -4
  197. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-311.opt-2.pyc +0 -0
  198. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-311.pyc +0 -0
  199. sage/middleware/services/memory/memory_service.py +14 -11
  200. sage/middleware/services/memory/utils/__init__.py +37 -0
  201. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  202. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  203. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-311.opt-2.pyc +0 -0
  204. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-311.pyc +0 -0
  205. sage/middleware/services/vdb/__init__.py +33 -4
  206. sage/middleware/services/vdb/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  207. sage/middleware/services/vdb/__pycache__/__init__.cpython-311.pyc +0 -0
  208. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-311.opt-2.pyc +0 -0
  209. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-311.pyc +0 -0
  210. sage/middleware/services/vdb/examples/__pycache__/{vdb_demo.cpython-313.opt-2.pyc → vdb_demo.cpython-311.opt-2.pyc} +0 -0
  211. sage/middleware/services/vdb/examples/__pycache__/{vdb_demo.cpython-313.pyc → vdb_demo.cpython-311.pyc} +0 -0
  212. sage/middleware/services/vdb/examples/vdb_demo.py +2 -2
  213. sage/middleware/services/vdb/search_engine/__init__.py +37 -0
  214. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  215. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  216. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-311.opt-2.pyc +0 -0
  217. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-311.pyc +0 -0
  218. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-311.opt-2.pyc +0 -0
  219. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-311.pyc +0 -0
  220. sage/middleware/services/vdb/vdb_service.py +44 -41
  221. sage/middleware/utils/__init__.py +34 -2
  222. sage/middleware/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  223. sage/middleware/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  224. sage/middleware/utils/embedding/__init__.py +33 -31
  225. sage/middleware/utils/embedding/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  226. sage/middleware/utils/embedding/__pycache__/__init__.cpython-311.pyc +0 -0
  227. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-311.opt-2.pyc +0 -0
  228. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-311.pyc +0 -0
  229. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-311.opt-2.pyc +0 -0
  230. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-311.pyc +0 -0
  231. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-311.opt-2.pyc +0 -0
  232. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-311.pyc +0 -0
  233. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-311.opt-2.pyc +0 -0
  234. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-311.pyc +0 -0
  235. sage/middleware/utils/embedding/__pycache__/hf.cpython-311.opt-2.pyc +0 -0
  236. sage/middleware/utils/embedding/__pycache__/hf.cpython-311.pyc +0 -0
  237. sage/middleware/utils/embedding/__pycache__/instructor.cpython-311.opt-2.pyc +0 -0
  238. sage/middleware/utils/embedding/__pycache__/instructor.cpython-311.pyc +0 -0
  239. sage/middleware/utils/embedding/__pycache__/jina.cpython-311.opt-2.pyc +0 -0
  240. sage/middleware/utils/embedding/__pycache__/jina.cpython-311.pyc +0 -0
  241. sage/middleware/utils/embedding/__pycache__/lollms.cpython-311.opt-2.pyc +0 -0
  242. sage/middleware/utils/embedding/__pycache__/lollms.cpython-311.pyc +0 -0
  243. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-311.opt-2.pyc +0 -0
  244. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-311.pyc +0 -0
  245. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-311.opt-2.pyc +0 -0
  246. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-311.pyc +0 -0
  247. sage/middleware/utils/embedding/__pycache__/ollama.cpython-311.opt-2.pyc +0 -0
  248. sage/middleware/utils/embedding/__pycache__/ollama.cpython-311.pyc +0 -0
  249. sage/middleware/utils/embedding/__pycache__/openai.cpython-311.opt-2.pyc +0 -0
  250. sage/middleware/utils/embedding/__pycache__/openai.cpython-311.pyc +0 -0
  251. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-311.opt-2.pyc +0 -0
  252. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-311.pyc +0 -0
  253. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-311.opt-2.pyc +0 -0
  254. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-311.pyc +0 -0
  255. isage_middleware-0.1.1.dist-info/METADATA +0 -424
  256. isage_middleware-0.1.1.dist-info/RECORD +0 -182
  257. sage/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  258. sage/__pycache__/__init__.cpython-313.pyc +0 -0
  259. sage/middleware/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  260. sage/middleware/__pycache__/__init__.cpython-313.pyc +0 -0
  261. sage/middleware/api/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  262. sage/middleware/api/__pycache__/__init__.cpython-313.pyc +0 -0
  263. sage/middleware/api/__pycache__/graph_api.cpython-313.opt-2.pyc +0 -0
  264. sage/middleware/api/__pycache__/graph_api.cpython-313.pyc +0 -0
  265. sage/middleware/api/__pycache__/kv_api.cpython-313.opt-2.pyc +0 -0
  266. sage/middleware/api/__pycache__/kv_api.cpython-313.pyc +0 -0
  267. sage/middleware/api/__pycache__/memory_api.cpython-313.opt-2.pyc +0 -0
  268. sage/middleware/api/__pycache__/memory_api.cpython-313.pyc +0 -0
  269. sage/middleware/api/__pycache__/vdb_api.cpython-313.opt-2.pyc +0 -0
  270. sage/middleware/api/__pycache__/vdb_api.cpython-313.pyc +0 -0
  271. sage/middleware/enterprise/__init__.py +0 -75
  272. sage/middleware/enterprise/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  273. sage/middleware/enterprise/__pycache__/__init__.cpython-313.pyc +0 -0
  274. sage/middleware/enterprise/sage_db/__init__.py +0 -132
  275. sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  276. sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-313.pyc +0 -0
  277. sage/middleware/enterprise/sage_db/__pycache__/sage_db.cpython-313.opt-2.pyc +0 -0
  278. sage/middleware/enterprise/sage_db/__pycache__/sage_db.cpython-313.pyc +0 -0
  279. sage/middleware/enterprise/sage_db/python/__init__.py +0 -7
  280. sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  281. sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-313.pyc +0 -0
  282. sage/middleware/enterprise/sage_db/python/__pycache__/sage_db.cpython-313.opt-2.pyc +0 -0
  283. sage/middleware/enterprise/sage_db/python/__pycache__/sage_db.cpython-313.pyc +0 -0
  284. sage/middleware/enterprise/sage_db/tests/__pycache__/test_python.cpython-313.opt-2.pyc +0 -0
  285. sage/middleware/enterprise/sage_db/tests/__pycache__/test_python.cpython-313.pyc +0 -0
  286. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-313.opt-2.pyc +0 -0
  287. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-313.pyc +0 -0
  288. sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-313.opt-2.pyc +0 -0
  289. sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-313.pyc +0 -0
  290. sage/middleware/examples/__pycache__/microservices_demo.cpython-313.opt-2.pyc +0 -0
  291. sage/middleware/examples/__pycache__/microservices_demo.cpython-313.pyc +0 -0
  292. sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-313.opt-2.pyc +0 -0
  293. sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-313.pyc +0 -0
  294. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-313.opt-2.pyc +0 -0
  295. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-313.pyc +0 -0
  296. sage/middleware/services/graph/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  297. sage/middleware/services/graph/__pycache__/__init__.cpython-313.pyc +0 -0
  298. sage/middleware/services/graph/__pycache__/graph_index.cpython-313.opt-2.pyc +0 -0
  299. sage/middleware/services/graph/__pycache__/graph_index.cpython-313.pyc +0 -0
  300. sage/middleware/services/graph/__pycache__/graph_service.cpython-313.opt-2.pyc +0 -0
  301. sage/middleware/services/graph/__pycache__/graph_service.cpython-313.pyc +0 -0
  302. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-313.opt-2.pyc +0 -0
  303. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-313.pyc +0 -0
  304. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  305. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-313.pyc +0 -0
  306. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-313.opt-2.pyc +0 -0
  307. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-313.pyc +0 -0
  308. sage/middleware/services/kv/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  309. sage/middleware/services/kv/__pycache__/__init__.cpython-313.pyc +0 -0
  310. sage/middleware/services/kv/__pycache__/kv_service.cpython-313.opt-2.pyc +0 -0
  311. sage/middleware/services/kv/__pycache__/kv_service.cpython-313.pyc +0 -0
  312. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  313. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-313.pyc +0 -0
  314. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-313.opt-2.pyc +0 -0
  315. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-313.pyc +0 -0
  316. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-313.opt-2.pyc +0 -0
  317. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-313.pyc +0 -0
  318. sage/middleware/services/memory/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  319. sage/middleware/services/memory/__pycache__/__init__.cpython-313.pyc +0 -0
  320. sage/middleware/services/memory/__pycache__/memory_service.cpython-313.opt-2.pyc +0 -0
  321. sage/middleware/services/memory/__pycache__/memory_service.cpython-313.pyc +0 -0
  322. sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-313.opt-2.pyc +0 -0
  323. sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-313.pyc +0 -0
  324. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-313.opt-2.pyc +0 -0
  325. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-313.pyc +0 -0
  326. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  327. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-313.pyc +0 -0
  328. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-313.opt-2.pyc +0 -0
  329. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-313.pyc +0 -0
  330. sage/middleware/services/vdb/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  331. sage/middleware/services/vdb/__pycache__/__init__.cpython-313.pyc +0 -0
  332. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-313.opt-2.pyc +0 -0
  333. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-313.pyc +0 -0
  334. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  335. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-313.pyc +0 -0
  336. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-313.opt-2.pyc +0 -0
  337. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-313.pyc +0 -0
  338. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-313.opt-2.pyc +0 -0
  339. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-313.pyc +0 -0
  340. sage/middleware/utils/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  341. sage/middleware/utils/__pycache__/__init__.cpython-313.pyc +0 -0
  342. sage/middleware/utils/embedding/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  343. sage/middleware/utils/embedding/__pycache__/__init__.cpython-313.pyc +0 -0
  344. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-313.opt-2.pyc +0 -0
  345. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-313.pyc +0 -0
  346. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-313.opt-2.pyc +0 -0
  347. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-313.pyc +0 -0
  348. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-313.opt-2.pyc +0 -0
  349. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-313.pyc +0 -0
  350. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-313.opt-2.pyc +0 -0
  351. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-313.pyc +0 -0
  352. sage/middleware/utils/embedding/__pycache__/hf.cpython-313.opt-2.pyc +0 -0
  353. sage/middleware/utils/embedding/__pycache__/hf.cpython-313.pyc +0 -0
  354. sage/middleware/utils/embedding/__pycache__/instructor.cpython-313.opt-2.pyc +0 -0
  355. sage/middleware/utils/embedding/__pycache__/instructor.cpython-313.pyc +0 -0
  356. sage/middleware/utils/embedding/__pycache__/jina.cpython-313.opt-2.pyc +0 -0
  357. sage/middleware/utils/embedding/__pycache__/jina.cpython-313.pyc +0 -0
  358. sage/middleware/utils/embedding/__pycache__/lollms.cpython-313.opt-2.pyc +0 -0
  359. sage/middleware/utils/embedding/__pycache__/lollms.cpython-313.pyc +0 -0
  360. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-313.opt-2.pyc +0 -0
  361. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-313.pyc +0 -0
  362. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-313.opt-2.pyc +0 -0
  363. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-313.pyc +0 -0
  364. sage/middleware/utils/embedding/__pycache__/ollama.cpython-313.opt-2.pyc +0 -0
  365. sage/middleware/utils/embedding/__pycache__/ollama.cpython-313.pyc +0 -0
  366. sage/middleware/utils/embedding/__pycache__/openai.cpython-313.opt-2.pyc +0 -0
  367. sage/middleware/utils/embedding/__pycache__/openai.cpython-313.pyc +0 -0
  368. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-313.opt-2.pyc +0 -0
  369. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-313.pyc +0 -0
  370. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-313.opt-2.pyc +0 -0
  371. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-313.pyc +0 -0
  372. {isage_middleware-0.1.1.dist-info → isage_middleware-0.1.4.dist-info}/WHEEL +0 -0
  373. {isage_middleware-0.1.1.dist-info → isage_middleware-0.1.4.dist-info}/top_level.txt +0 -0
  374. /sage/middleware/{enterprise → components}/sage_db/python/sage_db.py +0 -0
  375. /sage/middleware/{enterprise → components}/sage_db/sage_db.py +0 -0
  376. /sage/middleware/{enterprise → components}/sage_db/tests/test_python.py +0 -0
@@ -0,0 +1,293 @@
1
+ """
2
+ 测试Memory Service的集成测试用例
3
+ """
4
+ import os
5
+ import shutil
6
+ import traceback
7
+ from sage.middleware.components.neuromem.memory_service import MemoryService
8
+ from sage.middleware.utils.embedding.embedding_api import apply_embedding_model
9
+
10
+ def test_memory_service():
11
+ """测试Memory Service的主要功能(直接测试,不使用服务框架)"""
12
+ print("🚀 Starting Memory Service test...")
13
+
14
+ try:
15
+ # 1. 直接创建MemoryService实例
16
+ # 使用默认的embedding model
17
+ embedding_model = apply_embedding_model("default")
18
+ dim = embedding_model.get_dim()
19
+ # 指定临时测试目录
20
+ test_data_dir = os.path.join(os.path.dirname(__file__), "test_data")
21
+ os.makedirs(test_data_dir, exist_ok=True)
22
+ memory_service = MemoryService(data_dir=test_data_dir)
23
+
24
+ print("✅ Memory service created, testing operations...")
25
+
26
+ # 2. 测试创建collection
27
+ result1 = memory_service.create_collection(
28
+ name="test_collection",
29
+ backend_type="VDB",
30
+ description="Test collection",
31
+ embedding_model=embedding_model,
32
+ dim=dim
33
+ )
34
+ print(f"Create collection result: {result1}")
35
+ assert result1["status"] == "success", f"Create collection failed: {result1}"
36
+
37
+ # 3. 测试插入数据
38
+ result2 = memory_service.insert_data(
39
+ collection_name="test_collection",
40
+ text="This is a test document",
41
+ metadata={"type": "test", "date": "2025-07-26"}
42
+ )
43
+ print(f"Insert data result: {result2}")
44
+ assert result2["status"] == "success", f"Insert data failed: {result2}"
45
+
46
+ # 4. 测试创建索引
47
+ result3 = memory_service.create_index(
48
+ collection_name="test_collection",
49
+ index_name="test_index",
50
+ description="Test index"
51
+ )
52
+ print(f"Create index result: {result3}")
53
+ assert result3["status"] == "success", f"Create index failed: {result3}"
54
+
55
+ # 5. 测试检索数据
56
+ result4 = memory_service.retrieve_data(
57
+ collection_name="test_collection",
58
+ query_text="test document",
59
+ topk=5,
60
+ index_name="test_index",
61
+ with_metadata=True
62
+ )
63
+ print(f"Retrieve data result: {result4}")
64
+ assert result4["status"] == "success", f"Retrieve data failed: {result4}"
65
+
66
+ # 6. 测试插入更多数据
67
+ for i in range(3):
68
+ result = memory_service.insert_data(
69
+ collection_name="test_collection",
70
+ text=f"Test document {i}",
71
+ metadata={"type": "test", "index": i}
72
+ )
73
+ print(f"Insert data {i} result: {result}")
74
+ assert result["status"] == "success", f"Insert data {i} failed: {result}"
75
+
76
+ # 7. 测试列出collections
77
+ final_result = memory_service.list_collections()
78
+ print(f"Collections list: {final_result}")
79
+ assert final_result["status"] == "success", f"List collections failed: {final_result}"
80
+ assert len(final_result["collections"]) == 1, "Should have exactly 1 collection"
81
+
82
+ # 8. 测试获取collection信息
83
+ info_result = memory_service.get_collection_info("test_collection")
84
+ print(f"Collection info: {info_result}")
85
+ assert info_result["status"] == "success", f"Get collection info failed: {info_result}"
86
+
87
+ # 9. 测试列出索引
88
+ index_result = memory_service.list_indexes("test_collection")
89
+ print(f"Indexes list: {index_result}")
90
+ assert index_result["status"] == "success", f"List indexes failed: {index_result}"
91
+
92
+ # 10. 测试存储单个collection
93
+ store_collection_result = memory_service.store_collection("test_collection")
94
+ print(f"Store collection result: {store_collection_result}")
95
+ assert store_collection_result["status"] == "success", f"Store collection failed: {store_collection_result}"
96
+
97
+ # 11. 创建第二个collection来测试选择性存储
98
+ result_col2 = memory_service.create_collection(
99
+ name="temp_collection",
100
+ backend_type="VDB",
101
+ description="Temporary test collection",
102
+ embedding_model=embedding_model,
103
+ dim=dim
104
+ )
105
+ print(f"Create temp collection result: {result_col2}")
106
+ assert result_col2["status"] == "success", f"Create temp collection failed: {result_col2}"
107
+
108
+ # 12. 向第二个collection插入数据
109
+ temp_insert_result = memory_service.insert_data(
110
+ collection_name="temp_collection",
111
+ text="This is temporary data",
112
+ metadata={"type": "temp", "temporary": True}
113
+ )
114
+ print(f"Insert temp data result: {temp_insert_result}")
115
+ assert temp_insert_result["status"] == "success", f"Insert temp data failed: {temp_insert_result}"
116
+
117
+ # 13. 测试存储所有manager数据
118
+ store_all_result = memory_service.store()
119
+ print(f"Store all result: {store_all_result}")
120
+ assert store_all_result["status"] == "success", f"Store all failed: {store_all_result}"
121
+
122
+ print("✅ All operations including storage completed successfully!")
123
+
124
+ return True
125
+
126
+ except Exception as e:
127
+ print(f"❌ Test failed: {e}")
128
+ traceback.print_exc()
129
+ return False
130
+
131
+ finally:
132
+ # 清理资源
133
+ try:
134
+ # 清理测试数据目录
135
+ test_data_dir = os.path.join(os.path.dirname(__file__), "test_data")
136
+ if os.path.exists(test_data_dir):
137
+ shutil.rmtree(test_data_dir)
138
+ print("🧹 Cleanup completed")
139
+ except Exception as e:
140
+ print(f"⚠️ Cleanup error: {e}")
141
+
142
+
143
+ def test_data_loss_without_storage():
144
+ """测试未保存collection导致的数据丢失"""
145
+ print("\n🔍 Starting data loss test without storage...")
146
+
147
+ try:
148
+ # 使用默认的embedding model
149
+ embedding_model = apply_embedding_model("default")
150
+ dim = embedding_model.get_dim()
151
+
152
+ # 创建独立的测试目录
153
+ test_data_dir = os.path.join(os.path.dirname(__file__), "test_data_loss")
154
+ os.makedirs(test_data_dir, exist_ok=True)
155
+
156
+ print("✅ Starting data loss test...")
157
+
158
+ # 阶段1: 创建两个collection并插入数据
159
+ print("\n📝 Phase 1: Creating collections and inserting data...")
160
+
161
+ memory_service = MemoryService(data_dir=test_data_dir)
162
+
163
+ # 创建第一个collection
164
+ result1 = memory_service.create_collection(
165
+ name="saved_collection",
166
+ backend_type="VDB",
167
+ description="This will be saved",
168
+ embedding_model=embedding_model,
169
+ dim=dim
170
+ )
171
+ assert result1["status"] == "success"
172
+
173
+ # 创建第二个collection
174
+ result2 = memory_service.create_collection(
175
+ name="unsaved_collection",
176
+ backend_type="VDB",
177
+ description="This will NOT be saved",
178
+ embedding_model=embedding_model,
179
+ dim=dim
180
+ )
181
+ assert result2["status"] == "success"
182
+
183
+ # 向两个collection插入数据
184
+ for i in range(3):
185
+ # 保存的collection
186
+ memory_service.insert_data(
187
+ collection_name="saved_collection",
188
+ text=f"Saved document {i}",
189
+ metadata={"type": "saved", "index": i}
190
+ )
191
+ # 未保存的collection
192
+ memory_service.insert_data(
193
+ collection_name="unsaved_collection",
194
+ text=f"Unsaved document {i}",
195
+ metadata={"type": "unsaved", "index": i}
196
+ )
197
+
198
+ # 只保存第一个collection
199
+ print("\n💾 Phase 2: Storing only the first collection...")
200
+ store_result = memory_service.store_collection("saved_collection")
201
+ assert store_result["status"] == "success"
202
+ print(f"✅ Stored 'saved_collection': {store_result}")
203
+
204
+ # 验证两个collection都还在内存中
205
+ list_result = memory_service.list_collections()
206
+ assert list_result["status"] == "success"
207
+ assert len(list_result["collections"]) == 2
208
+ print(f"✅ Both collections still in memory: {[c['name'] for c in list_result['collections']]}")
209
+
210
+ # 释放当前service实例
211
+ print("\n🔄 Phase 3: Creating new service instance to simulate restart...")
212
+ del memory_service
213
+
214
+ # 重新创建服务实例 (模拟重启后从磁盘加载)
215
+ memory_service2 = MemoryService(data_dir=test_data_dir)
216
+
217
+ # 验证数据丢失情况
218
+ print("\n🔍 Phase 4: Checking data after restart...")
219
+
220
+ # 检查collections列表
221
+ list_result_after = memory_service2.list_collections()
222
+ assert list_result_after["status"] == "success"
223
+ collection_names = [c['name'] for c in list_result_after['collections']]
224
+ print(f"Collections after restart: {collection_names}")
225
+
226
+ # 验证保存的collection仍然存在
227
+ if "saved_collection" in collection_names:
228
+ print("✅ 'saved_collection' found - data persisted correctly")
229
+ # 尝试检索数据验证完整性
230
+ retrieve_saved = memory_service2.retrieve_data(
231
+ collection_name="saved_collection",
232
+ query_text="Saved document",
233
+ topk=5,
234
+ with_metadata=True
235
+ )
236
+ if retrieve_saved["status"] == "success" and len(retrieve_saved["results"]) > 0:
237
+ print(f"✅ Saved collection data intact: {len(retrieve_saved['results'])} documents found")
238
+ else:
239
+ print("⚠️ Saved collection exists but data may be incomplete")
240
+ else:
241
+ print("❌ ERROR: 'saved_collection' not found after restart!")
242
+
243
+ # 验证未保存的collection丢失
244
+ if "unsaved_collection" not in collection_names:
245
+ print("✅ 'unsaved_collection' correctly lost - demonstrates need for storage")
246
+ else:
247
+ print("⚠️ WARNING: 'unsaved_collection' unexpectedly persisted")
248
+
249
+ print("\n🎯 Data loss test demonstrates:")
250
+ print(" - Collections must be explicitly stored to persist")
251
+ print(" - Only stored collections survive service restart")
252
+ print(" - store_collection() provides selective persistence")
253
+
254
+ return True
255
+
256
+ except Exception as e:
257
+ print(f"❌ Data loss test failed: {e}")
258
+ traceback.print_exc()
259
+ return False
260
+
261
+ finally:
262
+ # 清理测试数据
263
+ try:
264
+ test_data_dir = os.path.join(os.path.dirname(__file__), "test_data_loss")
265
+ if os.path.exists(test_data_dir):
266
+ shutil.rmtree(test_data_dir)
267
+ print("🧹 Data loss test cleanup completed")
268
+ except Exception as e:
269
+ print(f"⚠️ Data loss test cleanup error: {e}")
270
+
271
+
272
+ if __name__ == "__main__":
273
+ print("=" * 60)
274
+ print("SAGE Memory Service Integration Test")
275
+ print("=" * 60)
276
+
277
+ # 运行基本功能测试
278
+ success = test_memory_service()
279
+
280
+ if success:
281
+ print("\n🎉 Basic tests passed! Running data loss test...")
282
+ # 运行数据丢失测试
283
+ loss_test_success = test_data_loss_without_storage()
284
+
285
+ if loss_test_success:
286
+ print("\n🎉 All tests passed! Memory service system is working correctly.")
287
+ print("✨ Storage functionality verified - data persistence works as expected.")
288
+ else:
289
+ print("\n💥 Data loss tests failed! Please check the logs above.")
290
+ exit(1)
291
+ else:
292
+ print("\n💥 Basic tests failed! Please check the logs above.")
293
+ exit(1)
@@ -0,0 +1,37 @@
1
+ """
2
+ SAGE - Streaming-Augmented Generative Execution
3
+ """
4
+
5
+ # 动态版本加载
6
+ def _load_version():
7
+ """从项目根目录动态加载版本信息"""
8
+ from pathlib import Path
9
+
10
+ # 获取项目根目录
11
+ current_file = Path(__file__).resolve()
12
+ root_dir = current_file.parent.parent.parent.parent.parent.parent.parent.parent
13
+ version_file = root_dir / "_version.py"
14
+
15
+ # 加载版本信息
16
+ if version_file.exists():
17
+ version_globals = {}
18
+ with open(version_file, 'r', encoding='utf-8') as f:
19
+ exec(f.read(), version_globals)
20
+ return {
21
+ 'version': version_globals.get('__version__', '0.1.4'),
22
+ 'author': version_globals.get('__author__', 'SAGE Team'),
23
+ 'email': version_globals.get('__email__', 'shuhao_zhang@hust.edu.cn')
24
+ }
25
+
26
+ # 默认值
27
+ return {
28
+ 'version': '0.1.4',
29
+ 'author': 'SAGE Team',
30
+ 'email': 'shuhao_zhang@hust.edu.cn'
31
+ }
32
+
33
+ # 加载信息
34
+ _info = _load_version()
35
+ __version__ = _info['version']
36
+ __author__ = _info['author']
37
+ __email__ = _info['email']
@@ -0,0 +1,25 @@
1
+ # import os
2
+
3
+ # def get_default_data_dir():
4
+ # this_file = os.path.abspath(__file__)
5
+ # cur_dir = os.path.dirname(this_file)
6
+ # # 一直向上,直到找到 sage.middleware.services.neuromem. 目录
7
+ # while True:
8
+ # if os.path.basename(cur_dir) == "sage":
9
+ # project_root = os.path.dirname(cur_dir)
10
+ # data_dir = os.path.join(project_root, "data", "neuromem_data")
11
+ # os.makedirs(data_dir, exist_ok=True)
12
+ # return data_dir
13
+ # parent = os.path.dirname(cur_dir)
14
+ # if parent == cur_dir:
15
+ # raise FileNotFoundError("Could not find 'sage' directory in parent folders.")
16
+ # cur_dir = parent
17
+
18
+ import os
19
+
20
+ def get_default_data_dir():
21
+ # 获取当前执行程序的工作目录
22
+ cur_dir = os.getcwd()
23
+ data_dir = os.path.join(cur_dir, "data", "neuromem_data")
24
+ os.makedirs(data_dir, exist_ok=True)
25
+ return data_dir
@@ -0,0 +1,37 @@
1
+ """
2
+ SAGE - Streaming-Augmented Generative Execution
3
+ """
4
+
5
+ # 动态版本加载
6
+ def _load_version():
7
+ """从项目根目录动态加载版本信息"""
8
+ from pathlib import Path
9
+
10
+ # 获取项目根目录
11
+ current_file = Path(__file__).resolve()
12
+ root_dir = current_file.parent.parent.parent.parent.parent.parent.parent
13
+ version_file = root_dir / "_version.py"
14
+
15
+ # 加载版本信息
16
+ if version_file.exists():
17
+ version_globals = {}
18
+ with open(version_file, 'r', encoding='utf-8') as f:
19
+ exec(f.read(), version_globals)
20
+ return {
21
+ 'version': version_globals.get('__version__', '0.1.4'),
22
+ 'author': version_globals.get('__author__', 'SAGE Team'),
23
+ 'email': version_globals.get('__email__', 'shuhao_zhang@hust.edu.cn')
24
+ }
25
+
26
+ # 默认值
27
+ return {
28
+ 'version': '0.1.4',
29
+ 'author': 'SAGE Team',
30
+ 'email': 'shuhao_zhang@hust.edu.cn'
31
+ }
32
+
33
+ # 加载信息
34
+ _info = _load_version()
35
+ __version__ = _info['version']
36
+ __author__ = _info['author']
37
+ __email__ = _info['email']
@@ -0,0 +1,37 @@
1
+ """
2
+ SAGE - Streaming-Augmented Generative Execution
3
+ """
4
+
5
+ # 动态版本加载
6
+ def _load_version():
7
+ """从项目根目录动态加载版本信息"""
8
+ from pathlib import Path
9
+
10
+ # 获取项目根目录
11
+ current_file = Path(__file__).resolve()
12
+ root_dir = current_file.parent.parent.parent.parent.parent.parent.parent.parent
13
+ version_file = root_dir / "_version.py"
14
+
15
+ # 加载版本信息
16
+ if version_file.exists():
17
+ version_globals = {}
18
+ with open(version_file, 'r', encoding='utf-8') as f:
19
+ exec(f.read(), version_globals)
20
+ return {
21
+ 'version': version_globals.get('__version__', '0.1.4'),
22
+ 'author': version_globals.get('__author__', 'SAGE Team'),
23
+ 'email': version_globals.get('__email__', 'shuhao_zhang@hust.edu.cn')
24
+ }
25
+
26
+ # 默认值
27
+ return {
28
+ 'version': '0.1.4',
29
+ 'author': 'SAGE Team',
30
+ 'email': 'shuhao_zhang@hust.edu.cn'
31
+ }
32
+
33
+ # 加载信息
34
+ _info = _load_version()
35
+ __version__ = _info['version']
36
+ __author__ = _info['author']
37
+ __email__ = _info['email']
@@ -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!")