isage-middleware 0.1.1__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 (379) 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/components/sage_db/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
  139. sage/middleware/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/components/sage_db/python/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
  144. sage/middleware/components/sage_db/python/__pycache__/sage_db.cpython-311.pyc +0 -0
  145. sage/middleware/components/sage_db/tests/__pycache__/test_python.cpython-311.opt-2.pyc +0 -0
  146. sage/middleware/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-313.opt-2.pyc → kv_demo.cpython-311.opt-2.pyc} +0 -0
  182. sage/middleware/services/kv/examples/__pycache__/{kv_demo.cpython-313.pyc → 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-313.opt-2.pyc → memory_demo.cpython-311.opt-2.pyc} +0 -0
  197. sage/middleware/services/memory/examples/__pycache__/{memory_demo.cpython-313.pyc → 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-313.opt-2.pyc → vdb_demo.cpython-311.opt-2.pyc} +0 -0
  214. sage/middleware/services/vdb/examples/__pycache__/{vdb_demo.cpython-313.pyc → 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.1.dist-info/METADATA +0 -424
  259. isage_middleware-0.1.1.dist-info/RECORD +0 -182
  260. sage/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  261. sage/__pycache__/__init__.cpython-313.pyc +0 -0
  262. sage/middleware/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  263. sage/middleware/__pycache__/__init__.cpython-313.pyc +0 -0
  264. sage/middleware/api/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  265. sage/middleware/api/__pycache__/__init__.cpython-313.pyc +0 -0
  266. sage/middleware/api/__pycache__/graph_api.cpython-313.opt-2.pyc +0 -0
  267. sage/middleware/api/__pycache__/graph_api.cpython-313.pyc +0 -0
  268. sage/middleware/api/__pycache__/kv_api.cpython-313.opt-2.pyc +0 -0
  269. sage/middleware/api/__pycache__/kv_api.cpython-313.pyc +0 -0
  270. sage/middleware/api/__pycache__/memory_api.cpython-313.opt-2.pyc +0 -0
  271. sage/middleware/api/__pycache__/memory_api.cpython-313.pyc +0 -0
  272. sage/middleware/api/__pycache__/vdb_api.cpython-313.opt-2.pyc +0 -0
  273. sage/middleware/api/__pycache__/vdb_api.cpython-313.pyc +0 -0
  274. sage/middleware/enterprise/__init__.py +0 -75
  275. sage/middleware/enterprise/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  276. sage/middleware/enterprise/__pycache__/__init__.cpython-313.pyc +0 -0
  277. sage/middleware/enterprise/sage_db/__init__.py +0 -132
  278. sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  279. sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-313.pyc +0 -0
  280. sage/middleware/enterprise/sage_db/__pycache__/sage_db.cpython-313.opt-2.pyc +0 -0
  281. sage/middleware/enterprise/sage_db/__pycache__/sage_db.cpython-313.pyc +0 -0
  282. sage/middleware/enterprise/sage_db/python/__init__.py +0 -7
  283. sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  284. sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-313.pyc +0 -0
  285. sage/middleware/enterprise/sage_db/python/__pycache__/sage_db.cpython-313.opt-2.pyc +0 -0
  286. sage/middleware/enterprise/sage_db/python/__pycache__/sage_db.cpython-313.pyc +0 -0
  287. sage/middleware/enterprise/sage_db/tests/__pycache__/test_python.cpython-313.opt-2.pyc +0 -0
  288. sage/middleware/enterprise/sage_db/tests/__pycache__/test_python.cpython-313.pyc +0 -0
  289. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-313.opt-2.pyc +0 -0
  290. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-313.pyc +0 -0
  291. sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-313.opt-2.pyc +0 -0
  292. sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-313.pyc +0 -0
  293. sage/middleware/examples/__pycache__/microservices_demo.cpython-313.opt-2.pyc +0 -0
  294. sage/middleware/examples/__pycache__/microservices_demo.cpython-313.pyc +0 -0
  295. sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-313.opt-2.pyc +0 -0
  296. sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-313.pyc +0 -0
  297. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-313.opt-2.pyc +0 -0
  298. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-313.pyc +0 -0
  299. sage/middleware/services/graph/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  300. sage/middleware/services/graph/__pycache__/__init__.cpython-313.pyc +0 -0
  301. sage/middleware/services/graph/__pycache__/graph_index.cpython-313.opt-2.pyc +0 -0
  302. sage/middleware/services/graph/__pycache__/graph_index.cpython-313.pyc +0 -0
  303. sage/middleware/services/graph/__pycache__/graph_service.cpython-313.opt-2.pyc +0 -0
  304. sage/middleware/services/graph/__pycache__/graph_service.cpython-313.pyc +0 -0
  305. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-313.opt-2.pyc +0 -0
  306. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-313.pyc +0 -0
  307. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  308. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-313.pyc +0 -0
  309. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-313.opt-2.pyc +0 -0
  310. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-313.pyc +0 -0
  311. sage/middleware/services/kv/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  312. sage/middleware/services/kv/__pycache__/__init__.cpython-313.pyc +0 -0
  313. sage/middleware/services/kv/__pycache__/kv_service.cpython-313.opt-2.pyc +0 -0
  314. sage/middleware/services/kv/__pycache__/kv_service.cpython-313.pyc +0 -0
  315. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  316. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-313.pyc +0 -0
  317. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-313.opt-2.pyc +0 -0
  318. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-313.pyc +0 -0
  319. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-313.opt-2.pyc +0 -0
  320. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-313.pyc +0 -0
  321. sage/middleware/services/memory/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  322. sage/middleware/services/memory/__pycache__/__init__.cpython-313.pyc +0 -0
  323. sage/middleware/services/memory/__pycache__/memory_service.cpython-313.opt-2.pyc +0 -0
  324. sage/middleware/services/memory/__pycache__/memory_service.cpython-313.pyc +0 -0
  325. sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-313.opt-2.pyc +0 -0
  326. sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-313.pyc +0 -0
  327. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-313.opt-2.pyc +0 -0
  328. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-313.pyc +0 -0
  329. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  330. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-313.pyc +0 -0
  331. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-313.opt-2.pyc +0 -0
  332. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-313.pyc +0 -0
  333. sage/middleware/services/vdb/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  334. sage/middleware/services/vdb/__pycache__/__init__.cpython-313.pyc +0 -0
  335. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-313.opt-2.pyc +0 -0
  336. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-313.pyc +0 -0
  337. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  338. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-313.pyc +0 -0
  339. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-313.opt-2.pyc +0 -0
  340. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-313.pyc +0 -0
  341. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-313.opt-2.pyc +0 -0
  342. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-313.pyc +0 -0
  343. sage/middleware/utils/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  344. sage/middleware/utils/__pycache__/__init__.cpython-313.pyc +0 -0
  345. sage/middleware/utils/embedding/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
  346. sage/middleware/utils/embedding/__pycache__/__init__.cpython-313.pyc +0 -0
  347. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-313.opt-2.pyc +0 -0
  348. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-313.pyc +0 -0
  349. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-313.opt-2.pyc +0 -0
  350. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-313.pyc +0 -0
  351. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-313.opt-2.pyc +0 -0
  352. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-313.pyc +0 -0
  353. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-313.opt-2.pyc +0 -0
  354. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-313.pyc +0 -0
  355. sage/middleware/utils/embedding/__pycache__/hf.cpython-313.opt-2.pyc +0 -0
  356. sage/middleware/utils/embedding/__pycache__/hf.cpython-313.pyc +0 -0
  357. sage/middleware/utils/embedding/__pycache__/instructor.cpython-313.opt-2.pyc +0 -0
  358. sage/middleware/utils/embedding/__pycache__/instructor.cpython-313.pyc +0 -0
  359. sage/middleware/utils/embedding/__pycache__/jina.cpython-313.opt-2.pyc +0 -0
  360. sage/middleware/utils/embedding/__pycache__/jina.cpython-313.pyc +0 -0
  361. sage/middleware/utils/embedding/__pycache__/lollms.cpython-313.opt-2.pyc +0 -0
  362. sage/middleware/utils/embedding/__pycache__/lollms.cpython-313.pyc +0 -0
  363. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-313.opt-2.pyc +0 -0
  364. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-313.pyc +0 -0
  365. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-313.opt-2.pyc +0 -0
  366. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-313.pyc +0 -0
  367. sage/middleware/utils/embedding/__pycache__/ollama.cpython-313.opt-2.pyc +0 -0
  368. sage/middleware/utils/embedding/__pycache__/ollama.cpython-313.pyc +0 -0
  369. sage/middleware/utils/embedding/__pycache__/openai.cpython-313.opt-2.pyc +0 -0
  370. sage/middleware/utils/embedding/__pycache__/openai.cpython-313.pyc +0 -0
  371. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-313.opt-2.pyc +0 -0
  372. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-313.pyc +0 -0
  373. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-313.opt-2.pyc +0 -0
  374. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-313.pyc +0 -0
  375. {isage_middleware-0.1.1.dist-info → isage_middleware-0.1.3.dist-info}/WHEEL +0 -0
  376. {isage_middleware-0.1.1.dist-info → isage_middleware-0.1.3.dist-info}/top_level.txt +0 -0
  377. /sage/middleware/{enterprise → components}/sage_db/python/sage_db.py +0 -0
  378. /sage/middleware/{enterprise → components}/sage_db/sage_db.py +0 -0
  379. /sage/middleware/{enterprise → components}/sage_db/tests/test_python.py +0 -0
@@ -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,65 @@
1
+ # file: sage/core/sage.middleware.services.neuromem./storage_engine/kv_backend/base_kv_backend.py
2
+
3
+ from abc import ABC, abstractmethod
4
+ from typing import Any
5
+
6
+ class BaseKVBackend(ABC):
7
+ """
8
+ Abstract base class for key-value backends.
9
+ 抽象基类,用于定义 KV 存储后端接口规范。
10
+ """
11
+ @abstractmethod
12
+ def get_all_keys(self) -> list[str]:
13
+ pass
14
+
15
+ @abstractmethod
16
+ def has(self, key: str) -> bool:
17
+ """
18
+ Check whether the key exists.
19
+ 检查指定键是否存在。
20
+ """
21
+ pass
22
+
23
+ @abstractmethod
24
+ def get(self, key: str) -> Any:
25
+ """
26
+ Retrieve value by key.
27
+ 根据键获取对应的值。
28
+ """
29
+ pass
30
+
31
+ @abstractmethod
32
+ def set(self, key: str, value: Any):
33
+ """
34
+ Set a key-value pair.
35
+ 存储键值对。
36
+ """
37
+ pass
38
+
39
+ @abstractmethod
40
+ def delete(self, key: str):
41
+ """
42
+ Delete a key-value pair.
43
+ 删除指定键及其对应的值。
44
+ """
45
+ pass
46
+
47
+ @abstractmethod
48
+ def clear(self):
49
+ """
50
+ Clear the entire store.
51
+ 清空所有键值对。
52
+ """
53
+ pass
54
+
55
+ @abstractmethod
56
+ def load_data_to_memory(self, path: str):
57
+ pass
58
+
59
+ @abstractmethod
60
+ def store_data_to_disk(self, path: str):
61
+ pass
62
+
63
+ @abstractmethod
64
+ def clear_disk_data(self, path: str):
65
+ pass
@@ -0,0 +1,54 @@
1
+ # file: sage/core/sage.middleware.services.neuromem./storage_engine/kv_backend/dict_kv_backend.py
2
+
3
+ import os
4
+ import json
5
+ from typing import Any, Dict
6
+ from sage.middleware.components.neuromem.storage_engine.kv_backend.base_kv_backend import BaseKVBackend
7
+
8
+ class DictKVBackend(BaseKVBackend):
9
+ """
10
+ In-memory KV backend using a Python dictionary.
11
+ """
12
+
13
+ def __init__(self):
14
+ self._store: Dict[str, Any] = {}
15
+
16
+ def has(self, key: str) -> bool:
17
+ return key in self._store
18
+
19
+ def get(self, key: str) -> Any:
20
+ return self._store.get(key)
21
+
22
+ def set(self, key: str, value: Any):
23
+ self._store[key] = value
24
+
25
+ def delete(self, key: str):
26
+ self._store.pop(key, None)
27
+
28
+ def clear(self):
29
+ self._store.clear()
30
+
31
+ def get_all_keys(self):
32
+ """
33
+ Get all keys in the store.
34
+ 获取所有存储的key。
35
+ """
36
+ return list(self._store.keys())
37
+
38
+ def store_data_to_disk(self, path: str):
39
+ """将当前内存数据存储为 JSON 文件"""
40
+ with open(path, 'w', encoding='utf-8') as f:
41
+ # 用 ensure_ascii=False 保证 utf-8 兼容中文,indent=2 可读性高
42
+ json.dump(self._store, f, ensure_ascii=False, indent=2)
43
+
44
+ def load_data_to_memory(self, path: str):
45
+ """从指定 JSON 文件加载数据到内存(覆盖当前 _store)"""
46
+ if not os.path.exists(path):
47
+ raise FileNotFoundError(f"File '{path}' does not exist.")
48
+ with open(path, 'r', encoding='utf-8') as f:
49
+ self._store = json.load(f)
50
+
51
+ def clear_disk_data(self, path: str):
52
+ """删除指定 JSON 文件"""
53
+ if os.path.exists(path):
54
+ os.remove(path)
@@ -0,0 +1,260 @@
1
+ # file sage/core/sage.middleware.services.neuromem./storage_engine/metadata_storage.py
2
+ # python -m sage.core.sage.middleware.services.neuromem..storage_engine.metadata_storage
3
+
4
+ from typing import Dict, Any, Optional, List
5
+
6
+ from sage.middleware.components.neuromem.storage_engine.kv_backend.base_kv_backend import BaseKVBackend
7
+ from sage.middleware.components.neuromem.storage_engine.kv_backend.dict_kv_backend import DictKVBackend
8
+
9
+
10
+ class MetadataStorage:
11
+ """
12
+ A lightweight metadata manager that handles field registration,
13
+ validation, and per-item metadata storage.
14
+ 简单的元数据管理器,用于处理字段注册、字段校验和每条数据的元数据存储。
15
+
16
+ Attributes:
17
+ fields (set): Set of registered metadata field names
18
+ backend (BaseKVBackend): Backend storage implementation
19
+ """
20
+
21
+ def __init__(self, backend: Optional[BaseKVBackend] = None):
22
+ # Registered metadata fields 已注册的元数据字段名集合
23
+ self.fields = set()
24
+ # 底层存储后端,默认是内存字典
25
+ self.backend = backend or DictKVBackend()
26
+
27
+ def add_field(self, field_name: str) -> None:
28
+ """
29
+ Register a new metadata field. If the field is already registered,
30
+ this operation is ignored.
31
+ 注册新的元数据字段。如果字段已存在,则忽略此操作。
32
+
33
+ Args:
34
+ field_name: Name of the field to register
35
+
36
+ Raises:
37
+ ValueError: If field_name is None or empty
38
+ """
39
+ if not field_name or not isinstance(field_name, str):
40
+ raise ValueError("Field name must be a non-empty string")
41
+ self.fields.add(field_name)
42
+
43
+ def has_field(self, field_name: str) -> bool:
44
+ """
45
+ Check if a field is registered.
46
+ 检查字段是否已注册。
47
+
48
+ Args:
49
+ field_name: Name of the field to check
50
+
51
+ Returns:
52
+ bool: True if the field is registered, False otherwise
53
+ """
54
+ return field_name in self.fields
55
+
56
+ def validate_fields(self, metadata: Dict[str, Any]) -> None:
57
+ """
58
+ Validate that all fields in the metadata are registered.
59
+ 验证所有元数据字段是否已注册。
60
+
61
+ Args:
62
+ metadata: Metadata dictionary to validate
63
+
64
+ Raises:
65
+ ValueError: If any field is not registered or if metadata is invalid
66
+ """
67
+ if not isinstance(metadata, dict):
68
+ raise ValueError("Metadata must be a dictionary")
69
+
70
+ unregistered = set(metadata.keys()) - self.fields
71
+ if unregistered:
72
+ raise ValueError(f"Unregistered metadata fields: {unregistered}")
73
+
74
+ def store(self, item_id: str, metadata: Dict[str, Any]) -> None:
75
+ """
76
+ Store metadata for an item.
77
+ 存储条目的元数据。
78
+
79
+ Args:
80
+ item_id: ID of the item
81
+ metadata: Metadata dictionary to store
82
+
83
+ Raises:
84
+ ValueError: If item_id is invalid or metadata validation fails
85
+ """
86
+ if not item_id or not isinstance(item_id, str):
87
+ raise ValueError("Item ID must be a non-empty string")
88
+ if metadata is None:
89
+ metadata = {}
90
+ elif not isinstance(metadata, dict):
91
+ raise ValueError("Metadata must be a dictionary")
92
+
93
+ self.validate_fields(metadata)
94
+ self.backend.set(item_id, metadata.copy())
95
+
96
+ def get_all_ids(self) -> List[str]:
97
+ """
98
+ Get all stored item IDs.
99
+ 获取所有已存储的条目ID。
100
+
101
+ Returns:
102
+ List of item IDs
103
+ """
104
+ return self.backend.get_all_keys()
105
+
106
+ def get(self, item_id: str) -> Dict[str, Any]:
107
+ """
108
+ Get metadata for an item.
109
+ 获取条目的元数据。
110
+
111
+ Args:
112
+ item_id: ID of the item
113
+
114
+ Returns:
115
+ Metadata dictionary, empty dict if item doesn't exist
116
+
117
+ Raises:
118
+ ValueError: If item_id is invalid
119
+ """
120
+ if not item_id or not isinstance(item_id, str):
121
+ raise ValueError("Item ID must be a non-empty string")
122
+ return self.backend.get(item_id) or {}
123
+
124
+ def has(self, item_id: str) -> bool:
125
+ """
126
+ Check if an item has metadata stored.
127
+ 检查条目是否有存储的元数据。
128
+
129
+ Args:
130
+ item_id: ID of the item to check
131
+
132
+ Returns:
133
+ bool: True if item has metadata, False otherwise
134
+
135
+ Raises:
136
+ ValueError: If item_id is invalid
137
+ """
138
+ if not item_id or not isinstance(item_id, str):
139
+ raise ValueError("Item ID must be a non-empty string")
140
+ return self.backend.has(item_id)
141
+
142
+ def delete(self, item_id: str) -> None:
143
+ """
144
+ Delete metadata for an item.
145
+ 删除条目的元数据。
146
+
147
+ Args:
148
+ item_id: ID of the item to delete
149
+
150
+ Raises:
151
+ ValueError: If item_id is invalid
152
+ """
153
+ if not item_id or not isinstance(item_id, str):
154
+ raise ValueError("Item ID must be a non-empty string")
155
+ self.backend.delete(item_id)
156
+
157
+ def clear(self) -> None:
158
+ """Clear all metadata and registered fields."""
159
+ self.fields.clear()
160
+ self.backend.clear()
161
+
162
+ def store_to_disk(self, path: str) -> None:
163
+ """
164
+ Store all data to disk as JSON file.
165
+ 将所有数据存储到磁盘JSON文件。
166
+
167
+ Args:
168
+ path: Path to the JSON file
169
+
170
+ Raises:
171
+ NotImplementedError: If backend doesn't support disk operations
172
+ ValueError: If path is invalid
173
+ """
174
+ if not path or not isinstance(path, str):
175
+ raise ValueError("Path must be a non-empty string")
176
+ if not hasattr(self.backend, "store_data_to_disk"):
177
+ raise NotImplementedError("Backend does not support store_data_to_disk")
178
+ self.backend.store_data_to_disk(path)
179
+
180
+ def load_from_disk(self, path: str) -> None:
181
+ """
182
+ Load all data from disk JSON file (overwrites memory).
183
+ 从磁盘JSON文件加载所有数据(覆盖内存)。
184
+
185
+ Args:
186
+ path: Path to the JSON file
187
+
188
+ Raises:
189
+ NotImplementedError: If backend doesn't support disk operations
190
+ ValueError: If path is invalid
191
+ FileNotFoundError: If file doesn't exist
192
+ """
193
+ if not path or not isinstance(path, str):
194
+ raise ValueError("Path must be a non-empty string")
195
+ if not hasattr(self.backend, "load_data_to_memory"):
196
+ raise NotImplementedError("Backend does not support load_data_to_memory")
197
+ self.backend.load_data_to_memory(path)
198
+
199
+ def clear_disk_data(self, path: str) -> None:
200
+ """
201
+ Delete the disk JSON file.
202
+ 删除磁盘JSON文件。
203
+
204
+ Args:
205
+ path: Path to the JSON file
206
+
207
+ Raises:
208
+ NotImplementedError: If backend doesn't support disk operations
209
+ ValueError: If path is invalid
210
+ """
211
+ if not path or not isinstance(path, str):
212
+ raise ValueError("Path must be a non-empty string")
213
+ if not hasattr(self.backend, "clear_disk_data"):
214
+ raise NotImplementedError("Backend does not support clear_disk_data")
215
+ self.backend.clear_disk_data(path)
216
+
217
+ if __name__ == "__main__":
218
+ import os
219
+
220
+ metadata_store = MetadataStorage()
221
+ disk_path = "test_metadata_storage.json"
222
+
223
+ # 注册元数据字段
224
+ metadata_store.add_field("author")
225
+ metadata_store.add_field("topic")
226
+
227
+ # 构造示例数据
228
+ item_id = "abc123"
229
+ metadata = {
230
+ "author": "Alice",
231
+ "topic": "AI"
232
+ }
233
+
234
+ # 存储元数据
235
+ metadata_store.store(item_id, metadata)
236
+ print("Step 1 | Retrieved metadata:", metadata_store.get(item_id))
237
+
238
+ # 保存到磁盘
239
+ metadata_store.store_to_disk(disk_path)
240
+ print(f"Step 2 | Metadata saved to {disk_path}")
241
+
242
+ # 清空内存
243
+ metadata_store.clear()
244
+ print("Step 3 | After clear, retrieved:", metadata_store.get(item_id))
245
+
246
+ # 等待用户输入 yes 再加载
247
+ user_input = input("Step 4 | Enter 'yes' to load metadata from disk: ")
248
+ if user_input.strip().lower() == 'yes':
249
+ metadata_store.load_from_disk(disk_path)
250
+ print("Step 5 | After reload, retrieved:", metadata_store.get(item_id))
251
+ else:
252
+ print("Step 5 | Skipped loading from disk.")
253
+
254
+ # 删除磁盘文件
255
+ metadata_store.clear_disk_data(disk_path)
256
+ print(f"Step 6 | Disk file {disk_path} has been deleted.")
257
+
258
+ # 可选:检查磁盘上确实没这个文件
259
+ print("Step 7 | File exists after deletion?:", os.path.exists(disk_path))
260
+
@@ -0,0 +1,106 @@
1
+ # file sage/core/sage.middleware.services.neuromem./storage_engine/text_storage.py
2
+ # python -m sage.core.sage.middleware.services.neuromem..storage_engine.text_storage
3
+
4
+ from typing import Optional, List
5
+
6
+ from sage.middleware.components.neuromem.storage_engine.kv_backend.base_kv_backend import BaseKVBackend
7
+ from sage.middleware.components.neuromem.storage_engine.kv_backend.dict_kv_backend import DictKVBackend
8
+
9
+
10
+ class TextStorage:
11
+ """
12
+ Simple raw text storage based on externally provided IDs.
13
+
14
+ 简单的原始文本存储器,由外部提供稳定 ID(不生成哈希)。
15
+ """
16
+
17
+ def __init__(self, backend: Optional[BaseKVBackend] = None):
18
+ # 支持自定义后端,默认用内存字典
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, item_id: str, text: str):
31
+ """
32
+ Store text under a given item_id.
33
+
34
+ 使用外部提供的 ID 存储原始文本。
35
+ """
36
+ self.backend.set(item_id, text)
37
+
38
+ def get(self, item_id: str) -> str:
39
+ """
40
+ Retrieve text using item_id.
41
+
42
+ 使用 ID 获取文本内容。
43
+ """
44
+ return self.backend.get(item_id) or ""
45
+
46
+ def clear(self):
47
+ """
48
+ Clear all stored text.
49
+
50
+ 清空所有存储内容。
51
+ """
52
+ self.backend.clear()
53
+
54
+ def store_to_disk(self, path: str):
55
+ """存储所有数据到磁盘 json 文件"""
56
+ # 要求 backend 有该方法
57
+ if not hasattr(self.backend, "store_data_to_disk"):
58
+ raise NotImplementedError("Backend does not support store_data_to_disk")
59
+ self.backend.store_data_to_disk(path)
60
+
61
+ def load_from_disk(self, path: str):
62
+ """从磁盘 json 文件加载所有数据(覆盖内存)"""
63
+ if not hasattr(self.backend, "load_data_to_memory"):
64
+ raise NotImplementedError("Backend does not support load_data_to_memory")
65
+ self.backend.load_data_to_memory(path)
66
+
67
+ def clear_disk_data(self, path: str):
68
+ """删除磁盘上的 json 文件"""
69
+ if not hasattr(self.backend, "clear_disk_data"):
70
+ raise NotImplementedError("Backend does not support clear_disk_data")
71
+ self.backend.clear_disk_data(path)
72
+
73
+ """测试预期输出
74
+ Retrieved: hello world
75
+ After clear:
76
+ """
77
+
78
+ if __name__ == "__main__":
79
+ import hashlib
80
+
81
+ ts = TextStorage()
82
+ text = "hello world"
83
+ text_id = hashlib.sha256(text.encode()).hexdigest()
84
+ disk_path = "test_text_storage.json"
85
+
86
+ # 1. 存储并保存到磁盘
87
+ ts.store(text_id, text)
88
+ print("Step 1 | Retrieved:", ts.get(text_id))
89
+ ts.store_to_disk(disk_path)
90
+ print(f"Data has been saved to {disk_path}")
91
+
92
+ # 2. 清空内存
93
+ ts.clear()
94
+ print("Step 2 | After clear (should be empty):", ts.get(text_id))
95
+
96
+ # 3. 等待用户输入 yes 再读取
97
+ user_input = input("Step 3 | Enter 'yes' to load data from disk: ")
98
+ if user_input.strip().lower() == 'yes':
99
+ ts.load_from_disk(disk_path)
100
+ print("Step 3 | After reload, Retrieved:", ts.get(text_id))
101
+ else:
102
+ print("Step 3 | Skipped loading from disk.")
103
+
104
+ # 4. 删除磁盘数据
105
+ ts.clear_disk_data(disk_path)
106
+ print(f"Step 4 | Disk file {disk_path} has been deleted.")