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

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

Potentially problematic release.


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

Files changed (288) hide show
  1. isage_middleware-0.1.3.dist-info/METADATA +115 -0
  2. isage_middleware-0.1.3.dist-info/RECORD +291 -0
  3. sage/__init__.py +56 -2
  4. sage/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  5. sage/__pycache__/__init__.cpython-311.pyc +0 -0
  6. sage/middleware/__init__.py +52 -79
  7. sage/middleware/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  8. sage/middleware/__pycache__/__init__.cpython-311.pyc +0 -0
  9. sage/middleware/__pycache__/_version.cpython-311.opt-2.pyc +0 -0
  10. sage/middleware/__pycache__/_version.cpython-311.pyc +0 -0
  11. sage/middleware/_version.py +35 -0
  12. sage/middleware/api/__init__.py +52 -18
  13. sage/middleware/api/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  14. sage/middleware/api/__pycache__/__init__.cpython-311.pyc +0 -0
  15. sage/middleware/api/__pycache__/graph_api.cpython-311.opt-2.pyc +0 -0
  16. sage/middleware/api/__pycache__/graph_api.cpython-311.pyc +0 -0
  17. sage/middleware/api/__pycache__/kv_api.cpython-311.opt-2.pyc +0 -0
  18. sage/middleware/api/__pycache__/kv_api.cpython-311.pyc +0 -0
  19. sage/middleware/api/__pycache__/memory_api.cpython-311.opt-2.pyc +0 -0
  20. sage/middleware/api/__pycache__/memory_api.cpython-311.pyc +0 -0
  21. sage/middleware/api/__pycache__/vdb_api.cpython-311.opt-2.pyc +0 -0
  22. sage/middleware/api/__pycache__/vdb_api.cpython-311.pyc +0 -0
  23. sage/middleware/components/enterprise/__init__.py +56 -0
  24. sage/middleware/components/enterprise/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  25. sage/middleware/components/enterprise/__pycache__/__init__.cpython-311.pyc +0 -0
  26. sage/middleware/components/neuromem/__init__.py +56 -0
  27. sage/middleware/components/neuromem/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  28. sage/middleware/components/neuromem/__pycache__/__init__.cpython-311.pyc +0 -0
  29. sage/middleware/components/neuromem/__pycache__/memory_manager.cpython-311.opt-2.pyc +0 -0
  30. sage/middleware/components/neuromem/__pycache__/memory_manager.cpython-311.pyc +0 -0
  31. sage/middleware/components/neuromem/__pycache__/memory_service.cpython-311.opt-2.pyc +0 -0
  32. sage/middleware/components/neuromem/__pycache__/memory_service.cpython-311.pyc +0 -0
  33. sage/middleware/components/neuromem/memory_collection/__init__.py +56 -0
  34. sage/middleware/components/neuromem/memory_collection/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  35. sage/middleware/components/neuromem/memory_collection/__pycache__/__init__.cpython-311.pyc +0 -0
  36. sage/middleware/components/neuromem/memory_collection/__pycache__/base_collection.cpython-311.opt-2.pyc +0 -0
  37. sage/middleware/components/neuromem/memory_collection/__pycache__/base_collection.cpython-311.pyc +0 -0
  38. sage/middleware/components/neuromem/memory_collection/__pycache__/graph_collection.cpython-311.opt-2.pyc +0 -0
  39. sage/middleware/components/neuromem/memory_collection/__pycache__/graph_collection.cpython-311.pyc +0 -0
  40. sage/middleware/components/neuromem/memory_collection/__pycache__/kv_collection.cpython-311.opt-2.pyc +0 -0
  41. sage/middleware/components/neuromem/memory_collection/__pycache__/kv_collection.cpython-311.pyc +0 -0
  42. sage/middleware/components/neuromem/memory_collection/__pycache__/vdb_collection.cpython-311.opt-2.pyc +0 -0
  43. sage/middleware/components/neuromem/memory_collection/__pycache__/vdb_collection.cpython-311.pyc +0 -0
  44. sage/middleware/components/neuromem/memory_collection/base_collection.py +167 -0
  45. sage/middleware/components/neuromem/memory_collection/graph_collection.py +11 -0
  46. sage/middleware/components/neuromem/memory_collection/kv_collection.py +709 -0
  47. sage/middleware/components/neuromem/memory_collection/vdb_collection.py +922 -0
  48. sage/middleware/components/neuromem/memory_manager.py +401 -0
  49. sage/middleware/components/neuromem/memory_service.py +324 -0
  50. sage/middleware/components/neuromem/micro_service/__init__.py +56 -0
  51. sage/middleware/components/neuromem/micro_service/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  52. sage/middleware/components/neuromem/micro_service/__pycache__/__init__.cpython-311.pyc +0 -0
  53. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb.cpython-311.opt-2.pyc +0 -0
  54. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb.cpython-311.pyc +0 -0
  55. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb_service.cpython-311.opt-2.pyc +0 -0
  56. sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb_service.cpython-311.pyc +0 -0
  57. sage/middleware/components/neuromem/micro_service/neuromem_vdb.py +198 -0
  58. sage/middleware/components/neuromem/micro_service/neuromem_vdb_service.py +118 -0
  59. sage/middleware/components/neuromem/search_engine/__init__.py +56 -0
  60. sage/middleware/components/neuromem/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  61. sage/middleware/components/neuromem/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  62. sage/middleware/components/neuromem/search_engine/graph_index/__init__.py +56 -0
  63. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  64. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/__init__.cpython-311.pyc +0 -0
  65. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/base_graph_index.cpython-311.opt-2.pyc +0 -0
  66. sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/base_graph_index.cpython-311.pyc +0 -0
  67. sage/middleware/components/neuromem/search_engine/graph_index/base_graph_index.py +40 -0
  68. sage/middleware/components/neuromem/search_engine/hybird_index/__init__.py +56 -0
  69. sage/middleware/components/neuromem/search_engine/hybird_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  70. sage/middleware/components/neuromem/search_engine/hybird_index/__pycache__/__init__.cpython-311.pyc +0 -0
  71. sage/middleware/components/neuromem/search_engine/kv_index/__init__.py +56 -0
  72. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  73. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/__init__.cpython-311.pyc +0 -0
  74. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/base_kv_index.cpython-311.opt-2.pyc +0 -0
  75. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/base_kv_index.cpython-311.pyc +0 -0
  76. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/bm25s_index.cpython-311.opt-2.pyc +0 -0
  77. sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/bm25s_index.cpython-311.pyc +0 -0
  78. sage/middleware/components/neuromem/search_engine/kv_index/base_kv_index.py +76 -0
  79. sage/middleware/components/neuromem/search_engine/kv_index/bm25s_index.py +320 -0
  80. sage/middleware/components/neuromem/search_engine/vdb_index/__init__.py +56 -0
  81. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  82. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/__init__.cpython-311.pyc +0 -0
  83. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/base_vdb_index.cpython-311.opt-2.pyc +0 -0
  84. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/base_vdb_index.cpython-311.pyc +0 -0
  85. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/faiss_index.cpython-311.opt-2.pyc +0 -0
  86. sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/faiss_index.cpython-311.pyc +0 -0
  87. sage/middleware/components/neuromem/search_engine/vdb_index/base_vdb_index.py +53 -0
  88. sage/middleware/components/neuromem/search_engine/vdb_index/faiss_index.py +700 -0
  89. sage/middleware/components/neuromem/storage_engine/__init__.py +56 -0
  90. sage/middleware/components/neuromem/storage_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  91. sage/middleware/components/neuromem/storage_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  92. sage/middleware/components/neuromem/storage_engine/__pycache__/metadata_storage.cpython-311.opt-2.pyc +0 -0
  93. sage/middleware/components/neuromem/storage_engine/__pycache__/metadata_storage.cpython-311.pyc +0 -0
  94. sage/middleware/components/neuromem/storage_engine/__pycache__/text_storage.cpython-311.opt-2.pyc +0 -0
  95. sage/middleware/components/neuromem/storage_engine/__pycache__/text_storage.cpython-311.pyc +0 -0
  96. sage/middleware/components/neuromem/storage_engine/__pycache__/vector_storage.cpython-311.opt-2.pyc +0 -0
  97. sage/middleware/components/neuromem/storage_engine/__pycache__/vector_storage.cpython-311.pyc +0 -0
  98. sage/middleware/components/neuromem/storage_engine/kv_backend/__init__.py +56 -0
  99. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  100. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/__init__.cpython-311.pyc +0 -0
  101. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/base_kv_backend.cpython-311.opt-2.pyc +0 -0
  102. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/base_kv_backend.cpython-311.pyc +0 -0
  103. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/dict_kv_backend.cpython-311.opt-2.pyc +0 -0
  104. sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/dict_kv_backend.cpython-311.pyc +0 -0
  105. sage/middleware/components/neuromem/storage_engine/kv_backend/base_kv_backend.py +65 -0
  106. sage/middleware/components/neuromem/storage_engine/kv_backend/dict_kv_backend.py +54 -0
  107. sage/middleware/components/neuromem/storage_engine/metadata_storage.py +260 -0
  108. sage/middleware/components/neuromem/storage_engine/text_storage.py +106 -0
  109. sage/middleware/components/neuromem/storage_engine/vector_storage.py +85 -0
  110. sage/middleware/components/neuromem/tests/__init__.py +56 -0
  111. sage/middleware/components/neuromem/tests/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  112. sage/middleware/components/neuromem/tests/__pycache__/__init__.cpython-311.pyc +0 -0
  113. sage/middleware/components/neuromem/tests/__pycache__/test_memory_service.cpython-311.opt-2.pyc +0 -0
  114. sage/middleware/components/neuromem/tests/__pycache__/test_memory_service.cpython-311.pyc +0 -0
  115. sage/middleware/components/neuromem/tests/core_test/__init__.py +56 -0
  116. sage/middleware/components/neuromem/tests/core_test/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  117. sage/middleware/components/neuromem/tests/core_test/__pycache__/__init__.cpython-311.pyc +0 -0
  118. sage/middleware/components/neuromem/tests/core_test/collection_test/__init__.py +56 -0
  119. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  120. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/__init__.cpython-311.pyc +0 -0
  121. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/kv_collection_test.cpython-311.opt-2.pyc +0 -0
  122. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/kv_collection_test.cpython-311.pyc +0 -0
  123. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/vdb_collection_test.cpython-311.opt-2.pyc +0 -0
  124. sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/vdb_collection_test.cpython-311.pyc +0 -0
  125. sage/middleware/components/neuromem/tests/core_test/collection_test/kv_collection_test.py +60 -0
  126. sage/middleware/components/neuromem/tests/core_test/collection_test/vdb_collection_test.py +88 -0
  127. sage/middleware/components/neuromem/tests/core_test/manager_test.py +154 -0
  128. sage/middleware/components/neuromem/tests/test_memory_service.py +293 -0
  129. sage/middleware/components/neuromem/utils/__init__.py +56 -0
  130. sage/middleware/components/neuromem/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  131. sage/middleware/components/neuromem/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  132. sage/middleware/components/neuromem/utils/__pycache__/path_utils.cpython-311.opt-2.pyc +0 -0
  133. sage/middleware/components/neuromem/utils/__pycache__/path_utils.cpython-311.pyc +0 -0
  134. sage/middleware/components/neuromem/utils/path_utils.py +25 -0
  135. sage/middleware/components/sage_db/__init__.py +56 -0
  136. sage/middleware/components/sage_db/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  137. sage/middleware/components/sage_db/__pycache__/__init__.cpython-311.pyc +0 -0
  138. sage/middleware/{enterprise → components}/sage_db/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
  139. sage/middleware/{enterprise → components}/sage_db/__pycache__/sage_db.cpython-311.pyc +0 -0
  140. sage/middleware/components/sage_db/python/__init__.py +56 -0
  141. sage/middleware/components/sage_db/python/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  142. sage/middleware/components/sage_db/python/__pycache__/__init__.cpython-311.pyc +0 -0
  143. sage/middleware/{enterprise → components}/sage_db/python/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
  144. sage/middleware/{enterprise → components}/sage_db/python/__pycache__/sage_db.cpython-311.pyc +0 -0
  145. sage/middleware/{enterprise → components}/sage_db/tests/__pycache__/test_python.cpython-311.opt-2.pyc +0 -0
  146. sage/middleware/{enterprise → components}/sage_db/tests/__pycache__/test_python.cpython-311.pyc +0 -0
  147. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-311.opt-2.pyc +0 -0
  148. sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-311.pyc +0 -0
  149. sage/middleware/examples/__pycache__/microservices_demo.cpython-311.opt-2.pyc +0 -0
  150. sage/middleware/examples/__pycache__/microservices_demo.cpython-311.pyc +0 -0
  151. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-311.opt-2.pyc +0 -0
  152. sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-311.pyc +0 -0
  153. sage/middleware/examples/api_usage_tutorial.py +3 -3
  154. sage/middleware/examples/dag_microservices_demo.py +7 -8
  155. sage/middleware/examples/microservices_integration_demo.py +8 -11
  156. sage/middleware/examples/microservices_registration_demo.py +8 -12
  157. sage/middleware/services/__init__.py +56 -0
  158. sage/middleware/services/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  159. sage/middleware/services/__pycache__/__init__.cpython-311.pyc +0 -0
  160. sage/middleware/services/graph/__init__.py +52 -4
  161. sage/middleware/services/graph/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  162. sage/middleware/services/graph/__pycache__/__init__.cpython-311.pyc +0 -0
  163. sage/middleware/services/graph/__pycache__/graph_index.cpython-311.opt-2.pyc +0 -0
  164. sage/middleware/services/graph/__pycache__/graph_index.cpython-311.pyc +0 -0
  165. sage/middleware/services/graph/__pycache__/graph_service.cpython-311.opt-2.pyc +0 -0
  166. sage/middleware/services/graph/__pycache__/graph_service.cpython-311.pyc +0 -0
  167. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-311.opt-2.pyc +0 -0
  168. sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-311.pyc +0 -0
  169. sage/middleware/services/graph/examples/graph_demo.py +3 -2
  170. sage/middleware/services/graph/graph_service.py +68 -0
  171. sage/middleware/services/graph/search_engine/__init__.py +56 -0
  172. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  173. sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  174. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-311.opt-2.pyc +0 -0
  175. sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-311.pyc +0 -0
  176. sage/middleware/services/kv/__init__.py +52 -4
  177. sage/middleware/services/kv/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  178. sage/middleware/services/kv/__pycache__/__init__.cpython-311.pyc +0 -0
  179. sage/middleware/services/kv/__pycache__/kv_service.cpython-311.opt-2.pyc +0 -0
  180. sage/middleware/services/kv/__pycache__/kv_service.cpython-311.pyc +0 -0
  181. sage/middleware/services/kv/examples/__pycache__/kv_demo.cpython-311.opt-2.pyc +0 -0
  182. sage/middleware/services/kv/examples/__pycache__/kv_demo.cpython-311.pyc +0 -0
  183. sage/middleware/services/kv/examples/kv_demo.py +1 -1
  184. sage/middleware/services/kv/search_engine/__init__.py +56 -0
  185. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  186. sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  187. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-311.opt-2.pyc +0 -0
  188. sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-311.pyc +0 -0
  189. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-311.opt-2.pyc +0 -0
  190. sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-311.pyc +0 -0
  191. sage/middleware/services/memory/__init__.py +52 -8
  192. sage/middleware/services/memory/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  193. sage/middleware/services/memory/__pycache__/__init__.cpython-311.pyc +0 -0
  194. sage/middleware/services/memory/__pycache__/memory_service.cpython-311.opt-2.pyc +0 -0
  195. sage/middleware/services/memory/__pycache__/memory_service.cpython-311.pyc +0 -0
  196. sage/middleware/services/memory/examples/__pycache__/memory_demo.cpython-311.opt-2.pyc +0 -0
  197. sage/middleware/services/memory/examples/__pycache__/memory_demo.cpython-311.pyc +0 -0
  198. sage/middleware/services/memory/examples/dag_microservices_demo.py +8 -9
  199. sage/middleware/services/memory/examples/memory_demo.py +4 -4
  200. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-311.opt-2.pyc +0 -0
  201. sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-311.pyc +0 -0
  202. sage/middleware/services/memory/memory_service.py +14 -11
  203. sage/middleware/services/memory/utils/__init__.py +56 -0
  204. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  205. sage/middleware/services/memory/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  206. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-311.opt-2.pyc +0 -0
  207. sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-311.pyc +0 -0
  208. sage/middleware/services/vdb/__init__.py +52 -4
  209. sage/middleware/services/vdb/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  210. sage/middleware/services/vdb/__pycache__/__init__.cpython-311.pyc +0 -0
  211. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-311.opt-2.pyc +0 -0
  212. sage/middleware/services/vdb/__pycache__/vdb_service.cpython-311.pyc +0 -0
  213. sage/middleware/services/vdb/examples/__pycache__/vdb_demo.cpython-311.opt-2.pyc +0 -0
  214. sage/middleware/services/vdb/examples/__pycache__/vdb_demo.cpython-311.pyc +0 -0
  215. sage/middleware/services/vdb/examples/vdb_demo.py +2 -2
  216. sage/middleware/services/vdb/search_engine/__init__.py +56 -0
  217. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  218. sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
  219. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-311.opt-2.pyc +0 -0
  220. sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-311.pyc +0 -0
  221. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-311.opt-2.pyc +0 -0
  222. sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-311.pyc +0 -0
  223. sage/middleware/services/vdb/vdb_service.py +44 -41
  224. sage/middleware/utils/__init__.py +53 -2
  225. sage/middleware/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  226. sage/middleware/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  227. sage/middleware/utils/embedding/__init__.py +52 -31
  228. sage/middleware/utils/embedding/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  229. sage/middleware/utils/embedding/__pycache__/__init__.cpython-311.pyc +0 -0
  230. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-311.opt-2.pyc +0 -0
  231. sage/middleware/utils/embedding/__pycache__/_cohere.cpython-311.pyc +0 -0
  232. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-311.opt-2.pyc +0 -0
  233. sage/middleware/utils/embedding/__pycache__/bedrock.cpython-311.pyc +0 -0
  234. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-311.opt-2.pyc +0 -0
  235. sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-311.pyc +0 -0
  236. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-311.opt-2.pyc +0 -0
  237. sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-311.pyc +0 -0
  238. sage/middleware/utils/embedding/__pycache__/hf.cpython-311.opt-2.pyc +0 -0
  239. sage/middleware/utils/embedding/__pycache__/hf.cpython-311.pyc +0 -0
  240. sage/middleware/utils/embedding/__pycache__/instructor.cpython-311.opt-2.pyc +0 -0
  241. sage/middleware/utils/embedding/__pycache__/instructor.cpython-311.pyc +0 -0
  242. sage/middleware/utils/embedding/__pycache__/jina.cpython-311.opt-2.pyc +0 -0
  243. sage/middleware/utils/embedding/__pycache__/jina.cpython-311.pyc +0 -0
  244. sage/middleware/utils/embedding/__pycache__/lollms.cpython-311.opt-2.pyc +0 -0
  245. sage/middleware/utils/embedding/__pycache__/lollms.cpython-311.pyc +0 -0
  246. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-311.opt-2.pyc +0 -0
  247. sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-311.pyc +0 -0
  248. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-311.opt-2.pyc +0 -0
  249. sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-311.pyc +0 -0
  250. sage/middleware/utils/embedding/__pycache__/ollama.cpython-311.opt-2.pyc +0 -0
  251. sage/middleware/utils/embedding/__pycache__/ollama.cpython-311.pyc +0 -0
  252. sage/middleware/utils/embedding/__pycache__/openai.cpython-311.opt-2.pyc +0 -0
  253. sage/middleware/utils/embedding/__pycache__/openai.cpython-311.pyc +0 -0
  254. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-311.opt-2.pyc +0 -0
  255. sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-311.pyc +0 -0
  256. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-311.opt-2.pyc +0 -0
  257. sage/middleware/utils/embedding/__pycache__/zhipu.cpython-311.pyc +0 -0
  258. isage_middleware-0.1.0.dist-info/METADATA +0 -424
  259. isage_middleware-0.1.0.dist-info/RECORD +0 -191
  260. sage/middleware/enterprise/__init__.py +0 -75
  261. sage/middleware/enterprise/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  262. sage/middleware/enterprise/__pycache__/__init__.cpython-311.pyc +0 -0
  263. sage/middleware/enterprise/sage_db/__init__.py +0 -132
  264. sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  265. sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-311.pyc +0 -0
  266. sage/middleware/enterprise/sage_db/python/__init__.py +0 -7
  267. sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
  268. sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-311.pyc +0 -0
  269. sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-311.opt-2.pyc +0 -0
  270. sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-311.pyc +0 -0
  271. sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-311.opt-2.pyc +0 -0
  272. sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-311.pyc +0 -0
  273. sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-311.opt-2.pyc +0 -0
  274. sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-311.pyc +0 -0
  275. sage/middleware/services/memory/memory_collection/__pycache__/base_collection.cpython-311.opt-2.pyc +0 -0
  276. sage/middleware/services/memory/memory_collection/__pycache__/base_collection.cpython-311.pyc +0 -0
  277. sage/middleware/services/memory/memory_collection/__pycache__/kv_collection.cpython-311.opt-2.pyc +0 -0
  278. sage/middleware/services/memory/memory_collection/__pycache__/kv_collection.cpython-311.pyc +0 -0
  279. sage/middleware/services/memory/memory_collection/__pycache__/vdb_collection.cpython-311.opt-2.pyc +0 -0
  280. sage/middleware/services/memory/memory_collection/__pycache__/vdb_collection.cpython-311.pyc +0 -0
  281. sage/middleware/services/memory/memory_collection/base_collection.py +0 -0
  282. sage/middleware/services/memory/memory_collection/kv_collection.py +0 -0
  283. sage/middleware/services/memory/memory_collection/vdb_collection.py +0 -0
  284. {isage_middleware-0.1.0.dist-info → isage_middleware-0.1.3.dist-info}/WHEEL +0 -0
  285. {isage_middleware-0.1.0.dist-info → isage_middleware-0.1.3.dist-info}/top_level.txt +0 -0
  286. /sage/middleware/{enterprise → components}/sage_db/python/sage_db.py +0 -0
  287. /sage/middleware/{enterprise → components}/sage_db/sage_db.py +0 -0
  288. /sage/middleware/{enterprise → components}/sage_db/tests/test_python.py +0 -0
