isage-middleware 0.1.0__py3-none-any.whl → 0.1.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (285) hide show
  1. isage_middleware-0.1.4.dist-info/METADATA +115 -0
  2. isage_middleware-0.1.4.dist-info/RECORD +288 -0
  3. sage/__init__.py +37 -2
  4. sage/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  5. sage/__pycache__/__init__.cpython-311.pyc +0 -0
  6. sage/middleware/__init__.py +31 -77
  7. sage/middleware/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  8. sage/middleware/__pycache__/__init__.cpython-311.pyc +0 -0
  9. sage/middleware/api/__init__.py +32 -17
  10. sage/middleware/api/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  11. sage/middleware/api/__pycache__/__init__.cpython-311.pyc +0 -0
  12. sage/middleware/api/__pycache__/graph_api.cpython-311.opt-2.pyc +0 -0
  13. sage/middleware/api/__pycache__/graph_api.cpython-311.pyc +0 -0
  14. sage/middleware/api/__pycache__/kv_api.cpython-311.opt-2.pyc +0 -0
  15. sage/middleware/api/__pycache__/kv_api.cpython-311.pyc +0 -0
  16. sage/middleware/api/__pycache__/memory_api.cpython-311.opt-2.pyc +0 -0
  17. sage/middleware/api/__pycache__/memory_api.cpython-311.pyc +0 -0
  18. sage/middleware/api/__pycache__/vdb_api.cpython-311.opt-2.pyc +0 -0
  19. sage/middleware/api/__pycache__/vdb_api.cpython-311.pyc +0 -0
  20. sage/middleware/components/enterprise/__init__.py +37 -0
  21. sage/middleware/components/enterprise/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  22. sage/middleware/components/enterprise/__pycache__/__init__.cpython-311.pyc +0 -0
  23. sage/middleware/components/neuromem/__init__.py +37 -0
  24. sage/middleware/components/neuromem/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  25. sage/middleware/components/neuromem/__pycache__/__init__.cpython-311.pyc +0 -0
  26. sage/middleware/components/neuromem/__pycache__/memory_manager.cpython-311.opt-2.pyc +0 -0
  27. sage/middleware/components/neuromem/__pycache__/memory_manager.cpython-311.pyc +0 -0
  28. sage/middleware/components/neuromem/__pycache__/memory_service.cpython-311.opt-2.pyc +0 -0
  29. sage/middleware/components/neuromem/__pycache__/memory_service.cpython-311.pyc +0 -0
  30. sage/middleware/components/neuromem/memory_collection/__init__.py +37 -0
  31. sage/middleware/components/neuromem/memory_collection/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  32. sage/middleware/components/neuromem/memory_collection/__pycache__/__init__.cpython-311.pyc +0 -0
  33. sage/middleware/components/neuromem/memory_collection/__pycache__/base_collection.cpython-311.opt-2.pyc +0 -0
  34. sage/middleware/components/neuromem/memory_collection/__pycache__/base_collection.cpython-311.pyc +0 -0
  35. sage/middleware/components/neuromem/memory_collection/__pycache__/graph_collection.cpython-311.opt-2.pyc +0 -0
  36. sage/middleware/components/neuromem/memory_collection/__pycache__/graph_collection.cpython-311.pyc +0 -0
  37. sage/middleware/components/neuromem/memory_collection/__pycache__/kv_collection.cpython-311.opt-2.pyc +0 -0
  38. sage/middleware/components/neuromem/memory_collection/__pycache__/kv_collection.cpython-311.pyc +0 -0
  39. sage/middleware/components/neuromem/memory_collection/__pycache__/vdb_collection.cpython-311.opt-2.pyc +0 -0
  40. sage/middleware/components/neuromem/memory_collection/__pycache__/vdb_collection.cpython-311.pyc +0 -0
  41. sage/middleware/components/neuromem/memory_collection/base_collection.py +167 -0
  42. sage/middleware/components/neuromem/memory_collection/graph_collection.py +11 -0
  43. sage/middleware/components/neuromem/memory_collection/kv_collection.py +709 -0
  44. sage/middleware/components/neuromem/memory_collection/vdb_collection.py +922 -0
  45. sage/middleware/components/neuromem/memory_manager.py +401 -0
  46. sage/middleware/components/neuromem/memory_service.py +324 -0
  47. sage/middleware/components/neuromem/micro_service/__init__.py +37 -0
  48. sage/middleware/components/neuromem/micro_service/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  49. sage/middleware/components/neuromem/micro_service/__pycache__/__init__.cpython-311.pyc +0 -0
  50. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb.cpython-311.opt-2.pyc +0 -0
  51. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb.cpython-311.pyc +0 -0
  52. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb_service.cpython-311.opt-2.pyc +0 -0
  53. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb_service.cpython-311.pyc +0 -0
  54. sage/middleware/components/neuromem/micro_service/neuromem_vdb.py +198 -0
  55. sage/middleware/components/neuromem/micro_service/neuromem_vdb_service.py +118 -0
  56. sage/middleware/components/neuromem/search_engine/__init__.py +37 -0
  57. sage/middleware/components/neuromem/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  58. sage/middleware/components/neuromem/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  59. sage/middleware/components/neuromem/search_engine/graph_index/__init__.py +37 -0
  60. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  61. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/__init__.cpython-311.pyc +0 -0
  62. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/base_graph_index.cpython-311.opt-2.pyc +0 -0
  63. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/base_graph_index.cpython-311.pyc +0 -0
  64. sage/middleware/components/neuromem/search_engine/graph_index/base_graph_index.py +40 -0
  65. sage/middleware/components/neuromem/search_engine/hybird_index/__init__.py +37 -0
  66. sage/middleware/components/neuromem/search_engine/hybird_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  67. sage/middleware/components/neuromem/search_engine/hybird_index/__pycache__/__init__.cpython-311.pyc +0 -0
  68. sage/middleware/components/neuromem/search_engine/kv_index/__init__.py +37 -0
  69. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  70. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/__init__.cpython-311.pyc +0 -0
  71. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/base_kv_index.cpython-311.opt-2.pyc +0 -0
  72. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/base_kv_index.cpython-311.pyc +0 -0
  73. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/bm25s_index.cpython-311.opt-2.pyc +0 -0
  74. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/bm25s_index.cpython-311.pyc +0 -0
  75. sage/middleware/components/neuromem/search_engine/kv_index/base_kv_index.py +76 -0
  76. sage/middleware/components/neuromem/search_engine/kv_index/bm25s_index.py +320 -0
  77. sage/middleware/components/neuromem/search_engine/vdb_index/__init__.py +37 -0
  78. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  79. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/__init__.cpython-311.pyc +0 -0
  80. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/base_vdb_index.cpython-311.opt-2.pyc +0 -0
  81. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/base_vdb_index.cpython-311.pyc +0 -0
  82. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/faiss_index.cpython-311.opt-2.pyc +0 -0
  83. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/faiss_index.cpython-311.pyc +0 -0
  84. sage/middleware/components/neuromem/search_engine/vdb_index/base_vdb_index.py +53 -0
  85. sage/middleware/components/neuromem/search_engine/vdb_index/faiss_index.py +700 -0
  86. sage/middleware/components/neuromem/storage_engine/__init__.py +37 -0
  87. sage/middleware/components/neuromem/storage_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  88. sage/middleware/components/neuromem/storage_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  89. sage/middleware/components/neuromem/storage_engine/__pycache__/metadata_storage.cpython-311.opt-2.pyc +0 -0
  90. sage/middleware/components/neuromem/storage_engine/__pycache__/metadata_storage.cpython-311.pyc +0 -0
  91. sage/middleware/components/neuromem/storage_engine/__pycache__/text_storage.cpython-311.opt-2.pyc +0 -0
  92. sage/middleware/components/neuromem/storage_engine/__pycache__/text_storage.cpython-311.pyc +0 -0
  93. sage/middleware/components/neuromem/storage_engine/__pycache__/vector_storage.cpython-311.opt-2.pyc +0 -0
  94. sage/middleware/components/neuromem/storage_engine/__pycache__/vector_storage.cpython-311.pyc +0 -0
  95. sage/middleware/components/neuromem/storage_engine/kv_backend/__init__.py +37 -0
  96. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  97. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/__init__.cpython-311.pyc +0 -0
  98. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/base_kv_backend.cpython-311.opt-2.pyc +0 -0
  99. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/base_kv_backend.cpython-311.pyc +0 -0
  100. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/dict_kv_backend.cpython-311.opt-2.pyc +0 -0
  101. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/dict_kv_backend.cpython-311.pyc +0 -0
  102. sage/middleware/components/neuromem/storage_engine/kv_backend/base_kv_backend.py +65 -0
  103. sage/middleware/components/neuromem/storage_engine/kv_backend/dict_kv_backend.py +54 -0
  104. sage/middleware/components/neuromem/storage_engine/metadata_storage.py +260 -0
  105. sage/middleware/components/neuromem/storage_engine/text_storage.py +106 -0
  106. sage/middleware/components/neuromem/storage_engine/vector_storage.py +85 -0
  107. sage/middleware/components/neuromem/tests/__init__.py +37 -0
  108. sage/middleware/components/neuromem/tests/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  109. sage/middleware/components/neuromem/tests/__pycache__/__init__.cpython-311.pyc +0 -0
  110. sage/middleware/components/neuromem/tests/__pycache__/test_memory_service.cpython-311.opt-2.pyc +0 -0
  111. sage/middleware/components/neuromem/tests/__pycache__/test_memory_service.cpython-311.pyc +0 -0
  112. sage/middleware/components/neuromem/tests/core_test/__init__.py +37 -0
  113. sage/middleware/components/neuromem/tests/core_test/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  114. sage/middleware/components/neuromem/tests/core_test/__pycache__/__init__.cpython-311.pyc +0 -0
  115. sage/middleware/components/neuromem/tests/core_test/collection_test/__init__.py +37 -0
  116. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  117. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/__init__.cpython-311.pyc +0 -0
  118. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/kv_collection_test.cpython-311.opt-2.pyc +0 -0
  119. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/kv_collection_test.cpython-311.pyc +0 -0
  120. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/vdb_collection_test.cpython-311.opt-2.pyc +0 -0
  121. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/vdb_collection_test.cpython-311.pyc +0 -0
  122. sage/middleware/components/neuromem/tests/core_test/collection_test/kv_collection_test.py +60 -0
  123. sage/middleware/components/neuromem/tests/core_test/collection_test/vdb_collection_test.py +88 -0
  124. sage/middleware/components/neuromem/tests/core_test/manager_test.py +154 -0
  125. sage/middleware/components/neuromem/tests/test_memory_service.py +293 -0
  126. sage/middleware/components/neuromem/utils/__init__.py +37 -0
  127. sage/middleware/components/neuromem/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  128. sage/middleware/components/neuromem/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  129. sage/middleware/components/neuromem/utils/__pycache__/path_utils.cpython-311.opt-2.pyc +0 -0
  130. sage/middleware/components/neuromem/utils/__pycache__/path_utils.cpython-311.pyc +0 -0
  131. sage/middleware/components/neuromem/utils/path_utils.py +25 -0
  132. sage/middleware/components/sage_db/__init__.py +37 -0
  133. sage/middleware/components/sage_db/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  134. sage/middleware/components/sage_db/__pycache__/__init__.cpython-311.pyc +0 -0
  135. sage/middleware/{enterprise → components}/sage_db/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
  136. sage/middleware/{enterprise → components}/sage_db/__pycache__/sage_db.cpython-311.pyc +0 -0
  137. sage/middleware/components/sage_db/python/__init__.py +37 -0
  138. sage/middleware/components/sage_db/python/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  139. sage/middleware/components/sage_db/python/__pycache__/__init__.cpython-311.pyc +0 -0
  140. sage/middleware/{enterprise → components}/sage_db/python/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
  141. sage/middleware/{enterprise → components}/sage_db/python/__pycache__/sage_db.cpython-311.pyc +0 -0
  142. sage/middleware/{enterprise → components}/sage_db/tests/__pycache__/test_python.cpython-311.opt-2.pyc +0 -0
  143. sage/middleware/{enterprise → components}/sage_db/tests/__pycache__/test_python.cpython-311.pyc +0 -0
  144. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-311.opt-2.pyc +0 -0
  145. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-311.pyc +0 -0
  146. sage/middleware/examples/__pycache__/microservices_demo.cpython-311.opt-2.pyc +0 -0
  147. sage/middleware/examples/__pycache__/microservices_demo.cpython-311.pyc +0 -0
  148. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-311.opt-2.pyc +0 -0
  149. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-311.pyc +0 -0
  150. sage/middleware/examples/api_usage_tutorial.py +3 -3
  151. sage/middleware/examples/dag_microservices_demo.py +7 -8
  152. sage/middleware/examples/microservices_integration_demo.py +8 -11
  153. sage/middleware/examples/microservices_registration_demo.py +8 -12
  154. sage/middleware/services/__init__.py +37 -0
  155. sage/middleware/services/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  156. sage/middleware/services/__pycache__/__init__.cpython-311.pyc +0 -0
  157. sage/middleware/services/graph/__init__.py +33 -4
  158. sage/middleware/services/graph/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  159. sage/middleware/services/graph/__pycache__/__init__.cpython-311.pyc +0 -0
  160. sage/middleware/services/graph/__pycache__/graph_index.cpython-311.opt-2.pyc +0 -0
  161. sage/middleware/services/graph/__pycache__/graph_index.cpython-311.pyc +0 -0
  162. sage/middleware/services/graph/__pycache__/graph_service.cpython-311.opt-2.pyc +0 -0
  163. sage/middleware/services/graph/__pycache__/graph_service.cpython-311.pyc +0 -0
  164. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-311.opt-2.pyc +0 -0
  165. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-311.pyc +0 -0
  166. sage/middleware/services/graph/examples/graph_demo.py +3 -2
  167. sage/middleware/services/graph/graph_service.py +68 -0
  168. sage/middleware/services/graph/search_engine/__init__.py +37 -0
  169. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  170. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  171. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-311.opt-2.pyc +0 -0
  172. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-311.pyc +0 -0
  173. sage/middleware/services/kv/__init__.py +33 -4
  174. sage/middleware/services/kv/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  175. sage/middleware/services/kv/__pycache__/__init__.cpython-311.pyc +0 -0
  176. sage/middleware/services/kv/__pycache__/kv_service.cpython-311.opt-2.pyc +0 -0
  177. sage/middleware/services/kv/__pycache__/kv_service.cpython-311.pyc +0 -0
  178. sage/middleware/services/kv/examples/__pycache__/kv_demo.cpython-311.opt-2.pyc +0 -0
  179. sage/middleware/services/kv/examples/__pycache__/kv_demo.cpython-311.pyc +0 -0
  180. sage/middleware/services/kv/examples/kv_demo.py +1 -1
  181. sage/middleware/services/kv/search_engine/__init__.py +37 -0
  182. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  183. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  184. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-311.opt-2.pyc +0 -0
  185. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-311.pyc +0 -0
  186. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-311.opt-2.pyc +0 -0
  187. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-311.pyc +0 -0
  188. sage/middleware/services/memory/__init__.py +33 -8
  189. sage/middleware/services/memory/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  190. sage/middleware/services/memory/__pycache__/__init__.cpython-311.pyc +0 -0
  191. sage/middleware/services/memory/__pycache__/memory_service.cpython-311.opt-2.pyc +0 -0
  192. sage/middleware/services/memory/__pycache__/memory_service.cpython-311.pyc +0 -0
  193. sage/middleware/services/memory/examples/__pycache__/memory_demo.cpython-311.opt-2.pyc +0 -0
  194. sage/middleware/services/memory/examples/__pycache__/memory_demo.cpython-311.pyc +0 -0
  195. sage/middleware/services/memory/examples/dag_microservices_demo.py +8 -9
  196. sage/middleware/services/memory/examples/memory_demo.py +4 -4
  197. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-311.opt-2.pyc +0 -0
  198. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-311.pyc +0 -0
  199. sage/middleware/services/memory/memory_service.py +14 -11
  200. sage/middleware/services/memory/utils/__init__.py +37 -0
  201. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  202. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  203. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-311.opt-2.pyc +0 -0
  204. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-311.pyc +0 -0
  205. sage/middleware/services/vdb/__init__.py +33 -4
  206. sage/middleware/services/vdb/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  207. sage/middleware/services/vdb/__pycache__/__init__.cpython-311.pyc +0 -0
  208. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-311.opt-2.pyc +0 -0
  209. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-311.pyc +0 -0
  210. sage/middleware/services/vdb/examples/__pycache__/vdb_demo.cpython-311.opt-2.pyc +0 -0
  211. sage/middleware/services/vdb/examples/__pycache__/vdb_demo.cpython-311.pyc +0 -0
  212. sage/middleware/services/vdb/examples/vdb_demo.py +2 -2
  213. sage/middleware/services/vdb/search_engine/__init__.py +37 -0
  214. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  215. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  216. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-311.opt-2.pyc +0 -0
  217. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-311.pyc +0 -0
  218. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-311.opt-2.pyc +0 -0
  219. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-311.pyc +0 -0
  220. sage/middleware/services/vdb/vdb_service.py +44 -41
  221. sage/middleware/utils/__init__.py +34 -2
  222. sage/middleware/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  223. sage/middleware/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  224. sage/middleware/utils/embedding/__init__.py +33 -31
  225. sage/middleware/utils/embedding/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  226. sage/middleware/utils/embedding/__pycache__/__init__.cpython-311.pyc +0 -0
  227. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-311.opt-2.pyc +0 -0
  228. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-311.pyc +0 -0
  229. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-311.opt-2.pyc +0 -0
  230. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-311.pyc +0 -0
  231. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-311.opt-2.pyc +0 -0
  232. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-311.pyc +0 -0
  233. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-311.opt-2.pyc +0 -0
  234. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-311.pyc +0 -0
  235. sage/middleware/utils/embedding/__pycache__/hf.cpython-311.opt-2.pyc +0 -0
  236. sage/middleware/utils/embedding/__pycache__/hf.cpython-311.pyc +0 -0
  237. sage/middleware/utils/embedding/__pycache__/instructor.cpython-311.opt-2.pyc +0 -0
  238. sage/middleware/utils/embedding/__pycache__/instructor.cpython-311.pyc +0 -0
  239. sage/middleware/utils/embedding/__pycache__/jina.cpython-311.opt-2.pyc +0 -0
  240. sage/middleware/utils/embedding/__pycache__/jina.cpython-311.pyc +0 -0
  241. sage/middleware/utils/embedding/__pycache__/lollms.cpython-311.opt-2.pyc +0 -0
  242. sage/middleware/utils/embedding/__pycache__/lollms.cpython-311.pyc +0 -0
  243. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-311.opt-2.pyc +0 -0
  244. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-311.pyc +0 -0
  245. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-311.opt-2.pyc +0 -0
  246. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-311.pyc +0 -0
  247. sage/middleware/utils/embedding/__pycache__/ollama.cpython-311.opt-2.pyc +0 -0
  248. sage/middleware/utils/embedding/__pycache__/ollama.cpython-311.pyc +0 -0
  249. sage/middleware/utils/embedding/__pycache__/openai.cpython-311.opt-2.pyc +0 -0
  250. sage/middleware/utils/embedding/__pycache__/openai.cpython-311.pyc +0 -0
  251. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-311.opt-2.pyc +0 -0
  252. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-311.pyc +0 -0
  253. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-311.opt-2.pyc +0 -0
  254. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-311.pyc +0 -0
  255. isage_middleware-0.1.0.dist-info/METADATA +0 -424
  256. isage_middleware-0.1.0.dist-info/RECORD +0 -191
  257. sage/middleware/enterprise/__init__.py +0 -75
  258. sage/middleware/enterprise/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  259. sage/middleware/enterprise/__pycache__/__init__.cpython-311.pyc +0 -0
  260. sage/middleware/enterprise/sage_db/__init__.py +0 -132
  261. sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  262. sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-311.pyc +0 -0
  263. sage/middleware/enterprise/sage_db/python/__init__.py +0 -7
  264. sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  265. sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-311.pyc +0 -0
  266. sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-311.opt-2.pyc +0 -0
  267. sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-311.pyc +0 -0
  268. sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-311.opt-2.pyc +0 -0
  269. sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-311.pyc +0 -0
  270. sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-311.opt-2.pyc +0 -0
  271. sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-311.pyc +0 -0
  272. sage/middleware/services/memory/memory_collection/__pycache__/base_collection.cpython-311.opt-2.pyc +0 -0
  273. sage/middleware/services/memory/memory_collection/__pycache__/base_collection.cpython-311.pyc +0 -0
  274. sage/middleware/services/memory/memory_collection/__pycache__/kv_collection.cpython-311.opt-2.pyc +0 -0
  275. sage/middleware/services/memory/memory_collection/__pycache__/kv_collection.cpython-311.pyc +0 -0
  276. sage/middleware/services/memory/memory_collection/__pycache__/vdb_collection.cpython-311.opt-2.pyc +0 -0
  277. sage/middleware/services/memory/memory_collection/__pycache__/vdb_collection.cpython-311.pyc +0 -0
  278. sage/middleware/services/memory/memory_collection/base_collection.py +0 -0
  279. sage/middleware/services/memory/memory_collection/kv_collection.py +0 -0
  280. sage/middleware/services/memory/memory_collection/vdb_collection.py +0 -0
  281. {isage_middleware-0.1.0.dist-info → isage_middleware-0.1.4.dist-info}/WHEEL +0 -0
  282. {isage_middleware-0.1.0.dist-info → isage_middleware-0.1.4.dist-info}/top_level.txt +0 -0
  283. /sage/middleware/{enterprise → components}/sage_db/python/sage_db.py +0 -0
  284. /sage/middleware/{enterprise → components}/sage_db/sage_db.py +0 -0
  285. /sage/middleware/{enterprise → components}/sage_db/tests/test_python.py +0 -0
