pinecone 6.0.0.dev1__tar.gz → 6.0.0.dev3__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 (198) hide show
  1. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/PKG-INFO +1 -1
  2. pinecone-6.0.0.dev3/pinecone/__version__ +1 -0
  3. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/shared/api_client.py +44 -19
  4. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/data/index.py +88 -2
  5. {pinecone-6.0.0.dev1/pinecone/grpc → pinecone-6.0.0.dev3/pinecone/data}/query_results_aggregator.py +23 -18
  6. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/exceptions/__init__.py +3 -0
  7. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/grpc/grpc_runner.py +48 -5
  8. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/grpc/index_grpc_asyncio.py +4 -4
  9. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pyproject.toml +1 -1
  10. pinecone-6.0.0.dev1/pinecone/__version__ +0 -1
  11. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/LICENSE.txt +0 -0
  12. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/README.md +0 -0
  13. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/__init__.py +0 -0
  14. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/config/__init__.py +0 -0
  15. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/config/config.py +0 -0
  16. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/config/openapi.py +0 -0
  17. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/config/pinecone_config.py +0 -0
  18. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/control/__init__.py +0 -0
  19. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/control/index_host_store.py +0 -0
  20. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/control/langchain_import_warnings.py +0 -0
  21. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/control/pinecone.py +0 -0
  22. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/control/repr_overrides.py +0 -0
  23. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/__init__.py +0 -0
  24. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/grpc/protos/vector_service_pb2.py +0 -0
  25. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/grpc/protos/vector_service_pb2.pyi +0 -0
  26. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/grpc/protos/vector_service_pb2_grpc.py +0 -0
  27. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/__init__.py +0 -0
  28. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/api/__init__.py +0 -0
  29. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/api/inference_api.py +0 -0
  30. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/api/manage_indexes_api.py +0 -0
  31. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/apis/__init__.py +0 -0
  32. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/__init__.py +0 -0
  33. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/collection_list.py +0 -0
  34. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/collection_model.py +0 -0
  35. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/configure_index_request.py +0 -0
  36. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/configure_index_request_spec.py +0 -0
  37. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/configure_index_request_spec_pod.py +0 -0
  38. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/create_collection_request.py +0 -0
  39. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/create_index_request.py +0 -0
  40. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/deletion_protection.py +0 -0
  41. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/embed_request.py +0 -0
  42. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/embed_request_inputs.py +0 -0
  43. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/embed_request_parameters.py +0 -0
  44. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/embedding.py +0 -0
  45. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/embeddings_list.py +0 -0
  46. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/embeddings_list_usage.py +0 -0
  47. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/error_response.py +0 -0
  48. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/error_response_error.py +0 -0
  49. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/index_list.py +0 -0
  50. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/index_model.py +0 -0
  51. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/index_model_spec.py +0 -0
  52. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/index_model_status.py +0 -0
  53. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/index_spec.py +0 -0
  54. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/pod_spec.py +0 -0
  55. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/pod_spec_metadata_config.py +0 -0
  56. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/model/serverless_spec.py +0 -0
  57. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/control/models/__init__.py +0 -0
  58. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/__init__.py +0 -0
  59. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/api/__init__.py +0 -0
  60. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/api/data_plane_api.py +0 -0
  61. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/apis/__init__.py +0 -0
  62. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/__init__.py +0 -0
  63. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/delete_request.py +0 -0
  64. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/describe_index_stats_request.py +0 -0
  65. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/describe_index_stats_response.py +0 -0
  66. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/fetch_response.py +0 -0
  67. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/list_item.py +0 -0
  68. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/list_response.py +0 -0
  69. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/namespace_summary.py +0 -0
  70. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/pagination.py +0 -0
  71. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/protobuf_any.py +0 -0
  72. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/protobuf_null_value.py +0 -0
  73. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/query_request.py +0 -0
  74. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/query_response.py +0 -0
  75. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/query_vector.py +0 -0
  76. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/rpc_status.py +0 -0
  77. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/scored_vector.py +0 -0
  78. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/single_query_results.py +0 -0
  79. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/sparse_values.py +0 -0
  80. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/update_request.py +0 -0
  81. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/upsert_request.py +0 -0
  82. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/upsert_response.py +0 -0
  83. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/usage.py +0 -0
  84. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/model/vector.py +0 -0
  85. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/data/models/__init__.py +0 -0
  86. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/shared/__init__.py +0 -0
  87. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/shared/configuration.py +0 -0
  88. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/shared/exceptions.py +0 -0
  89. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/shared/model_utils.py +0 -0
  90. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core/openapi/shared/rest.py +0 -0
  91. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/__init__.py +0 -0
  92. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/api/__init__.py +0 -0
  93. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/api/manage_indexes_api.py +0 -0
  94. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/apis/__init__.py +0 -0
  95. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/__init__.py +0 -0
  96. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/collection_list.py +0 -0
  97. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/collection_model.py +0 -0
  98. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/configure_index_request.py +0 -0
  99. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/configure_index_request_spec.py +0 -0
  100. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/configure_index_request_spec_pod.py +0 -0
  101. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/create_collection_request.py +0 -0
  102. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/create_index_request.py +0 -0
  103. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/deletion_protection.py +0 -0
  104. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/error_response.py +0 -0
  105. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/error_response_error.py +0 -0
  106. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/index_list.py +0 -0
  107. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/index_model.py +0 -0
  108. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/index_model_spec.py +0 -0
  109. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/index_model_status.py +0 -0
  110. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/index_spec.py +0 -0
  111. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/pod_spec.py +0 -0
  112. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/pod_spec_metadata_config.py +0 -0
  113. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/model/serverless_spec.py +0 -0
  114. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_control/models/__init__.py +0 -0
  115. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/__init__.py +0 -0
  116. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/api/__init__.py +0 -0
  117. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/api/bulk_operations_api.py +0 -0
  118. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/api/vector_operations_api.py +0 -0
  119. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/apis/__init__.py +0 -0
  120. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/__init__.py +0 -0
  121. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/delete_request.py +0 -0
  122. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/describe_index_stats_request.py +0 -0
  123. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/describe_index_stats_response.py +0 -0
  124. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/fetch_response.py +0 -0
  125. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/import_error_mode.py +0 -0
  126. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/import_list_response.py +0 -0
  127. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/import_model.py +0 -0
  128. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/list_item.py +0 -0
  129. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/list_response.py +0 -0
  130. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/namespace_summary.py +0 -0
  131. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/pagination.py +0 -0
  132. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/protobuf_any.py +0 -0
  133. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/protobuf_null_value.py +0 -0
  134. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/query_request.py +0 -0
  135. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/query_response.py +0 -0
  136. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/query_vector.py +0 -0
  137. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/rpc_status.py +0 -0
  138. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/scored_vector.py +0 -0
  139. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/single_query_results.py +0 -0
  140. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/sparse_values.py +0 -0
  141. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/start_import_request.py +0 -0
  142. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/start_import_response.py +0 -0
  143. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/update_request.py +0 -0
  144. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/upsert_request.py +0 -0
  145. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/upsert_response.py +0 -0
  146. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/usage.py +0 -0
  147. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/model/vector.py +0 -0
  148. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/db_data/models/__init__.py +0 -0
  149. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/shared/__init__.py +0 -0
  150. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/shared/api_client.py +0 -0
  151. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/shared/configuration.py +0 -0
  152. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/shared/exceptions.py +0 -0
  153. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/shared/model_utils.py +0 -0
  154. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/core_ea/openapi/shared/rest.py +0 -0
  155. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/data/__init__.py +0 -0
  156. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/data/errors.py +0 -0
  157. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/data/features/__init__.py +0 -0
  158. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/data/features/bulk_import.py +0 -0
  159. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/data/sparse_vector_factory.py +0 -0
  160. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/data/vector_factory.py +0 -0
  161. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/deprecation_warnings.py +0 -0
  162. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/exceptions/exceptions.py +0 -0
  163. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/grpc/__init__.py +0 -0
  164. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/grpc/base.py +0 -0
  165. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/grpc/channel_factory.py +0 -0
  166. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/grpc/config.py +0 -0
  167. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/grpc/future.py +0 -0
  168. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/grpc/index_grpc.py +0 -0
  169. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/grpc/pinecone.py +0 -0
  170. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/grpc/query_results.py +0 -0
  171. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/grpc/retry.py +0 -0
  172. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/grpc/sparse_values_factory.py +0 -0
  173. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/grpc/sparse_vector.py +0 -0
  174. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/grpc/utils.py +0 -0
  175. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/grpc/vector_factory_grpc.py +0 -0
  176. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/models/__init__.py +0 -0
  177. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/models/collection_description.py +0 -0
  178. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/models/collection_list.py +0 -0
  179. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/models/index_description.py +0 -0
  180. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/models/index_list.py +0 -0
  181. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/models/index_model.py +0 -0
  182. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/models/list_response.py +0 -0
  183. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/models/pod_spec.py +0 -0
  184. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/models/serverless_spec.py +0 -0
  185. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/utils/__init__.py +0 -0
  186. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/utils/check_kwargs.py +0 -0
  187. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/utils/constants.py +0 -0
  188. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/utils/convert_to_list.py +0 -0
  189. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/utils/deprecation_notice.py +0 -0
  190. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/utils/docslinks.py +0 -0
  191. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/utils/error_handling.py +0 -0
  192. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/utils/fix_tuple_length.py +0 -0
  193. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/utils/normalize_host.py +0 -0
  194. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/utils/parse_args.py +0 -0
  195. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/utils/repr_overrides.py +0 -0
  196. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/utils/setup_openapi_client.py +0 -0
  197. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/utils/user_agent.py +0 -0
  198. {pinecone-6.0.0.dev1 → pinecone-6.0.0.dev3}/pinecone/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pinecone
