binhnase04854's picture
first deploy
b699122
raw
history blame
2.68 kB
from enum import Enum
from typing import Any, Dict, Optional, Type
from gpt_index.constants import DATA_KEY, TYPE_KEY
from gpt_index.vector_stores.chatgpt_plugin import ChatGPTRetrievalPluginClient
from gpt_index.vector_stores.chroma import ChromaVectorStore
from gpt_index.vector_stores.faiss import FaissVectorStore
from gpt_index.vector_stores.milvus import MilvusVectorStore
from gpt_index.vector_stores.opensearch import OpensearchVectorStore
from gpt_index.vector_stores.pinecone import PineconeVectorStore
from gpt_index.vector_stores.qdrant import QdrantVectorStore
from gpt_index.vector_stores.simple import SimpleVectorStore
from gpt_index.vector_stores.types import VectorStore
from gpt_index.vector_stores.weaviate import WeaviateVectorStore
class VectorStoreType(str, Enum):
SIMPLE = "simple"
WEAVIATE = "weaviate"
QDRANT = "qdrant"
PINECONE = "pinecone"
OPENSEARCH = "opensearch"
FAISS = "faiss"
CHROMA = "chroma"
CHATGPT_PLUGIN = "chatgpt_plugin"
MILVUS = "milvus"
VECTOR_STORE_TYPE_TO_VECTOR_STORE_CLASS: Dict[VectorStoreType, Type[VectorStore]] = {
VectorStoreType.SIMPLE: SimpleVectorStore,
VectorStoreType.WEAVIATE: WeaviateVectorStore,
VectorStoreType.QDRANT: QdrantVectorStore,
VectorStoreType.MILVUS: MilvusVectorStore,
VectorStoreType.PINECONE: PineconeVectorStore,
VectorStoreType.OPENSEARCH: OpensearchVectorStore,
VectorStoreType.FAISS: FaissVectorStore,
VectorStoreType.CHROMA: ChromaVectorStore,
VectorStoreType.CHATGPT_PLUGIN: ChatGPTRetrievalPluginClient,
}
VECTOR_STORE_CLASS_TO_VECTOR_STORE_TYPE: Dict[Type[VectorStore], VectorStoreType] = {
cls_: type_ for type_, cls_ in VECTOR_STORE_TYPE_TO_VECTOR_STORE_CLASS.items()
}
def load_vector_store_from_dict(
vector_store_dict: Dict[str, Any],
type_to_cls: Optional[Dict[VectorStoreType, Type[VectorStore]]] = None,
**kwargs: Any,
) -> VectorStore:
type_to_cls = type_to_cls or VECTOR_STORE_TYPE_TO_VECTOR_STORE_CLASS
type = vector_store_dict[TYPE_KEY]
config_dict: Dict[str, Any] = vector_store_dict[DATA_KEY]
# Inject kwargs into data dict.
# This allows us to explicitly pass in unserializable objects
# like the vector store client.
config_dict.update(kwargs)
cls = type_to_cls[type]
return cls.from_dict(config_dict)
def save_vector_store_to_dict(
vector_store: VectorStore,
cls_to_type: Optional[Dict[Type[VectorStore], VectorStoreType]] = None,
) -> Dict[str, Any]:
cls_to_type = cls_to_type or VECTOR_STORE_CLASS_TO_VECTOR_STORE_TYPE
type_ = cls_to_type[type(vector_store)]
return {TYPE_KEY: type_, DATA_KEY: vector_store.config_dict}