binhnase04854's picture
first deploy
b699122
"""Index registry."""
from typing import Any, Dict, Type
from gpt_index.constants import DATA_KEY, TYPE_KEY
from gpt_index.data_structs.data_structs_v2 import (
KG,
ChatGPTRetrievalPluginIndexDict,
ChromaIndexDict,
CompositeIndex,
EmptyIndex,
FaissIndexDict,
IndexDict,
IndexGraph,
IndexList,
KeywordTable,
MilvusIndexDict,
OpensearchIndexDict,
PineconeIndexDict,
QdrantIndexDict,
SimpleIndexDict,
V2IndexStruct,
WeaviateIndexDict,
)
from gpt_index.data_structs.struct_type import IndexStructType
from gpt_index.data_structs.table_v2 import PandasStructTable, SQLStructTable
from gpt_index.indices.base import BaseGPTIndex, QueryMap
from gpt_index.indices.empty.base import GPTEmptyIndex
from gpt_index.indices.keyword_table.base import GPTKeywordTableIndex
from gpt_index.indices.knowledge_graph.base import GPTKnowledgeGraphIndex
from gpt_index.indices.list.base import GPTListIndex
from gpt_index.indices.struct_store.pandas import GPTPandasIndex
from gpt_index.indices.struct_store.sql import GPTSQLStructStoreIndex
from gpt_index.indices.tree.base import GPTTreeIndex
from gpt_index.indices.vector_store.base import GPTVectorStoreIndex
from gpt_index.indices.vector_store.vector_indices import (
ChatGPTRetrievalPluginIndex,
GPTChromaIndex,
GPTFaissIndex,
GPTMilvusIndex,
GPTOpensearchIndex,
GPTPineconeIndex,
GPTQdrantIndex,
GPTSimpleVectorIndex,
GPTWeaviateIndex,
)
INDEX_STRUCT_TYPE_TO_INDEX_STRUCT_CLASS: Dict[IndexStructType, Type[V2IndexStruct]] = {
IndexStructType.TREE: IndexGraph,
IndexStructType.LIST: IndexList,
IndexStructType.KEYWORD_TABLE: KeywordTable,
IndexStructType.SIMPLE_DICT: SimpleIndexDict,
IndexStructType.DICT: FaissIndexDict,
IndexStructType.WEAVIATE: WeaviateIndexDict,
IndexStructType.PINECONE: PineconeIndexDict,
IndexStructType.QDRANT: QdrantIndexDict,
IndexStructType.MILVUS: MilvusIndexDict,
IndexStructType.CHROMA: ChromaIndexDict,
IndexStructType.OPENSEARCH: OpensearchIndexDict,
IndexStructType.VECTOR_STORE: IndexDict,
IndexStructType.SQL: SQLStructTable,
IndexStructType.PANDAS: PandasStructTable,
IndexStructType.KG: KG,
IndexStructType.EMPTY: EmptyIndex,
IndexStructType.COMPOSITE: CompositeIndex,
IndexStructType.CHATGPT_RETRIEVAL_PLUGIN: ChatGPTRetrievalPluginIndexDict,
}
INDEX_STRUCT_TYPE_TO_INDEX_CLASS: Dict[IndexStructType, Type[BaseGPTIndex]] = {
IndexStructType.TREE: GPTTreeIndex,
IndexStructType.LIST: GPTListIndex,
IndexStructType.KEYWORD_TABLE: GPTKeywordTableIndex,
IndexStructType.SIMPLE_DICT: GPTSimpleVectorIndex,
IndexStructType.DICT: GPTFaissIndex,
IndexStructType.WEAVIATE: GPTWeaviateIndex,
IndexStructType.PINECONE: GPTPineconeIndex,
IndexStructType.QDRANT: GPTQdrantIndex,
IndexStructType.MILVUS: GPTMilvusIndex,
IndexStructType.CHROMA: GPTChromaIndex,
IndexStructType.VECTOR_STORE: GPTVectorStoreIndex,
IndexStructType.SQL: GPTSQLStructStoreIndex,
IndexStructType.PANDAS: GPTPandasIndex,
IndexStructType.KG: GPTKnowledgeGraphIndex,
IndexStructType.EMPTY: GPTEmptyIndex,
IndexStructType.CHATGPT_RETRIEVAL_PLUGIN: ChatGPTRetrievalPluginIndex,
IndexStructType.OPENSEARCH: GPTOpensearchIndex,
}
INDEX_STRUT_TYPE_TO_QUERY_MAP: Dict[IndexStructType, QueryMap] = {
index_type: index_cls.get_query_map()
for index_type, index_cls in INDEX_STRUCT_TYPE_TO_INDEX_CLASS.items()
}
def load_index_struct_from_dict(struct_dict: Dict[str, Any]) -> "V2IndexStruct":
type = struct_dict[TYPE_KEY]
data_dict = struct_dict[DATA_KEY]
cls = INDEX_STRUCT_TYPE_TO_INDEX_STRUCT_CLASS[type]
if type == IndexStructType.COMPOSITE:
struct_dicts: Dict[str, Any] = data_dict["all_index_structs"]
root_id = data_dict["root_id"]
all_index_structs = {
id_: load_index_struct_from_dict(struct_dict)
for id_, struct_dict in struct_dicts.items()
}
return CompositeIndex(all_index_structs=all_index_structs, root_id=root_id)
else:
return cls.from_dict(data_dict)