3
- Version: 6.0.0.dev1
3
+ Version: 6.0.0.dev3
4
4
  Summary: Pinecone client and SDK
5
5
  Home-page: https://www.pinecone.io
6
6
  License: Apache-2.0
@@ -0,0 +1 @@
1
+ 6.0.0.dev3
@@ -8,6 +8,24 @@ import re
8
8
  import typing
9
9
  from urllib.parse import quote
10
10
  from urllib3.fields import RequestField
11
+ import time
12
+ import random
13
+
14
+ def retry_api_call(
15
+ func, args=(), kwargs={}, retries=3, backoff=1, jitter=0.5
16
+ ):
17
+ attempts = 0
18
+ while attempts < retries:
19
+ try:
20
+ return func(*args, **kwargs) # Attempt to call __call_api
21
+ except Exception as e:
22
+ attempts += 1
23
+ if attempts >= retries:
24
+ print(f"API call failed after {attempts} attempts: {e}")
25
+ raise # Re-raise exception if retries are exhausted
26
+ sleep_time = backoff * (2 ** (attempts - 1)) + random.uniform(0, jitter)
27
+ # print(f"Retrying ({attempts}/{retries}) in {sleep_time:.2f} seconds after error: {e}")
28
+ time.sleep(sleep_time)
11
29
 
