pinecone 5.4.0__tar.gz → 5.4.0.dev2__tar.gz
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.
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/PKG-INFO +2 -2
- pinecone-5.4.0.dev2/pinecone/__version__ +1 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/control/pinecone.py +0 -8
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/shared/api_client.py +6 -67
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/shared/configuration.py +0 -20
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/data/index.py +10 -143
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/__init__.py +0 -4
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/base.py +0 -10
- pinecone-5.4.0.dev2/pinecone/grpc/future.py +34 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/index_grpc.py +10 -70
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/pinecone.py +1 -3
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/utils.py +4 -9
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pyproject.toml +2 -6
- pinecone-5.4.0/pinecone/__version__ +0 -1
- pinecone-5.4.0/pinecone/data/query_results_aggregator.py +0 -193
- pinecone-5.4.0/pinecone/grpc/future.py +0 -86
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/LICENSE.txt +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/README.md +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/config/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/config/config.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/config/openapi.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/config/pinecone_config.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/control/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/control/index_host_store.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/control/langchain_import_warnings.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/control/repr_overrides.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/grpc/protos/vector_service_pb2.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/grpc/protos/vector_service_pb2.pyi +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/grpc/protos/vector_service_pb2_grpc.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/api/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/api/inference_api.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/api/manage_indexes_api.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/apis/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/collection_list.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/collection_model.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/configure_index_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/configure_index_request_spec.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/configure_index_request_spec_pod.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/create_collection_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/create_index_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/deletion_protection.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/embed_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/embed_request_inputs.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/embed_request_parameters.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/embedding.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/embeddings_list.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/embeddings_list_usage.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/error_response.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/error_response_error.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/index_list.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/index_model.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/index_model_spec.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/index_model_status.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/index_spec.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/pod_spec.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/pod_spec_metadata_config.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/serverless_spec.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/models/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/api/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/api/data_plane_api.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/apis/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/delete_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/describe_index_stats_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/describe_index_stats_response.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/fetch_response.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/list_item.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/list_response.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/namespace_summary.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/pagination.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/protobuf_any.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/protobuf_null_value.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/query_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/query_response.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/query_vector.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/rpc_status.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/scored_vector.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/single_query_results.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/sparse_values.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/update_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/upsert_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/upsert_response.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/usage.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/vector.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/models/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/shared/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/shared/exceptions.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/shared/model_utils.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/shared/rest.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/api/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/api/manage_indexes_api.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/apis/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/collection_list.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/collection_model.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/configure_index_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/configure_index_request_spec.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/configure_index_request_spec_pod.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/create_collection_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/create_index_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/deletion_protection.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/error_response.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/error_response_error.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/index_list.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/index_model.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/index_model_spec.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/index_model_status.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/index_spec.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/pod_spec.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/pod_spec_metadata_config.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/serverless_spec.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/models/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/api/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/api/bulk_operations_api.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/api/vector_operations_api.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/apis/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/delete_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/describe_index_stats_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/describe_index_stats_response.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/fetch_response.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/import_error_mode.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/import_list_response.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/import_model.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/list_item.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/list_response.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/namespace_summary.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/pagination.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/protobuf_any.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/protobuf_null_value.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/query_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/query_response.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/query_vector.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/rpc_status.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/scored_vector.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/single_query_results.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/sparse_values.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/start_import_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/start_import_response.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/update_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/upsert_request.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/upsert_response.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/usage.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/vector.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/models/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/shared/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/shared/api_client.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/shared/configuration.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/shared/exceptions.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/shared/model_utils.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/shared/rest.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/data/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/data/errors.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/data/features/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/data/features/bulk_import.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/data/sparse_vector_factory.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/data/vector_factory.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/deprecation_warnings.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/exceptions/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/exceptions/exceptions.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/channel_factory.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/config.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/grpc_runner.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/retry.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/sparse_values_factory.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/vector_factory_grpc.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/collection_description.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/collection_list.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/index_description.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/index_list.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/index_model.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/list_response.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/pod_spec.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/serverless_spec.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/__init__.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/check_kwargs.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/constants.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/convert_to_list.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/deprecation_notice.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/docslinks.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/error_handling.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/fix_tuple_length.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/normalize_host.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/parse_args.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/repr_overrides.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/setup_openapi_client.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/user_agent.py +0 -0
- {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pinecone
|
|
3
|
-
Version: 5.4.0
|
|
3
|
+
Version: 5.4.0.dev2
|
|
4
4
|
Summary: Pinecone client and SDK
|
|
5
5
|
Home-page: https://www.pinecone.io
|
|
6
6
|
License: Apache-2.0
|
|
@@ -35,7 +35,7 @@ Requires-Dist: grpcio (>=1.59.0) ; (python_version >= "3.11" and python_version
|
|
|
35
35
|
Requires-Dist: lz4 (>=3.1.3) ; extra == "grpc"
|
|
36
36
|
Requires-Dist: pinecone-plugin-inference (>=2.0.0,<3.0.0)
|
|
37
37
|
Requires-Dist: pinecone-plugin-interface (>=0.0.7,<0.0.8)
|
|
38
|
-
Requires-Dist: protobuf (>=
|
|
38
|
+
Requires-Dist: protobuf (>=5.28,<6.0) ; extra == "grpc"
|
|
39
39
|
Requires-Dist: protoc-gen-openapiv2 (>=0.0.1,<0.0.2) ; extra == "grpc"
|
|
40
40
|
Requires-Dist: python-dateutil (>=2.5.3)
|
|
41
41
|
Requires-Dist: tqdm (>=4.64.1)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
5.4.0.dev2
|
|
@@ -765,14 +765,6 @@ class Pinecone:
|
|
|
765
765
|
# Now you're ready to perform data operations
|
|
766
766
|
index.query(vector=[...], top_k=10)
|
|
767
767
|
```
|
|
768
|
-
|
|
769
|
-
Arguments:
|
|
770
|
-
name: The name of the index to target. If you specify the name of the index, the client will
|
|
771
|
-
fetch the host url from the Pinecone control plane.
|
|
772
|
-
host: The host url of the index to target. If you specify the host url, the client will use
|
|
773
|
-
the host url directly without making any additional calls to the control plane.
|
|
774
|
-
pool_threads: The number of threads to use when making parallel requests by calling index methods with optional kwarg async_req=True, or using methods that make use of parallelism automatically such as query_namespaces(). Default: 1
|
|
775
|
-
connection_pool_maxsize: The maximum number of connections to keep in the connection pool. Default: 5 * multiprocessing.cpu_count()
|
|
776
768
|
"""
|
|
777
769
|
if name == "" and host == "":
|
|
778
770
|
raise ValueError("Either name or host must be specified")
|
|
@@ -2,31 +2,12 @@ import json
|
|
|
2
2
|
import atexit
|
|
3
3
|
import mimetypes
|
|
4
4
|
from multiprocessing.pool import ThreadPool
|
|
5
|
-
from concurrent.futures import ThreadPoolExecutor
|
|
6
5
|
import io
|
|
7
6
|
import os
|
|
8
7
|
import re
|
|
9
8
|
import typing
|
|
10
9
|
from urllib.parse import quote
|
|
11
10
|
from urllib3.fields import RequestField
|
|
12
|
-
import time
|
|
13
|
-
import random
|
|
14
|
-
|
|
15
|
-
def retry_api_call(
|
|
16
|
-
func, args=(), kwargs={}, retries=3, backoff=1, jitter=0.5
|
|
17
|
-
):
|
|
18
|
-
attempts = 0
|
|
19
|
-
while attempts < retries:
|
|
20
|
-
try:
|
|
21
|
-
return func(*args, **kwargs) # Attempt to call __call_api
|
|
22
|
-
except Exception as e:
|
|
23
|
-
attempts += 1
|
|
24
|
-
if attempts >= retries:
|
|
25
|
-
print(f"API call failed after {attempts} attempts: {e}")
|
|
26
|
-
raise # Re-raise exception if retries are exhausted
|
|
27
|
-
sleep_time = backoff * (2 ** (attempts - 1)) + random.uniform(0, jitter)
|
|
28
|
-
# print(f"Retrying ({attempts}/{retries}) in {sleep_time:.2f} seconds after error: {e}")
|
|
29
|
-
time.sleep(sleep_time)
|
|
30
11
|
|
|
31
12
|
|
|
32
13
|
from pinecone.core.openapi.shared import rest
|
|
@@ -71,7 +52,6 @@ class ApiClient(object):
|
|
|
71
52
|
"""
|
|
72
53
|
|
|
73
54
|
_pool = None
|
|
74
|
-
_threadpool_executor = None
|
|
75
55
|
|
|
76
56
|
def __init__(self, configuration=None, header_name=None, header_value=None, cookie=None, pool_threads=1):
|
|
77
57
|
if configuration is None:
|
|
@@ -94,9 +74,6 @@ class ApiClient(object):
|
|
|
94
74
|
self.close()
|
|
95
75
|
|
|
96
76
|
def close(self):
|
|
97
|
-
if self._threadpool_executor:
|
|
98
|
-
self._threadpool_executor.shutdown()
|
|
99
|
-
self._threadpool_executor = None
|
|
100
77
|
if self._pool:
|
|
101
78
|
self._pool.close()
|
|
102
79
|
self._pool.join()
|
|
@@ -114,12 +91,6 @@ class ApiClient(object):
|
|
|
114
91
|
self._pool = ThreadPool(self.pool_threads)
|
|
115
92
|
return self._pool
|
|
116
93
|
|
|
117
|
-
@property
|
|
118
|
-
def threadpool_executor(self):
|
|
119
|
-
if self._threadpool_executor is None:
|
|
120
|
-
self._threadpool_executor = ThreadPoolExecutor(max_workers=self.pool_threads)
|
|
121
|
-
return self._threadpool_executor
|
|
122
|
-
|
|
123
94
|
@property
|
|
124
95
|
def user_agent(self):
|
|
125
96
|
"""User agent for this API client"""
|
|
@@ -345,7 +316,6 @@ class ApiClient(object):
|
|
|
345
316
|
response_type: typing.Optional[typing.Tuple[typing.Any]] = None,
|
|
346
317
|
auth_settings: typing.Optional[typing.List[str]] = None,
|
|
347
318
|
async_req: typing.Optional[bool] = None,
|
|
348
|
-
async_threadpool_executor: typing.Optional[bool] = None,
|
|
349
319
|
_return_http_data_only: typing.Optional[bool] = None,
|
|
350
320
|
collection_formats: typing.Optional[typing.Dict[str, str]] = None,
|
|
351
321
|
_preload_content: bool = True,
|
|
@@ -406,9 +376,8 @@ class ApiClient(object):
|
|
|
406
376
|
If parameter async_req is False or missing,
|
|
407
377
|
then the method will return the response directly.
|
|
408
378
|
"""
|
|
409
|
-
if
|
|
410
|
-
return self.
|
|
411
|
-
self.__call_api,
|
|
379
|
+
if not async_req:
|
|
380
|
+
return self.__call_api(
|
|
412
381
|
resource_path,
|
|
413
382
|
method,
|
|
414
383
|
path_params,
|
|
@@ -427,8 +396,9 @@ class ApiClient(object):
|
|
|
427
396
|
_check_type,
|
|
428
397
|
)
|
|
429
398
|
|
|
430
|
-
|
|
431
|
-
|
|
399
|
+
return self.pool.apply_async(
|
|
400
|
+
self.__call_api,
|
|
401
|
+
(
|
|
432
402
|
resource_path,
|
|
433
403
|
method,
|
|
434
404
|
path_params,
|
|
@@ -445,35 +415,7 @@ class ApiClient(object):
|
|
|
445
415
|
_request_timeout,
|
|
446
416
|
_host,
|
|
447
417
|
_check_type,
|
|
448
|
-
)
|
|
449
|
-
|
|
450
|
-
return self.pool.apply_async(
|
|
451
|
-
retry_api_call,
|
|
452
|
-
args=(
|
|
453
|
-
self.__call_api, # Pass the API call function as the first argument
|
|
454
|
-
(
|
|
455
|
-
resource_path,
|
|
456
|
-
method,
|
|
457
|
-
path_params,
|
|
458
|
-
query_params,
|
|
459
|
-
header_params,
|
|
460
|
-
body,
|
|
461
|
-
post_params,
|
|
462
|
-
files,
|
|
463
|
-
response_type,
|
|
464
|
-
auth_settings,
|
|
465
|
-
_return_http_data_only,
|
|
466
|
-
collection_formats,
|
|
467
|
-
_preload_content,
|
|
468
|
-
_request_timeout,
|
|
469
|
-
_host,
|
|
470
|
-
_check_type,
|
|
471
|
-
),
|
|
472
|
-
{}, # empty kwargs dictionary
|
|
473
|
-
3, # retries
|
|
474
|
-
1, # backoff time
|
|
475
|
-
0.5 # jitter
|
|
476
|
-
)
|
|
418
|
+
),
|
|
477
419
|
)
|
|
478
420
|
|
|
479
421
|
def request(
|
|
@@ -723,7 +665,6 @@ class Endpoint(object):
|
|
|
723
665
|
self.params_map["all"].extend(
|
|
724
666
|
[
|
|
725
667
|
"async_req",
|
|
726
|
-
"async_threadpool_executor",
|
|
727
668
|
"_host_index",
|
|
728
669
|
"_preload_content",
|
|
729
670
|
"_request_timeout",
|
|
@@ -738,7 +679,6 @@ class Endpoint(object):
|
|
|
738
679
|
self.openapi_types = root_map["openapi_types"]
|
|
739
680
|
extra_types = {
|
|
740
681
|
"async_req": (bool,),
|
|
741
|
-
"async_threadpool_executor": (bool, ),
|
|
742
682
|
"_host_index": (none_type, int),
|
|
743
683
|
"_preload_content": (bool,),
|
|
744
684
|
"_request_timeout": (none_type, float, (float,), [float], int, (int,), [int]),
|
|
@@ -888,7 +828,6 @@ class Endpoint(object):
|
|
|
888
828
|
response_type=self.settings["response_type"],
|
|
889
829
|
auth_settings=self.settings["auth"],
|
|
890
830
|
async_req=kwargs["async_req"],
|
|
891
|
-
async_threadpool_executor=kwargs.get("async_threadpool_executor", None),
|
|
892
831
|
_check_type=kwargs["_check_return_type"],
|
|
893
832
|
_return_http_data_only=kwargs["_return_http_data_only"],
|
|
894
833
|
_preload_content=kwargs["_preload_content"],
|
|
@@ -469,23 +469,3 @@ class Configuration(object):
|
|
|
469
469
|
"""Fix base path."""
|
|
470
470
|
self._base_path = value
|
|
471
471
|
self.server_index = None
|
|
472
|
-
|
|
473
|
-
def __repr__(self):
|
|
474
|
-
attrs = [
|
|
475
|
-
f"host={self.host}",
|
|
476
|
-
f"api_key=***",
|
|
477
|
-
f"api_key_prefix={self.api_key_prefix}",
|
|
478
|
-
f"access_token={self.access_token}",
|
|
479
|
-
f"connection_pool_maxsize={self.connection_pool_maxsize}",
|
|
480
|
-
f"username={self.username}",
|
|
481
|
-
f"password={self.password}",
|
|
482
|
-
f"discard_unknown_keys={self.discard_unknown_keys}",
|
|
483
|
-
f"disabled_client_side_validations={self.disabled_client_side_validations}",
|
|
484
|
-
f"server_index={self.server_index}",
|
|
485
|
-
f"server_variables={self.server_variables}",
|
|
486
|
-
f"server_operation_index={self.server_operation_index}",
|
|
487
|
-
f"server_operation_variables={self.server_operation_variables}",
|
|
488
|
-
f"ssl_ca_cert={self.ssl_ca_cert}",
|
|
489
|
-
|
|
490
|
-
]
|
|
491
|
-
return f"Configuration({', '.join(attrs)})"
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from tqdm.autonotebook import tqdm
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
import json
|
|
5
4
|
from typing import Union, List, Optional, Dict, Any
|
|
6
5
|
|
|
7
6
|
from pinecone.config import ConfigBuilder
|
|
@@ -34,10 +33,6 @@ from ..utils import (
|
|
|
34
33
|
)
|
|
35
34
|
from .features.bulk_import import ImportFeatureMixin
|
|
36
35
|
from .vector_factory import VectorFactory
|
|
37
|
-
from .query_results_aggregator import QueryResultsAggregator, QueryNamespacesResults
|
|
38
|
-
|
|
39
|
-
from multiprocessing.pool import ApplyResult
|
|
40
|
-
from concurrent.futures import as_completed
|
|
41
36
|
|
|
42
37
|
from pinecone_plugin_interface import load_and_install as install_plugins
|
|
43
38
|
|
|
@@ -70,7 +65,6 @@ _OPENAPI_ENDPOINT_PARAMS = (
|
|
|
70
65
|
"_check_return_type",
|
|
71
66
|
"_host_index",
|
|
72
67
|
"async_req",
|
|
73
|
-
"async_threadpool_executor",
|
|
74
68
|
)
|
|
75
69
|
|
|
76
70
|
|
|
@@ -103,21 +97,17 @@ class Index(ImportFeatureMixin):
|
|
|
103
97
|
**kwargs,
|
|
104
98
|
)
|
|
105
99
|
|
|
106
|
-
self.
|
|
100
|
+
self._config = ConfigBuilder.build(
|
|
107
101
|
api_key=api_key, host=host, additional_headers=additional_headers, **kwargs
|
|
108
102
|
)
|
|
109
|
-
|
|
110
|
-
self._pool_threads = pool_threads
|
|
111
|
-
|
|
112
|
-
if kwargs.get("connection_pool_maxsize", None):
|
|
113
|
-
self._openapi_config.connection_pool_maxsize = kwargs.get("connection_pool_maxsize")
|
|
103
|
+
openapi_config = ConfigBuilder.build_openapi_config(self._config, openapi_config)
|
|
114
104
|
|
|
115
105
|
self._vector_api = setup_openapi_client(
|
|
116
106
|
api_client_klass=ApiClient,
|
|
117
107
|
api_klass=DataPlaneApi,
|
|
118
|
-
config=self.
|
|
119
|
-
openapi_config=
|
|
120
|
-
pool_threads=
|
|
108
|
+
config=self._config,
|
|
109
|
+
openapi_config=openapi_config,
|
|
110
|
+
pool_threads=pool_threads,
|
|
121
111
|
api_version=API_VERSION,
|
|
122
112
|
)
|
|
123
113
|
|
|
@@ -130,9 +120,9 @@ class Index(ImportFeatureMixin):
|
|
|
130
120
|
# try block just in case to make sure a bad plugin doesn't
|
|
131
121
|
# halt client initialization.
|
|
132
122
|
openapi_client_builder = build_plugin_setup_client(
|
|
133
|
-
config=self.
|
|
134
|
-
openapi_config=self.
|
|
135
|
-
pool_threads=self.
|
|
123
|
+
config=self._config,
|
|
124
|
+
openapi_config=self.openapi_config,
|
|
125
|
+
pool_threads=self.pool_threads,
|
|
136
126
|
)
|
|
137
127
|
install_plugins(self, openapi_client_builder)
|
|
138
128
|
except Exception as e:
|
|
@@ -396,7 +386,7 @@ class Index(ImportFeatureMixin):
|
|
|
396
386
|
Union[SparseValues, Dict[str, Union[List[float], List[int]]]]
|
|
397
387
|
] = None,
|
|
398
388
|
**kwargs,
|
|
399
|
-
) ->
|
|
389
|
+
) -> QueryResponse:
|
|
400
390
|
"""
|
|
401
391
|
The Query operation searches a namespace, using a query vector.
|
|
402
392
|
It retrieves the ids of the most similar items in a namespace, along with their similarity scores.
|
|
@@ -438,39 +428,6 @@ class Index(ImportFeatureMixin):
|
|
|
438
428
|
and namespace name.
|
|
439
429
|
"""
|
|
440
430
|
|
|
441
|
-
response = self._query(
|
|
442
|
-
*args,
|
|
443
|
-
top_k=top_k,
|
|
444
|
-
vector=vector,
|
|
445
|
-
id=id,
|
|
446
|
-
namespace=namespace,
|
|
447
|
-
filter=filter,
|
|
448
|
-
include_values=include_values,
|
|
449
|
-
include_metadata=include_metadata,
|
|
450
|
-
sparse_vector=sparse_vector,
|
|
451
|
-
**kwargs,
|
|
452
|
-
)
|
|
453
|
-
|
|
454
|
-
if kwargs.get("async_req", False) or kwargs.get("async_threadpool_executor", False):
|
|
455
|
-
return response
|
|
456
|
-
else:
|
|
457
|
-
return parse_query_response(response)
|
|
458
|
-
|
|
459
|
-
def _query(
|
|
460
|
-
self,
|
|
461
|
-
*args,
|
|
462
|
-
top_k: int,
|
|
463
|
-
vector: Optional[List[float]] = None,
|
|
464
|
-
id: Optional[str] = None,
|
|
465
|
-
namespace: Optional[str] = None,
|
|
466
|
-
filter: Optional[Dict[str, Union[str, float, int, bool, List, dict]]] = None,
|
|
467
|
-
include_values: Optional[bool] = None,
|
|
468
|
-
include_metadata: Optional[bool] = None,
|
|
469
|
-
sparse_vector: Optional[
|
|
470
|
-
Union[SparseValues, Dict[str, Union[List[float], List[int]]]]
|
|
471
|
-
] = None,
|
|
472
|
-
**kwargs,
|
|
473
|
-
) -> QueryResponse:
|
|
474
431
|
if len(args) > 0:
|
|
475
432
|
raise ValueError(
|
|
476
433
|
"The argument order for `query()` has changed; please use keyword arguments instead of positional arguments. Example: index.query(vector=[0.1, 0.2, 0.3], top_k=10, namespace='my_namespace')"
|
|
@@ -495,7 +452,6 @@ class Index(ImportFeatureMixin):
|
|
|
495
452
|
("sparse_vector", sparse_vector),
|
|
496
453
|
]
|
|
497
454
|
)
|
|
498
|
-
|
|
499
455
|
response = self._vector_api.query(
|
|
500
456
|
QueryRequest(
|
|
501
457
|
**args_dict,
|
|
@@ -504,96 +460,7 @@ class Index(ImportFeatureMixin):
|
|
|
504
460
|
),
|
|
505
461
|
**{k: v for k, v in kwargs.items() if k in _OPENAPI_ENDPOINT_PARAMS},
|
|
506
462
|
)
|
|
507
|
-
return response
|
|
508
|
-
|
|
509
|
-
@validate_and_convert_errors
|
|
510
|
-
def query_namespaces(
|
|
511
|
-
self,
|
|
512
|
-
vector: List[float],
|
|
513
|
-
namespaces: List[str],
|
|
514
|
-
top_k: Optional[int] = None,
|
|
515
|
-
filter: Optional[Dict[str, Union[str, float, int, bool, List, dict]]] = None,
|
|
516
|
-
include_values: Optional[bool] = None,
|
|
517
|
-
include_metadata: Optional[bool] = None,
|
|
518
|
-
sparse_vector: Optional[
|
|
519
|
-
Union[SparseValues, Dict[str, Union[List[float], List[int]]]]
|
|
520
|
-
] = None,
|
|
521
|
-
**kwargs,
|
|
522
|
-
) -> QueryNamespacesResults:
|
|
523
|
-
"""The query_namespaces() method is used to make a query to multiple namespaces in parallel and combine the results into one result set.
|
|
524
|
-
|
|
525
|
-
Since several asynchronous calls are made on your behalf when calling this method, you will need to tune the pool_threads and connection_pool_maxsize parameter of the Index constructor to suite your workload.
|
|
526
|
-
|
|
527
|
-
Examples:
|
|
528
|
-
|
|
529
|
-
```python
|
|
530
|
-
from pinecone import Pinecone
|
|
531
|
-
|
|
532
|
-
pc = Pinecone(api_key="your-api-key")
|
|
533
|
-
index = pc.Index(
|
|
534
|
-
host="index-name",
|
|
535
|
-
pool_threads=32,
|
|
536
|
-
connection_pool_maxsize=32
|
|
537
|
-
)
|
|
538
|
-
|
|
539
|
-
query_vec = [0.1, 0.2, 0.3] # An embedding that matches the index dimension
|
|
540
|
-
combined_results = index.query_namespaces(
|
|
541
|
-
vector=query_vec,
|
|
542
|
-
namespaces=['ns1', 'ns2', 'ns3', 'ns4'],
|
|
543
|
-
top_k=10,
|
|
544
|
-
filter={'genre': {"$eq": "drama"}},
|
|
545
|
-
include_values=True,
|
|
546
|
-
include_metadata=True
|
|
547
|
-
)
|
|
548
|
-
for vec in combined_results.matches:
|
|
549
|
-
print(vec.id, vec.score)
|
|
550
|
-
print(combined_results.usage)
|
|
551
|
-
```
|
|
552
|
-
|
|
553
|
-
Args:
|
|
554
|
-
vector (List[float]): The query vector, must be the same length as the dimension of the index being queried.
|
|
555
|
-
namespaces (List[str]): The list of namespaces to query.
|
|
556
|
-
top_k (Optional[int], optional): The number of results you would like to request from each namespace. Defaults to 10.
|
|
557
|
-
filter (Optional[Dict[str, Union[str, float, int, bool, List, dict]]], optional): Pass an optional filter to filter results based on metadata. Defaults to None.
|
|
558
|
-
include_values (Optional[bool], optional): Boolean field indicating whether vector values should be included with results. Defaults to None.
|
|
559
|
-
include_metadata (Optional[bool], optional): Boolean field indicating whether vector metadata should be included with results. Defaults to None.
|
|
560
|
-
sparse_vector (Optional[ Union[SparseValues, Dict[str, Union[List[float], List[int]]]] ], optional): If you are working with a dotproduct index, you can pass a sparse vector as part of your hybrid search. Defaults to None.
|
|
561
|
-
|
|
562
|
-
Returns:
|
|
563
|
-
QueryNamespacesResults: A QueryNamespacesResults object containing the combined results from all namespaces, as well as the combined usage cost in read units.
|
|
564
|
-
"""
|
|
565
|
-
if namespaces is None or len(namespaces) == 0:
|
|
566
|
-
raise ValueError("At least one namespace must be specified")
|
|
567
|
-
if len(vector) == 0:
|
|
568
|
-
raise ValueError("Query vector must not be empty")
|
|
569
|
-
|
|
570
|
-
overall_topk = top_k if top_k is not None else 10
|
|
571
|
-
aggregator = QueryResultsAggregator(top_k=overall_topk)
|
|
572
|
-
|
|
573
|
-
target_namespaces = set(namespaces) # dedup namespaces
|
|
574
|
-
async_futures = [
|
|
575
|
-
self.query(
|
|
576
|
-
vector=vector,
|
|
577
|
-
namespace=ns,
|
|
578
|
-
top_k=overall_topk,
|
|
579
|
-
filter=filter,
|
|
580
|
-
include_values=include_values,
|
|
581
|
-
include_metadata=include_metadata,
|
|
582
|
-
sparse_vector=sparse_vector,
|
|
583
|
-
async_threadpool_executor=True,
|
|
584
|
-
_preload_content=False,
|
|
585
|
-
**kwargs,
|
|
586
|
-
)
|
|
587
|
-
for ns in target_namespaces
|
|
588
|
-
]
|
|
589
|
-
|
|
590
|
-
for result in as_completed(async_futures):
|
|
591
|
-
raw_result = result.result()
|
|
592
|
-
response = json.loads(raw_result.data.decode("utf-8"))
|
|
593
|
-
aggregator.add_results(response)
|
|
594
|
-
|
|
595
|
-
final_results = aggregator.get_results()
|
|
596
|
-
return final_results
|
|
463
|
+
return parse_query_response(response)
|
|
597
464
|
|
|
598
465
|
@validate_and_convert_errors
|
|
599
466
|
def update(
|
|
@@ -47,24 +47,20 @@ index.query(vector=[...], top_k=10)
|
|
|
47
47
|
from .index_grpc import GRPCIndex
|
|
48
48
|
from .pinecone import PineconeGRPC
|
|
49
49
|
from .config import GRPCClientConfig
|
|
50
|
-
from .future import PineconeGrpcFuture
|
|
51
50
|
|
|
52
51
|
from pinecone.core.grpc.protos.vector_service_pb2 import (
|
|
53
52
|
Vector as GRPCVector,
|
|
54
53
|
SparseValues as GRPCSparseValues,
|
|
55
54
|
Vector,
|
|
56
55
|
SparseValues,
|
|
57
|
-
DeleteResponse as GRPCDeleteResponse,
|
|
58
56
|
)
|
|
59
57
|
|
|
60
58
|
__all__ = [
|
|
61
59
|
"GRPCIndex",
|
|
62
60
|
"PineconeGRPC",
|
|
63
|
-
"GRPCDeleteResponse",
|
|
64
61
|
"GRPCClientConfig",
|
|
65
62
|
"GRPCVector",
|
|
66
63
|
"GRPCSparseValues",
|
|
67
64
|
"Vector",
|
|
68
65
|
"SparseValues",
|
|
69
|
-
"PineconeGrpcFuture",
|
|
70
66
|
]
|
|
@@ -10,7 +10,6 @@ from .channel_factory import GrpcChannelFactory
|
|
|
10
10
|
from pinecone import Config
|
|
11
11
|
from .config import GRPCClientConfig
|
|
12
12
|
from .grpc_runner import GrpcRunner
|
|
13
|
-
from concurrent.futures import ThreadPoolExecutor
|
|
14
13
|
|
|
15
14
|
from pinecone_plugin_interface import load_and_install as install_plugins
|
|
16
15
|
|
|
@@ -30,12 +29,10 @@ class GRPCIndexBase(ABC):
|
|
|
30
29
|
config: Config,
|
|
31
30
|
channel: Optional[Channel] = None,
|
|
32
31
|
grpc_config: Optional[GRPCClientConfig] = None,
|
|
33
|
-
pool_threads: Optional[int] = None,
|
|
34
32
|
_endpoint_override: Optional[str] = None,
|
|
35
33
|
):
|
|
36
34
|
self.config = config
|
|
37
35
|
self.grpc_client_config = grpc_config or GRPCClientConfig()
|
|
38
|
-
self.pool_threads = pool_threads
|
|
39
36
|
|
|
40
37
|
self._endpoint_override = _endpoint_override
|
|
41
38
|
|
|
@@ -61,13 +58,6 @@ class GRPCIndexBase(ABC):
|
|
|
61
58
|
except Exception as e:
|
|
62
59
|
_logger.error(f"Error loading plugins in GRPCIndex: {e}")
|
|
63
60
|
|
|
64
|
-
@property
|
|
65
|
-
def threadpool_executor(self):
|
|
66
|
-
if self._pool is None:
|
|
67
|
-
pt = self.pool_threads or 10
|
|
68
|
-
self._pool = ThreadPoolExecutor(max_workers=pt)
|
|
69
|
-
return self._pool
|
|
70
|
-
|
|
71
61
|
@property
|
|
72
62
|
@abstractmethod
|
|
73
63
|
def stub_class(self):
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from grpc._channel import _MultiThreadedRendezvous
|
|
2
|
+
from pinecone.exceptions.exceptions import PineconeException
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class PineconeGrpcFuture:
|
|
6
|
+
def __init__(self, delegate):
|
|
7
|
+
self._delegate = delegate
|
|
8
|
+
|
|
9
|
+
def cancel(self):
|
|
10
|
+
return self._delegate.cancel()
|
|
11
|
+
|
|
12
|
+
def cancelled(self):
|
|
13
|
+
return self._delegate.cancelled()
|
|
14
|
+
|
|
15
|
+
def running(self):
|
|
16
|
+
return self._delegate.running()
|
|
17
|
+
|
|
18
|
+
def done(self):
|
|
19
|
+
return self._delegate.done()
|
|
20
|
+
|
|
21
|
+
def add_done_callback(self, fun):
|
|
22
|
+
return self._delegate.add_done_callback(fun)
|
|
23
|
+
|
|
24
|
+
def result(self, timeout=None):
|
|
25
|
+
try:
|
|
26
|
+
return self._delegate.result(timeout=timeout)
|
|
27
|
+
except _MultiThreadedRendezvous as e:
|
|
28
|
+
raise PineconeException(e._state.debug_error_string) from e
|
|
29
|
+
|
|
30
|
+
def exception(self, timeout=None):
|
|
31
|
+
return self._delegate.exception(timeout=timeout)
|
|
32
|
+
|
|
33
|
+
def traceback(self, timeout=None):
|
|
34
|
+
return self._delegate.traceback(timeout=timeout)
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Optional, Dict, Union, List, Tuple, Any, TypedDict,
|
|
2
|
+
from typing import Optional, Dict, Union, List, Tuple, Any, TypedDict, cast
|
|
3
3
|
|
|
4
4
|
from google.protobuf import json_format
|
|
5
5
|
|
|
6
6
|
from tqdm.autonotebook import tqdm
|
|
7
|
-
from concurrent.futures import as_completed, Future
|
|
8
|
-
|
|
9
7
|
|
|
10
8
|
from .utils import (
|
|
11
9
|
dict_to_proto_struct,
|
|
@@ -37,7 +35,6 @@ from pinecone.core.grpc.protos.vector_service_pb2 import (
|
|
|
37
35
|
SparseValues as GRPCSparseValues,
|
|
38
36
|
)
|
|
39
37
|
from pinecone import Vector as NonGRPCVector
|
|
40
|
-
from pinecone.data.query_results_aggregator import QueryNamespacesResults, QueryResultsAggregator
|
|
41
38
|
from pinecone.core.grpc.protos.vector_service_pb2_grpc import VectorServiceStub
|
|
42
39
|
from .base import GRPCIndexBase
|
|
43
40
|
from .future import PineconeGrpcFuture
|
|
@@ -285,12 +282,8 @@ class GRPCIndex(GRPCIndexBase):
|
|
|
285
282
|
return self.runner.run(self.stub.Delete, request, timeout=timeout)
|
|
286
283
|
|
|
287
284
|
def fetch(
|
|
288
|
-
self,
|
|
289
|
-
|
|
290
|
-
namespace: Optional[str] = None,
|
|
291
|
-
async_req: Optional[bool] = False,
|
|
292
|
-
**kwargs,
|
|
293
|
-
) -> Union[FetchResponse, PineconeGrpcFuture]:
|
|
285
|
+
self, ids: Optional[List[str]], namespace: Optional[str] = None, **kwargs
|
|
286
|
+
) -> FetchResponse:
|
|
294
287
|
"""
|
|
295
288
|
The fetch operation looks up and returns vectors, by ID, from a single namespace.
|
|
296
289
|
The returned vectors include the vector data and/or metadata.
|
|
@@ -311,13 +304,9 @@ class GRPCIndex(GRPCIndexBase):
|
|
|
311
304
|
args_dict = self._parse_non_empty_args([("namespace", namespace)])
|
|
312
305
|
|
|
313
306
|
request = FetchRequest(ids=ids, **args_dict, **kwargs)
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
return PineconeGrpcFuture(future, result_transformer=parse_fetch_response)
|
|
318
|
-
else:
|
|
319
|
-
response = self.runner.run(self.stub.Fetch, request, timeout=timeout)
|
|
320
|
-
return parse_fetch_response(response)
|
|
307
|
+
response = self.runner.run(self.stub.Fetch, request, timeout=timeout)
|
|
308
|
+
json_response = json_format.MessageToDict(response)
|
|
309
|
+
return parse_fetch_response(json_response)
|
|
321
310
|
|
|
322
311
|
def query(
|
|
323
312
|
self,
|
|
@@ -329,9 +318,8 @@ class GRPCIndex(GRPCIndexBase):
|
|
|
329
318
|
include_values: Optional[bool] = None,
|
|
330
319
|
include_metadata: Optional[bool] = None,
|
|
331
320
|
sparse_vector: Optional[Union[GRPCSparseValues, SparseVectorTypedDict]] = None,
|
|
332
|
-
async_req: Optional[bool] = False,
|
|
333
321
|
**kwargs,
|
|
334
|
-
) ->
|
|
322
|
+
) -> QueryResponse:
|
|
335
323
|
"""
|
|
336
324
|
The Query operation searches a namespace, using a query vector.
|
|
337
325
|
It retrieves the ids of the most similar items in a namespace, along with their similarity scores.
|
|
@@ -396,57 +384,9 @@ class GRPCIndex(GRPCIndexBase):
|
|
|
396
384
|
request = QueryRequest(**args_dict)
|
|
397
385
|
|
|
398
386
|
timeout = kwargs.pop("timeout", None)
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
return PineconeGrpcFuture(future)
|
|
403
|
-
else:
|
|
404
|
-
response = self.runner.run(self.stub.Query, request, timeout=timeout)
|
|
405
|
-
json_response = json_format.MessageToDict(response)
|
|
406
|
-
return parse_query_response(json_response, _check_type=False)
|
|
407
|
-
|
|
408
|
-
def query_namespaces(
|
|
409
|
-
self,
|
|
410
|
-
vector: List[float],
|
|
411
|
-
namespaces: List[str],
|
|
412
|
-
top_k: Optional[int] = None,
|
|
413
|
-
filter: Optional[Dict[str, Union[str, float, int, bool, List, dict]]] = None,
|
|
414
|
-
include_values: Optional[bool] = None,
|
|
415
|
-
include_metadata: Optional[bool] = None,
|
|
416
|
-
sparse_vector: Optional[Union[GRPCSparseValues, SparseVectorTypedDict]] = None,
|
|
417
|
-
**kwargs,
|
|
418
|
-
) -> QueryNamespacesResults:
|
|
419
|
-
if namespaces is None or len(namespaces) == 0:
|
|
420
|
-
raise ValueError("At least one namespace must be specified")
|
|
421
|
-
if len(vector) == 0:
|
|
422
|
-
raise ValueError("Query vector must not be empty")
|
|
423
|
-
|
|
424
|
-
overall_topk = top_k if top_k is not None else 10
|
|
425
|
-
aggregator = QueryResultsAggregator(top_k=overall_topk)
|
|
426
|
-
|
|
427
|
-
target_namespaces = set(namespaces) # dedup namespaces
|
|
428
|
-
futures = [
|
|
429
|
-
self.threadpool_executor.submit(
|
|
430
|
-
self.query,
|
|
431
|
-
vector=vector,
|
|
432
|
-
namespace=ns,
|
|
433
|
-
top_k=overall_topk,
|
|
434
|
-
filter=filter,
|
|
435
|
-
include_values=include_values,
|
|
436
|
-
include_metadata=include_metadata,
|
|
437
|
-
sparse_vector=sparse_vector,
|
|
438
|
-
async_req=False,
|
|
439
|
-
**kwargs,
|
|
440
|
-
)
|
|
441
|
-
for ns in target_namespaces
|
|
442
|
-
]
|
|
443
|
-
|
|
444
|
-
only_futures = cast(Iterable[Future], futures)
|
|
445
|
-
for response in as_completed(only_futures):
|
|
446
|
-
aggregator.add_results(response.result())
|
|
447
|
-
|
|
448
|
-
final_results = aggregator.get_results()
|
|
449
|
-
return final_results
|
|
387
|
+
response = self.runner.run(self.stub.Query, request, timeout=timeout)
|
|
388
|
+
json_response = json_format.MessageToDict(response)
|
|
389
|
+
return parse_query_response(json_response, _check_type=False)
|
|
450
390
|
|
|
451
391
|
def update(
|
|
452
392
|
self,
|
|
@@ -124,8 +124,6 @@ class PineconeGRPC(Pinecone):
|
|
|
124
124
|
# Use host if it is provided, otherwise get host from describe_index
|
|
125
125
|
index_host = host or self.index_host_store.get_host(self.index_api, self.config, name)
|
|
126
126
|
|
|
127
|
-
pt = kwargs.pop("pool_threads", None) or self.pool_threads
|
|
128
|
-
|
|
129
127
|
config = ConfigBuilder.build(
|
|
130
128
|
api_key=self.config.api_key,
|
|
131
129
|
host=index_host,
|
|
@@ -133,4 +131,4 @@ class PineconeGRPC(Pinecone):
|
|
|
133
131
|
proxy_url=self.config.proxy_url,
|
|
134
132
|
ssl_ca_certs=self.config.ssl_ca_certs,
|
|
135
133
|
)
|
|
136
|
-
return GRPCIndex(index_name=name, config=config,
|
|
134
|
+
return GRPCIndex(index_name=name, config=config, **kwargs)
|