# What changed in pinecone

> 131 changes in pinecone 9 to 10 from its official release notes, upgrade guides and advisories: 34 breaking, 1 deprecations, 3 security, 36 new APIs and options. Each one cited. Sources checked 2026-10-20. HTML: https://unstale.sh/pypi/pinecone/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## pinecone 10

### Breaking changes

- Adds role-binding management; authorization uses one role, one principal, and one scope, with no other source of permissions. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Becomes an explicit runtime dependency with a minimum version of 4.0. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Streaming assistant chat no longer aborts at 30 seconds; without a per-call timeout, the read floor is 300 seconds. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Removes error_message; read error from the assistant operations API instead. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Removes percent_done; read percent_complete from the assistant operations API instead. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Becomes a coroutine, so callers must await it. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Removes dimension from BackupModel; read schema instead. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Removes metric from BackupModel; read schema instead. (9.0.1, 10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0), [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Invalid values and argument combinations now raise PineconeValueError or PineconeTypeError locally before a request; these are not ApiError subclasses. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Removes the [dev] extra; use uv sync --group dev instead. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Backup schedules accept exactly daily, weekly, or monthly; cron is not supported. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- No longer raises on partial failure by default; failures are collected in the response. Set on_error="raise" to restore the previous behavior. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Adds document upsert, search, fetch, list, update, delete, and batch_upsert on sync and async index clients for indexes created with a 2026-07 document schema. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- The created_at property is removed from IndexModel. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Returns Paginator[IndexModel] instead of IndexList, so .names() is unavailable on this path; pc.list_indexes() is unchanged. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Removes the preview namespace and its classes and modules without a shim; graduated APIs are available on the main client. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Encodes every REST path parameter at the transport boundary to prevent caller-supplied slashes and dot segments from addressing a different endpoint. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Builds an index schema in Python; add methods return the builder and build() returns a dict suitable for pc.indexes.create(schema=...). (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- The async rerank path now enforces top_n >= 1. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)

### Security

- Masks the access token in repr() and str(), showing only its last four characters. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)

### New APIs and options

- Adds organization invite management to the Admin client. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Adds service-account management to the Admin client. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Adds user management to the Admin client. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Assistant chat stream chunks now carry content_filter_results. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Adds members for models available at API version 2026-07. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Adds an ApiError subclass for HTTP 412 responses. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Adds an exported typed object for per-string-field full-text search configuration, including language, stemming, stop words, and character n-grams. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Adds an exported typed object for character n-gram configuration; n-grams cannot be combined with stemming or stop words. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Adds an ApiError subclass for HTTP 402 responses. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Describes assistant operations, exposing status, percent_complete, and error so asynchronous file writes can be followed. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Lists assistant operations so asynchronous jobs can be followed. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Adds recurring backup schedule management and per-schedule run history. Frequency supports daily, weekly, or monthly; only one enabled schedule per index is allowed. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Accepts read_capacity to apply dedicated read capacity while restoring an index. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Adds dedicated read capacity configuration at index creation, configure, or restore for managed and BYOC indexes; the setting reads back from IndexModel.read_capacity. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Adds an id to StreamMessageStart. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Adds a deadline for an entire batched upsert call; when it expires, submission stops, in-flight batches finish, and unsent items are returned as failures. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Adds on_error to choose between collecting partial failures in the response or raising; failed rows are available in response.failed_items. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)

### Behavior and default changes

- Batched upsert defaults max_concurrency to 8, up from 4; an adaptive per-host admission gate can limit or abandon batch submission. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- A plaintext gRPC data plane using http against a non-loopback, non-private host now emits one RuntimeWarning per process. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- The default API version header is 2026-07 on every plane; set the header explicitly to pin an older version. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)

### Fixes and other changes

- Is now populated in namespace descriptions. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- The grpc overload narrows the return type so index.documents type-checks under mypy and pyright. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Now reaches the transport that opens the socket, so the setting takes effect. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- The SDK is tested and classified on Python 3.10 through 3.14; its Python requirement floor remains 3.10. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Now reaches the transport that opens the socket, so the setting takes effect. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)
- Now reaches the transport that opens the socket, so the setting takes effect. (10.0.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v10.0.0)

## pinecone 9

### Breaking changes

- The default changes from 2.0 to 0.25; the value is now the minimum delay floor in the decorrelated-jitter formula, not an exponential multiplier. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- REST now counts `max_retries` as retries after the initial attempt, matching gRPC; N retries allow up to N+1 total requests. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- Makes name nullable and removes the unused description field. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Removes the dead description parameter because the server does not accept it. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Enforces an 80-character API key name limit. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Cancelled and Timeout expired errors from the gRPC backend are raised as PineconeTimeoutError instead of grpc.RpcError. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Rejects top_k values greater than 10000 client-side. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Rejects limit values below 1 client-side. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Polling raises IndexTerminatedError when an index enters Terminating or Disabled instead of waiting for the operator timeout. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Rejects combining type=rerank with a vector_type argument. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Rejects top_n values below 1 client-side with ValidationError. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Removes the nonfunctional filter parameter; calls passing filter now raise TypeError. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Removes the nonfunctional filter parameter; calls passing filter now raise TypeError. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Rejects empty ids lists. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Rejects records with a non-string, empty, or null-byte-containing _id before making the HTTP call. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)

### Security

- Validates collection resource names client-side for length and allowed characters. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Validates project name length and null bytes, and refuses negative max_pods. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)

### Deprecations

- The field keyword remains supported as a deprecated alias for fields and is planned for removal in a future release. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)

### New APIs and options