12
30
 
13
31
  from pinecone.core.openapi.shared import rest
@@ -397,25 +415,32 @@ class ApiClient(object):
397
415
  )
398
416
 
399
417
  return self.pool.apply_async(
400
- self.__call_api,
401
- (
402
- resource_path,
403
- method,
404
- path_params,
405
- query_params,
406
- header_params,
407
- body,
408
- post_params,
409
- files,
410
- response_type,
411
- auth_settings,
412
- _return_http_data_only,
413
- collection_formats,
414
- _preload_content,
415
- _request_timeout,
416
- _host,
417
- _check_type,
418
- ),
418
+ retry_api_call,
419
+ args=(
420
+ self.__call_api, # Pass the API call function as the first argument
421
+ (
422
+ resource_path,
423
+ method,
424
+ path_params,
425
+ query_params,
426
+ header_params,
427
+ body,
428
+ post_params,
429
+ files,
430
+ response_type,
431
+ auth_settings,
432
+ _return_http_data_only,
433
+ collection_formats,
434
+ _preload_content,
435
+ _request_timeout,
436
+ _host,
437
+ _check_type,
438
+ ),
439
+ {}, # empty kwargs dictionary
440
+ 3, # retries
441
+ 1, # backoff time
442
+ 0.5 # jitter
443
+ )
419
444
  )
