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.
- isage_middleware-0.1.3.dist-info/METADATA +115 -0
- isage_middleware-0.1.3.dist-info/RECORD +291 -0
- sage/__init__.py +56 -2
- sage/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/__init__.py +52 -79
- sage/middleware/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/__pycache__/_version.cpython-311.opt-2.pyc +0 -0
- sage/middleware/__pycache__/_version.cpython-311.pyc +0 -0
- sage/middleware/_version.py +35 -0
- sage/middleware/api/__init__.py +52 -18
- sage/middleware/api/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/api/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/api/__pycache__/graph_api.cpython-311.opt-2.pyc +0 -0
- sage/middleware/api/__pycache__/graph_api.cpython-311.pyc +0 -0
- sage/middleware/api/__pycache__/kv_api.cpython-311.opt-2.pyc +0 -0
- sage/middleware/api/__pycache__/kv_api.cpython-311.pyc +0 -0
- sage/middleware/api/__pycache__/memory_api.cpython-311.opt-2.pyc +0 -0
- sage/middleware/api/__pycache__/memory_api.cpython-311.pyc +0 -0
- sage/middleware/api/__pycache__/vdb_api.cpython-311.opt-2.pyc +0 -0
- sage/middleware/api/__pycache__/vdb_api.cpython-311.pyc +0 -0
- sage/middleware/components/enterprise/__init__.py +56 -0
- sage/middleware/components/enterprise/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/enterprise/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/__init__.py +56 -0
- sage/middleware/components/neuromem/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/__pycache__/memory_manager.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/__pycache__/memory_manager.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/__pycache__/memory_service.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/__pycache__/memory_service.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/memory_collection/__init__.py +56 -0
- sage/middleware/components/neuromem/memory_collection/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/memory_collection/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/memory_collection/__pycache__/base_collection.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/memory_collection/__pycache__/base_collection.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/memory_collection/__pycache__/graph_collection.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/memory_collection/__pycache__/graph_collection.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/memory_collection/__pycache__/kv_collection.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/memory_collection/__pycache__/kv_collection.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/memory_collection/__pycache__/vdb_collection.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/memory_collection/__pycache__/vdb_collection.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/memory_collection/base_collection.py +167 -0
- sage/middleware/components/neuromem/memory_collection/graph_collection.py +11 -0
- sage/middleware/components/neuromem/memory_collection/kv_collection.py +709 -0
- sage/middleware/components/neuromem/memory_collection/vdb_collection.py +922 -0
- sage/middleware/components/neuromem/memory_manager.py +401 -0
- sage/middleware/components/neuromem/memory_service.py +324 -0
- sage/middleware/components/neuromem/micro_service/__init__.py +56 -0
- sage/middleware/components/neuromem/micro_service/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/micro_service/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb_service.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb_service.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/micro_service/neuromem_vdb.py +198 -0
- sage/middleware/components/neuromem/micro_service/neuromem_vdb_service.py +118 -0
- sage/middleware/components/neuromem/search_engine/__init__.py +56 -0
- sage/middleware/components/neuromem/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/graph_index/__init__.py +56 -0
- sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/base_graph_index.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/graph_index/__pycache__/base_graph_index.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/graph_index/base_graph_index.py +40 -0
- sage/middleware/components/neuromem/search_engine/hybird_index/__init__.py +56 -0
- sage/middleware/components/neuromem/search_engine/hybird_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/hybird_index/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/kv_index/__init__.py +56 -0
- sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/base_kv_index.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/base_kv_index.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/bm25s_index.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/kv_index/__pycache__/bm25s_index.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/kv_index/base_kv_index.py +76 -0
- sage/middleware/components/neuromem/search_engine/kv_index/bm25s_index.py +320 -0
- sage/middleware/components/neuromem/search_engine/vdb_index/__init__.py +56 -0
- sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/base_vdb_index.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/base_vdb_index.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/faiss_index.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/vdb_index/__pycache__/faiss_index.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/search_engine/vdb_index/base_vdb_index.py +53 -0
- sage/middleware/components/neuromem/search_engine/vdb_index/faiss_index.py +700 -0
- sage/middleware/components/neuromem/storage_engine/__init__.py +56 -0
- sage/middleware/components/neuromem/storage_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/storage_engine/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/storage_engine/__pycache__/metadata_storage.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/storage_engine/__pycache__/metadata_storage.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/storage_engine/__pycache__/text_storage.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/storage_engine/__pycache__/text_storage.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/storage_engine/__pycache__/vector_storage.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/storage_engine/__pycache__/vector_storage.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/storage_engine/kv_backend/__init__.py +56 -0
- sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/base_kv_backend.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/base_kv_backend.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/dict_kv_backend.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/dict_kv_backend.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/storage_engine/kv_backend/base_kv_backend.py +65 -0
- sage/middleware/components/neuromem/storage_engine/kv_backend/dict_kv_backend.py +54 -0
- sage/middleware/components/neuromem/storage_engine/metadata_storage.py +260 -0
- sage/middleware/components/neuromem/storage_engine/text_storage.py +106 -0
- sage/middleware/components/neuromem/storage_engine/vector_storage.py +85 -0
- sage/middleware/components/neuromem/tests/__init__.py +56 -0
- sage/middleware/components/neuromem/tests/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/tests/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/tests/__pycache__/test_memory_service.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/tests/__pycache__/test_memory_service.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/tests/core_test/__init__.py +56 -0
- sage/middleware/components/neuromem/tests/core_test/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/tests/core_test/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/tests/core_test/collection_test/__init__.py +56 -0
- sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/kv_collection_test.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/kv_collection_test.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/vdb_collection_test.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/tests/core_test/collection_test/__pycache__/vdb_collection_test.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/tests/core_test/collection_test/kv_collection_test.py +60 -0
- sage/middleware/components/neuromem/tests/core_test/collection_test/vdb_collection_test.py +88 -0
- sage/middleware/components/neuromem/tests/core_test/manager_test.py +154 -0
- sage/middleware/components/neuromem/tests/test_memory_service.py +293 -0
- sage/middleware/components/neuromem/utils/__init__.py +56 -0
- sage/middleware/components/neuromem/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/utils/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/utils/__pycache__/path_utils.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/neuromem/utils/__pycache__/path_utils.cpython-311.pyc +0 -0
- sage/middleware/components/neuromem/utils/path_utils.py +25 -0
- sage/middleware/components/sage_db/__init__.py +56 -0
- sage/middleware/components/sage_db/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/sage_db/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/sage_db/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/sage_db/__pycache__/sage_db.cpython-311.pyc +0 -0
- sage/middleware/components/sage_db/python/__init__.py +56 -0
- sage/middleware/components/sage_db/python/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/sage_db/python/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/components/sage_db/python/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/sage_db/python/__pycache__/sage_db.cpython-311.pyc +0 -0
- sage/middleware/components/sage_db/tests/__pycache__/test_python.cpython-311.opt-2.pyc +0 -0
- sage/middleware/components/sage_db/tests/__pycache__/test_python.cpython-311.pyc +0 -0
- sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-311.opt-2.pyc +0 -0
- sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-311.pyc +0 -0
- sage/middleware/examples/__pycache__/microservices_demo.cpython-311.opt-2.pyc +0 -0
- sage/middleware/examples/__pycache__/microservices_demo.cpython-311.pyc +0 -0
- sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-311.opt-2.pyc +0 -0
- sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-311.pyc +0 -0
- sage/middleware/examples/api_usage_tutorial.py +3 -3
- sage/middleware/examples/dag_microservices_demo.py +7 -8
- sage/middleware/examples/microservices_integration_demo.py +8 -11
- sage/middleware/examples/microservices_registration_demo.py +8 -12
- sage/middleware/services/__init__.py +56 -0
- sage/middleware/services/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/services/graph/__init__.py +52 -4
- sage/middleware/services/graph/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/graph/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/services/graph/__pycache__/graph_index.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/graph/__pycache__/graph_index.cpython-311.pyc +0 -0
- sage/middleware/services/graph/__pycache__/graph_service.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/graph/__pycache__/graph_service.cpython-311.pyc +0 -0
- sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-311.pyc +0 -0
- sage/middleware/services/graph/examples/graph_demo.py +3 -2
- sage/middleware/services/graph/graph_service.py +68 -0
- sage/middleware/services/graph/search_engine/__init__.py +56 -0
- sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-311.pyc +0 -0
- sage/middleware/services/kv/__init__.py +52 -4
- sage/middleware/services/kv/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/kv/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/services/kv/__pycache__/kv_service.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/kv/__pycache__/kv_service.cpython-311.pyc +0 -0
- sage/middleware/services/kv/examples/__pycache__/{kv_demo.cpython-313.opt-2.pyc → kv_demo.cpython-311.opt-2.pyc} +0 -0
- sage/middleware/services/kv/examples/__pycache__/{kv_demo.cpython-313.pyc → kv_demo.cpython-311.pyc} +0 -0
- sage/middleware/services/kv/examples/kv_demo.py +1 -1
- sage/middleware/services/kv/search_engine/__init__.py +56 -0
- sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-311.pyc +0 -0
- sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-311.pyc +0 -0
- sage/middleware/services/memory/__init__.py +52 -8
- sage/middleware/services/memory/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/memory/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/services/memory/__pycache__/memory_service.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/memory/__pycache__/memory_service.cpython-311.pyc +0 -0
- sage/middleware/services/memory/examples/__pycache__/{memory_demo.cpython-313.opt-2.pyc → memory_demo.cpython-311.opt-2.pyc} +0 -0
- sage/middleware/services/memory/examples/__pycache__/{memory_demo.cpython-313.pyc → memory_demo.cpython-311.pyc} +0 -0
- sage/middleware/services/memory/examples/dag_microservices_demo.py +8 -9
- sage/middleware/services/memory/examples/memory_demo.py +4 -4
- sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-311.pyc +0 -0
- sage/middleware/services/memory/memory_service.py +14 -11
- sage/middleware/services/memory/utils/__init__.py +56 -0
- sage/middleware/services/memory/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/memory/utils/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-311.pyc +0 -0
- sage/middleware/services/vdb/__init__.py +52 -4
- sage/middleware/services/vdb/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/vdb/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/services/vdb/__pycache__/vdb_service.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/vdb/__pycache__/vdb_service.cpython-311.pyc +0 -0
- sage/middleware/services/vdb/examples/__pycache__/{vdb_demo.cpython-313.opt-2.pyc → vdb_demo.cpython-311.opt-2.pyc} +0 -0
- sage/middleware/services/vdb/examples/__pycache__/{vdb_demo.cpython-313.pyc → vdb_demo.cpython-311.pyc} +0 -0
- sage/middleware/services/vdb/examples/vdb_demo.py +2 -2
- sage/middleware/services/vdb/search_engine/__init__.py +56 -0
- sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-311.pyc +0 -0
- sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-311.pyc +0 -0
- sage/middleware/services/vdb/vdb_service.py +44 -41
- sage/middleware/utils/__init__.py +53 -2
- sage/middleware/utils/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/utils/embedding/__init__.py +52 -31
- sage/middleware/utils/embedding/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/_cohere.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/_cohere.cpython-311.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/bedrock.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/bedrock.cpython-311.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-311.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-311.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/hf.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/hf.cpython-311.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/instructor.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/instructor.cpython-311.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/jina.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/jina.cpython-311.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/lollms.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/lollms.cpython-311.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-311.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-311.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/ollama.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/ollama.cpython-311.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/openai.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/openai.cpython-311.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-311.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/zhipu.cpython-311.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/zhipu.cpython-311.pyc +0 -0
- isage_middleware-0.1.1.dist-info/METADATA +0 -424
- isage_middleware-0.1.1.dist-info/RECORD +0 -182
- sage/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/middleware/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/api/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/middleware/api/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/api/__pycache__/graph_api.cpython-313.opt-2.pyc +0 -0
- sage/middleware/api/__pycache__/graph_api.cpython-313.pyc +0 -0
- sage/middleware/api/__pycache__/kv_api.cpython-313.opt-2.pyc +0 -0
- sage/middleware/api/__pycache__/kv_api.cpython-313.pyc +0 -0
- sage/middleware/api/__pycache__/memory_api.cpython-313.opt-2.pyc +0 -0
- sage/middleware/api/__pycache__/memory_api.cpython-313.pyc +0 -0
- sage/middleware/api/__pycache__/vdb_api.cpython-313.opt-2.pyc +0 -0
- sage/middleware/api/__pycache__/vdb_api.cpython-313.pyc +0 -0
- sage/middleware/enterprise/__init__.py +0 -75
- sage/middleware/enterprise/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/middleware/enterprise/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/enterprise/sage_db/__init__.py +0 -132
- sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/enterprise/sage_db/__pycache__/sage_db.cpython-313.opt-2.pyc +0 -0
- sage/middleware/enterprise/sage_db/__pycache__/sage_db.cpython-313.pyc +0 -0
- sage/middleware/enterprise/sage_db/python/__init__.py +0 -7
- sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/enterprise/sage_db/python/__pycache__/sage_db.cpython-313.opt-2.pyc +0 -0
- sage/middleware/enterprise/sage_db/python/__pycache__/sage_db.cpython-313.pyc +0 -0
- sage/middleware/enterprise/sage_db/tests/__pycache__/test_python.cpython-313.opt-2.pyc +0 -0
- sage/middleware/enterprise/sage_db/tests/__pycache__/test_python.cpython-313.pyc +0 -0
- sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-313.opt-2.pyc +0 -0
- sage/middleware/examples/__pycache__/api_usage_tutorial.cpython-313.pyc +0 -0
- sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-313.opt-2.pyc +0 -0
- sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-313.pyc +0 -0
- sage/middleware/examples/__pycache__/microservices_demo.cpython-313.opt-2.pyc +0 -0
- sage/middleware/examples/__pycache__/microservices_demo.cpython-313.pyc +0 -0
- sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-313.opt-2.pyc +0 -0
- sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-313.pyc +0 -0
- sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-313.opt-2.pyc +0 -0
- sage/middleware/examples/__pycache__/microservices_registration_demo.cpython-313.pyc +0 -0
- sage/middleware/services/graph/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/graph/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/services/graph/__pycache__/graph_index.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/graph/__pycache__/graph_index.cpython-313.pyc +0 -0
- sage/middleware/services/graph/__pycache__/graph_service.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/graph/__pycache__/graph_service.cpython-313.pyc +0 -0
- sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/graph/examples/__pycache__/graph_demo.cpython-313.pyc +0 -0
- sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/graph/search_engine/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/graph/search_engine/__pycache__/base_graph_index.cpython-313.pyc +0 -0
- sage/middleware/services/kv/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/kv/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/services/kv/__pycache__/kv_service.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/kv/__pycache__/kv_service.cpython-313.pyc +0 -0
- sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/kv/search_engine/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/kv/search_engine/__pycache__/base_kv_index.cpython-313.pyc +0 -0
- sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/kv/search_engine/__pycache__/bm25s_index.cpython-313.pyc +0 -0
- sage/middleware/services/memory/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/memory/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/services/memory/__pycache__/memory_service.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/memory/__pycache__/memory_service.cpython-313.pyc +0 -0
- sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-313.pyc +0 -0
- sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/memory/memory_collection/__pycache__/graph_collection.cpython-313.pyc +0 -0
- sage/middleware/services/memory/utils/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/memory/utils/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/memory/utils/__pycache__/path_utils.cpython-313.pyc +0 -0
- sage/middleware/services/vdb/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/vdb/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/services/vdb/__pycache__/vdb_service.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/vdb/__pycache__/vdb_service.cpython-313.pyc +0 -0
- sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/vdb/search_engine/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/vdb/search_engine/__pycache__/base_vdb_index.cpython-313.pyc +0 -0
- sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-313.opt-2.pyc +0 -0
- sage/middleware/services/vdb/search_engine/__pycache__/faiss_index.cpython-313.pyc +0 -0
- sage/middleware/utils/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/__init__.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/__init__.cpython-313.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/_cohere.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/_cohere.cpython-313.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/bedrock.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/bedrock.cpython-313.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/embedding_api.cpython-313.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/embedding_model.cpython-313.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/hf.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/hf.cpython-313.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/instructor.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/instructor.cpython-313.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/jina.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/jina.cpython-313.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/lollms.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/lollms.cpython-313.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/mockembedder.cpython-313.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/nvidia_openai.cpython-313.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/ollama.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/ollama.cpython-313.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/openai.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/openai.cpython-313.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/siliconcloud.cpython-313.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/zhipu.cpython-313.opt-2.pyc +0 -0
- sage/middleware/utils/embedding/__pycache__/zhipu.cpython-313.pyc +0 -0
- {isage_middleware-0.1.1.dist-info → isage_middleware-0.1.3.dist-info}/WHEEL +0 -0
- {isage_middleware-0.1.1.dist-info → isage_middleware-0.1.3.dist-info}/top_level.txt +0 -0
- /sage/middleware/{enterprise → components}/sage_db/python/sage_db.py +0 -0
- /sage/middleware/{enterprise → components}/sage_db/sage_db.py +0 -0
- /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']
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
sage/middleware/components/neuromem/storage_engine/__pycache__/metadata_storage.cpython-311.pyc
ADDED
|
Binary file
|
sage/middleware/components/neuromem/storage_engine/__pycache__/text_storage.cpython-311.opt-2.pyc
ADDED
|
Binary file
|
|
Binary file
|
sage/middleware/components/neuromem/storage_engine/__pycache__/vector_storage.cpython-311.opt-2.pyc
ADDED
|
Binary file
|
|
Binary file
|
|
@@ -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']
|
|
Binary file
|
sage/middleware/components/neuromem/storage_engine/kv_backend/__pycache__/__init__.cpython-311.pyc
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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.")
|