@@ -0,0 +1,401 @@
1
+ # sage/service/memory/memory_manager.py
2
+ # python -m sage.middleware.services.neuromem.memory_manager
3
+ import os
4
+ import json
5
+ import shutil
6
+ from typing import Any, Dict, List, Optional, Union
7
+
8
+ from sage.common.utils.logging.custom_logger import CustomLogger
9
+ from sage.middleware.components.neuromem.utils.path_utils import get_default_data_dir
10
+ from sage.middleware.components.neuromem.memory_collection.base_collection import BaseMemoryCollection
11
+ from sage.middleware.components.neuromem.memory_collection.graph_collection import GraphMemoryCollection
12
+ from sage.middleware.components.neuromem.memory_collection.kv_collection import KVMemoryCollection
13
+ from sage.middleware.components.neuromem.memory_collection.vdb_collection import VDBMemoryCollection
14
+ from sage.middleware.utils.embedding.embedding_api import apply_embedding_model
15
+
16
+ class MemoryManager:
17
+ """
18
+ 内存管理器,管理不同类型的 MemoryCollection 实例
19
+ """
20
+
21
+ def __init__(self, data_dir: Optional[str] = None):
22
+ self.logger = CustomLogger()
23
+
24
+ self.collections: Dict[str, BaseMemoryCollection] = {}
25
+ self.collection_metadata: Dict[str, Dict[str, Any]] = {}
26
+ self.collection_status: Dict[str, str] = {} # 状态表: "loaded" or "on_disk"
27
+
28
+ # 从默认目录data/sage_memory获取disk中的manager(如果有)
29
+ self.data_dir = data_dir or get_default_data_dir()
30
+ self.manager_path = os.path.join(self.data_dir, "manager.json")
31
+ self._load_manager()
32
+
33
+ def create_collection(
34
+ self,
35
+ name: str,
36
+ backend_type: str,
37
+ description: str = "",
38
+ embedding_model: Optional[Any] = None,
39
+ dim: Optional[int] = None,
40
+ ) -> BaseMemoryCollection:
41
+ """
42
+ 创建新的集合
43
+ 直接返回collection
44
+ """
45
+
46
+ if name in self.collection_metadata:
47
+ self.logger.warning(f"Collection with name '{name}' already exists.")
48
+ return None
49
+
50
+ metadata = {
51
+ "description": description,
52
+ "backend_type": backend_type
53
+ }
54
+
55
+ # 创建基础集合
56
+ if backend_type == "VDB":
57
+ if embedding_model is None or dim is None:
58
+ self.logger.warning(f"VDB requires parameter 'embedding_model' and 'dim', use default values.")
59
+ embedding_model = apply_embedding_model("default")
60
+ dim = embedding_model.get_dim()
61
+
62
+ # 使用新的config字典方式创建VDB集合
63
+ vdb_config = {
64
+ "name": name,
65
+ "default_embedding_model": embedding_model.method_name,
66
+ "default_dim": dim
67
+ }
68
+ new_collection = VDBMemoryCollection(vdb_config)
69
+ metadata.update({
70
+ "embedding_model_method": embedding_model.method_name,
71
+ "embedding_dim": dim
72
+ })
73
+ elif backend_type == "KV":
74
+ # 使用新的config字典方式创建KV集合
75
+ kv_config = {
76
+ "name": name
77
+ }
78
+ new_collection = KVMemoryCollection(kv_config)
79
+ elif backend_type == "GRAPH":
80
+ new_collection = GraphMemoryCollection(name)
81
+ else:
82
+ self.logger.error(f"Unsupported backend_type: {backend_type}")
83
+
84
+ # 存储到 collections
85
+ self.collections[name] = new_collection
86
+ self.collection_metadata[name] = metadata
87
+ self.collection_status[name] = "loaded"
88
+ return new_collection
89
+
90
+ def get_collection(self, name: str) -> Optional[BaseMemoryCollection]:
91
+ """优先返回内存collection,不在内存则尝试磁盘懒加载并发警告"""
92
+ if name in self.collections:
93
+ return self.collections[name]
94
+ elif name in self.collection_metadata:
95
+ self.logger.warning(f"Collection '{name}' not in memory, loading from disk.")
96
+ return self._load_collection(name)
97
+ else:
98
+ self.logger.warning(f"Collection '{name}' not found.")
99
+ return None
100
+
101
+ def delete_collection(self, name: str):
102
+ """删除collection:内存、元数据、磁盘三处都要删"""
103
+ existed = False
104
+ # 内存
105
+ if name in self.collections:
106
+ del self.collections[name]
107
+ existed = True
108
+ # 元信息
109
+ if name in self.collection_metadata:
110
+ backend_type = self.collection_metadata[name].get("backend_type")
111
+ del self.collection_metadata[name]
112
+ self.collection_status.pop(name, None)
113
+ existed = True
114
+ # 磁盘
115
+ if backend_type == "VDB":
116
+ path = os.path.join(self.data_dir, "vdb_collection", name)
117
+ elif backend_type == "KV":
118
+ path = os.path.join(self.data_dir, "kv_collection", name)
119
+ elif backend_type == "GRAPH":
120
+ path = os.path.join(self.data_dir, "graph_collection", name)
121
+ else:
122
+ path = None
123
+ if path and os.path.exists(path):
124
+ try:
125
+ if os.path.isdir(path):
126
+ shutil.rmtree(path)
127
+ else:
128
+ os.remove(path)
129
+ except Exception as e:
130
+ self.logger.warning(f"Failed to delete disk collection '{name}': {e}")
131
+ if not existed:
132
+ self.logger.warning(f"Collection '{name}' not found.")
133
+ self._save_manager()
134
+
135
+ def connect_collection(self, name: str, embedding_model=None) -> Optional[BaseMemoryCollection]:
136
+ """类似get_collection,但支持外部embedding_model"""
137
+ if name in self.collections:
138
+ return self.collections[name]
139
+ if name not in self.collection_metadata:
140
+ self.logger.warning(f"Collection '{name}' not found in metadata.")
141
+ return None
142
+ meta = self.collection_metadata[name]
143
+ backend_type = meta.get("backend_type")
144
+ if backend_type == "VDB":
145
+ vdb_path = os.path.join(self.data_dir, "vdb_collection", name)
146
+ if embedding_model is None:
147
+ method_name = meta.get("embedding_model_method", "default")
148
+ embedding_model = apply_embedding_model(method_name)
149
+ # 使用新的load方法,只传入name和路径
150
+ collection = VDBMemoryCollection.load(name, vdb_path)
151
+ elif backend_type == "KV":
152
+ kv_path = os.path.join(self.data_dir, "kv_collection", name)
153
+ # 使用新的load方法,只传入name和路径
154
+ collection = KVMemoryCollection.load(name, kv_path)
155
+ elif backend_type == "GRAPH":
156
+ graph_path = os.path.join(self.data_dir, "graph_collection", name)
157
+ collection = GraphMemoryCollection.load(name, graph_path)
158
+ else:
159
+ self.logger.warning(f"Unknown backend_type: {backend_type}")
160
+ return None
161
+ self.collections[name] = collection
162
+ self.collection_status[name] = "loaded"
163
+ return collection
164
+
165
+ def store_collection(self, name: Optional[str] = None):
166
+ """
167
+ 只保存已加载(即被用过的)的collection及manager信息
168
+ """
169
+ # 指定name只存一个,否则只存所有已加载collection
170
+ collections_to_save = [name] if name else [
171
+ n for n, status in self.collection_status.items() if status == "loaded"
172
+ ]
173
+ for cname in collections_to_save:
174
+ if cname not in self.collections:
175
+ continue
176
+ collection = self.collections[cname]
177
+ if hasattr(collection, "store"):
178
+ # 传递MemoryManager的数据目录,让collection使用统一的目录结构
179
+ collection.store(self.data_dir)
180
+ self._save_manager()
181
+
182
+ def _save_manager(self):
183
+ with open(self.manager_path, "w", encoding="utf-8") as f:
184
+ json.dump(self.collection_metadata, f, ensure_ascii=False, indent=2)
185
+ self.logger.info(f"Manager info saved to {self.manager_path}")
186
+
187
+ def _load_manager(self):
188
+ """只加载collection_metadata和状态,不加载任何collection本体"""
189
+ if not os.path.exists(self.manager_path):
190
+ return
191
+ with open(self.manager_path, "r", encoding="utf-8") as f:
192
+ self.collection_metadata = json.load(f)
193
+ for name in self.collection_metadata:
194
+ self.collection_status[name] = "on_disk"
195
+
196
+ def _load_collection(self, name: str) -> Optional[BaseMemoryCollection]:
197
+ """懒加载collection进内存"""
198
+ if name not in self.collection_metadata:
199
+ self.logger.warning(f"Collection '{name}' metadata not found in manager.")
200
+ return None
201
+
202
+ meta = self.collection_metadata[name]
203
+ backend_type = meta.get("backend_type")
204
+ if backend_type == "VDB":
205
+ vdb_path = os.path.join(self.data_dir, "vdb_collection", name)
206
+ method_name = meta.get("embedding_model_method", "default")
207
+ embedding_model = apply_embedding_model(method_name)
208
+ # 使用新的load方法,只传入name和路径
209
+ collection = VDBMemoryCollection.load(name, vdb_path)
210
+ elif backend_type == "KV":
211
+ kv_path = os.path.join(self.data_dir, "kv_collection", name)
212
+ # 使用新的load方法,只传入name和路径
213
+ collection = KVMemoryCollection.load(name, kv_path)
214
+ elif backend_type == "GRAPH":
215
+ graph_path = os.path.join(self.data_dir, "graph_collection", name)
216
+ collection = GraphMemoryCollection.load(name, graph_path)
217
+ else:
218
+ self.logger.warning(f"Unknown backend_type: {backend_type}")
219
+ return None
220
+
221
+ self.collections[name] = collection
222
+ self.collection_status[name] = "loaded"
223
+ return collection
224
+
225
+
226
+ def list_collection(self, name: Optional[str] = None) -> Union[Dict[str, Any], List[Dict[str, Any]]]:
227
+ """
228
+ 列出一个或所有 collection 的基本信息。
229
+ List basic info of one or all collections.
230
+ """
231
+ if name:
232
+ if name not in self.collection_metadata:
233
+ self.logger.warning(f"Collection '{name}' not found.")
234
+ return None
235
+ return {"name": name, "status": self.collection_status.get(name, "unknown"), **self.collection_metadata[name]}
236
+ else:
237
+ return [
238
+ {"name": n, "status": self.collection_status.get(n, "unknown"), **meta}
239
+ for n, meta in self.collection_metadata.items()
240
+ ]
241
+
242
+ def rename(self, former_name: str, new_name: str, new_description: Optional[str] = None):
243
+ """重命名 collection 并更新描述"""
244
+ if former_name not in self.collection_metadata:
245
+ self.logger.warning(f"Collection '{former_name}' not found.")
246
+ return False
247
+ if new_name in self.collection_metadata:
248
+ self.logger.warning(f"Collection '{new_name}' already exists.")
249
+ return False
250
+
251
+ # 重命名内存对象
252
+ if former_name in self.collections:
253
+ collection = self.collections.pop(former_name)
254
+ collection.name = new_name
255
+ self.collections[new_name] = collection
256
+
257
+ # 重命名状态表
258
+ if former_name in self.collection_status:
259
+ self.collection_status[new_name] = self.collection_status.pop(former_name)
260
+
261
+ # 更新元信息
262
+ metadata = self.collection_metadata.pop(former_name)
263
+ metadata["description"] = new_description or metadata.get("description", "")
264
+ self.collection_metadata[new_name] = metadata
265
+
266
+ # 重命名磁盘目录/文件
267
+ backend_type = metadata.get("backend_type")
268
+ def get_path(n):
269
+ if backend_type == "VDB":
270
+ return os.path.join(self.data_dir, "vdb_collection", n)
271
+ elif backend_type == "KV":
272
+ return os.path.join(self.data_dir, "kv_collection", n)
273
+ elif backend_type == "GRAPH":
274
+ return os.path.join(self.data_dir, "graph_collection", n)
275
+ old_path = get_path(former_name)
276
+ new_path = get_path(new_name)
277
+ if os.path.exists(old_path):
278
+ os.rename(old_path, new_path)
279
+ self._save_manager()
280
+ return True
281
+
282
+
283
+
284
+ if __name__ == "__main__":
285
+ import os
286
+ import shutil
287
+
288
+ def print_result(expect, actual, passed):
289
+ green = '\033[92m'
290
+ red = '\033[91m'
291
+ endc = '\033[0m'
292
+ print(f"预期结果:{expect}")
293
+ print(f"实际结果:{actual}")
294
+ print("是否通过测试:", end="")
295
+ print(f"{green}是{endc}" if passed else f"{red}否{endc}")
296
+ print("="*50)
297
+
298
+ def clear_all_data(manager):
299
+ # 删除data_dir下所有collection目录和manager.json
300
+ base = manager.data_dir
301
+ for subdir in ["vdb_collection"]:
302
+ path = os.path.join(base, subdir)
303
+ if os.path.exists(path):
304
+ shutil.rmtree(path)
305
+ if os.path.exists(manager.manager_path):
306
+ os.remove(manager.manager_path)
307
+
308
+ # 测试1: 创建新VDB collection
309
+ manager = MemoryManager()
310
+ c1 = manager.create_collection(name="test_vdb", backend_type="VDB")
311
+ passed = c1 is not None and "test_vdb" in manager.collections
312
+ print_result("新建test_vdb后能在collections中查到", str("test_vdb" in manager.collections), passed)
313
+
314
+ # 测试2: 再次新建同名collection应警告并返回None
315
+ c2 = manager.create_collection(name="test_vdb", backend_type="VDB")
316
+ passed = c2 is None
317
+ print_result("新建已存在collection应返回None", str(c2 is None), passed)
318
+
319
+ # 测试3: list_collection返回正确,状态为loaded
320
+ info = manager.list_collection("test_vdb")
321
+ passed = info is not None and info['status'] == "loaded"
322
+ print_result("list_collection显示状态为loaded", f"{info}", passed)
323
+
324
+ # 测试4: get_collection取已存在的
325
+ c3 = manager.get_collection("test_vdb")
326
+ passed = c3 is c1
327
+ print_result("get_collection能返回内存已加载对象", f"id相同: {c3 is c1}", passed)
328
+
329
+ # 测试5: store_collection只保存已加载collection
330
+ manager.store_collection()
331
+ path = os.path.join(manager.data_dir, "vdb_collection", "test_vdb")
332
+ passed = os.path.exists(path)
333
+ print_result("store_collection后磁盘应有数据目录", str(os.path.exists(path)), passed)
334
+
335
+ # 测试6: 模拟“只在磁盘不在内存”的懒加载
336
+ del manager.collections["test_vdb"]
337
+ manager.collection_status["test_vdb"] = "on_disk"
338
+ passed = "test_vdb" not in manager.collections and os.path.exists(os.path.join(manager.data_dir, "vdb_collection", "test_vdb"))
339
+ print_result("未加载collection不会在collections", str(passed), passed)
340
+
341
+ # 测试7: get_collection能从磁盘懒加载
342
+ c4 = manager.get_collection("test_vdb")
343
+ passed = c4 is not None and "test_vdb" in manager.collections and manager.collection_status["test_vdb"] == "loaded"
344
+ print_result("get_collection能懒加载on_disk collection", str(passed), passed)
345
+
346
+ # 测试8: rename
347
+ r = manager.rename("test_vdb", "renamed_vdb", "renamed desc")
348
+ passed = r and "renamed_vdb" in manager.collections
349
+ print_result("rename操作成功", str(r), passed)
350
+
351
+ # store 一下,保证磁盘有数据
352
+ manager.store_collection("renamed_vdb")
353
+
354
+ print("\n==中间测试==")
355
+ print("请确认manager.json、collection磁盘文件已经存在。")
356
+ print("输入yes继续从磁盘加载测试,否则中止(将自动清理):")
357
+ ans = input().strip().lower()
358
+ if ans != "yes":
359
+ print("用户中止,已清理所有测试数据。")
360
+ clear_all_data(manager)
361
+ exit(0)
362
+
363
+ # 测试9: 用新manager对象从磁盘懒加载
364
+ manager2 = MemoryManager(manager.data_dir)
365
+ loaded = "renamed_vdb" in manager2.collection_metadata and manager2.collection_status.get("renamed_vdb") == "on_disk"
366
+ print_result("新manager能从磁盘加载管理信息(collection未自动加载)", str(loaded), loaded)
367
+
368
+ # 测试10: list_collection(全部)
369
+ all_info = manager.list_collection()
370
+ passed = isinstance(all_info, list)
371
+ print_result("list_collection()能返回所有collection列表", str(passed), passed)
372
+
373
+ print("\n==中间测试==")
374
+ print("请确认manager.json、collection磁盘文件已经存在。")
375
+ print("输入yes继续从磁盘加载测试,否则中止(将自动清理):")
376
+ ans = input().strip().lower()
377
+ if ans != "yes":
378
+ print("用户中止,已清理所有测试数据。")
379
+ clear_all_data(manager)
380
+ exit(0)
381
+
382
+ # 测试11: 用新manager对象从磁盘懒加载
383
+ manager2 = MemoryManager(manager.data_dir)
384
+ loaded = "test_vdb" in manager2.collection_metadata or "renamed_vdb" in manager2.collection_metadata
385
+ print_result("新manager能从磁盘加载管理信息(collection未自动加载)", str(loaded), loaded)
386
+
387
+ # 如果上面已重命名并删除,理论上只有空的或剩余collection
388
+ # 为了测试懒加载,再新建并保存一次
389
+ cnew = manager2.create_collection("lazy_test", backend_type="VDB")
390
+ manager2.store_collection()
391
+ del manager2.collections["lazy_test"]
392
+ manager2.collection_status["lazy_test"] = "on_disk"
393
+ c5 = manager2.get_collection("lazy_test")
394
+ passed = c5 is not None and manager2.collection_status["lazy_test"] == "loaded"
395
+ print_result("新manager懒加载on_disk collection后状态变为loaded", str(passed), passed)
396
+
397
+ # 清理所有
398
+ clear_all_data(manager)
399
+ print("\n所有测试完成,已清理测试数据!")
400
+
401
+