420
445
 
421
446
  def request(
@@ -27,6 +27,8 @@ from .features.bulk_import import ImportFeatureMixin
27
27
  from pinecone.core.openapi.data.api.data_plane_api import DataPlaneApi
28
28
  from ..utils import setup_openapi_client, parse_non_empty_args
29
29
  from .vector_factory import VectorFactory
30
+ from .query_results_aggregator import QueryResultsAggregator, QueryNamespacesResults
31
+ from multiprocessing.pool import ApplyResult
30
32
 
31
33
  __all__ = [
32
34
  "Index",
@@ -361,7 +363,7 @@ class Index(ImportFeatureMixin):
361
363
  Union[SparseValues, Dict[str, Union[List[float], List[int]]]]
362
364
  ] = None,
363
365
  **kwargs,
364
- ) -> QueryResponse:
366
+ ) -> Union[QueryResponse, ApplyResult]:
365
367
  """
366
368
  The Query operation searches a namespace, using a query vector.
367
369
  It retrieves the ids of the most similar items in a namespace, along with their similarity scores.
@@ -403,6 +405,39 @@ class Index(ImportFeatureMixin):
403
405
  and namespace name.
404
406
  """
405
407
 
408
+ response = self._query(
409
+ *args,
410
+ top_k=top_k,
411
+ vector=vector,
412
+ id=id,
413
+ namespace=namespace,
414
+ filter=filter,
415
+ include_values=include_values,
416
+ include_metadata=include_metadata,
417
+ sparse_vector=sparse_vector,
418
+ **kwargs,
419
+ )
420
+
421
+ if kwargs.get("async_req", False):
422
+ return response
423
+ else:
424
+ return parse_query_response(response)
425
+
426
+ def _query(
427
+ self,
428
+ *args,
429
+ top_k: int,
430
+ vector: Optional[List[float]] = None,
431
+ id: Optional[str] = None,
432
+ namespace: Optional[str] = None,
433
+ filter: Optional[Dict[str, Union[str, float, int, bool, List, dict]]] = None,
434
+ include_values: Optional[bool] = None,
435
+ include_metadata: Optional[bool] = None,
436
+ sparse_vector: Optional[
437
+ Union[SparseValues, Dict[str, Union[List[float], List[int]]]]
438
+ ] = None,
439
+ **kwargs,
440
+ ) -> QueryResponse:
406
441
  if len(args) > 0:
407
442
  raise ValueError(
408
443
  "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')"
@@ -435,7 +470,58 @@ class Index(ImportFeatureMixin):
435
470
  ),
436
471
  **{k: v for k, v in kwargs.items() if k in _OPENAPI_ENDPOINT_PARAMS},
437
472
  )
