isage-middleware 0.1.0__py3-none-any.whl → 0.1.3__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 (288) hide show
  1. isage_middleware-0.1.3.dist-info/METADATA +115 -0
  2. isage_middleware-0.1.3.dist-info/RECORD +291 -0
  3. sage/__init__.py +56 -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 +52 -79
  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/__pycache__/_version.cpython-311.opt-2.pyc +0 -0
  10. sage/middleware/__pycache__/_version.cpython-311.pyc +0 -0
  11. sage/middleware/_version.py +35 -0
  12. sage/middleware/api/__init__.py +52 -18
  13. sage/middleware/api/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  14. sage/middleware/api/__pycache__/__init__.cpython-311.pyc +0 -0
  15. sage/middleware/api/__pycache__/graph_api.cpython-311.opt-2.pyc +0 -0
  16. sage/middleware/api/__pycache__/graph_api.cpython-311.pyc +0 -0
  17. sage/middleware/api/__pycache__/kv_api.cpython-311.opt-2.pyc +0 -0
  18. sage/middleware/api/__pycache__/kv_api.cpython-311.pyc +0 -0
  19. sage/middleware/api/__pycache__/memory_api.cpython-311.opt-2.pyc +0 -0
  20. sage/middleware/api/__pycache__/memory_api.cpython-311.pyc +0 -0
  21. sage/middleware/api/__pycache__/vdb_api.cpython-311.opt-2.pyc +0 -0
  22. sage/middleware/api/__pycache__/vdb_api.cpython-311.pyc +0 -0
  23. sage/middleware/components/enterprise/__init__.py +56 -0
  24. sage/middleware/components/enterprise/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  25. sage/middleware/components/enterprise/__pycache__/__init__.cpython-311.pyc +0 -0
  26. sage/middleware/components/neuromem/__init__.py +56 -0
  27. sage/middleware/components/neuromem/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  28. sage/middleware/components/neuromem/__pycache__/__init__.cpython-311.pyc +0 -0
  29. sage/middleware/components/neuromem/__pycache__/memory_manager.cpython-311.opt-2.pyc +0 -0
  30. sage/middleware/components/neuromem/__pycache__/memory_manager.cpython-311.pyc +0 -0
  31. sage/middleware/components/neuromem/__pycache__/memory_service.cpython-311.opt-2.pyc +0 -0
  32. sage/middleware/components/neuromem/__pycache__/memory_service.cpython-311.pyc +0 -0
  33. sage/middleware/components/neuromem/memory_collection/__init__.py +56 -0
  34. sage/middleware/components/neuromem/memory_collection/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  35. sage/middleware/components/neuromem/memory_collection/__pycache__/__init__.cpython-311.pyc +0 -0
  36. sage/middleware/components/neuromem/memory_collection/__pycache__/base_collection.cpython-311.opt-2.pyc +0 -0
  37. sage/middleware/components/neuromem/memory_collection/__pycache__/base_collection.cpython-311.pyc +0 -0
  38. sage/middleware/components/neuromem/memory_collection/__pycache__/graph_collection.cpython-311.opt-2.pyc +0 -0
  39. sage/middleware/components/neuromem/memory_collection/__pycache__/graph_collection.cpython-311.pyc +0 -0
  40. sage/middleware/components/neuromem/memory_collection/__pycache__/kv_collection.cpython-311.opt-2.pyc +0 -0
  41. sage/middleware/components/neuromem/memory_collection/__pycache__/kv_collection.cpython-311.pyc +0 -0
  42. sage/middleware/components/neuromem/memory_collection/__pycache__/vdb_collection.cpython-311.opt-2.pyc +0 -0
  43. sage/middleware/components/neuromem/memory_collection/__pycache__/vdb_collection.cpython-311.pyc +0 -0
  44. sage/middleware/components/neuromem/memory_collection/base_collection.py +167 -0
  45. sage/middleware/components/neuromem/memory_collection/graph_collection.py +11 -0
  46. sage/middleware/components/neuromem/memory_collection/kv_collection.py +709 -0
  47. sage/middleware/components/neuromem/memory_collection/vdb_collection.py +922 -0
  48. sage/middleware/components/neuromem/memory_manager.py +401 -0
  49. sage/middleware/components/neuromem/memory_service.py +324 -0
  50. sage/middleware/components/neuromem/micro_service/__init__.py +56 -0
  51. sage/middleware/components/neuromem/micro_service/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  52. sage/middleware/components/neuromem/micro_service/__pycache__/__init__.cpython-311.pyc +0 -0
  53. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb.cpython-311.opt-2.pyc +0 -0
  54. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb.cpython-311.pyc +0 -0
  55. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb_service.cpython-311.opt-2.pyc +0 -0
  56. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb_service.cpython-311.pyc +0 -0
  57. sage/middleware/components/neuromem/micro_service/neuromem_vdb.py +198 -0
  58. sage/middleware/components/neuromem/micro_service/neuromem_vdb_service.py +118 -0
  59. sage/middleware/components/neuromem/search_engine/__init__.py +56 -0
  60. sage/middleware/components/neuromem/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  61. sage/middleware/components/neuromem/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  62. sage/middleware/components/neuromem/search_engine/graph_index/__init__.py +56 -0
  63. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  64. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/__init__.cpython-311.pyc +0 -0
  65. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/base_graph_index.cpython-311.opt-2.pyc +0 -0
  66. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/base_graph_index.cpython-311.pyc +0 -0
  67. sage/middleware/components/neuromem/search_engine/graph_index/base_graph_index.py +40 -0
  68. sage/middleware/components/neuromem/search_engine/hybird_index/__init__.py +56 -0
  69. sage/middleware/components/neuromem/search_engine/hybird_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  70. sage/middleware/components/neuromem/search_engine/hybird_index/__pycache__/__init__.cpython-311.pyc +0 -0
  71. sage/middleware/components/neuromem/search_engine/kv_index/__init__.py +56 -0
  72. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  73. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/__init__.cpython-311.pyc +0 -0
  74. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/base_kv_index.cpython-311.opt-2.pyc +0 -0
  75. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/base_kv_index.cpython-311.pyc +0 -0
  76. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/bm25s_index.cpython-311.opt-2.pyc +0 -0
  77. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/bm25s_index.cpython-311.pyc +0 -0
  78. sage/middleware/components/neuromem/search_engine/kv_index/base_kv_index.py +76 -0
  79. sage/middleware/components/neuromem/search_engine/kv_index/bm25s_index.py +320 -0
  80. sage/middleware/components/neuromem/search_engine/vdb_index/__init__.py +56 -0
  81. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  82. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/__init__.cpython-311.pyc +0 -0
  83. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/base_vdb_index.cpython-311.opt-2.pyc +0 -0
  84. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/base_vdb_index.cpython-311.pyc +0 -0
  85. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/faiss_index.cpython-311.opt-2.pyc +0 -0
  86. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/faiss_index.cpython-311.pyc +0 -0
  87. sage/middleware/components/neuromem/search_engine/vdb_index/base_vdb_index.py +53 -0
  88. sage/middleware/components/neuromem/search_engine/vdb_index/faiss_index.py +700 -0
  89. sage/middleware/components/neuromem/storage_engine/__init__.py +56 -0
  90. sage/middleware/components/neuromem/storage_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  91. sage/middleware/components/neuromem/storage_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  92. sage/middleware/components/neuromem/storage_engine/__pycache__/metadata_storage.cpython-311.opt-2.pyc +0 -0
  93. sage/middleware/components/neuromem/storage_engine/__pycache__/metadata_storage.cpython-311.pyc +0 -0
  94. sage/middleware/components/neuromem/storage_engine/__pycache__/text_storage.cpython-311.opt-2.pyc +0 -0
  95. sage/middleware/components/neuromem/storage_engine/__pycache__/text_storage.cpython-311.pyc +0 -0
  96. sage/middleware/components/neuromem/storage_engine/__pycache__/vector_storage.cpython-311.opt-2.pyc +0 -0
  97. sage/middleware/components/neuromem/storage_engine/__pycache__/vector_storage.cpython-311.pyc +0 -0
  98. sage/middleware/components/neuromem/storage_engine/kv_backend/__init__.py +56 -0
  99. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  100. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/__init__.cpython-311.pyc +0 -0
  101. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/base_kv_backend.cpython-311.opt-2.pyc +0 -0
  102. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/base_kv_backend.cpython-311.pyc +0 -0
  103. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/dict_kv_backend.cpython-311.opt-2.pyc +0 -0
  104. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/dict_kv_backend.cpython-311.pyc +0 -0
  105. sage/middleware/components/neuromem/storage_engine/kv_backend/base_kv_backend.py +65 -0
  106. sage/middleware/components/neuromem/storage_engine/kv_backend/dict_kv_backend.py +54 -0
  107. sage/middleware/components/neuromem/storage_engine/metadata_storage.py +260 -0
  108. sage/middleware/components/neuromem/storage_engine/text_storage.py +106 -0
  109. sage/middleware/components/neuromem/storage_engine/vector_storage.py +85 -0
  110. sage/middleware/components/neuromem/tests/__init__.py +56 -0
  111. sage/middleware/components/neuromem/tests/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  112. sage/middleware/components/neuromem/tests/__pycache__/__init__.cpython-311.pyc +0 -0
  113. sage/middleware/components/neuromem/tests/__pycache__/test_memory_service.cpython-311.opt-2.pyc +0 -0
  114. sage/middleware/components/neuromem/tests/__pycache__/test_memory_service.cpython-311.pyc +0 -0
  115. sage/middleware/components/neuromem/tests/core_test/__init__.py +56 -0
  116. sage/middleware/components/neuromem/tests/core_test/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  117. sage/middleware/components/neuromem/tests/core_test/__pycache__/__init__.cpython-311.pyc +0 -0
  118. sage/middleware/components/neuromem/tests/core_test/collection_test/__init__.py +56 -0
  119. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  120. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/__init__.cpython-311.pyc +0 -0
  121. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/kv_collection_test.cpython-311.opt-2.pyc +0 -0
  122. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/kv_collection_test.cpython-311.pyc +0 -0
  123. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/vdb_collection_test.cpython-311.opt-2.pyc +0 -0
  124. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/vdb_collection_test.cpython-311.pyc +0 -0
  125. sage/middleware/components/neuromem/tests/core_test/collection_test/kv_collection_test.py +60 -0
  126. sage/middleware/components/neuromem/tests/core_test/collection_test/vdb_collection_test.py +88 -0
  127. sage/middleware/components/neuromem/tests/core_test/manager_test.py +154 -0
  128. sage/middleware/components/neuromem/tests/test_memory_service.py +293 -0
  129. sage/middleware/components/neuromem/utils/__init__.py +56 -0
  130. sage/middleware/components/neuromem/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  131. sage/middleware/components/neuromem/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  132. sage/middleware/components/neuromem/utils/__pycache__/path_utils.cpython-311.opt-2.pyc +0 -0
  133. sage/middleware/components/neuromem/utils/__pycache__/path_utils.cpython-311.pyc +0 -0
  134. sage/middleware/components/neuromem/utils/path_utils.py +25 -0
  135. sage/middleware/components/sage_db/__init__.py +56 -0
  136. sage/middleware/components/sage_db/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  137. sage/middleware/components/sage_db/__pycache__/__init__.cpython-311.pyc +0 -0
  138. sage/middleware/{enterprise → components}/sage_db/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
  139. sage/middleware/{enterprise → components}/sage_db/__pycache__/sage_db.cpython-311.pyc +0 -0
  140. sage/middleware/components/sage_db/python/__init__.py +56 -0
  141. sage/middleware/components/sage_db/python/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  142. sage/middleware/components/sage_db/python/__pycache__/__init__.cpython-311.pyc +0 -0
  143. sage/middleware/{enterprise → components}/sage_db/python/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
  144. sage/middleware/{enterprise → components}/sage_db/python/__pycache__/sage_db.cpython-311.pyc +0 -0
  145. sage/middleware/{enterprise → components}/sage_db/tests/__pycache__/test_python.cpython-311.opt-2.pyc +0 -0
  146. sage/middleware/{enterprise → components}/sage_db/tests/__pycache__/test_python.cpython-311.pyc +0 -0
  147. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-311.opt-2.pyc +0 -0
  148. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-311.pyc +0 -0
  149. sage/middleware/examples/__pycache__/microservices_demo.cpython-311.opt-2.pyc +0 -0
  150. sage/middleware/examples/__pycache__/microservices_demo.cpython-311.pyc +0 -0
  151. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-311.opt-2.pyc +0 -0
  152. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-311.pyc +0 -0
  153. sage/middleware/examples/api_usage_tutorial.py +3 -3
  154. sage/middleware/examples/dag_microservices_demo.py +7 -8
  155. sage/middleware/examples/microservices_integration_demo.py +8 -11
  156. sage/middleware/examples/microservices_registration_demo.py +8 -12
  157. sage/middleware/services/__init__.py +56 -0
  158. sage/middleware/services/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  159. sage/middleware/services/__pycache__/__init__.cpython-311.pyc +0 -0
  160. sage/middleware/services/graph/__init__.py +52 -4
  161. sage/middleware/services/graph/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  162. sage/middleware/services/graph/__pycache__/__init__.cpython-311.pyc +0 -0
  163. sage/middleware/services/graph/__pycache__/graph_index.cpython-311.opt-2.pyc +0 -0
  164. sage/middleware/services/graph/__pycache__/graph_index.cpython-311.pyc +0 -0
  165. sage/middleware/services/graph/__pycache__/graph_service.cpython-311.opt-2.pyc +0 -0
  166. sage/middleware/services/graph/__pycache__/graph_service.cpython-311.pyc +0 -0
  167. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-311.opt-2.pyc +0 -0
  168. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-311.pyc +0 -0
  169. sage/middleware/services/graph/examples/graph_demo.py +3 -2
  170. sage/middleware/services/graph/graph_service.py +68 -0
  171. sage/middleware/services/graph/search_engine/__init__.py +56 -0
  172. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  173. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  174. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-311.opt-2.pyc +0 -0
  175. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-311.pyc +0 -0
  176. sage/middleware/services/kv/__init__.py +52 -4
  177. sage/middleware/services/kv/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  178. sage/middleware/services/kv/__pycache__/__init__.cpython-311.pyc +0 -0
  179. sage/middleware/services/kv/__pycache__/kv_service.cpython-311.opt-2.pyc +0 -0
  180. sage/middleware/services/kv/__pycache__/kv_service.cpython-311.pyc +0 -0
  181. sage/middleware/services/kv/examples/__pycache__/kv_demo.cpython-311.opt-2.pyc +0 -0
  182. sage/middleware/services/kv/examples/__pycache__/kv_demo.cpython-311.pyc +0 -0
  183. sage/middleware/services/kv/examples/kv_demo.py +1 -1
  184. sage/middleware/services/kv/search_engine/__init__.py +56 -0
  185. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  186. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  187. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-311.opt-2.pyc +0 -0
  188. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-311.pyc +0 -0
  189. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-311.opt-2.pyc +0 -0
  190. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-311.pyc +0 -0
  191. sage/middleware/services/memory/__init__.py +52 -8
  192. sage/middleware/services/memory/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  193. sage/middleware/services/memory/__pycache__/__init__.cpython-311.pyc +0 -0
  194. sage/middleware/services/memory/__pycache__/memory_service.cpython-311.opt-2.pyc +0 -0
  195. sage/middleware/services/memory/__pycache__/memory_service.cpython-311.pyc +0 -0
  196. sage/middleware/services/memory/examples/__pycache__/memory_demo.cpython-311.opt-2.pyc +0 -0
  197. sage/middleware/services/memory/examples/__pycache__/memory_demo.cpython-311.pyc +0 -0
  198. sage/middleware/services/memory/examples/dag_microservices_demo.py +8 -9
  199. sage/middleware/services/memory/examples/memory_demo.py +4 -4
  200. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-311.opt-2.pyc +0 -0
  201. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-311.pyc +0 -0
  202. sage/middleware/services/memory/memory_service.py +14 -11
  203. sage/middleware/services/memory/utils/__init__.py +56 -0
  204. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  205. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  206. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-311.opt-2.pyc +0 -0
  207. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-311.pyc +0 -0
  208. sage/middleware/services/vdb/__init__.py +52 -4
  209. sage/middleware/services/vdb/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  210. sage/middleware/services/vdb/__pycache__/__init__.cpython-311.pyc +0 -0
  211. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-311.opt-2.pyc +0 -0
  212. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-311.pyc +0 -0
  213. sage/middleware/services/vdb/examples/__pycache__/vdb_demo.cpython-311.opt-2.pyc +0 -0
  214. sage/middleware/services/vdb/examples/__pycache__/vdb_demo.cpython-311.pyc +0 -0
  215. sage/middleware/services/vdb/examples/vdb_demo.py +2 -2
  216. sage/middleware/services/vdb/search_engine/__init__.py +56 -0
  217. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  218. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  219. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-311.opt-2.pyc +0 -0
  220. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-311.pyc +0 -0
  221. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-311.opt-2.pyc +0 -0
  222. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-311.pyc +0 -0
  223. sage/middleware/services/vdb/vdb_service.py +44 -41
  224. sage/middleware/utils/__init__.py +53 -2
  225. sage/middleware/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  226. sage/middleware/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  227. sage/middleware/utils/embedding/__init__.py +52 -31
  228. sage/middleware/utils/embedding/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  229. sage/middleware/utils/embedding/__pycache__/__init__.cpython-311.pyc +0 -0
  230. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-311.opt-2.pyc +0 -0
  231. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-311.pyc +0 -0
  232. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-311.opt-2.pyc +0 -0
  233. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-311.pyc +0 -0
  234. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-311.opt-2.pyc +0 -0
  235. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-311.pyc +0 -0
  236. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-311.opt-2.pyc +0 -0
  237. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-311.pyc +0 -0
  238. sage/middleware/utils/embedding/__pycache__/hf.cpython-311.opt-2.pyc +0 -0
  239. sage/middleware/utils/embedding/__pycache__/hf.cpython-311.pyc +0 -0
  240. sage/middleware/utils/embedding/__pycache__/instructor.cpython-311.opt-2.pyc +0 -0
  241. sage/middleware/utils/embedding/__pycache__/instructor.cpython-311.pyc +0 -0
  242. sage/middleware/utils/embedding/__pycache__/jina.cpython-311.opt-2.pyc +0 -0
  243. sage/middleware/utils/embedding/__pycache__/jina.cpython-311.pyc +0 -0
  244. sage/middleware/utils/embedding/__pycache__/lollms.cpython-311.opt-2.pyc +0 -0
  245. sage/middleware/utils/embedding/__pycache__/lollms.cpython-311.pyc +0 -0
  246. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-311.opt-2.pyc +0 -0
  247. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-311.pyc +0 -0
  248. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-311.opt-2.pyc +0 -0
  249. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-311.pyc +0 -0
  250. sage/middleware/utils/embedding/__pycache__/ollama.cpython-311.opt-2.pyc +0 -0
  251. sage/middleware/utils/embedding/__pycache__/ollama.cpython-311.pyc +0 -0
  252. sage/middleware/utils/embedding/__pycache__/openai.cpython-311.opt-2.pyc +0 -0
  253. sage/middleware/utils/embedding/__pycache__/openai.cpython-311.pyc +0 -0
  254. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-311.opt-2.pyc +0 -0
  255. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-311.pyc +0 -0
  256. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-311.opt-2.pyc +0 -0
  257. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-311.pyc +0 -0
  258. isage_middleware-0.1.0.dist-info/METADATA +0 -424
  259. isage_middleware-0.1.0.dist-info/RECORD +0 -191
  260. sage/middleware/enterprise/__init__.py +0 -75
  261. sage/middleware/enterprise/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  262. sage/middleware/enterprise/__pycache__/__init__.cpython-311.pyc +0 -0
  263. sage/middleware/enterprise/sage_db/__init__.py +0 -132
  264. sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  265. sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-311.pyc +0 -0
  266. sage/middleware/enterprise/sage_db/python/__init__.py +0 -7
  267. sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  268. sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-311.pyc +0 -0
  269. sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-311.opt-2.pyc +0 -0
  270. sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-311.pyc +0 -0
  271. sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-311.opt-2.pyc +0 -0
  272. sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-311.pyc +0 -0
  273. sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-311.opt-2.pyc +0 -0
  274. sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-311.pyc +0 -0
  275. sage/middleware/services/memory/memory_collection/__pycache__/base_collection.cpython-311.opt-2.pyc +0 -0
  276. sage/middleware/services/memory/memory_collection/__pycache__/base_collection.cpython-311.pyc +0 -0
  277. sage/middleware/services/memory/memory_collection/__pycache__/kv_collection.cpython-311.opt-2.pyc +0 -0
  278. sage/middleware/services/memory/memory_collection/__pycache__/kv_collection.cpython-311.pyc +0 -0
  279. sage/middleware/services/memory/memory_collection/__pycache__/vdb_collection.cpython-311.opt-2.pyc +0 -0
  280. sage/middleware/services/memory/memory_collection/__pycache__/vdb_collection.cpython-311.pyc +0 -0
  281. sage/middleware/services/memory/memory_collection/base_collection.py +0 -0
  282. sage/middleware/services/memory/memory_collection/kv_collection.py +0 -0
  283. sage/middleware/services/memory/memory_collection/vdb_collection.py +0 -0
  284. {isage_middleware-0.1.0.dist-info → isage_middleware-0.1.3.dist-info}/WHEEL +0 -0
  285. {isage_middleware-0.1.0.dist-info → isage_middleware-0.1.3.dist-info}/top_level.txt +0 -0
  286. /sage/middleware/{enterprise → components}/sage_db/python/sage_db.py +0 -0
  287. /sage/middleware/{enterprise → components}/sage_db/sage_db.py +0 -0
  288. /sage/middleware/{enterprise → components}/sage_db/tests/test_python.py +0 -0