@@ -0,0 +1,320 @@
1
+ # file sage/core/sage.middleware.services.neuromem./search_engine/kv_index/bm25s_index.py
2
+ # python -m sage.core.sage.middleware.services.neuromem..search_engine.kv_index.bm25s_index
3
+
4
+ import os
5
+ import bm25s
6
+ import shutil
7
+ import Stemmer
8
+ from typing import List, Optional, Dict, Any
9
+
10
+ from sage.middleware.components.neuromem.search_engine.kv_index.base_kv_index import BaseKVIndex
11
+
12
+
13
+ class BM25sIndex(BaseKVIndex):
14
+ def __init__(
15
+ self,
16
+ config: Optional[dict] = None,
17
+ ):
18
+ """
19
+ Initialize BM25sIndex.
20
+ 支持两种初始化方式:
21
+ 1. 直接通过声明来创建:传入 config,然后使用 build_index() 方法来构建索引
22
+ 2. 通过 BM25sIndex.load() 来加载:调用load方法
23
+
24
+ Initialize the BM25sIndex instance with two initialization methods:
25
+ 1. Direct creation: pass config, then use build_index() method to build the index
26
+ 2. Load from disk: use load method
27
+ """
28
+ self.config = config or {}
29
+
30
+ # 从config中获取必要参数,否则使用默认值
31
+ self.name = self.config.get("name", None)
32
+ if self.name is None:
33
+ raise ValueError("索引名称(name)未在config中指定")
34
+
35
+ # 初始化基本属性
36
+ self.ids: List[str] = []
37
+ self.texts: List[str] = []
38
+ self.tokens: List[List[str]] = []
39
+ self.tokenizer = None
40
+ self.bm25 = None
41
+
42
+ # BM25s 特定配置参数
43
+ self.backend = self.config.get("backend", "numba")
44
+ self.language = self.config.get("language", "auto") # auto, zh, en
45
+ self.custom_stopwords = self.config.get("custom_stopwords", None)
46
+
47
+ def _get_tokenizer(self, texts: List[str]):
48
+ """
49
+ 根据文本内容和配置选择合适的分词器(中文或英文)。
50
+ Select appropriate tokenizer (Chinese or English) according to the content of texts and config.
51
+ """
52
+ # 优先使用配置中指定的语言
53
+ if self.language == "zh":
54
+ zh_flag = True
55
+ elif self.language == "en":
56
+ zh_flag = False
57
+ else: # auto
58
+ zh_flag = self._is_chinese(texts[0]) if texts else False
59
+
60
+ if zh_flag:
61
+ return bm25s.tokenization.Tokenizer(
62
+ stopwords=self.custom_stopwords or 'zh'
63
+ )
64
+ else:
65
+ stemmer = Stemmer.Stemmer("english")
66
+ return bm25s.tokenization.Tokenizer(
67
+ stopwords=self.custom_stopwords or 'en',
68
+ stemmer=stemmer
69
+ )
70
+
71
+ def _build_index(self, texts: List[str], ids: List[str]):
72
+ """
73
+ 构建BM25索引
74
+ Build BM25 index
75
+ """
76
+ self.ids = list(ids)
77
+ self.texts = list(texts)
78
+ self.tokenizer = self._get_tokenizer(self.texts)
79
+ self.tokens = self.tokenizer.tokenize(self.texts) # type: ignore
80
+ self.bm25 = bm25s.BM25(corpus=self.texts, backend=self.backend)
81
+ self.bm25.index(self.tokens)
82
+
83
+ def build_index(self, texts: List[str], ids: List[str]):
84
+ """
85
+ 构建BM25索引的公共方法。
86
+ Public method to build BM25 index.
87
+ """
88
+ if len(texts) != len(ids):
89
+ raise ValueError("texts and ids must have the same length.")
90
+ self._build_index(texts, ids)
91
+
92
+ def _rebuild(self):
93
+ """
94
+ 重新构建分词器、分词结果和BM25索引。
95
+ Rebuild the tokenizer, tokens, and BM25 index.
96
+ """
97
+ if not self.texts:
98
+ return
99
+ self.tokenizer = self._get_tokenizer(self.texts)
100
+ self.tokens = self.tokenizer.tokenize(self.texts) # type: ignore
101
+ self.bm25 = bm25s.BM25(corpus=self.texts, backend=self.backend)
102
+ self.bm25.index(self.tokens)
103
+
104
+ def _is_chinese(self, text: str):
105
+ """
106
+ 判断字符串中是否包含中文字符。
107
+ Detect whether the text contains Chinese characters.
108
+ """
109
+ return any('\u4e00' <= ch <= '\u9fff' for ch in text)
110
+
111
+ def insert(self, text, doc_id):
112
+ """
113
+ 插入新的文本和id,并重建索引。
114
+ Insert a new text and doc_id, then rebuild the index.
115
+ """
116
+ self.texts.append(text)
117
+ self.ids.append(doc_id)
118
+ self._rebuild()
119
+
120
+ def delete(self, id: str) -> None:
121
+ """
122
+ 根据id删除对应的文本,并重建索引。
123
+ Delete the text corresponding to the given id, then rebuild the index.
124
+ """
125
+ if id not in self.ids:
126
+ return
127
+ idx = self.ids.index(id)
128
+ self.ids.pop(idx)
129
+ self.texts.pop(idx)
130
+ self._rebuild()
131
+
132
+ def update(self, id: str, new_text: str) -> None:
133
+ """
134
+ 更新指定id的文本内容,并重建索引。
135
+ Update the text of the given id, then rebuild the index.
136
+ """
137
+ if id not in self.ids:
138
+ return
139
+ idx = self.ids.index(id)
140
+ self.texts[idx] = new_text
141
+ self._rebuild()
142
+
143
+ def search(self, text: str, topk: int = 5) -> List[str]:
144
+ """
145
+ 对输入文本进行检索,返回最相关的topk个id。
146
+ Search for the most relevant texts and return the top-k ids.
147
+ """
148
+ if self.bm25 is None or len(self.ids) == 0:
149
+ return []
150
+ query_token = self.tokenizer.tokenize([text])[0] # type: ignore
151
+ scores = self.bm25.get_scores(query_token) # type: ignore
152
+ topk_idx = sorted(range(len(scores)), key=lambda i: -scores[i])[:topk]
153
+ return [self.ids[i] for i in topk_idx]
154
+
155
+
156
+ def store(self, dir_path: str) -> Dict[str, Any]:
157
+ """
158
+ 将索引信息存储到指定目录,包含bm25模型、分词器、ids和texts。
159
+ Store the index info into the specified directory, including bm25 model, tokenizer, ids, and texts.
160
+ """
161
+ os.makedirs(dir_path, exist_ok=True)
162
+
163
+ # 保存BM25模型
164
+ if self.bm25 is not None:
165
+ self.bm25.vocab_dict = {str(k): v for k, v in self.bm25.vocab_dict.items()} # type: ignore
166
+ self.bm25.save(dir_path, corpus=None)# type: ignore
167
+
168
+ # 保存分词器
169
+ if self.tokenizer is not None:
170
+ self.tokenizer.save_vocab(dir_path) # type: ignore
171
+ self.tokenizer.save_stopwords(dir_path) # type: ignore
172
+
173
+ # 保存配置信息
174
+ meta = {
175
+ "name": self.name,
176
+ "backend": self.backend,
177
+ "language": self.language,
178
+ "custom_stopwords": self.custom_stopwords,
179
+ "config": self.config
180
+ }
181
+ with open(os.path.join(dir_path, "meta.json"), "w", encoding="utf-8") as f:
182
+ import json
183
+ json.dump(meta, f, ensure_ascii=False, indent=2)
184
+
185
+ # 保存ids和texts
186
+ with open(os.path.join(dir_path, "ids.txt"), "w", encoding="utf-8") as f:
187
+ for i in self.ids:
188
+ f.write(i + "\n")
189
+ with open(os.path.join(dir_path, "texts.txt"), "w", encoding="utf-8") as f:
190
+ for t in self.texts:
191
+ f.write(t.replace("\n", " ") + "\n")
192
+ return {"index_path": dir_path}
193
+
194
+ def _load_data(self, dir_path: str):
195
+ """
196
+ 从目录加载索引及相关内容,包括bm25模型、分词器、ids和texts。
197
+ Load index and related data from directory, including bm25 model, tokenizer, ids, and texts.
198
+ """
199
+ # 加载配置信息
200
+ meta_path = os.path.join(dir_path, "meta.json")
201
+ if os.path.exists(meta_path):
202
+ import json
203
+ with open(meta_path, "r", encoding="utf-8") as f:
204
+ meta = json.load(f)
205
+ self.config = meta.get("config", {})
206
+ self.backend = meta.get("backend", "numba")
207
+ self.language = meta.get("language", "auto")
208
+ self.custom_stopwords = meta.get("custom_stopwords", None)
209
+
210
+ # 加载BM25模型
211
+ self.bm25 = bm25s.BM25.load(dir_path)
212
+
213
+ # 加载分词器
214
+ self.tokenizer = bm25s.tokenization.Tokenizer()
215
+ self.tokenizer.load_vocab(dir_path)
216
+ self.tokenizer.load_stopwords(dir_path)
217
+
218
+ # 加载ids和texts
219
+ with open(os.path.join(dir_path, "ids.txt"), "r", encoding="utf-8") as f:
220
+ self.ids = [line.strip() for line in f.readlines()]
221
+ with open(os.path.join(dir_path, "texts.txt"), "r", encoding="utf-8") as f:
222
+ self.texts = [line.strip() for line in f.readlines()]
223
+
224
+ # 重建tokens
225
+ self.tokens = [self.tokenizer.tokenize([t], return_as="tuple")[0][0] for t in self.texts] # type: ignore
226
+ self.bm25.index(self.tokens)
227
+
228
+ @classmethod
229
+ def load(cls, name: str, dir_path: str) -> "BM25sIndex":
230
+ """
231
+ 通过名称和根路径加载一个BM25sIndex实例。
232
+ Load a BM25sIndex instance by name and root path.
233
+ """
234
+ # 创建一个空的实例,然后加载数据
235
+ config = {"name": name}
236
+ instance = cls(config=config)
237
+ instance._load_data(dir_path)
238
+ return instance
239
+
240
+ @staticmethod
241
+ def clear(dir_path: str):
242
+ """
243
+ 删除指定名称下的所有索引数据。
244
+ Remove all index data under the specified name.
245
+ """
246
+ try:
247
+ shutil.rmtree(dir_path)
248
+ print(f"Cleared: {dir_path}")
249
+ except FileNotFoundError:
250
+ print(f"Directory does not exist, nothing to clear: {dir_path}")
251
+ except Exception as e:
252
+ print(f"Failed to clear: {e}")
253
+
254
+
255
+ if __name__ == "__main__":
256
+ # 简单数据
257
+ ids = ["a", "b", "c"]
258
+ texts = [
259
+ "The quick brown fox jumps over the lazy dog.",
260
+ "Hello world! This is a operator_test document.",
261
+ "Python is a great programming language."
262
+ ]
263
+ root_path = "./tmp_bm25_test" # 用临时目录避免误删业务数据
264
+ index_dir = root_path
265
+ index_name = "demo"
266
+
267
+ # 1. 初始化索引 - 使用新的config方式
268
+ print("\n== 初始化并首检 ==")
269
+ config = {
270
+ "name": index_name,
271
+ "backend": "numba",
272
+ "language": "auto", # 可以指定 "zh", "en" 或 "auto"
273
+ "custom_stopwords": None
274
+ }
275
+ index = BM25sIndex(config=config)
276
+ index.build_index(texts, ids)
277
+ print("初始检索 'Python':", index.search("Python"))
278
+ print("初始检索 'hello':", index.search("hello"))
279
+ print("初始检索 'fox':", index.search("fox"))
280
+
281
+ # 2. 插入新文档后检索
282
+ print("\n== 插入新文档 ==")
283
+ index.insert("This document mentions python and fox together.", "d")
284
+ print("插入后检索 'python':", index.search("python"))
285
+ print("插入后检索 'fox':", index.search("fox"))
286
+
287
+ # 3. 删除文档后检索
288
+ print("\n== 删除文档 ==")
289
+ index.delete("b")
290
+ print("删除 'b' 后检索 'hello':", index.search("hello"))
291
+ print("删除 'b' 后检索 'operator_test':", index.search("operator_test"))
292
+ print("删除 'b' 后检索 'python':", index.search("python"))
293
+
294
+ # 4. 更新文档后检索
295
+ print("\n== 更新文档 ==")
296
+ index.update("c", "Hello world! Now c document talks about foxes.")
297
+ print("更新 'c' 后检索 'fox':", index.search("fox"))
298
+ print("更新 'c' 后检索 'python':", index.search("python"))
299
+
300
+ # 5. 保存索引
301
+ print("\n== 保存索引到磁盘 ==")
302
+ store_info = index.store(index_dir)
303
+ print("索引保存路径:", store_info["index_path"])
304
+
305
+ # 6. 等待用户输入 'yes' 后加载索引并检索
306
+ print("\n== 测试持久化(请手动输入 yes 继续)==")
307
+ user_input = input("输入 'yes' 以继续测试 load 并检索:")
308
+ if user_input.strip().lower() == "yes":
309
+ index_loaded = BM25sIndex.load(name=index_name, dir_path=index_dir)
310
+ print("持久化load后检索 'fox':", index_loaded.search("fox"))
311
+ print("持久化load后检索 'python':", index_loaded.search("python"))
312
+ print("持久化load后检索 'hello':", index_loaded.search("hello"))
313
+ print("ids序列:", index_loaded.ids)
314
+ else:
315
+ print("用户未输入 'yes',测试提前结束。")
316
+
317
+ # 7. 清理测试目录
318
+ print("\n== 清理测试目录 ==")
319
+ BM25sIndex.clear(index_dir)
320
+
@@ -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,53 @@
1
+ # file sage/core/sage.middleware.services.neuromem./search_engine/vdb_index/base_vdb_index.py
2
+
3
+ from abc import ABC, abstractmethod
4
+ from typing import List, Tuple, Dict, Any
5
+ import numpy as np
6
+
7
+ class BaseVDBIndex(ABC):
8
+ def __init__(self):
9
+ """
10
+ """
11
+
12
+ @abstractmethod
13
+ def insert(self, vector: np.ndarray, string_id: str) -> None:
14
+ """插入单个向量"""
15
+ pass
16
+
17
+ @abstractmethod
18
+ def batch_insert(self, vectors: List[np.ndarray], string_ids: List[str]) -> None:
19
+ """批量插入向量"""
20
+ pass
21
+
22
+ @abstractmethod
23
+ def delete(self, string_id: str) -> None:
24
+ """删除一个向量(物理或逻辑)"""
25
+ pass
26
+
27
+ @abstractmethod
28
+ def update(self, string_id: str, new_vector: np.ndarray) -> None:
29
+ """更新向量内容"""
30
+ pass
31
+
32
+ @abstractmethod
33
+ def search(self, query_vector: np.ndarray, topk: int = 10) -> Tuple[List[str], List[float]]:
34
+ """向量检索,返回 (string_id, 距离) 列表"""
35
+ pass
36
+
37
+ @classmethod
38
+ @abstractmethod
39
+ def load(cls, name: str, root_path: str) -> "BaseVDBIndex":
40
+ """
41
+ 加载索引实例。
42
+ Load the index instance.
43
+ """
44
+ pass
45
+
46
+ @abstractmethod
47
+ def store(self, root_path: str) -> Dict[str, Any]:
48
+ """
49
+ 存储索引数据到指定目录。
50
+ Store the index data to the specified directory.
51
+ """
52
+ pass
53
+