438
- return parse_query_response(response)
473
+ return response
474
+
475
+ @validate_and_convert_errors
476
+ def query_namespaces(
477
+ self,
478
+ vector: List[float],
479
+ namespaces: List[str],
480
+ top_k: Optional[int] = None,
481
+ filter: Optional[Dict[str, Union[str, float, int, bool, List, dict]]] = None,
482
+ include_values: Optional[bool] = None,
483
+ include_metadata: Optional[bool] = None,
484
+ sparse_vector: Optional[
485
+ Union[SparseValues, Dict[str, Union[List[float], List[int]]]]
486
+ ] = None,
487
+ **kwargs,
488
+ ) -> QueryNamespacesResults:
489
+ if len(namespaces) == 0:
490
+ raise ValueError("At least one namespace must be specified")
491
+ if len(vector) == 0:
492
+ raise ValueError("Query vector must not be empty")
493
+
494
+ # The caller may only want the top_k=1 result across all queries,
495
+ # but we need to get at least 2 results from each query in order to
496
+ # aggregate them correctly. So we'll temporarily set topK to 2 for the
497
+ # subqueries, and then we'll take the topK=1 results from the aggregated
498
+ # results.
499
+ overall_topk = top_k if top_k is not None else 10
500
+ aggregator = QueryResultsAggregator(top_k=overall_topk)
501
+ subquery_topk = overall_topk if overall_topk > 2 else 2
502
+
503
+ target_namespaces = set(namespaces) # dedup namespaces
504
+ async_results = [
505
+ self.query(
506
+ vector=vector,
507
+ namespace=ns,
508
+ top_k=subquery_topk,
509
+ filter=filter,
510
+ include_values=include_values,
511
+ include_metadata=include_metadata,
512
+ sparse_vector=sparse_vector,
513
+ async_req=True,
514
+ **kwargs,
515
+ )
516
+ for ns in target_namespaces
517
+ ]
518
+
519
+ for result in async_results:
520
+ response = result.get()
521
+ aggregator.add_results(response)
522
+
523
+ final_results = aggregator.get_results()
524
+ return final_results
439
525
 
440
526
  @validate_and_convert_errors
441
527
  def update(
@@ -61,7 +61,7 @@ class ScoredVectorWithNamespace:
61
61
 
62
62
 
63
63
  @dataclass
64
- class CompositeQueryResults:
64
+ class QueryNamespacesResults:
65
65
  usage: Usage
66
66
  matches: List[ScoredVectorWithNamespace]
67
67
 
@@ -69,7 +69,7 @@ class CompositeQueryResults:
69
69
  if hasattr(self, key):
70
70
  return getattr(self, key)
71
71
  else:
72
- raise KeyError(f"'{key}' not found in CompositeQueryResults")
72
+ raise KeyError(f"'{key}' not found in QueryNamespacesResults")
73
73
 
74
74
  def __repr__(self):
75
75
  return json.dumps(
@@ -81,28 +81,23 @@ class CompositeQueryResults:
81
81
  )
82
82
 
83
83
 
84
- class QueryResultsAggregationEmptyResultsError(Exception):
85
- def __init__(self, namespace: str):
86
- super().__init__(
87
- f"Query results for namespace '{namespace}' were empty. Check that you have upserted vectors into this namespace (see describe_index_stats) and that the namespace name is spelled correctly."
88
- )
89
-
90
-
91
84
  class QueryResultsAggregregatorNotEnoughResultsError(Exception):
92
- def __init__(self, top_k: int, num_results: int):
85
+ def __init__(self):
93
86
  super().__init__(
94
- f"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. Expected at least {top_k} results but got {num_results}."
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."
95
88
  )
96
89
 
97
90
 
98
91
  class QueryResultsAggregatorInvalidTopKError(Exception):
99
92
  def __init__(self, top_k: int):
100
- super().__init__(f"Invalid top_k value {top_k}. top_k must be a positive integer.")
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
+ )
101
96
 
102
97
 
103
98
  class QueryResultsAggregator:
104
99
  def __init__(self, top_k: int):
105
- if top_k < 1:
100
+ if top_k < 2:
106
101
  raise QueryResultsAggregatorInvalidTopKError(top_k)
107
102
  self.top_k = top_k
108
103
  self.usage_read_units = 0
@@ -110,7 +105,7 @@ class QueryResultsAggregator:
110
105
  self.insertion_counter = 0
111
106
  self.is_dotproduct = None
112
107
  self.read = False
113
- self.final_results: Optional[CompositeQueryResults] = None
108
+ self.final_results: Optional[QueryNamespacesResults] = None
114
109
 
115
110
  def _is_dotproduct_index(self, matches):
116
111
  # The interpretation of the score depends on the similar metric used.
@@ -134,6 +129,13 @@ class QueryResultsAggregator:
134
129
  if len(self.heap) < self.top_k:
135
130
  heapq.heappush(self.heap, heap_item_fn(match, ns))
