zylon-ai/private-gpt · error · ValueError

Vector store for collection {collection} does not support ge

Error message

Vector store for collection {collection} does not support get_nodes

What it means

`get_nodes` requires the resolved vector store to expose a `get_nodes` method (an extension beyond llama-index's standard `BasePydanticVectorStore` interface, checked via `hasattr`). Stores that only implement standard query/delete lack it, so retrieval-by-nodes is unsupported and the component raises `ValueError` naming the collection.

Source

Thrown at private_gpt/components/node_store/node_store_component.py:115

        return provider(self._settings, collection)

    @property
    def max_nodes(self) -> int | None:
        return self._settings.data.max_num_nodes or None

    def get_nodes(
        self,
        collection: str,
        artifacts: list[str] | None = None,
        node_ids: list[str] | None = None,
        filters: MetadataFilters | None = None,
        limit: int | None = None,
    ) -> list[BaseNode]:
        vector_store = self._vector_store_component.vector_store(collection)
        if vector_store is None:
            raise ValueError(f"Vector store for collection {collection} not found")
        if not hasattr(vector_store, "get_nodes"):
            raise ValueError(
                f"Vector store for collection {collection} does not support get_nodes"
            )

        if artifacts:
            artifact_filters = MetadataFilters(
                filters=[
                    MetadataFilter(key=MetadataKeys.ARTIFACT_ID.value, value=artifact)
                    for artifact in artifacts
                ],
                condition=FilterCondition.OR,
            )
            filters = (
                MetadataFilters(
                    filters=[filters, artifact_filters],
                    condition=FilterCondition.AND,
                )
                if filters
                else artifact_filters

View on GitHub (pinned to 4a030776a3)

Solutions

  1. Use a vector store implementation that implements `get_nodes` (the project's qdrant-based factory stores do)
  2. Add a `get_nodes(...)` method to the custom store class delegating to its backend's fetch-by-id/filter API
  3. Avoid the `get_nodes` code path (node_ids/artifacts retrieval) for backends without support

Example fix

// before
class MyVectorStore(BasePydanticVectorStore):  # no get_nodes
    ...
node_store.get_nodes("col", node_ids=[...])  # ValueError

// after
class MyVectorStore(BasePydanticVectorStore):
    def get_nodes(self, node_ids=None, filters=None, limit=None):
        return self._backend.fetch(node_ids=node_ids, filters=filters, limit=limit)
Defensive patterns

Strategy: type-guard

Validate before calling

store = vector_store_component.vector_store(collection)
if store is not None and not hasattr(store, "get_nodes"):
    raise ValueError(f"{type(store).__name__} cannot serve get_nodes; pick another backend")

Type guard

def store_supports_get_nodes(store: Any) -> bool:
    return hasattr(store, "get_nodes") and callable(store.get_nodes)

Try / catch

try:
    nodes = node_store.get_nodes(collection, artifacts=[...])
except ValueError as e:
    if "does not support get_nodes" in str(e):
        raise ConfigurationError("backend lacks node retrieval; switch store") from e
    raise

Prevention

When it happens

Trigger: Configuring a vector store backend whose implementation lacks the `get_nodes` extension (only some custom/qdrant-derived stores implement it); calling `get_nodes`/artifact filtering paths against such a backend; upgrading a custom store that dropped the method.

Common situations: Switching vectorstore provider (e.g. to a vanilla llama-index store) while code paths call node retrieval; custom vector store wrappers not kept in sync with the project's extended interface.

Related errors


AI-assisted analysis of zylon-ai/private-gpt@4a030776a3 (2026-08-15). Data as JSON: /api/errors/51d573521a0bc88b. Report an issue: GitHub.