Source code for pinecone.grpc.pinecone
from pinecone import Pinecone
from pinecone.config import ConfigBuilder
from .index_grpc import GRPCIndex
[docs]
class PineconeGRPC(Pinecone):
"""
An alternative version of the Pinecone client that uses gRPC instead of HTTP for
data operations.
**Installing the gRPC client**
You must install extra dependencies in order to install the GRPC client.
**Installing with pip**
.. code-block:: bash
# Install the latest version
pip3 install "pinecone[grpc]"
# Install a specific version
pip3 install "pinecone[grpc]"==7.0.2
**Installing with poetry**
.. code-block:: bash
# Install the latest version
poetry add pinecone --extras grpc
# Install a specific version
poetry add pinecone==7.0.2 --extras grpc
**Using the gRPC client**
.. code-block:: python
import os
from pinecone.grpc import PineconeGRPC
pc = PineconeGRPC(api_key=os.environ.get("PINECONE_API_KEY"))
# From this point on, usage is identical to the HTTP client.
index = pc.Index("my-index", host=os.environ("PINECONE_INDEX_HOST"))
index.query(...)
"""
def Index(self, name: str = "", host: str = "", **kwargs):
"""
Target an index for data operations.
### Target an index by host url
In production situations, you want to uspert or query your data as quickly
as possible. If you know in advance the host url of your index, you can
eliminate a round trip to the Pinecone control plane by specifying the
host of the index.
.. code-block:: python
import os
from pinecone.grpc import PineconeGRPC
api_key = os.environ.get("PINECONE_API_KEY")
index_host = os.environ.get("PINECONE_INDEX_HOST")
pc = PineconeGRPC(api_key=api_key)
index = pc.Index(host=index_host)
# Now you're ready to perform data operations
index.query(vector=[...], top_k=10)
To find your host url, you can use the Pinecone control plane to describe
the index. The host url is returned in the response. Or, alternatively, the
host is displayed in the Pinecone web console.
.. code-block:: python
import os
from pinecone import Pinecone
pc = Pinecone(
api_key=os.environ.get("PINECONE_API_KEY")
)
host = pc.describe_index('index-name').host
**Target an index by name (not recommended for production)**
For more casual usage, such as when you are playing and exploring with Pinecone
in a notebook setting, you can also target an index by name. If you use this
approach, the client may need to perform an extra call to the Pinecone control
plane to get the host url on your behalf to get the index host.
The client will cache the index host for future use whenever it is seen, so you
will only incur the overhead of only one call. But this approach is not
recommended for production usage.
.. code-block:: python
import os
from pinecone import ServerlessSpec
from pinecone.grpc import PineconeGRPC
api_key = os.environ.get("PINECONE_API_KEY")
pc = PineconeGRPC(api_key=api_key)
pc.create_index(
name='my-index',
dimension=1536,
metric='cosine',
spec=ServerlessSpec(cloud='aws', region='us-west-2')
)
index = pc.Index('my-index')
# Now you're ready to perform data operations
index.query(vector=[...], top_k=10)
"""
if name == "" and host == "":
raise ValueError("Either name or host must be specified")
# Use host if it is provided, otherwise get host from describe_index
index_host = host or self.db.index._get_host(name)
pt = kwargs.pop("pool_threads", None) or self._pool_threads
config = ConfigBuilder.build(
api_key=self._config.api_key,
host=index_host,
source_tag=self._config.source_tag,
proxy_url=self._config.proxy_url,
ssl_ca_certs=self._config.ssl_ca_certs,
)
return GRPCIndex(index_name=name, config=config, pool_threads=pt, **kwargs)