136
131
  else:
132
+ # Assume we have dotproduct scores sorted in descending order
133
+ if self.is_dotproduct and match["score"] < self.heap[0][0]:
134
+ # No further matches can improve the top-K heap
135
+ break
136
+ elif not self.is_dotproduct and match["score"] > -self.heap[0][0]:
137
+ # No further matches can improve the top-K heap
138
+ break
137
139
  heapq.heappushpop(self.heap, heap_item_fn(match, ns))
138
140
 
139
141
  def add_results(self, results: Dict[str, Any]):
@@ -148,11 +150,14 @@ class QueryResultsAggregator:
148
150
  self.usage_read_units += results.get("usage", {}).get("readUnits", 0)
149
151
 
150
152
  if len(matches) == 0:
151
- raise QueryResultsAggregationEmptyResultsError(ns)
153
+ return
152
154
 
153
155
  if self.is_dotproduct is None:
154
156
  if len(matches) == 1:
155
- raise QueryResultsAggregregatorNotEnoughResultsError(self.top_k, len(matches))
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()
156
161
  self.is_dotproduct = self._is_dotproduct_index(matches)
157
162
 
158
163
  if self.is_dotproduct:
@@ -160,7 +165,7 @@ class QueryResultsAggregator:
160
165
  else:
161
166
  self._process_matches(matches, ns, self._non_dotproduct_heap_item)
162
167
 
163
- def get_results(self) -> CompositeQueryResults:
168
+ def get_results(self) -> QueryNamespacesResults:
164
169
  if self.read:
165
170
  if self.final_results is not None:
166
171
  return self.final_results
@@ -169,7 +174,7 @@ class QueryResultsAggregator:
169
174
  raise ValueError("Results have already been read. Cannot get results again.")
170
175
  self.read = True
171
176
 