@@ -0,0 +1,85 @@
1
+ # file sage/core/sage.middleware.services.neuromem./storage_engine/vector_storage.py
2
+ # python -m sage.core.sage.middleware.services.neuromem..storage_engine.vector_storage
3
+
4
+ import json
5
+ import numpy as np
6
+ from typing import Any, Optional, List
7
+
8
+ from sage.middleware.components.neuromem.storage_engine.kv_backend.base_kv_backend import BaseKVBackend
9
+ from sage.middleware.components.neuromem.storage_engine.kv_backend.dict_kv_backend import DictKVBackend
10
+
11
+
12
+ class VectorStorage:
13
+ """
14
+ Simple vector storage based on hash IDs.
15
+ 基于哈希ID的简单向量存储器。
16
+ """
17
+
18
+ def __init__(self, backend: Optional[BaseKVBackend] = None):
19
+ self.backend = backend or DictKVBackend()
20
+
21
+ def get_all_ids(self) -> List[str]:
22
+ return self.backend.get_all_keys()
23
+
24
+ def has(self, item_id: str) -> bool:
25
+ return self.backend.has(item_id)
26
+
27
+ def delete(self, item_id: str):
28
+ self.backend.delete(item_id)
29
+
30
+ def store(self, hash_id: str, vector: Any):
31
+ self.backend.set(hash_id, vector)
32
+
33
+ def get(self, hash_id: str) -> Any:
34
+ return self.backend.get(hash_id)
35
+
36
+ def clear(self):
37
+ self.backend.clear()
38
+
39
+ def store_to_disk(self, path: str):
40
+ # type: ignore for IDE/static checker
41
+ save_dict = {k: v.tolist() if isinstance(v, np.ndarray) else v for k, v in self.backend._store.items()} # type: ignore
42
+ with open(path, "w", encoding="utf-8") as f:
43
+ json.dump(save_dict, f, ensure_ascii=False, indent=2)
44
+
45
+ def load_from_disk(self, path: str):
46
+ with open(path, "r", encoding="utf-8") as f:
47
+ data = json.load(f)
48
+ # type: ignore for IDE/static checker
49
+ for k, v in data.items():
50
+ self.backend._store[k] = np.array(v, dtype="float32") # type: ignore
51
+
52
+ def clear_disk_data(self, path: str):
53
+ if not hasattr(self.backend, "clear_disk_data"):
54
+ raise NotImplementedError("Backend does not support clear_disk_data")
55
+ self.backend.clear_disk_data(path)
56
+
57
+ if __name__ == "__main__":
58
+ import hashlib
59
+
60
+ vs = VectorStorage()
61
+ vector = [1, 2, 3]
62
+ vector_id = hashlib.sha256(str(vector).encode()).hexdigest()
63
+ disk_path = "test_vector_storage.json"
64
+
65
+ # 存储并保存到磁盘
66
+ vs.store(vector_id, vector)
67
+ print("Step 1 | Retrieved:", vs.get(vector_id))
68
+ vs.store_to_disk(disk_path)
69
+ print(f"Step 2 | Data has been saved to {disk_path}")
70
+
71
+ # 清空内存
72
+ vs.clear()
73
+ print("Step 3 | After clear (should be None):", vs.get(vector_id))
74
+
75
+ # 等待用户输入 yes 再读取
76
+ user_input = input("Step 4 | Enter 'yes' to load data from disk: ")
77
+ if user_input.strip().lower() == 'yes':
78
+ vs.load_from_disk(disk_path)
79
+ print("Step 5 | After reload, Retrieved:", vs.get(vector_id))
80
+ else:
81
+ print("Step 5 | Skipped loading from disk.")
82
+
83
+ # 删除磁盘文件
84
+ vs.clear_disk_data(disk_path)
85
+ print(f"Step 6 | Disk file {disk_path} has been deleted.")
@@ -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.4'),
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.4',
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.4'),
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.4',
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.4'),
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.4',
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,60 @@
1
+ import pytest
2
+ from sage.middleware.components.neuromem.memory_collection.kv_collection import KVMemoryCollection
3
+ from sage.middleware.components.neuromem.memory_collection.base_collection import get_default_data_dir
4
+
5
+ @pytest.fixture
6
+ def setup_kv_collection():
7
+ col = KVMemoryCollection(name="demo")
8
+
9
+ col.insert("Hello Jack.", {})
10
+ col.insert("Hello Tom.", {})
11
+ col.insert("Hello Alice.", {})
12
+ col.insert("Jack and Tom say hi.", {})
13
+ col.insert("Alice in Wonderland.", {})
14
+ col.insert("Jacky is not Jack.", {})
15
+
16
+ col.create_index("global_index")
17
+ return col
18
+
19
+
20
+ def test_kv_retrieve(setup_kv_collection):
21
+ col = setup_kv_collection
22
+
23
+ res1 = col.retrieve("Jack", topk=3, index_name="global_index")
24
+ assert set(res1) == {"Hello Jack.", "Jack and Tom say hi.", "Jacky is not Jack."}
25
+
26
+ res2 = col.retrieve("Alice", topk=2, index_name="global_index")
27
+ assert set(res2) == {"Hello Alice.", "Alice in Wonderland."}
28
+
29
+ res3 = col.retrieve("Tom", topk=2, index_name="global_index")
30
+ assert set(res3) == {"Hello Tom.", "Jack and Tom say hi."}
31
+
32
+
33
+ def test_kv_update_and_delete(setup_kv_collection):
34
+ col = setup_kv_collection
35
+
36
+ col.delete("Hello Tom.")
37
+ res4 = col.retrieve("Tom", index_name="global_index")
38
+ assert "Hello Tom." not in res4
39
+
40
+ col.update("Hello Jack.", "Hello Jacky.", {}, "global_index")
41
+ res5 = col.retrieve("Jacky", index_name="global_index")
42
+
43
+ assert {"Jacky is not Jack.", "Hello Jacky."}.issubset(set(res5))
44
+
45
+
46
+ def test_kv_persistence(setup_kv_collection):
47
+ col = setup_kv_collection
48
+ store_path = get_default_data_dir()
49
+ col_name = "demo"
50
+ col.store(store_path)
51
+
52
+ del col
53
+
54
+ col2 = KVMemoryCollection.load(col_name)
55
+ res = col2.retrieve("Jacky", index_name="global_index")
56
+
57
+
58
+ assert "Jacky is not Jack." in res
59
+
60
+ KVMemoryCollection.clear(col_name)
@@ -0,0 +1,88 @@
1
+ # file sage/sage_tests/neuromem_test/core_test/collection_test/vdb_collection_test.py
2
+
3
+ import os
4
+ import time
5
+ import pytest
6
+ from sage.middleware.components.neuromem.memory_collection.base_collection import get_default_data_dir
7
+ from sage.utils.embedding_methods.mockembedder import MockTextEmbedder
8
+ from sage.middleware.components.neuromem.memory_collection.vdb_collection import VDBMemoryCollection
9
+
10
+
11
+ def almost_equal_dict(d1, d2, float_tol=1e-3):
12
+ # 只对所有值都是float的dict做容忍,否则严格等价
13
+ if d1.keys() != d2.keys():
14
+ return False
15
+ for k in d1:
16
+ v1, v2 = d1[k], d2[k]
17
+ if isinstance(v1, float) and isinstance(v2, float):
18
+ if abs(v1 - v2) > float_tol:
19
+ return False
20
+ else:
21
+ if v1 != v2:
22
+ return False
23
+ return True
24
+
25
+ @pytest.fixture
26
+ def setup_vdb_collection():
27
+ default_model = MockTextEmbedder(fixed_dim=16)
28
+ col = VDBMemoryCollection("vdb_demo", default_model, 16)
29
+ col.add_metadata_field("source")
30
+ col.add_metadata_field("lang")
31
+ col.add_metadata_field("timestamp")
32
+
33
+ current_time = time.time()
34
+ texts = [
35
+ ("hello world", {"source": "user", "lang": "en", "timestamp": current_time - 3600}),
36
+ ("你好,世界", {"source": "user", "lang": "zh", "timestamp": current_time - 1800}),
37
+ ("bonjour le monde", {"source": "web", "lang": "fr", "timestamp": current_time}),
38
+ ]
39
+ for t, meta in texts:
40
+ col.insert(t, meta)
41
+
42
+ col.create_index("global_index")
43
+ col.create_index("en_index", metadata_filter_func=lambda m: m.get("lang") == "en", description="English only")
44
+ col.create_index("user_index", metadata_filter_func=lambda m: m.get("source") == "user")
45
+ return col, current_time
46
+
47
+ def test_vdb_persist(setup_vdb_collection):
48
+ col, current_time = setup_vdb_collection
49
+
50
+ # 检索校验
51
+ res = col.retrieve("hello", topk=3, index_name="global_index")
52
+ assert set(res) & {"hello world"} == {"hello world"}
53
+
54
+ res = col.retrieve("hello", index_name="en_index")
55
+ assert set(res) & {"hello world"} == {"hello world"}
56
+
57
+ res = col.retrieve("你好", index_name="user_index")
58
+ assert set(res) & {"你好,世界"} == {"你好,世界"}
59
+
60
+ # 持久化保存
61
+ store_path = get_default_data_dir()
62
+ col_name = "vdb_demo"
63
+ col.store(store_path)
64
+
65
+ # 清除内存对象
66
+ del col
67
+
68
+ # 恢复对象并回归测试
69
+ default_model2 = MockTextEmbedder(fixed_dim=16)
70
+ col2 = VDBMemoryCollection.load(col_name, embedding_model=default_model2)
71
+
72
+ # 再检索
73
+ res = col2.retrieve("hello", index_name="global_index")
74
+ assert set(res) & {"hello world"} == {"hello world"}
75
+
76
+ res = col2.retrieve("你好", index_name="user_index")
77
+ assert set(res) & {"你好,世界"} == {"你好,世界"}
78
+
79
+ # 校验metadata一致性
80
+ meta = col2.metadata_storage.get(col2._get_stable_id("hello world"))
81
+ assert almost_equal_dict(meta, {"source": "user", "lang": "en", "timestamp": current_time - 3600})
82
+
83
+ # 校验索引条件
84
+ idx_meta = col2.indexes["en_index"]
85
+ assert idx_meta.get("description", "") == "English only"
86
+
87
+ # 删除磁盘数据
88
+ VDBMemoryCollection.clear(col_name)
@@ -0,0 +1,154 @@
1
+ # file sage/sage_tests/neuromem_test/core_test/manager_test.py
2
+ # python -m sage.sage_tests.neuromem_test.core_test.manager_test
3
+
4
+ from time import sleep
5
+
6
+
7
+ def test_vdb(do_reload=True, do_delete=True):
8
+ from sage.middleware.components.neuromem.memory_manager import MemoryManager
9
+ from sage.utils.embedding_methods.mockembedder import MockTextEmbedder
10
+ import os
11
+
12
+ def colored(text, color):
13
+ colors = {"green": "\033[92m", "red": "\033[91m", "yellow": "\033[93m", "reset": "\033[0m"}
14
+ return colors.get(color, "") + text + colors["reset"]
15
+ # return text # 自动化测试不需要彩色输出
16
+
17
+ def print_test_case(desc, expected, actual):
18
+ status = "通过" if expected == actual or (isinstance(expected, set) and set(expected) == set(actual)) else "不通过"
19
+ print(f"【{desc}】")
20
+ print(f"预期结果:{expected}")
21
+ print(f"实际结果:{actual}")
22
+ print(f"测试情况:{status}\n")
23
+
24
+ # 1. 创建 MemoryManager 和 VDBCollection
25
+ mgr = MemoryManager()
26
+ embedder = MockTextEmbedder(fixed_dim=16)
27
+ col = mgr.create_collection(name="test_vdb", backend_type="VDB", description="测试VDB集合", embedding_model=embedder, dim=16)
28
+ col.add_metadata_field("tag") # 注册元数据字段tag
29
+
30
+ # 2. 插入数据
31
+ col.insert("Alpha", {"tag": "A"})
32
+ col.insert("Beta", {"tag": "B"})
33
+ col.insert("Gamma", {"tag": "A"})
34
+
35
+ # 3. 创建索引
36
+ col.create_index("global_index")
37
+ col.create_index("tag_A_index", metadata_filter_func=lambda m: m.get("tag") == "A")
38
+
39
+ # 4. 检索测试
40
+ res1 = col.retrieve("Alpha", topk=1, index_name="global_index")
41
+ print_test_case("检索Alpha", ["Alpha"], res1)
42
+
43
+ res2 = set(col.retrieve("Alpha", topk=5, index_name="tag_A_index")) # Alpha 的向量检索,tag为A
44
+ print_test_case("tag_A_index 检索", {'Gamma', 'Alpha', 'Beta'}, res2)
45
+
46
+ # 5. 持久化
47
+ mgr.store_collection()
48
+ print("数据已保存到磁盘!")
49
+ data_dir = mgr.data_dir
50
+ print("目录为:", os.path.join(data_dir, "vdb_collection", "test_vdb"))
51
+
52
+ # 6. 清空对象
53
+ del mgr, col
54
+ print("内存对象已清除。")
55
+
56
+ # 7. 读取持久化数据,自动测试时直接执行
57
+ if do_reload:
58
+ from sage.middleware.components.neuromem.memory_manager import MemoryManager
59
+ embedder2 = MockTextEmbedder(fixed_dim=16)
60
+ mgr2 = MemoryManager()
61
+ col2 = mgr2.connect_collection("test_vdb", embedding_model=embedder2)
62
+ res3 = set(col2.retrieve("Alpha", topk=5, index_name="tag_A_index"))
63
+ print_test_case("恢复后tag_A_index 检索", {'Gamma', 'Alpha', 'Beta'}, res3)
64
+ else:
65
+ print("跳过加载测试。")
66
+
67
+ sleep(10) # 等待一会儿,确保所有操作完成
68
+ # 8. 删除所有数据
69
+ if do_delete:
70
+ from sage.middleware.components.neuromem.memory_collection.vdb_collection import VDBMemoryCollection
71
+ VDBMemoryCollection.clear("test_vdb", data_dir)
72
+ manager_json = os.path.join(data_dir, "manager.json")
73
+ if os.path.exists(manager_json):
74
+ os.remove(manager_json)
75
+ print("所有数据已删除!")
76
+ else:
77
+ print("未执行删除。")
78
+
79
+ # 作为测试脚本被自动调用
80
+ if __name__ == "__main__":
81
+ test_vdb()
82
+
83
+
84
+ # def kvtest():
85
+ # from sage.core.sage.middleware.services.neuromem..memory_manager import MemoryManager
86
+ # import os
87
+
88
+ # def colored(text, color):
89
+ # colors = {"green": "\033[92m", "red": "\033[91m", "yellow": "\033[93m", "reset": "\033[0m"}
90
+ # return colors.get(color, "") + text + colors["reset"]
91
+
92
+ # def print_test_case(desc, expected, actual):
93
+ # status = "通过" if expected == actual or (isinstance(expected, set) and set(expected) == set(actual)) else "不通过"
94
+ # color = "green" if status == "通过" else "red"
95
+ # print(f"【{desc}】")
96
+ # print(f"预期结果:{expected}")
97
+ # print(f"实际结果:{actual}")
98
+ # print(f"测试情况:{colored(status, color)}\n")
99
+
100
+ # # 1. 创建 MemoryManager 和 KVCollection
101
+ # mgr = MemoryManager()
102
+ # col = mgr.create_collection(name="test_kv", backend_type="KV", description="测试KV集合")
103
+ # col.add_metadata_field("tag") # 注册元数据字段tag
104
+
105
+ # # 2. 插入数据
106
+ # col.insert("Alpha", {"tag": "A"})
107
+ # col.insert("Beta", {"tag": "B"})
108
+ # col.insert("Gamma", {"tag": "A"})
109
+
110
+ # # 3. 创建索引
111
+ # col.create_index("global_index")
112
+ # col.create_index("tag_A_index", metadata_filter_func=lambda m: m.get("tag") == "A")
113
+
114
+ # # 4. 检索测试
115
+ # res1 = col.retrieve("Alpha", topk=1, index_name="global_index")
116
+ # print_test_case("检索Alpha", ["Alpha"], res1)
117
+
118
+ # res2 = set(col.retrieve("a", topk=5, index_name="tag_A_index")) # 检索包含'a'的文本,tag为A
119
+ # print_test_case("tag_A_index 检索", {"Alpha", "Gamma"}, res2)
120
+
121
+ # # 5. 持久化
122
+ # mgr.store_collection()
123
+ # print(colored("数据已保存到磁盘!", "yellow"))
124
+ # data_dir = mgr.data_dir
125
+ # print("目录为:", os.path.join(data_dir, "kv_collection", "test_kv"))
126
+
127
+ # # 6. 清空对象
128
+ # del mgr, col
129
+ # print(colored("内存对象已清除。", "yellow"))
130
+
131
+ # # 7. 读取持久化数据
132
+ # user_input = input(colored("输入 yes 加载刚才保存的数据: ", "yellow"))
133
+ # if user_input.strip().lower() == "yes":
134
+ # mgr2 = MemoryManager() # 会自动加载 manager.json 和 collection
135
+ # col2 = mgr2.get_collection("test_kv")
136
+ # # 检查是否正常恢复
137
+ # res3 = set(col2.retrieve("a", topk=5, index_name="tag_A_index"))
138
+ # print_test_case("恢复后tag_A_index 检索", {"Alpha", "Gamma"}, res3)
139
+ # else:
140
+ # print(colored("跳过加载测试。", "yellow"))
141
+
142
+ # # 8. 删除所有数据
143
+ # user_input = input(colored("输入 yes 删除磁盘所有数据: ", "yellow"))
144
+ # if user_input.strip().lower() == "yes":
145
+ # from sage.core.sage.middleware.services.neuromem.memory_collection.kv_collection import KVMemoryCollection
146
+ # KVMemoryCollection.clear("test_kv", data_dir)
147
+ # manager_json = os.path.join(data_dir, "manager.json")
148
+ # if os.path.exists(manager_json):
149
+ # os.remove(manager_json)
150
+ # print(colored("所有数据已删除!", "green"))
151
+ # else:
152
+ # print(colored("未执行删除。", "yellow"))
153
+
154
+ # kvtest()