- Accepts a single `query=` request body as a `SearchQuery` or plain `Mapping`; passing it with direct kwargs or with the wrong type raises `TypeError`. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- Bulk import operations are now available on `GrpcIndex`, including `cancel_import`. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- Bulk import operations are now available on `GrpcIndex`, including `describe_import`. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- Bulk import operations are now available on `GrpcIndex`, including `list_imports`. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- Bulk import operations are now available on `GrpcIndex`, including `list_imports_paginated`. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- Accepts a single `query=` request body as a `SearchQuery` or plain `Mapping`; passing it with direct kwargs or with the wrong type raises `TypeError`. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- Bulk import operations are now available on `GrpcIndex`, including `start_import`. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- Accepts a single `query=` request body as a `SearchQuery` or plain `Mapping`; passing it with direct kwargs or with the wrong type raises `TypeError`. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- HTTP 429 responses now raise a dedicated `ApiError` subclass, exported from `pinecone.errors` and the top-level `pinecone` namespace. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- A `RateLimitException` alias is available for the new throttling exception. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- The backcompat shim now accepts messages= to match the deprecated v8 signature. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Accepts sparse and hybrid vector query dictionaries alongside dense lists, and validates and normalizes dictionary keys client-side. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Accepts sparse and hybrid vector query dictionaries alongside dense lists, and validates and normalizes dictionary keys client-side. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Exposes private endpoint hosts returned by the backend. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Uses API version v202604, corrects query parameter names and pagination-token parsing, and adds page_size. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Uses API version v202604, corrects query parameter names and pagination-token parsing, and adds page_size. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Exposes private_host, source_collection, source_backup_id, and cmek_id in preview index responses. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Adds error_message to represent read capacity failure states. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Renames field to fields to support multiple field names; field remains a deprecated alias. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)

### Behavior and default changes

- Bulk operations automatically reduce per-host in-flight requests under throttling and recover after successes; `max_concurrency` remains the ceiling. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- Namespace fan-out is capped at 10 in-flight requests instead of issuing one unbounded request per namespace. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- The namespace emits DEBUG records for concurrency adjustments and an INFO record the first time a host is throttled. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- The namespace emits DEBUG records for throttled retry attempts, including status, host, attempt count, and computed delay. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- REST and gRPC retries now use decorrelated jitter, spreading retries across time instead of bunching them together. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- Widens tags from dict[str, str] to dict[str, Any] and exposes the actual schema field. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Removes the hardcoded limit=10 default so backend-default pagination is used. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Makes host optional to handle null values during creation and Terminating states. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Header and tag inputs accept Mapping[str, str], and read-only Index operation parameters accept Mapping[str, Any]. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Widens tags from dict[str, str] to dict[str, Any]. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Removes the hardcoded limit=10 default so backend-default pagination is used. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- The configure boundary now wraps bare schema dictionaries, accepting both fields-wrapped and short field mappings. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Public input parameters previously typed as list[T] now accept Sequence[T], including embed, rerank, and assistant messages and roles. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Allows partial Dedicated patches, such as changing min_replicas without re-specifying max_replicas. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)

### Tooling

- Adds an explicit public-surface stub so Jedi-based editors can resolve autocomplete and go-to-definition. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)

### Fixes and other changes

- Bare `list[float]` queries now use the correct wire shape, so dense-vector queries work. (9.1.0) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.1.0)
- Surfaces schema in decoded BYOC spec responses instead of dropping it. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Makes role and content optional to match streaming assistant-role chunks where values arrive on later chunks. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Exposes the usage field previously dropped during struct decoding. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Includes dimension in the index creation request instead of silently dropping it. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Populates reasoning from evaluate_alignment responses instead of returning it empty. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Adds create_namespace, describe_namespace, delete_namespace, list_namespaces, and list_namespaces_paginated to the gRPC index API. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Omits errorMode from the wire payload when error_mode is unspecified, avoiding backend rejection of null. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Widens min and max to int | float | None to match backend parameter values. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Maps the JSON field error_message into error for failed operations. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Forwards the environment parameter to the backend when creating an assistant. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Omits metadata from the request body when it is not provided, avoiding rejection by stricter backends. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Omits description from the request body when it is not provided. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Forwards serverless_read_capacity, which previously was not plumbed through the SDK. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Stops pre-merging tags client-side so partial updates are not overwritten. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- With timeout=-1, returns CreateIndexFromBackupResponse directly rather than polling. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Adds the previously omitted preview backup description operation and its async counterpart. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Honors the legacy assistant control host environment variable at client construction. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Honors the legacy assistant data host environment variable at client construction. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Makes replicas, shards, and pods optional to match nullable backend responses. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Treats Terminated and Terminating as terminal assistant states so creation polling exits promptly. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Adds PreviewBooleanField to the schema union so schemas containing it are accepted. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Forwards deployment for pod index patching and completes tag and schema-field validation. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Forwards source_collection, source_backup_id, and cmek_id to the backend when creating preview indexes. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Forwards limit to the server in fetch_page instead of using a hardcoded value. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Makes host optional to match nullable backend responses. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Adds PreviewLegacyIntegerField to the schema union so schemas containing it are accepted. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Makes environment optional to match nullable backend responses. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Rejects negative max_pods before making the HTTP call. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Preserves input namespace order in results so ties break deterministically. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Makes created_at optional to match nullable backend responses. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Makes usage optional to handle null values in streaming responses. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
- Drops the redundant id key when _id is present to avoid backend 400 responses. (9.0.1) — [release notes](https://github.com/pinecone-io/python-sdk/releases/tag/v9.0.1)
