community[patch]: Support different Pinecone initializations depending on the version (#15717)

Co-authored-by: DosticJelena <jelenadostic2@gmail.com>
pull/15721/head
Erick Friis 6 months ago committed by GitHub
parent c0eb2482c3
commit 94911ae503
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,15 +1,26 @@
from __future__ import annotations from __future__ import annotations
import logging import logging
import os
import uuid import uuid
import warnings import warnings
from typing import TYPE_CHECKING, Any, Callable, Iterable, List, Optional, Tuple, Union from typing import (
TYPE_CHECKING,
Any,
Callable,
Iterable,
List,
Optional,
Tuple,
Union,
)
import numpy as np import numpy as np
from langchain_core.documents import Document from langchain_core.documents import Document
from langchain_core.embeddings import Embeddings from langchain_core.embeddings import Embeddings
from langchain_core.utils.iter import batch_iterate from langchain_core.utils.iter import batch_iterate
from langchain_core.vectorstores import VectorStore from langchain_core.vectorstores import VectorStore
from packaging import version
from langchain_community.vectorstores.utils import ( from langchain_community.vectorstores.utils import (
DistanceStrategy, DistanceStrategy,
@ -63,10 +74,9 @@ class Pinecone(VectorStore):
"Passing in `embedding` as a Callable is deprecated. Please pass in an" "Passing in `embedding` as a Callable is deprecated. Please pass in an"
" Embeddings object instead." " Embeddings object instead."
) )
if not isinstance(index, pinecone.index.Index): if not isinstance(index, pinecone.Index):
raise ValueError( raise ValueError(
f"client should be an instance of pinecone.index.Index, " f"client should be an instance of pinecone.Index, " f"got {type(index)}"
f"got {type(index)}"
) )
self._index = index self._index = index
self._embedding = embedding self._embedding = embedding
@ -359,11 +369,24 @@ class Pinecone(VectorStore):
"Please install it with `pip install pinecone-client`." "Please install it with `pip install pinecone-client`."
) )
indexes = pinecone.list_indexes() # checks if provided index exists pinecone_client_version = pinecone.__version__
if index_name in indexes: if version.parse(pinecone_client_version) >= version.parse("3.0.0.dev"):
index = pinecone.Index(index_name, pool_threads=pool_threads) pinecone_instance = pinecone.Pinecone(
elif len(indexes) == 0: api_key=os.environ.get("PINECONE_API_KEY"), pool_threads=pool_threads
)
indexes = pinecone_instance.list_indexes()
index_names = [i.name for i in indexes.index_list["indexes"]]
else:
index_names = pinecone.list_indexes()
if index_name in index_names:
index = (
pinecone_instance.Index(index_name)
if version.parse(pinecone_client_version) >= version.parse("3.0.0")
else pinecone.Index(index_name, pool_threads=pool_threads)
)
elif len(index_names) == 0:
raise ValueError( raise ValueError(
"No active indexes found in your Pinecone project, " "No active indexes found in your Pinecone project, "
"are you sure you're using the right Pinecone API key and Environment? " "are you sure you're using the right Pinecone API key and Environment? "
@ -372,7 +395,7 @@ class Pinecone(VectorStore):
else: else:
raise ValueError( raise ValueError(
f"Index '{index_name}' not found in your Pinecone project. " f"Index '{index_name}' not found in your Pinecone project. "
f"Did you mean one of the following indexes: {', '.join(indexes)}" f"Did you mean one of the following indexes: {', '.join(index_names)}"
) )
return index return index

Loading…
Cancel
Save