pinecone 5.4.2__tar.gz → 6.0.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.2 → pinecone-6.0.0.dev2}/PKG-INFO +3 -3
- pinecone-6.0.0.dev2/pinecone/__version__ +1 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/control/pinecone.py +9 -15
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/shared/api_client.py +6 -67
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/shared/configuration.py +0 -20
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/data/index.py +25 -101
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/data/query_results_aggregator.py +40 -34
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/exceptions/__init__.py +3 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/grpc/__init__.py +1 -4
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/grpc/base.py +11 -35
- pinecone-6.0.0.dev2/pinecone/grpc/future.py +34 -0
- pinecone-6.0.0.dev2/pinecone/grpc/grpc_runner.py +153 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/grpc/index_grpc.py +46 -114
- pinecone-6.0.0.dev2/pinecone/grpc/index_grpc_asyncio.py +638 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/grpc/pinecone.py +12 -3
- pinecone-6.0.0.dev2/pinecone/grpc/query_results.py +14 -0
- pinecone-6.0.0.dev2/pinecone/grpc/sparse_vector.py +6 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/grpc/utils.py +36 -10
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/utils/__init__.py +0 -2
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pyproject.toml +11 -9
- pinecone-5.4.2/pinecone/__version__ +0 -1
- pinecone-5.4.2/pinecone/grpc/future.py +0 -86
- pinecone-5.4.2/pinecone/grpc/grpc_runner.py +0 -97
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/LICENSE.txt +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/README.md +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/config/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/config/config.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/config/openapi.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/config/pinecone_config.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/control/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/control/index_host_store.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/control/langchain_import_warnings.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/control/repr_overrides.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/grpc/protos/vector_service_pb2.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/grpc/protos/vector_service_pb2.pyi +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/grpc/protos/vector_service_pb2_grpc.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/api/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/api/inference_api.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/api/manage_indexes_api.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/apis/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/collection_list.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/collection_model.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/configure_index_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/configure_index_request_spec.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/configure_index_request_spec_pod.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/create_collection_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/create_index_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/deletion_protection.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/embed_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/embed_request_inputs.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/embed_request_parameters.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/embedding.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/embeddings_list.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/embeddings_list_usage.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/error_response.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/error_response_error.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/index_list.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/index_model.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/index_model_spec.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/index_model_status.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/index_spec.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/pod_spec.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/pod_spec_metadata_config.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/model/serverless_spec.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/control/models/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/api/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/api/data_plane_api.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/apis/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/delete_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/describe_index_stats_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/describe_index_stats_response.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/fetch_response.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/list_item.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/list_response.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/namespace_summary.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/pagination.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/protobuf_any.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/protobuf_null_value.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/query_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/query_response.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/query_vector.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/rpc_status.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/scored_vector.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/single_query_results.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/sparse_values.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/update_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/upsert_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/upsert_response.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/usage.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/model/vector.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/data/models/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/shared/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/shared/exceptions.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/shared/model_utils.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core/openapi/shared/rest.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/api/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/api/manage_indexes_api.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/apis/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/collection_list.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/collection_model.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/configure_index_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/configure_index_request_spec.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/configure_index_request_spec_pod.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/create_collection_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/create_index_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/deletion_protection.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/error_response.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/error_response_error.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/index_list.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/index_model.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/index_model_spec.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/index_model_status.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/index_spec.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/pod_spec.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/pod_spec_metadata_config.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/model/serverless_spec.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_control/models/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/api/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/api/bulk_operations_api.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/api/vector_operations_api.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/apis/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/delete_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/describe_index_stats_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/describe_index_stats_response.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/fetch_response.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/import_error_mode.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/import_list_response.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/import_model.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/list_item.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/list_response.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/namespace_summary.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/pagination.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/protobuf_any.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/protobuf_null_value.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/query_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/query_response.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/query_vector.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/rpc_status.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/scored_vector.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/single_query_results.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/sparse_values.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/start_import_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/start_import_response.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/update_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/upsert_request.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/upsert_response.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/usage.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/model/vector.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/db_data/models/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/shared/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/shared/api_client.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/shared/configuration.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/shared/exceptions.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/shared/model_utils.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/core_ea/openapi/shared/rest.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/data/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/data/errors.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/data/features/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/data/features/bulk_import.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/data/sparse_vector_factory.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/data/vector_factory.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/deprecation_warnings.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/exceptions/exceptions.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/grpc/channel_factory.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/grpc/config.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/grpc/retry.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/grpc/sparse_values_factory.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/grpc/vector_factory_grpc.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/models/__init__.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/models/collection_description.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/models/collection_list.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/models/index_description.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/models/index_list.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/models/index_model.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/models/list_response.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/models/pod_spec.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/models/serverless_spec.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/utils/check_kwargs.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/utils/constants.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/utils/convert_to_list.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/utils/deprecation_notice.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/utils/docslinks.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/utils/error_handling.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/utils/fix_tuple_length.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/utils/normalize_host.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/utils/parse_args.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/utils/repr_overrides.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/utils/setup_openapi_client.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/utils/user_agent.py +0 -0
- {pinecone-5.4.2 → pinecone-6.0.0.dev2}/pinecone/utils/version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pinecone
|
|
3
|
-
Version:
|
|
3
|
+
Version: 6.0.0.dev2
|
|
4
4
|
Summary: Pinecone client and SDK
|
|
5
5
|
Home-page: https://www.pinecone.io
|
|
6
6
|
License: Apache-2.0
|
|
@@ -33,9 +33,9 @@ Requires-Dist: googleapis-common-protos (>=1.53.0) ; extra == "grpc"
|
|
|
33
33
|
Requires-Dist: grpcio (>=1.44.0) ; (python_version >= "3.8" and python_version < "3.11") and (extra == "grpc")
|
|
34
34
|
Requires-Dist: grpcio (>=1.59.0) ; (python_version >= "3.11" and python_version < "4.0") and (extra == "grpc")
|
|
35
35
|
Requires-Dist: lz4 (>=3.1.3) ; extra == "grpc"
|
|
36
|
-
Requires-Dist: pinecone-plugin-inference (>=2.0.0,<
|
|
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
|
+
6.0.0.dev2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import time
|
|
2
2
|
import logging
|
|
3
|
-
from typing import Optional, Dict, Any, Union,
|
|
3
|
+
from typing import Optional, Dict, Any, Union, Literal
|
|
4
4
|
|
|
5
5
|
from .index_host_store import IndexHostStore
|
|
6
6
|
|
|
@@ -10,7 +10,12 @@ from pinecone.core.openapi.control.api.manage_indexes_api import ManageIndexesAp
|
|
|
10
10
|
from pinecone.core.openapi.shared.api_client import ApiClient
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
from pinecone.utils import
|
|
13
|
+
from pinecone.utils import (
|
|
14
|
+
normalize_host,
|
|
15
|
+
setup_openapi_client,
|
|
16
|
+
build_plugin_setup_client,
|
|
17
|
+
parse_non_empty_args,
|
|
18
|
+
)
|
|
14
19
|
from pinecone.core.openapi.control.models import (
|
|
15
20
|
CreateCollectionRequest,
|
|
16
21
|
CreateIndexRequest,
|
|
@@ -317,9 +322,6 @@ class Pinecone:
|
|
|
317
322
|
|
|
318
323
|
api_instance = self.index_api
|
|
319
324
|
|
|
320
|
-
def _parse_non_empty_args(args: List[Tuple[str, Any]]) -> Dict[str, Any]:
|
|
321
|
-
return {arg_name: val for arg_name, val in args if val is not None}
|
|
322
|
-
|
|
323
325
|
if deletion_protection in ["enabled", "disabled"]:
|
|
324
326
|
dp = DeletionProtection(deletion_protection)
|
|
325
327
|
else:
|
|
@@ -329,7 +331,7 @@ class Pinecone:
|
|
|
329
331
|
if "serverless" in spec:
|
|
330
332
|
index_spec = IndexSpec(serverless=ServerlessSpecModel(**spec["serverless"]))
|
|
331
333
|
elif "pod" in spec:
|
|
332
|
-
args_dict =
|
|
334
|
+
args_dict = parse_non_empty_args(
|
|
333
335
|
[
|
|
334
336
|
("environment", spec["pod"].get("environment")),
|
|
335
337
|
("metadata_config", spec["pod"].get("metadata_config")),
|
|
@@ -351,7 +353,7 @@ class Pinecone:
|
|
|
351
353
|
serverless=ServerlessSpecModel(cloud=spec.cloud, region=spec.region)
|
|
352
354
|
)
|
|
353
355
|
elif isinstance(spec, PodSpec):
|
|
354
|
-
args_dict =
|
|
356
|
+
args_dict = parse_non_empty_args(
|
|
355
357
|
[
|
|
356
358
|
("replicas", spec.replicas),
|
|
357
359
|
("shards", spec.shards),
|
|
@@ -765,14 +767,6 @@ class Pinecone:
|
|
|
765
767
|
# Now you're ready to perform data operations
|
|
766
768
|
index.query(vector=[...], top_k=10)
|
|
767
769
|
```
|
|
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
770
|
"""
|
|
777
771
|
if name == "" and host == "":
|
|
778
772
|
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,12 +1,11 @@
|
|
|
1
1
|
from tqdm.autonotebook import tqdm
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import json
|
|
5
|
-
from typing import Union, List, Optional, Dict, Any, Literal
|
|
3
|
+
from typing import Union, List, Optional, Dict, Any
|
|
6
4
|
|
|
7
5
|
from pinecone.config import ConfigBuilder
|
|
8
6
|
|
|
9
7
|
from pinecone.core.openapi.shared import API_VERSION
|
|
8
|
+
from pinecone.core.openapi.data.models import SparseValues
|
|
10
9
|
from pinecone.core.openapi.data import ApiClient
|
|
11
10
|
from pinecone.core.openapi.data.models import (
|
|
12
11
|
FetchResponse,
|
|
@@ -23,25 +22,13 @@ from pinecone.core.openapi.data.models import (
|
|
|
23
22
|
UpdateRequest,
|
|
24
23
|
DescribeIndexStatsRequest,
|
|
25
24
|
ListResponse,
|
|
26
|
-
SparseValues,
|
|
27
|
-
)
|
|
28
|
-
from pinecone.core.openapi.data.api.data_plane_api import DataPlaneApi
|
|
29
|
-
from ..utils import (
|
|
30
|
-
setup_openapi_client,
|
|
31
|
-
parse_non_empty_args,
|
|
32
|
-
build_plugin_setup_client,
|
|
33
|
-
validate_and_convert_errors,
|
|
34
25
|
)
|
|
35
26
|
from .features.bulk_import import ImportFeatureMixin
|
|
27
|
+
from pinecone.core.openapi.data.api.data_plane_api import DataPlaneApi
|
|
28
|
+
from ..utils import setup_openapi_client, parse_non_empty_args
|
|
36
29
|
from .vector_factory import VectorFactory
|
|
37
30
|
from .query_results_aggregator import QueryResultsAggregator, QueryNamespacesResults
|
|
38
|
-
|
|
39
31
|
from multiprocessing.pool import ApplyResult
|
|
40
|
-
from concurrent.futures import as_completed
|
|
41
|
-
|
|
42
|
-
from pinecone_plugin_interface import load_and_install as install_plugins
|
|
43
|
-
|
|
44
|
-
logger = logging.getLogger(__name__)
|
|
45
32
|
|
|
46
33
|
__all__ = [
|
|
47
34
|
"Index",
|
|
@@ -62,6 +49,8 @@ __all__ = [
|
|
|
62
49
|
"SparseValues",
|
|
63
50
|
]
|
|
64
51
|
|
|
52
|
+
from ..utils.error_handling import validate_and_convert_errors
|
|
53
|
+
|
|
65
54
|
_OPENAPI_ENDPOINT_PARAMS = (
|
|
66
55
|
"_return_http_data_only",
|
|
67
56
|
"_preload_content",
|
|
@@ -70,7 +59,6 @@ _OPENAPI_ENDPOINT_PARAMS = (
|
|
|
70
59
|
"_check_return_type",
|
|
71
60
|
"_host_index",
|
|
72
61
|
"async_req",
|
|
73
|
-
"async_threadpool_executor",
|
|
74
62
|
)
|
|
75
63
|
|
|
76
64
|
|
|
@@ -103,41 +91,20 @@ class Index(ImportFeatureMixin):
|
|
|
103
91
|
**kwargs,
|
|
104
92
|
)
|
|
105
93
|
|
|
106
|
-
self.
|
|
94
|
+
self._config = ConfigBuilder.build(
|
|
107
95
|
api_key=api_key, host=host, additional_headers=additional_headers, **kwargs
|
|
108
96
|
)
|
|
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")
|
|
97
|
+
openapi_config = ConfigBuilder.build_openapi_config(self._config, openapi_config)
|
|
114
98
|
|
|
115
99
|
self._vector_api = setup_openapi_client(
|
|
116
100
|
api_client_klass=ApiClient,
|
|
117
101
|
api_klass=DataPlaneApi,
|
|
118
|
-
config=self.
|
|
119
|
-
openapi_config=
|
|
120
|
-
pool_threads=
|
|
102
|
+
config=self._config,
|
|
103
|
+
openapi_config=openapi_config,
|
|
104
|
+
pool_threads=pool_threads,
|
|
121
105
|
api_version=API_VERSION,
|
|
122
106
|
)
|
|
123
107
|
|
|
124
|
-
self._load_plugins()
|
|
125
|
-
|
|
126
|
-
def _load_plugins(self):
|
|
127
|
-
"""@private"""
|
|
128
|
-
try:
|
|
129
|
-
# I don't expect this to ever throw, but wrapping this in a
|
|
130
|
-
# try block just in case to make sure a bad plugin doesn't
|
|
131
|
-
# halt client initialization.
|
|
132
|
-
openapi_client_builder = build_plugin_setup_client(
|
|
133
|
-
config=self.config,
|
|
134
|
-
openapi_config=self._openapi_config,
|
|
135
|
-
pool_threads=self._pool_threads,
|
|
136
|
-
)
|
|
137
|
-
install_plugins(self, openapi_client_builder)
|
|
138
|
-
except Exception as e:
|
|
139
|
-
logger.error(f"Error loading plugins in Index: {e}")
|
|
140
|
-
|
|
141
108
|
def __enter__(self):
|
|
142
109
|
return self
|
|
143
110
|
|
|
@@ -451,7 +418,7 @@ class Index(ImportFeatureMixin):
|
|
|
451
418
|
**kwargs,
|
|
452
419
|
)
|
|
453
420
|
|
|
454
|
-
if kwargs.get("async_req", False)
|
|
421
|
+
if kwargs.get("async_req", False):
|
|
455
422
|
return response
|
|
456
423
|
else:
|
|
457
424
|
return parse_query_response(response)
|
|
@@ -495,7 +462,6 @@ class Index(ImportFeatureMixin):
|
|
|
495
462
|
("sparse_vector", sparse_vector),
|
|
496
463
|
]
|
|
497
464
|
)
|
|
498
|
-
|
|
499
465
|
response = self._vector_api.query(
|
|
500
466
|
QueryRequest(
|
|
501
467
|
**args_dict,
|
|
@@ -506,12 +472,10 @@ class Index(ImportFeatureMixin):
|
|
|
506
472
|
)
|
|
507
473
|
return response
|
|
508
474
|
|
|
509
|
-
@validate_and_convert_errors
|
|
510
475
|
def query_namespaces(
|
|
511
476
|
self,
|
|
512
477
|
vector: List[float],
|
|
513
478
|
namespaces: List[str],
|
|
514
|
-
metric: Literal["cosine", "euclidean", "dotproduct"],
|
|
515
479
|
top_k: Optional[int] = None,
|
|
516
480
|
filter: Optional[Dict[str, Union[str, float, int, bool, List, dict]]] = None,
|
|
517
481
|
include_values: Optional[bool] = None,
|
|
@@ -521,78 +485,38 @@ class Index(ImportFeatureMixin):
|
|
|
521
485
|
] = None,
|
|
522
486
|
**kwargs,
|
|
523
487
|
) -> QueryNamespacesResults:
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
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.
|
|
527
|
-
|
|
528
|
-
Examples:
|
|
529
|
-
|
|
530
|
-
```python
|
|
531
|
-
from pinecone import Pinecone
|
|
532
|
-
|
|
533
|
-
pc = Pinecone(api_key="your-api-key")
|
|
534
|
-
index = pc.Index(
|
|
535
|
-
host="index-name",
|
|
536
|
-
pool_threads=32,
|
|
537
|
-
connection_pool_maxsize=32
|
|
538
|
-
)
|
|
539
|
-
|
|
540
|
-
query_vec = [0.1, 0.2, 0.3] # An embedding that matches the index dimension
|
|
541
|
-
combined_results = index.query_namespaces(
|
|
542
|
-
vector=query_vec,
|
|
543
|
-
namespaces=['ns1', 'ns2', 'ns3', 'ns4'],
|
|
544
|
-
metric="cosine",
|
|
545
|
-
top_k=10,
|
|
546
|
-
filter={'genre': {"$eq": "drama"}},
|
|
547
|
-
include_values=True,
|
|
548
|
-
include_metadata=True
|
|
549
|
-
)
|
|
550
|
-
for vec in combined_results.matches:
|
|
551
|
-
print(vec.id, vec.score)
|
|
552
|
-
print(combined_results.usage)
|
|
553
|
-
```
|
|
554
|
-
|
|
555
|
-
Args:
|
|
556
|
-
vector (List[float]): The query vector, must be the same length as the dimension of the index being queried.
|
|
557
|
-
namespaces (List[str]): The list of namespaces to query.
|
|
558
|
-
top_k (Optional[int], optional): The number of results you would like to request from each namespace. Defaults to 10.
|
|
559
|
-
metric (str): Must be one of 'cosine', 'euclidean', 'dotproduct'. This is needed in order to merge results across namespaces, since the interpretation of score depends on the index metric type.
|
|
560
|
-
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.
|
|
561
|
-
include_values (Optional[bool], optional): Boolean field indicating whether vector values should be included with results. Defaults to None.
|
|
562
|
-
include_metadata (Optional[bool], optional): Boolean field indicating whether vector metadata should be included with results. Defaults to None.
|
|
563
|
-
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.
|
|
564
|
-
|
|
565
|
-
Returns:
|
|
566
|
-
QueryNamespacesResults: A QueryNamespacesResults object containing the combined results from all namespaces, as well as the combined usage cost in read units.
|
|
567
|
-
"""
|
|
568
|
-
if namespaces is None or len(namespaces) == 0:
|
|
488
|
+
if len(namespaces) == 0:
|
|
569
489
|
raise ValueError("At least one namespace must be specified")
|
|
570
490
|
if len(vector) == 0:
|
|
571
491
|
raise ValueError("Query vector must not be empty")
|
|
572
492
|
|
|
493
|
+
# The caller may only want the top_k=1 result across all queries,
|
|
494
|
+
# but we need to get at least 2 results from each query in order to
|
|
495
|
+
# aggregate them correctly. So we'll temporarily set topK to 2 for the
|
|
496
|
+
# subqueries, and then we'll take the topK=1 results from the aggregated
|
|
497
|
+
# results.
|
|
573
498
|
overall_topk = top_k if top_k is not None else 10
|
|
574
|
-
aggregator = QueryResultsAggregator(top_k=overall_topk
|
|
499
|
+
aggregator = QueryResultsAggregator(top_k=overall_topk)
|
|
500
|
+
subquery_topk = overall_topk if overall_topk > 2 else 2
|
|
575
501
|
|
|
576
502
|
target_namespaces = set(namespaces) # dedup namespaces
|
|
577
|
-
|
|
503
|
+
async_results = [
|
|
578
504
|
self.query(
|
|
579
505
|
vector=vector,
|
|
580
506
|
namespace=ns,
|
|
581
|
-
top_k=
|
|
507
|
+
top_k=subquery_topk,
|
|
582
508
|
filter=filter,
|
|
583
509
|
include_values=include_values,
|
|
584
510
|
include_metadata=include_metadata,
|
|
585
511
|
sparse_vector=sparse_vector,
|
|
586
|
-
|
|
587
|
-
_preload_content=False,
|
|
512
|
+
async_req=True,
|
|
588
513
|
**kwargs,
|
|
589
514
|
)
|
|
590
515
|
for ns in target_namespaces
|
|
591
516
|
]
|
|
592
517
|
|
|
593
|
-
for result in
|
|
594
|
-
|
|
595
|
-
response = json.loads(raw_result.data.decode("utf-8"))
|
|
518
|
+
for result in async_results:
|
|
519
|
+
response = result.get()
|
|
596
520
|
aggregator.add_results(response)
|
|
597
521
|
|
|
598
522
|
final_results = aggregator.get_results()
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
from typing import List, Tuple, Optional, Any, Dict
|
|
1
|
+
from typing import List, Tuple, Optional, Any, Dict
|
|
2
2
|
import json
|
|
3
3
|
import heapq
|
|
4
4
|
from pinecone.core.openapi.data.models import Usage
|
|
5
|
-
from pinecone.core.openapi.data.models import QueryResponse as OpenAPIQueryResponse
|
|
6
5
|
|
|
7
6
|
from dataclasses import dataclass, asdict
|
|
8
7
|
|
|
@@ -31,9 +30,6 @@ class ScoredVectorWithNamespace:
|
|
|
31
30
|
else:
|
|
32
31
|
raise KeyError(f"'{key}' not found in ScoredVectorWithNamespace")
|
|
33
32
|
|
|
34
|
-
def get(self, key, default=None):
|
|
35
|
-
return getattr(self, key, default)
|
|
36
|
-
|
|
37
33
|
def __repr__(self):
|
|
38
34
|
return json.dumps(self._truncate(asdict(self)), indent=4)
|
|
39
35
|
|
|
@@ -75,9 +71,6 @@ class QueryNamespacesResults:
|
|
|
75
71
|
else:
|
|
76
72
|
raise KeyError(f"'{key}' not found in QueryNamespacesResults")
|
|
77
73
|
|
|
78
|
-
def get(self, key, default=None):
|
|
79
|
-
return getattr(self, key, default)
|
|
80
|
-
|
|
81
74
|
def __repr__(self):
|
|
82
75
|
return json.dumps(
|
|
83
76
|
{
|
|
@@ -88,38 +81,46 @@ class QueryNamespacesResults:
|
|
|
88
81
|
)
|
|
89
82
|
|
|
90
83
|
|
|
84
|
+
class QueryResultsAggregregatorNotEnoughResultsError(Exception):
|
|
85
|
+
def __init__(self):
|
|
86
|
+
super().__init__(
|
|
87
|
+
"Cannot interpret results without at least two matches. In order to aggregate results from multiple queries, top_k must be greater than 1 in order to correctly infer the similarity metric from scores."
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
|
|
91
91
|
class QueryResultsAggregatorInvalidTopKError(Exception):
|
|
92
92
|
def __init__(self, top_k: int):
|
|
93
|
-
super().__init__(
|
|
93
|
+
super().__init__(
|
|
94
|
+
f"Invalid top_k value {top_k}. To aggregate results from multiple queries the top_k must be at least 2."
|
|
95
|
+
)
|
|
94
96
|
|
|
95
97
|
|
|
96
98
|
class QueryResultsAggregator:
|
|
97
|
-
def __init__(self, top_k: int
|
|
98
|
-
if top_k <
|
|
99
|
+
def __init__(self, top_k: int):
|
|
100
|
+
if top_k < 2:
|
|
99
101
|
raise QueryResultsAggregatorInvalidTopKError(top_k)
|
|
100
|
-
|
|
101
|
-
if metric in ["dotproduct", "cosine"]:
|
|
102
|
-
self.is_bigger_better = True
|
|
103
|
-
elif metric in ["euclidean"]:
|
|
104
|
-
self.is_bigger_better = False
|
|
105
|
-
else:
|
|
106
|
-
raise ValueError(
|
|
107
|
-
f"Cannot merge results for unknown similarity metric {metric}. Supported metrics are 'dotproduct', 'cosine', and 'euclidean'."
|
|
108
|
-
)
|
|
109
|
-
|
|
110
102
|
self.top_k = top_k
|
|
111
103
|
self.usage_read_units = 0
|
|
112
104
|
self.heap: List[Tuple[float, int, object, str]] = []
|
|
113
105
|
self.insertion_counter = 0
|
|
106
|
+
self.is_dotproduct = None
|
|
114
107
|
self.read = False
|
|
115
108
|
self.final_results: Optional[QueryNamespacesResults] = None
|
|
116
109
|
|
|
117
|
-
def
|
|
118
|
-
#
|
|
119
|
-
#
|
|
110
|
+
def _is_dotproduct_index(self, matches):
|
|
111
|
+
# The interpretation of the score depends on the similar metric used.
|
|
112
|
+
# Unlike other index types, in indexes configured for dotproduct,
|
|
113
|
+
# a higher score is better. We have to infer this is the case by inspecting
|
|
114
|
+
# the order of the scores in the results.
|
|
115
|
+
for i in range(1, len(matches)):
|
|
116
|
+
if matches[i].get("score") > matches[i - 1].get("score"): # Found an increase
|
|
117
|
+
return False
|
|
118
|
+
return True
|
|
119
|
+
|
|
120
|
+
def _dotproduct_heap_item(self, match, ns):
|
|
120
121
|
return (match.get("score"), -self.insertion_counter, match, ns)
|
|
121
122
|
|
|
122
|
-
def
|
|
123
|
+
def _non_dotproduct_heap_item(self, match, ns):
|
|
123
124
|
return (-match.get("score"), -self.insertion_counter, match, ns)
|
|
124
125
|
|
|
125
126
|
def _process_matches(self, matches, ns, heap_item_fn):
|
|
@@ -129,10 +130,10 @@ class QueryResultsAggregator:
|
|
|
129
130
|
heapq.heappush(self.heap, heap_item_fn(match, ns))
|
|
130
131
|
else:
|
|
131
132
|
# Assume we have dotproduct scores sorted in descending order
|
|
132
|
-
if self.
|
|
133
|
+
if self.is_dotproduct and match["score"] < self.heap[0][0]:
|
|
133
134
|
# No further matches can improve the top-K heap
|
|
134
135
|
break
|
|
135
|
-
elif not self.
|
|
136
|
+
elif not self.is_dotproduct and match["score"] > -self.heap[0][0]:
|
|
136
137
|
# No further matches can improve the top-K heap
|
|
137
138
|
break
|
|
138
139
|
heapq.heappushpop(self.heap, heap_item_fn(match, ns))
|
|
@@ -146,18 +147,23 @@ class QueryResultsAggregator:
|
|
|
146
147
|
|
|
147
148
|
matches = results.get("matches", [])
|
|
148
149
|
ns: str = results.get("namespace", "")
|
|
149
|
-
|
|
150
|
-
self.usage_read_units += results.usage.read_units
|
|
151
|
-
else:
|
|
152
|
-
self.usage_read_units += results.get("usage", {}).get("readUnits", 0)
|
|
150
|
+
self.usage_read_units += results.get("usage", {}).get("readUnits", 0)
|
|
153
151
|
|
|
154
152
|
if len(matches) == 0:
|
|
155
153
|
return
|
|
156
154
|
|
|
157
|
-
if self.
|
|
158
|
-
|
|
155
|
+
if self.is_dotproduct is None:
|
|
156
|
+
if len(matches) == 1:
|
|
157
|
+
# This condition should match the second time we add results containing
|
|
158
|
+
# only one match. We need at least two matches in a single response in order
|
|
159
|
+
# to infer the similarity metric
|
|
160
|
+
raise QueryResultsAggregregatorNotEnoughResultsError()
|
|
161
|
+
self.is_dotproduct = self._is_dotproduct_index(matches)
|
|
162
|
+
|
|
163
|
+
if self.is_dotproduct:
|
|
164
|
+
self._process_matches(matches, ns, self._dotproduct_heap_item)
|
|
159
165
|
else:
|
|
160
|
-
self._process_matches(matches, ns, self.
|
|
166
|
+
self._process_matches(matches, ns, self._non_dotproduct_heap_item)
|
|
161
167
|
|
|
162
168
|
def get_results(self) -> QueryNamespacesResults:
|
|
163
169
|
if self.read:
|
|
@@ -12,6 +12,8 @@ from pinecone.core.openapi.shared.exceptions import (
|
|
|
12
12
|
)
|
|
13
13
|
from .exceptions import PineconeConfigurationError, PineconeProtocolError, ListConversionException
|
|
14
14
|
|
|
15
|
+
PineconeNotFoundException = NotFoundException
|
|
16
|
+
|
|
15
17
|
__all__ = [
|
|
16
18
|
"PineconeConfigurationError",
|
|
17
19
|
"PineconeProtocolError",
|
|
@@ -22,6 +24,7 @@ __all__ = [
|
|
|
22
24
|
"PineconeApiKeyError",
|
|
23
25
|
"PineconeApiException",
|
|
24
26
|
"NotFoundException",
|
|
27
|
+
"PineconeNotFoundException",
|
|
25
28
|
"UnauthorizedException",
|
|
26
29
|
"ForbiddenException",
|
|
27
30
|
"ServiceException",
|
|
@@ -45,26 +45,23 @@ index.query(vector=[...], top_k=10)
|
|
|
45
45
|
"""
|
|
46
46
|
|
|
47
47
|
from .index_grpc import GRPCIndex
|
|
48
|
+
from .index_grpc_asyncio import GRPCIndexAsyncio
|
|
48
49
|
from .pinecone import PineconeGRPC
|
|
49
50
|
from .config import GRPCClientConfig
|
|
50
|
-
from .future import PineconeGrpcFuture
|
|
51
51
|
|
|
52
52
|
from pinecone.core.grpc.protos.vector_service_pb2 import (
|
|
53
53
|
Vector as GRPCVector,
|
|
54
54
|
SparseValues as GRPCSparseValues,
|
|
55
55
|
Vector,
|
|
56
56
|
SparseValues,
|
|
57
|
-
DeleteResponse as GRPCDeleteResponse,
|
|
58
57
|
)
|
|
59
58
|
|
|
60
59
|
__all__ = [
|
|
61
60
|
"GRPCIndex",
|
|
62
61
|
"PineconeGRPC",
|
|
63
|
-
"GRPCDeleteResponse",
|
|
64
62
|
"GRPCClientConfig",
|
|
65
63
|
"GRPCVector",
|
|
66
64
|
"GRPCSparseValues",
|
|
67
65
|
"Vector",
|
|
68
66
|
"SparseValues",
|
|
69
|
-
"PineconeGrpcFuture",
|
|
70
67
|
]
|