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
@@ -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,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']
@@ -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,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']
@@ -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']