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.
Files changed (196) hide show
  1. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/PKG-INFO +2 -2
  2. pinecone-5.4.0.dev2/pinecone/__version__ +1 -0
  3. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/control/pinecone.py +0 -8
  4. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/shared/api_client.py +6 -67
  5. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/shared/configuration.py +0 -20
  6. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/data/index.py +10 -143
  7. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/__init__.py +0 -4
  8. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/base.py +0 -10
  9. pinecone-5.4.0.dev2/pinecone/grpc/future.py +34 -0
  10. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/index_grpc.py +10 -70
  11. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/pinecone.py +1 -3
  12. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/utils.py +4 -9
  13. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pyproject.toml +2 -6
  14. pinecone-5.4.0/pinecone/__version__ +0 -1
  15. pinecone-5.4.0/pinecone/data/query_results_aggregator.py +0 -193
  16. pinecone-5.4.0/pinecone/grpc/future.py +0 -86
  17. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/LICENSE.txt +0 -0
  18. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/README.md +0 -0
  19. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/__init__.py +0 -0
  20. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/config/__init__.py +0 -0
  21. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/config/config.py +0 -0
  22. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/config/openapi.py +0 -0
  23. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/config/pinecone_config.py +0 -0
  24. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/control/__init__.py +0 -0
  25. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/control/index_host_store.py +0 -0
  26. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/control/langchain_import_warnings.py +0 -0
  27. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/control/repr_overrides.py +0 -0
  28. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/__init__.py +0 -0
  29. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/grpc/protos/vector_service_pb2.py +0 -0
  30. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/grpc/protos/vector_service_pb2.pyi +0 -0
  31. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/grpc/protos/vector_service_pb2_grpc.py +0 -0
  32. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/__init__.py +0 -0
  33. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/api/__init__.py +0 -0
  34. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/api/inference_api.py +0 -0
  35. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/api/manage_indexes_api.py +0 -0
  36. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/apis/__init__.py +0 -0
  37. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/__init__.py +0 -0
  38. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/collection_list.py +0 -0
  39. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/collection_model.py +0 -0
  40. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/configure_index_request.py +0 -0
  41. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/configure_index_request_spec.py +0 -0
  42. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/configure_index_request_spec_pod.py +0 -0
  43. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/create_collection_request.py +0 -0
  44. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/create_index_request.py +0 -0
  45. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/deletion_protection.py +0 -0
  46. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/embed_request.py +0 -0
  47. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/embed_request_inputs.py +0 -0
  48. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/embed_request_parameters.py +0 -0
  49. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/embedding.py +0 -0
  50. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/embeddings_list.py +0 -0
  51. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/embeddings_list_usage.py +0 -0
  52. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/error_response.py +0 -0
  53. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/error_response_error.py +0 -0
  54. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/index_list.py +0 -0
  55. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/index_model.py +0 -0
  56. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/index_model_spec.py +0 -0
  57. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/index_model_status.py +0 -0
  58. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/index_spec.py +0 -0
  59. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/pod_spec.py +0 -0
  60. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/pod_spec_metadata_config.py +0 -0
  61. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/model/serverless_spec.py +0 -0
  62. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/control/models/__init__.py +0 -0
  63. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/__init__.py +0 -0
  64. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/api/__init__.py +0 -0
  65. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/api/data_plane_api.py +0 -0
  66. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/apis/__init__.py +0 -0
  67. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/__init__.py +0 -0
  68. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/delete_request.py +0 -0
  69. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/describe_index_stats_request.py +0 -0
  70. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/describe_index_stats_response.py +0 -0
  71. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/fetch_response.py +0 -0
  72. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/list_item.py +0 -0
  73. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/list_response.py +0 -0
  74. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/namespace_summary.py +0 -0
  75. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/pagination.py +0 -0
  76. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/protobuf_any.py +0 -0
  77. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/protobuf_null_value.py +0 -0
  78. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/query_request.py +0 -0
  79. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/query_response.py +0 -0
  80. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/query_vector.py +0 -0
  81. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/rpc_status.py +0 -0
  82. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/scored_vector.py +0 -0
  83. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/single_query_results.py +0 -0
  84. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/sparse_values.py +0 -0
  85. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/update_request.py +0 -0
  86. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/upsert_request.py +0 -0
  87. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/upsert_response.py +0 -0
  88. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/usage.py +0 -0
  89. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/model/vector.py +0 -0
  90. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/data/models/__init__.py +0 -0
  91. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/shared/__init__.py +0 -0
  92. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/shared/exceptions.py +0 -0
  93. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/shared/model_utils.py +0 -0
  94. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core/openapi/shared/rest.py +0 -0
  95. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/__init__.py +0 -0
  96. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/api/__init__.py +0 -0
  97. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/api/manage_indexes_api.py +0 -0
  98. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/apis/__init__.py +0 -0
  99. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/__init__.py +0 -0
  100. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/collection_list.py +0 -0
  101. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/collection_model.py +0 -0
  102. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/configure_index_request.py +0 -0
  103. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/configure_index_request_spec.py +0 -0
  104. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/configure_index_request_spec_pod.py +0 -0
  105. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/create_collection_request.py +0 -0
  106. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/create_index_request.py +0 -0
  107. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/deletion_protection.py +0 -0
  108. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/error_response.py +0 -0
  109. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/error_response_error.py +0 -0
  110. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/index_list.py +0 -0
  111. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/index_model.py +0 -0
  112. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/index_model_spec.py +0 -0
  113. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/index_model_status.py +0 -0
  114. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/index_spec.py +0 -0
  115. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/pod_spec.py +0 -0
  116. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/pod_spec_metadata_config.py +0 -0
  117. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/model/serverless_spec.py +0 -0
  118. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_control/models/__init__.py +0 -0
  119. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/__init__.py +0 -0
  120. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/api/__init__.py +0 -0
  121. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/api/bulk_operations_api.py +0 -0
  122. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/api/vector_operations_api.py +0 -0
  123. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/apis/__init__.py +0 -0
  124. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/__init__.py +0 -0
  125. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/delete_request.py +0 -0
  126. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/describe_index_stats_request.py +0 -0
  127. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/describe_index_stats_response.py +0 -0
  128. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/fetch_response.py +0 -0
  129. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/import_error_mode.py +0 -0
  130. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/import_list_response.py +0 -0
  131. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/import_model.py +0 -0
  132. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/list_item.py +0 -0
  133. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/list_response.py +0 -0
  134. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/namespace_summary.py +0 -0
  135. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/pagination.py +0 -0
  136. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/protobuf_any.py +0 -0
  137. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/protobuf_null_value.py +0 -0
  138. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/query_request.py +0 -0
  139. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/query_response.py +0 -0
  140. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/query_vector.py +0 -0
  141. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/rpc_status.py +0 -0
  142. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/scored_vector.py +0 -0
  143. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/single_query_results.py +0 -0
  144. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/sparse_values.py +0 -0
  145. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/start_import_request.py +0 -0
  146. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/start_import_response.py +0 -0
  147. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/update_request.py +0 -0
  148. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/upsert_request.py +0 -0
  149. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/upsert_response.py +0 -0
  150. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/usage.py +0 -0
  151. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/model/vector.py +0 -0
  152. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/db_data/models/__init__.py +0 -0
  153. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/shared/__init__.py +0 -0
  154. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/shared/api_client.py +0 -0
  155. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/shared/configuration.py +0 -0
  156. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/shared/exceptions.py +0 -0
  157. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/shared/model_utils.py +0 -0
  158. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/core_ea/openapi/shared/rest.py +0 -0
  159. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/data/__init__.py +0 -0
  160. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/data/errors.py +0 -0
  161. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/data/features/__init__.py +0 -0
  162. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/data/features/bulk_import.py +0 -0
  163. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/data/sparse_vector_factory.py +0 -0
  164. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/data/vector_factory.py +0 -0
  165. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/deprecation_warnings.py +0 -0
  166. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/exceptions/__init__.py +0 -0
  167. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/exceptions/exceptions.py +0 -0
  168. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/channel_factory.py +0 -0
  169. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/config.py +0 -0
  170. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/grpc_runner.py +0 -0
  171. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/retry.py +0 -0
  172. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/sparse_values_factory.py +0 -0
  173. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/grpc/vector_factory_grpc.py +0 -0
  174. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/__init__.py +0 -0
  175. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/collection_description.py +0 -0
  176. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/collection_list.py +0 -0
  177. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/index_description.py +0 -0
  178. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/index_list.py +0 -0
  179. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/index_model.py +0 -0
  180. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/list_response.py +0 -0
  181. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/pod_spec.py +0 -0
  182. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/models/serverless_spec.py +0 -0
  183. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/__init__.py +0 -0
  184. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/check_kwargs.py +0 -0
  185. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/constants.py +0 -0
  186. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/convert_to_list.py +0 -0
  187. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/deprecation_notice.py +0 -0
  188. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/docslinks.py +0 -0
  189. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/error_handling.py +0 -0
  190. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/fix_tuple_length.py +0 -0
  191. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/normalize_host.py +0 -0
  192. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/parse_args.py +0 -0
  193. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/repr_overrides.py +0 -0
  194. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/setup_openapi_client.py +0 -0
  195. {pinecone-5.4.0 → pinecone-5.4.0.dev2}/pinecone/utils/user_agent.py +0 -0
  196. {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 (>=4.25,<5.0) ; extra == "grpc"
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 async_threadpool_executor:
410
- return self.threadpool_executor.submit(
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
- if not async_req:
431
- return self.__call_api(
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.config = ConfigBuilder.build(
100
+ self._config = ConfigBuilder.build(
107
101
  api_key=api_key, host=host, additional_headers=additional_headers, **kwargs
108
102
  )
109
- self._openapi_config = ConfigBuilder.build_openapi_config(self.config, openapi_config)
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.config,
119
- openapi_config=self._openapi_config,
120
- pool_threads=self._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.config,
134
- openapi_config=self._openapi_config,
135
- pool_threads=self._pool_threads,
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
- ) -> Union[QueryResponse, ApplyResult]:
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, Iterable, cast
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
- ids: Optional[List[str]],
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
- if async_req:
316
- future = self.runner.run(self.stub.Fetch.future, request, timeout=timeout)
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
- ) -> Union[QueryResponse, PineconeGrpcFuture]:
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
- if async_req:
401
- future = self.runner.run(self.stub.Query.future, request, timeout=timeout)
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, pool_threads=pt, **kwargs)
134
+ return GRPCIndex(index_name=name, config=config, **kwargs)