172
- self.final_results = CompositeQueryResults(
177
+ self.final_results = QueryNamespacesResults(
173
178
  usage=Usage(read_units=self.usage_read_units),
174
179
  matches=[
175
180
  ScoredVectorWithNamespace(heapq.heappop(self.heap)) for _ in range(len(self.heap))
@@ -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",
@@ -8,10 +8,19 @@ from pinecone import Config
8
8
  from .utils import _generate_request_id
9
9
  from .config import GRPCClientConfig
10
10
  from pinecone.utils.constants import REQUEST_ID, CLIENT_VERSION
11
- from pinecone.exceptions.exceptions import PineconeException
12
- from grpc import CallCredentials, Compression
11
+ from grpc import CallCredentials, Compression, StatusCode
12
+ from grpc.aio import AioRpcError
13
13
  from google.protobuf.message import Message
14
14
 
15
+ from pinecone.exceptions import (
16
+ PineconeException,
17
+ PineconeApiValueError,
18
+ PineconeApiException,
19
+ UnauthorizedException,
20
+ PineconeNotFoundException,
21
+ ServiceException,
22
+ )
23
+
15
24
 
16
25
  class GrpcRunner:
17
26
  def __init__(self, index_name: str, config: Config, grpc_config: GRPCClientConfig):
@@ -50,7 +59,7 @@ class GrpcRunner:
50
59
  compression=compression,
51
60
  )
52
61
  except _InactiveRpcError as e:
53
- raise PineconeException(e._state.debug_error_string) from e
62
+ self._map_exception(e, e._state.code, e._state.details)
54
63
 
55
64
  return wrapped()
56
65
 
@@ -89,8 +98,8 @@ class GrpcRunner:
89
98
  wait_for_ready=wait_for_ready,
90
99
  compression=compression,
91
100
  )
92
- except _InactiveRpcError as e:
93
- raise PineconeException(e._state.debug_error_string) from e
101
+ except AioRpcError as e:
102
+ self._map_exception(e, e.code(), e.details())
94
103
 
95
104
  return await wrapped()
96
105
 
@@ -108,3 +117,37 @@ class GrpcRunner:
108
117
 
109
118
  def _request_metadata(self) -> Dict[str, str]:
110
119
  return {REQUEST_ID: _generate_request_id()}
120
+
121
+ def _map_exception(self, e: Exception, code: Optional[StatusCode], details: Optional[str]):
122
+ # Client / connection issues
123
+ details = details or ""
124
+
125
+ if code in [StatusCode.DEADLINE_EXCEEDED]:
126
+ raise TimeoutError(details) from e
127
+
128
+ # Permissions stuff
129
+ if code in [StatusCode.PERMISSION_DENIED, StatusCode.UNAUTHENTICATED]:
130
+ raise UnauthorizedException(status=code, reason=details) from e
131
+
132
+ # 400ish stuff
133
+ if code in [StatusCode.NOT_FOUND]:
134
+ raise PineconeNotFoundException(status=code, reason=details) from e
135
+ if code in [StatusCode.INVALID_ARGUMENT, StatusCode.OUT_OF_RANGE]:
136
+ raise PineconeApiValueError(details) from e
137
+ if code in [
138
+ StatusCode.ALREADY_EXISTS,
139
+ StatusCode.FAILED_PRECONDITION,
140
+ StatusCode.UNIMPLEMENTED,
141
+ StatusCode.RESOURCE_EXHAUSTED,
142
+ ]:
143
+ raise PineconeApiException(status=code, reason=details) from e
144
+
145
+ # 500ish stuff
146
+ if code in [StatusCode.INTERNAL, StatusCode.UNAVAILABLE]:
147
+ raise ServiceException(status=code, reason=details) from e
148
+ if code in [StatusCode.UNKNOWN, StatusCode.DATA_LOSS, StatusCode.ABORTED]:
149
+ # abandon hope, all ye who enter here
150
+ raise PineconeException(code, details) from e
151
+
152
+ # If you get here, you're in a bad place
153
+ raise PineconeException(code, details) from e
@@ -42,7 +42,7 @@ from .utils import (
42
42
  parse_sparse_values_arg,
43
43
  )
44
44
  from .vector_factory_grpc import VectorFactoryGRPC
45
- from .query_results_aggregator import QueryResultsAggregator, CompositeQueryResults
45
+ from ..data.query_results_aggregator import QueryResultsAggregator, QueryNamespacesResults
46
46
 
47
47
 
48
48
  class GRPCIndexAsyncio(GRPCIndexBase):
@@ -151,7 +151,7 @@ class GRPCIndexAsyncio(GRPCIndexBase):
151
151
  sparse_vector: Optional[Union[GRPCSparseValues, SparseVectorTypedDict]] = None,
152
152
  semaphore: Optional[asyncio.Semaphore] = None,
153
153
  **kwargs,
154
- ) -> dict[str, Any]:
154
+ ) -> Dict[str, Any]:
155
155
  if vector is not None and id is not None:
156
156
  raise ValueError("Cannot specify both `id` and `vector`")
157
157
 
@@ -256,7 +256,7 @@ class GRPCIndexAsyncio(GRPCIndexBase):
256
256
  )
257
257
  return parse_query_response(json_response, _check_type=False)
258
258
 
259
- async def composite_query(
259
+ async def query_namespaces(
260
260
  self,
261
261
  vector: List[float],
262
262
  namespaces: List[str],
@@ -269,7 +269,7 @@ class GRPCIndexAsyncio(GRPCIndexBase):
269
269
  max_concurrent_requests: Optional[int] = None,
270
270
  semaphore: Optional[asyncio.Semaphore] = None,
271
271
  **kwargs,
272
- ) -> CompositeQueryResults:
272
+ ) -> QueryNamespacesResults:
273
273
  aggregator_lock = asyncio.Lock()
274
274
  semaphore = self._get_semaphore(max_concurrent_requests, semaphore)
275
275
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pinecone"
3
- version = "6.0.0.dev1"
3
+ version = "6.0.0.dev3"
4
4
  packages = [
5
5
  { include="pinecone", from="." },
6
6
  ]
@@ -1 +0,0 @@
1
- 6.0.0.dev1
File without changes
File without changes