Open gich2009 opened 3 months ago
To fix the error in the PropertyGraphIndex
when creating a chat_engine
or query_engine
, you need to add a **kwargs
parameter to the VectorStoreQuery
class in llama_index/core/vector_stores/types.py
. Here is the modified VectorStoreQuery
class with the **kwargs
parameter:
@dataclass
class VectorStoreQuery:
"""Vector store query."""
query_embedding: Optional[List[float]] = None
similarity_top_k: int = 1
doc_ids: Optional[List[str]] = None
node_ids: Optional[List[str]] = None
query_str: Optional[str] = None
output_fields: Optional[List[str]] = None
embedding_field: Optional[str] = None
mode: VectorStoreQueryMode = VectorStoreQueryMode.DEFAULT
alpha: Optional[float] = None
filters: Optional[MetadataFilters] = None
mmr_threshold: Optional[float] = None
sparse_top_k: Optional[int] = None
hybrid_top_k: Optional[int] = None
# Add **kwargs parameter
**kwargs: Any
Additionally, ensure that the VectorContextRetriever
class in llama_index/core/indices/property_graph/sub_retrievers/vector.py
correctly passes these **kwargs
when creating a VectorStoreQuery
:
class VectorContextRetriever(BasePGRetriever):
"""A retriever that uses a vector store to retrieve nodes based on a query."""
def __init__(
self,
graph_store: PropertyGraphStore,
include_text: bool = True,
embed_model: Optional[BaseEmbedding] = None,
vector_store: Optional[VectorStore] = None,
similarity_top_k: int = 4,
path_depth: int = 1,
filters: Optional[MetadataFilters] = None,
**kwargs: Any
) -> None:
self._retriever_kwargs = kwargs or {}
self._embed_model = embed_model or Settings.embed_model
self._similarity_top_k = similarity_top_k
self._vector_store = vector_store
self._path_depth = path_depth
self._filters = filters
super().__init__(graph_store=graph_store, include_text=include_text, **kwargs)
def _get_vector_store_query(self, query_bundle: QueryBundle) -> VectorStoreQuery:
if query_bundle.embedding is None:
query_bundle.embedding = self._embed_model.get_agg_embedding_from_queries(
query_bundle.embedding_strs
)
return VectorStoreQuery(
query_embedding=query_bundle.embedding,
similarity_top_k=self._similarity_top_k,
filters=self._filters,
**self._retriever_kwargs,
)
async def _aget_vector_store_query(
self, query_bundle: QueryBundle
) -> VectorStoreQuery:
if query_bundle.embedding is None:
query_bundle.embedding = (
await self._embed_model.aget_agg_embedding_from_queries(
query_bundle.embedding_strs
)
)
return VectorStoreQuery(
query_embedding=query_bundle.embedding,
similarity_top_k=self._similarity_top_k,
filters=self._filters,
**self._retriever_kwargs,
)
This ensures that any additional keyword arguments are properly passed through the VectorContextRetriever
to the VectorStoreQuery
[1][2].
To continue talking to Dosu, mention @dosu.
Another suggestion is that PGRetriever could also check if use_async has been passed to it as a kwargs parameter: Currrent Implementation: return PGRetriever(sub_retrievers, use_async=self._use_async, **kwargs)
Proposed Implementation: use_async = kwargs.pop("use_async", self._use_async) return PGRetriever(sub_retrievers, use_async=use_async, **kwargs)
Bug Description
When property graph index is used to create a chat_engine or a query_engine, it throws an error when some parameters are passed in. An easy fix for this is to add a **kwargs parameter to the underlying VectorStoreQuery(llama_index/core/vector_stores/types.py) in order to ignore any unnecessary arguments that are used elsewhere and are passed down to it.
Current Implementation: @dataclass class VectorStoreQuery: """Vector store query."""
Fix that works: @dataclass class VectorStoreQuery: """Vector store query."""
Version
0.10.52
Steps to Reproduce
chat_engine = property_graph_index.as_chat_engine( chat_mode=chat_mode, llm=llm, similarity_top_k=similarity_top_k,
Relevant Logs/Tracbacks