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.
- 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/{enterprise → components}/sage_db/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
- sage/middleware/{enterprise → 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/{enterprise → components}/sage_db/python/__pycache__/sage_db.cpython-311.opt-2.pyc +0 -0
- sage/middleware/{enterprise → components}/sage_db/python/__pycache__/sage_db.cpython-311.pyc +0 -0
- sage/middleware/{enterprise → components}/sage_db/tests/__pycache__/test_python.cpython-311.opt-2.pyc +0 -0
- sage/middleware/{enterprise → 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-311.opt-2.pyc +0 -0
- sage/middleware/services/kv/examples/__pycache__/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-311.opt-2.pyc +0 -0
- sage/middleware/services/memory/examples/__pycache__/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-311.opt-2.pyc +0 -0
- sage/middleware/services/vdb/examples/__pycache__/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.0.dist-info/METADATA +0 -424
- isage_middleware-0.1.0.dist-info/RECORD +0 -191
- sage/middleware/enterprise/__init__.py +0 -75
- sage/middleware/enterprise/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/enterprise/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/enterprise/sage_db/__init__.py +0 -132
- sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/enterprise/sage_db/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/enterprise/sage_db/python/__init__.py +0 -7
- sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-311.opt-2.pyc +0 -0
- sage/middleware/enterprise/sage_db/python/__pycache__/__init__.cpython-311.pyc +0 -0
- sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-311.opt-2.pyc +0 -0
- sage/middleware/examples/__pycache__/dag_microservices_demo.cpython-311.pyc +0 -0
- sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-311.opt-2.pyc +0 -0
- sage/middleware/examples/__pycache__/microservices_integration_demo.cpython-311.pyc +0 -0
- sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/memory/examples/__pycache__/dag_microservices_demo.cpython-311.pyc +0 -0
- sage/middleware/services/memory/memory_collection/__pycache__/base_collection.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/memory/memory_collection/__pycache__/base_collection.cpython-311.pyc +0 -0
- sage/middleware/services/memory/memory_collection/__pycache__/kv_collection.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/memory/memory_collection/__pycache__/kv_collection.cpython-311.pyc +0 -0
- sage/middleware/services/memory/memory_collection/__pycache__/vdb_collection.cpython-311.opt-2.pyc +0 -0
- sage/middleware/services/memory/memory_collection/__pycache__/vdb_collection.cpython-311.pyc +0 -0
- sage/middleware/services/memory/memory_collection/base_collection.py +0 -0
- sage/middleware/services/memory/memory_collection/kv_collection.py +0 -0
- sage/middleware/services/memory/memory_collection/vdb_collection.py +0 -0
- {isage_middleware-0.1.0.dist-info → isage_middleware-0.1.3.dist-info}/WHEEL +0 -0
- {isage_middleware-0.1.0.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,324 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Memory Service: 将Memory Manager包装成服务进程形式的封装层
|
|
3
|
+
"""
|
|
4
|
+
from typing import Dict, List, Any, Optional, Union
|
|
5
|
+
from sage.middleware.components.neuromem.memory_manager import MemoryManager
|
|
6
|
+
from sage.middleware.components.neuromem.memory_collection.base_collection import BaseMemoryCollection
|
|
7
|
+
from sage.common.utils.logging.custom_logger import CustomLogger
|
|
8
|
+
|
|
9
|
+
class MemoryService:
|
|
10
|
+
"""
|
|
11
|
+
Memory服务封装,对外提供统一的服务接口
|
|
12
|
+
主要功能:
|
|
13
|
+
1. 管理collections的创建、删除、重命名等
|
|
14
|
+
2. 对collection进行数据操作(插入、查询、更新、删除)
|
|
15
|
+
3. 对collection进行索引操作(创建、删除、重建)
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(self, data_dir: Optional[str] = None):
|
|
19
|
+
self.manager = MemoryManager(data_dir)
|
|
20
|
+
self.logger = CustomLogger()
|
|
21
|
+
|
|
22
|
+
def create_collection(self, name: str, backend_type: str, description: str = "",
|
|
23
|
+
embedding_model: Optional[Any] = None, dim: Optional[int] = None) -> Dict[str, Any]:
|
|
24
|
+
"""创建新的collection"""
|
|
25
|
+
try:
|
|
26
|
+
collection = self.manager.create_collection(
|
|
27
|
+
name=name,
|
|
28
|
+
backend_type=backend_type,
|
|
29
|
+
description=description,
|
|
30
|
+
embedding_model=embedding_model,
|
|
31
|
+
dim=dim
|
|
32
|
+
)
|
|
33
|
+
# 预先注册常用的元数据字段
|
|
34
|
+
if hasattr(collection, "add_metadata_field"):
|
|
35
|
+
# 注册基础字段
|
|
36
|
+
collection.add_metadata_field("type")
|
|
37
|
+
collection.add_metadata_field("date")
|
|
38
|
+
collection.add_metadata_field("source")
|
|
39
|
+
collection.add_metadata_field("index")
|
|
40
|
+
collection.add_metadata_field("timestamp")
|
|
41
|
+
|
|
42
|
+
return {
|
|
43
|
+
"status": "success",
|
|
44
|
+
"message": f"Collection '{name}' created successfully",
|
|
45
|
+
"collection_name": name
|
|
46
|
+
}
|
|
47
|
+
except Exception as e:
|
|
48
|
+
return {
|
|
49
|
+
"status": "error",
|
|
50
|
+
"message": str(e)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
def delete_collection(self, name: str) -> Dict[str, Any]:
|
|
54
|
+
"""删除指定collection"""
|
|
55
|
+
try:
|
|
56
|
+
self.manager.delete_collection(name)
|
|
57
|
+
return {
|
|
58
|
+
"status": "success",
|
|
59
|
+
"message": f"Collection '{name}' deleted successfully"
|
|
60
|
+
}
|
|
61
|
+
except Exception as e:
|
|
62
|
+
return {
|
|
63
|
+
"status": "error",
|
|
64
|
+
"message": str(e)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
def list_collections(self) -> Dict[str, Any]:
|
|
68
|
+
"""列出所有collections及其信息"""
|
|
69
|
+
try:
|
|
70
|
+
collections = []
|
|
71
|
+
for name, info in self.manager.collection_metadata.items():
|
|
72
|
+
collections.append({
|
|
73
|
+
"name": name,
|
|
74
|
+
"description": info.get("description", ""),
|
|
75
|
+
"backend_type": info.get("backend_type", ""),
|
|
76
|
+
"status": self.manager.collection_status.get(name, "unknown")
|
|
77
|
+
})
|
|
78
|
+
return {
|
|
79
|
+
"status": "success",
|
|
80
|
+
"collections": collections
|
|
81
|
+
}
|
|
82
|
+
except Exception as e:
|
|
83
|
+
return {
|
|
84
|
+
"status": "error",
|
|
85
|
+
"message": str(e)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
def rename_collection(self, old_name: str, new_name: str,
|
|
89
|
+
new_description: Optional[str] = None) -> Dict[str, Any]:
|
|
90
|
+
"""重命名collection"""
|
|
91
|
+
try:
|
|
92
|
+
self.manager.rename(old_name, new_name, new_description)
|
|
93
|
+
return {
|
|
94
|
+
"status": "success",
|
|
95
|
+
"message": f"Collection renamed from '{old_name}' to '{new_name}'"
|
|
96
|
+
}
|
|
97
|
+
except Exception as e:
|
|
98
|
+
return {
|
|
99
|
+
"status": "error",
|
|
100
|
+
"message": str(e)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
def get_collection_info(self, name: str) -> Dict[str, Any]:
|
|
104
|
+
"""获取指定collection的详细信息"""
|
|
105
|
+
try:
|
|
106
|
+
info = self.manager.list_collection(name)
|
|
107
|
+
return {
|
|
108
|
+
"status": "success",
|
|
109
|
+
"collection_info": info
|
|
110
|
+
}
|
|
111
|
+
except Exception as e:
|
|
112
|
+
return {
|
|
113
|
+
"status": "error",
|
|
114
|
+
"message": str(e)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
# Collection数据操作接口
|
|
118
|
+
def insert_data(self, collection_name: str, text: str,
|
|
119
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
120
|
+
index_names: Optional[List[str]] = None) -> Dict[str, Any]:
|
|
121
|
+
"""向指定collection插入数据"""
|
|
122
|
+
try:
|
|
123
|
+
collection = self.manager.get_collection(collection_name)
|
|
124
|
+
if not collection:
|
|
125
|
+
raise ValueError(f"Collection '{collection_name}' not found")
|
|
126
|
+
|
|
127
|
+
index_names = index_names or []
|
|
128
|
+
stable_id = collection.insert(text, metadata, *index_names)
|
|
129
|
+
|
|
130
|
+
return {
|
|
131
|
+
"status": "success",
|
|
132
|
+
"message": "Data inserted successfully",
|
|
133
|
+
"id": stable_id
|
|
134
|
+
}
|
|
135
|
+
except Exception as e:
|
|
136
|
+
return {
|
|
137
|
+
"status": "error",
|
|
138
|
+
"message": str(e)
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
def update_data(self, collection_name: str, old_text: str, new_text: str,
|
|
142
|
+
new_metadata: Optional[Dict[str, Any]] = None,
|
|
143
|
+
index_names: Optional[List[str]] = None) -> Dict[str, Any]:
|
|
144
|
+
"""更新指定collection中的数据"""
|
|
145
|
+
try:
|
|
146
|
+
collection = self.manager.get_collection(collection_name)
|
|
147
|
+
if not collection:
|
|
148
|
+
raise ValueError(f"Collection '{collection_name}' not found")
|
|
149
|
+
|
|
150
|
+
index_names = index_names or []
|
|
151
|
+
new_id = collection.update(old_text, new_text, new_metadata, *index_names)
|
|
152
|
+
|
|
153
|
+
return {
|
|
154
|
+
"status": "success",
|
|
155
|
+
"message": "Data updated successfully",
|
|
156
|
+
"new_id": new_id
|
|
157
|
+
}
|
|
158
|
+
except Exception as e:
|
|
159
|
+
return {
|
|
160
|
+
"status": "error",
|
|
161
|
+
"message": str(e)
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
def delete_data(self, collection_name: str, text: str) -> Dict[str, Any]:
|
|
165
|
+
"""从指定collection删除数据"""
|
|
166
|
+
try:
|
|
167
|
+
collection = self.manager.get_collection(collection_name)
|
|
168
|
+
if not collection:
|
|
169
|
+
raise ValueError(f"Collection '{collection_name}' not found")
|
|
170
|
+
|
|
171
|
+
collection.delete(text)
|
|
172
|
+
return {
|
|
173
|
+
"status": "success",
|
|
174
|
+
"message": "Data deleted successfully"
|
|
175
|
+
}
|
|
176
|
+
except Exception as e:
|
|
177
|
+
return {
|
|
178
|
+
"status": "error",
|
|
179
|
+
"message": str(e)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
def retrieve_data(self, collection_name: str, query_text: str,
|
|
183
|
+
topk: Optional[int] = None,
|
|
184
|
+
index_name: Optional[str] = None,
|
|
185
|
+
with_metadata: bool = False,
|
|
186
|
+
metadata_filter: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
|
|
187
|
+
"""从指定collection检索数据"""
|
|
188
|
+
try:
|
|
189
|
+
collection = self.manager.get_collection(collection_name)
|
|
190
|
+
if not collection:
|
|
191
|
+
raise ValueError(f"Collection '{collection_name}' not found")
|
|
192
|
+
|
|
193
|
+
metadata_conditions = metadata_filter or {}
|
|
194
|
+
results = collection.retrieve(
|
|
195
|
+
query_text,
|
|
196
|
+
topk=topk,
|
|
197
|
+
index_name=index_name,
|
|
198
|
+
with_metadata=with_metadata,
|
|
199
|
+
**metadata_conditions
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
return {
|
|
203
|
+
"status": "success",
|
|
204
|
+
"results": results
|
|
205
|
+
}
|
|
206
|
+
except Exception as e:
|
|
207
|
+
return {
|
|
208
|
+
"status": "error",
|
|
209
|
+
"message": str(e)
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
# 索引操作接口
|
|
213
|
+
def create_index(self, collection_name: str, index_name: str,
|
|
214
|
+
description: Optional[str] = None,
|
|
215
|
+
metadata_conditions: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
|
|
216
|
+
"""为指定collection创建索引"""
|
|
217
|
+
try:
|
|
218
|
+
collection = self.manager.get_collection(collection_name)
|
|
219
|
+
if not collection:
|
|
220
|
+
raise ValueError(f"Collection '{collection_name}' not found")
|
|
221
|
+
|
|
222
|
+
metadata_conditions = metadata_conditions or {}
|
|
223
|
+
collection.create_index(
|
|
224
|
+
index_name=index_name,
|
|
225
|
+
description=description,
|
|
226
|
+
**metadata_conditions
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
return {
|
|
230
|
+
"status": "success",
|
|
231
|
+
"message": f"Index '{index_name}' created successfully"
|
|
232
|
+
}
|
|
233
|
+
except Exception as e:
|
|
234
|
+
return {
|
|
235
|
+
"status": "error",
|
|
236
|
+
"message": str(e)
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
def delete_index(self, collection_name: str, index_name: str) -> Dict[str, Any]:
|
|
240
|
+
"""删除指定collection的索引"""
|
|
241
|
+
try:
|
|
242
|
+
collection = self.manager.get_collection(collection_name)
|
|
243
|
+
if not collection:
|
|
244
|
+
raise ValueError(f"Collection '{collection_name}' not found")
|
|
245
|
+
|
|
246
|
+
collection.delete_index(index_name)
|
|
247
|
+
return {
|
|
248
|
+
"status": "success",
|
|
249
|
+
"message": f"Index '{index_name}' deleted successfully"
|
|
250
|
+
}
|
|
251
|
+
except Exception as e:
|
|
252
|
+
return {
|
|
253
|
+
"status": "error",
|
|
254
|
+
"message": str(e)
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
def rebuild_index(self, collection_name: str, index_name: str) -> Dict[str, Any]:
|
|
258
|
+
"""重建指定collection的索引"""
|
|
259
|
+
try:
|
|
260
|
+
collection = self.manager.get_collection(collection_name)
|
|
261
|
+
if not collection:
|
|
262
|
+
raise ValueError(f"Collection '{collection_name}' not found")
|
|
263
|
+
|
|
264
|
+
collection.rebuild_index(index_name)
|
|
265
|
+
return {
|
|
266
|
+
"status": "success",
|
|
267
|
+
"message": f"Index '{index_name}' rebuilt successfully"
|
|
268
|
+
}
|
|
269
|
+
except Exception as e:
|
|
270
|
+
return {
|
|
271
|
+
"status": "error",
|
|
272
|
+
"message": str(e)
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
def list_indexes(self, collection_name: str) -> Dict[str, Any]:
|
|
276
|
+
"""列出指定collection的所有索引"""
|
|
277
|
+
try:
|
|
278
|
+
collection = self.manager.get_collection(collection_name)
|
|
279
|
+
if not collection:
|
|
280
|
+
raise ValueError(f"Collection '{collection_name}' not found")
|
|
281
|
+
|
|
282
|
+
indexes = collection.list_index()
|
|
283
|
+
return {
|
|
284
|
+
"status": "success",
|
|
285
|
+
"indexes": indexes
|
|
286
|
+
}
|
|
287
|
+
except Exception as e:
|
|
288
|
+
return {
|
|
289
|
+
"status": "error",
|
|
290
|
+
"message": str(e)
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
# 存储操作接口
|
|
294
|
+
def store_collection(self, collection_name: str) -> Dict[str, Any]:
|
|
295
|
+
"""保存指定collection到磁盘"""
|
|
296
|
+
try:
|
|
297
|
+
collection = self.manager.get_collection(collection_name)
|
|
298
|
+
if not collection:
|
|
299
|
+
raise ValueError(f"Collection '{collection_name}' not found")
|
|
300
|
+
|
|
301
|
+
self.manager.store_collection(collection_name)
|
|
302
|
+
return {
|
|
303
|
+
"status": "success",
|
|
304
|
+
"message": f"Collection '{collection_name}' stored successfully"
|
|
305
|
+
}
|
|
306
|
+
except Exception as e:
|
|
307
|
+
return {
|
|
308
|
+
"status": "error",
|
|
309
|
+
"message": str(e)
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
def store(self) -> Dict[str, Any]:
|
|
313
|
+
"""保存整个manager的所有信息到磁盘"""
|
|
314
|
+
try:
|
|
315
|
+
self.manager.store_collection() # 保存所有已加载的collection
|
|
316
|
+
return {
|
|
317
|
+
"status": "success",
|
|
318
|
+
"message": "All manager data stored successfully"
|
|
319
|
+
}
|
|
320
|
+
except Exception as e:
|
|
321
|
+
return {
|
|
322
|
+
"status": "error",
|
|
323
|
+
"message": str(e)
|
|
324
|
+
}
|
|
@@ -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
|
sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb.cpython-311.opt-2.pyc
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
sage/middleware/components/neuromem/micro_service/__pycache__/neuromem_vdb_service.cpython-311.pyc
ADDED
|
Binary file
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
from logging import Manager
|
|
2
|
+
import os
|
|
3
|
+
from re import M
|
|
4
|
+
from typing import Dict, List, Any, Optional, Union
|
|
5
|
+
from sage.middleware.components.neuromem.memory_manager import MemoryManager
|
|
6
|
+
from sage.middleware.components.neuromem.memory_collection.vdb_collection import VDBMemoryCollection
|
|
7
|
+
|
|
8
|
+
class NeuroMemVDB:
|
|
9
|
+
def __init__(self):
|
|
10
|
+
self.manager = MemoryManager(self._get_default_data_dir())
|
|
11
|
+
self.online_register_collection: Dict[str, VDBMemoryCollection] = {}
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def register_collection(self, collection_name: str, config = None):
|
|
15
|
+
# 检查collection是否已存在
|
|
16
|
+
existing_collections = self.manager.list_collection()
|
|
17
|
+
collection_exists = any(c['name'] == collection_name for c in existing_collections) if isinstance(existing_collections, list) else False
|
|
18
|
+
|
|
19
|
+
if collection_exists:
|
|
20
|
+
if config is not None:
|
|
21
|
+
print(f"警告: Collection '{collection_name}' 已存在,忽略传入的config参数")
|
|
22
|
+
# 正常连接并注册到online_register_collection
|
|
23
|
+
collection = self.manager.get_collection(collection_name)
|
|
24
|
+
if collection:
|
|
25
|
+
self.online_register_collection[collection_name] = collection
|
|
26
|
+
print(f"成功连接已存在的collection: {collection_name}")
|
|
27
|
+
else:
|
|
28
|
+
if config is not None:
|
|
29
|
+
# 正常通过Manager创建并注册到online_register_collection
|
|
30
|
+
embedding_model = config.get('embedding_model')
|
|
31
|
+
dim = config.get('dim')
|
|
32
|
+
description = config.get('description', f"VDB collection: {collection_name}")
|
|
33
|
+
collection = self.manager.create_collection(
|
|
34
|
+
name=collection_name,
|
|
35
|
+
backend_type="VDB",
|
|
36
|
+
description=description,
|
|
37
|
+
embedding_model=embedding_model,
|
|
38
|
+
dim=dim
|
|
39
|
+
)
|
|
40
|
+
if collection:
|
|
41
|
+
self.online_register_collection[collection_name] = collection
|
|
42
|
+
print(f"成功创建新collection: {collection_name}")
|
|
43
|
+
else:
|
|
44
|
+
# 警告 用默认参数创建一个collection并注册到online_register_collection
|
|
45
|
+
print(f"警告: Collection '{collection_name}' 不存在且未提供config,使用默认参数创建")
|
|
46
|
+
collection = self.manager.create_collection(
|
|
47
|
+
name=collection_name,
|
|
48
|
+
backend_type="VDB",
|
|
49
|
+
description=f"Default VDB collection: {collection_name}"
|
|
50
|
+
)
|
|
51
|
+
if collection:
|
|
52
|
+
self.online_register_collection[collection_name] = collection
|
|
53
|
+
print(f"成功创建默认collection: {collection_name}")
|
|
54
|
+
|
|
55
|
+
def insert(self, raw_data: Any, metadata: Optional[Dict[str, Any]] = None):
|
|
56
|
+
# 该方法在所有 online_register_collection 均插入数据
|
|
57
|
+
if not self.online_register_collection:
|
|
58
|
+
print("警告: 没有注册的collection,无法插入数据")
|
|
59
|
+
return
|
|
60
|
+
|
|
61
|
+
results = {}
|
|
62
|
+
for collection_name, collection in self.online_register_collection.items():
|
|
63
|
+
try:
|
|
64
|
+
stable_id = collection.insert(raw_data, metadata)
|
|
65
|
+
results[collection_name] = stable_id
|
|
66
|
+
print(f"成功在collection '{collection_name}' 中插入数据,ID: {stable_id}")
|
|
67
|
+
except Exception as e:
|
|
68
|
+
print(f"在collection '{collection_name}' 插入数据失败: {str(e)}")
|
|
69
|
+
results[collection_name] = None
|
|
70
|
+
return results
|
|
71
|
+
|
|
72
|
+
def retrieve(self, raw_data: Any, topk: int = 5):
|
|
73
|
+
# 测试类型的retrieve方法,不返回任何值,直接print出检索结果
|
|
74
|
+
if not self.online_register_collection:
|
|
75
|
+
print("警告: 没有注册的collection,无法检索数据")
|
|
76
|
+
return
|
|
77
|
+
|
|
78
|
+
print(f"检索查询: {raw_data}")
|
|
79
|
+
print("=" * 50)
|
|
80
|
+
|
|
81
|
+
for collection_name, collection in self.online_register_collection.items():
|
|
82
|
+
try:
|
|
83
|
+
results = collection.retrieve(raw_data, topk=topk, with_metadata=True)
|
|
84
|
+
print(f"Collection '{collection_name}' 检索结果:")
|
|
85
|
+
if results:
|
|
86
|
+
for i, result in enumerate(results, 1):
|
|
87
|
+
print(f" {i}. 文本: {result['text']}")
|
|
88
|
+
if result['metadata']:
|
|
89
|
+
print(f" 元数据: {result['metadata']}")
|
|
90
|
+
else:
|
|
91
|
+
print(" 无结果")
|
|
92
|
+
print("-" * 30)
|
|
93
|
+
except Exception as e:
|
|
94
|
+
print(f"Collection '{collection_name}' 检索失败: {str(e)}")
|
|
95
|
+
print("-" * 30)
|
|
96
|
+
|
|
97
|
+
def build_index(self, index_name: str = "global_index", description: str = "全局索引"):
|
|
98
|
+
# 该方法在所有 online_register_collection 创建指定索引
|
|
99
|
+
if not self.online_register_collection:
|
|
100
|
+
print("警告: 没有注册的collection,无法创建索引")
|
|
101
|
+
return
|
|
102
|
+
|
|
103
|
+
results = {}
|
|
104
|
+
for collection_name, collection in self.online_register_collection.items():
|
|
105
|
+
try:
|
|
106
|
+
collection.create_index(index_name, description=description)
|
|
107
|
+
results[collection_name] = True
|
|
108
|
+
print(f"成功在collection '{collection_name}' 中创建索引 '{index_name}'")
|
|
109
|
+
except Exception as e:
|
|
110
|
+
print(f"在collection '{collection_name}' 创建索引失败: {str(e)}")
|
|
111
|
+
results[collection_name] = False
|
|
112
|
+
return results
|
|
113
|
+
|
|
114
|
+
def store_to_disk(self):
|
|
115
|
+
# 调用manager的store_collection()方法,触发一次全局落盘
|
|
116
|
+
try:
|
|
117
|
+
self.manager.store_collection()
|
|
118
|
+
print("成功将所有collection数据保存到磁盘")
|
|
119
|
+
except Exception as e:
|
|
120
|
+
print(f"保存数据到磁盘失败: {str(e)}")
|
|
121
|
+
|
|
122
|
+
def clean_collection(self, collection_name: str):
|
|
123
|
+
# 清空某个collection的所有数据(包括磁盘中存在的)
|
|
124
|
+
try:
|
|
125
|
+
# 从在线注册列表中移除
|
|
126
|
+
if collection_name in self.online_register_collection:
|
|
127
|
+
del self.online_register_collection[collection_name]
|
|
128
|
+
print(f"已从在线注册列表中移除collection: {collection_name}")
|
|
129
|
+
|
|
130
|
+
# 通过manager删除collection(包括磁盘数据)
|
|
131
|
+
self.manager.delete_collection(collection_name)
|
|
132
|
+
print(f"成功清理collection: {collection_name}")
|
|
133
|
+
except Exception as e:
|
|
134
|
+
print(f"清理collection '{collection_name}' 失败: {str(e)}")
|
|
135
|
+
|
|
136
|
+
@classmethod
|
|
137
|
+
def _get_default_data_dir(cls):
|
|
138
|
+
"""获取默认数据目录"""
|
|
139
|
+
cur_dir = os.getcwd()
|
|
140
|
+
data_dir = os.path.join(cur_dir, "data", "neuromem_vdb")
|
|
141
|
+
os.makedirs(data_dir, exist_ok=True)
|
|
142
|
+
return data_dir
|
|
143
|
+
|
|
144
|
+
if __name__ == "__main__":
|
|
145
|
+
print("默认数据目录:", NeuroMemVDB._get_default_data_dir())
|
|
146
|
+
print("\n" + "="*60)
|
|
147
|
+
print("开始测试 NeuroMemVDB")
|
|
148
|
+
print("="*60)
|
|
149
|
+
|
|
150
|
+
# 创建NeuroMemVDB实例
|
|
151
|
+
vdb = NeuroMemVDB()
|
|
152
|
+
|
|
153
|
+
# 测试1: 注册不存在的collection(无config,应该警告并使用默认参数)
|
|
154
|
+
print("\n1. 测试注册不存在的collection(无config)")
|
|
155
|
+
vdb.register_collection("test_collection1")
|
|
156
|
+
|
|
157
|
+
# 测试2: 注册不存在的collection(有config)
|
|
158
|
+
print("\n2. 测试注册不存在的collection(有config)")
|
|
159
|
+
config = {
|
|
160
|
+
'description': '测试用的VDB集合',
|
|
161
|
+
'embedding_model': None, # 使用默认embedding模型
|
|
162
|
+
'dim': None # 使用默认维度
|
|
163
|
+
}
|
|
164
|
+
vdb.register_collection("test_collection2", config)
|
|
165
|
+
|
|
166
|
+
# 测试3: 插入数据
|
|
167
|
+
print("\n3. 测试插入数据")
|
|
168
|
+
vdb.insert("Python是一种编程语言", {"type": "test", "priority": "high"})
|
|
169
|
+
vdb.insert("机器学习是人工智能的重要分支", {"type": "demo", "priority": "low"})
|
|
170
|
+
vdb.insert("向量数据库用于存储和检索高维向量数据")
|
|
171
|
+
|
|
172
|
+
# 测试4: 创建索引
|
|
173
|
+
print("\n4. 测试创建索引")
|
|
174
|
+
vdb.build_index("custom_index", "自定义测试索引")
|
|
175
|
+
|
|
176
|
+
# 测试5: 检索数据
|
|
177
|
+
print("\n5. 测试检索数据")
|
|
178
|
+
vdb.retrieve("编程语言", topk=3)
|
|
179
|
+
|
|
180
|
+
# 测试6: 保存到磁盘
|
|
181
|
+
print("\n6. 测试保存到磁盘")
|
|
182
|
+
vdb.store_to_disk()
|
|
183
|
+
|
|
184
|
+
# 测试7: 重新注册已存在的collection(应该警告)
|
|
185
|
+
print("\n7. 测试重新注册已存在的collection")
|
|
186
|
+
vdb.register_collection("test_collection1", {"description": "这个config应该被忽略"})
|
|
187
|
+
|
|
188
|
+
# 测试8: 清理collection
|
|
189
|
+
print("\n8. 测试清理collection")
|
|
190
|
+
vdb.clean_collection("test_collection1")
|
|
191
|
+
|
|
192
|
+
# 测试9: 再次检索(应该只有test_collection2的结果)
|
|
193
|
+
print("\n9. 清理后再次检索")
|
|
194
|
+
vdb.retrieve("编程语言", topk=3)
|
|
195
|
+
|
|
196
|
+
print("\n" + "="*60)
|
|
197
|
+
print("测试完成")
|
|
198
|
+
print("="*60)
|