1
0
mirror of https://github.com/hwchase17/langchain.git synced 2025-05-03 14:18:03 +00:00

pinecone: update pinecone client ()

This PR updates the Pinecone client to `5.4.0`, as well as its
dependencies (`pinecone-plugin-inference` and
`pinecone-plugin-interface`).

Note: `pinecone-client` is now simply called `pinecone`.

**Question for reviewer(s):** should this PR also update the `pinecone`
dep in [the root dir's `poetry.lock`
file](https://github.com/langchain-ai/langchain/blob/master/poetry.lock#L6729)?
Was unsure. (I don't believe so b/c it seems pinned to a lower version
likely based on 3rd-party deps (e.g. Unstructured).)

--
TW: @audrey_sage_


---
- To see the specific tasks where the Asana app for GitHub is being
used, see below:
  - https://app.asana.com/0/0/1208693659122374
This commit is contained in:
Audrey Sage Lorberfeld 2024-12-02 22:47:09 -08:00 committed by GitHub
parent 000be1f32c
commit 6b7e93d4c7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 1045 additions and 845 deletions
docs/docs/integrations
libs
community/langchain_community/vectorstores
partners/pinecone

View File

@ -32,7 +32,7 @@ For a more detailed walkthrough of the Pinecone vectorstore, see [this notebook]
### Pinecone Hybrid Search
```bash
pip install pinecone-client pinecone-text
pip install pinecone pinecone-text
```
```python

View File

@ -24,7 +24,7 @@
"metadata": {},
"outputs": [],
"source": [
"%pip install --upgrade --quiet pinecone-client pinecone-text pinecone-notebooks"
"%pip install --upgrade --quiet pinecone pinecone-text pinecone-notebooks"
]
},
{

View File

@ -31,7 +31,7 @@ def _import_pinecone() -> Any:
except ImportError as e:
raise ImportError(
"Could not import pinecone python package. "
"Please install it with `pip install pinecone-client`."
"Please install it with `pip3 install pinecone`."
) from e
return pinecone
@ -48,7 +48,7 @@ def _is_pinecone_v3() -> bool:
class Pinecone(VectorStore):
"""`Pinecone` vector store.
To use, you should have the ``pinecone-client`` python package installed.
To use, you should have the ``pinecone`` python package installed.
This version of Pinecone is deprecated. Please use `langchain_pinecone.Pinecone`
instead.

View File

@ -33,7 +33,7 @@ class PineconeEmbeddings(BaseModel, Embeddings):
# Clients
_client: PineconeClient = PrivateAttr(default=None)
_async_client: aiohttp.ClientSession = PrivateAttr(default=None)
_async_client: Optional[aiohttp.ClientSession] = PrivateAttr(default=None)
model: str
"""Model to use for example 'multilingual-e5-large'."""
# Config
@ -65,6 +65,19 @@ class PineconeEmbeddings(BaseModel, Embeddings):
protected_namespaces=(),
)
@property
def async_client(self) -> aiohttp.ClientSession:
"""Lazily initialize the async client."""
if self._async_client is None:
self._async_client = aiohttp.ClientSession(
headers={
"Api-Key": self.pinecone_api_key.get_secret_value(),
"Content-Type": "application/json",
"X-Pinecone-API-Version": "2024-07",
}
)
return self._async_client
@model_validator(mode="before")
@classmethod
def set_default_config(cls, values: dict) -> Any:
@ -92,15 +105,8 @@ class PineconeEmbeddings(BaseModel, Embeddings):
client = PineconeClient(api_key=api_key_str, source_tag="langchain")
self._client = client
# initialize async client
if not self._async_client:
self._async_client = aiohttp.ClientSession(
headers={
"Api-Key": api_key_str,
"Content-Type": "application/json",
"X-Pinecone-API-Version": "2024-07",
}
)
# Ensure async_client is lazily initialized
_ = self.async_client
return self
def _get_batch_iterator(self, texts: List[str]) -> Iterable:
@ -174,7 +180,7 @@ class PineconeEmbeddings(BaseModel, Embeddings):
"inputs": [{"text": text} for text in texts],
"parameters": parameters,
}
async with self._async_client.post(
async with self.async_client.post(
"https://api.pinecone.io/embed", json=data
) as response:
response_data = await response.json(content_type=None)

View File

@ -74,6 +74,7 @@ class PineconeVectorStore(VectorStore):
dimension=1536,
metric="cosine",
spec=ServerlessSpec(cloud="aws", region="us-east-1"),
deletion_protection="enabled", # Defaults to "disabled"
)
while not pc.describe_index(index_name).status["ready"]:
time.sleep(1)

File diff suppressed because it is too large Load Diff

View File

@ -21,15 +21,9 @@ disallow_untyped_defs = "True"
[tool.poetry.dependencies]
python = ">=3.9,<3.13"
langchain-core = "^0.3.15"
pinecone-client = "^5.0.0"
pinecone = "^5.4.0"
aiohttp = ">=3.9.5,<3.10"
[[tool.poetry.dependencies.numpy]]
version = "^1"
python = "<3.12"
[[tool.poetry.dependencies.numpy]]
version = "^1.26.0"
python = ">=3.12"
numpy = ">=1.26.0,<2.0.0"
[tool.ruff.lint]
select = [ "E", "F", "I", "T201",]