run-llama/llama_index · error · NotImplementedError
SimpleVectorStore does not store nodes directly.
Error message
SimpleVectorStore does not store nodes directly.
What it means
SimpleVectorStore is a minimal in-memory vector store that only keeps embedding vectors plus a couple of lookup dicts — it never stores the full BaseNode objects. Its `get_nodes()` therefore deliberately raises NotImplementedError rather than returning wrong or empty results. Retrieving source nodes requires a store that persists documents (docstore) or a full-featured vector store integration.
Source
Thrown at llama-index-core/llama_index/core/vector_stores/simple.py:172
"""Get client."""
return
@property
def _data(self) -> SimpleVectorStoreData:
"""Backwards compatibility."""
return self.data
def get(self, text_id: str) -> List[float]:
"""Get embedding."""
return self.data.embedding_dict[text_id]
def get_nodes(
self,
node_ids: Optional[List[str]] = None,
filters: Optional[MetadataFilters] = None,
) -> List[BaseNode]:
"""Get nodes."""
raise NotImplementedError("SimpleVectorStore does not store nodes directly.")
def add(
self,
nodes: Sequence[BaseNode],
**add_kwargs: Any,
) -> List[str]:
"""Add nodes to index."""
for node in nodes:
self.data.embedding_dict[node.node_id] = node.get_embedding()
self.data.text_id_to_ref_doc_id[node.node_id] = node.ref_doc_id or "None"
metadata = node_to_metadata_dict(
node, remove_text=True, flat_metadata=False
)
metadata.pop("_node_content", None)
self.data.metadata_dict[node.node_id] = metadata
return [node.node_id for node in nodes]
View on GitHub (pinned to afd0fef371)
Solutions
- Use the docstore instead: `index.docstore.get_nodes(node_ids)` — VectorStoreIndex keeps nodes there by default.
- Switch to a vector store integration that stores documents (Chroma, Qdrant, Weaviate, etc.) if you need node retrieval from the store itself.
- Catch NotImplementedError and degrade gracefully if you support multiple backends.
Example fix
# before nodes = simple_store.get_nodes(node_ids=["id1"]) # NotImplementedError # after nodes = index.docstore.get_nodes(["id1"]) # nodes live in the docstore
Defensive patterns
Strategy: fallback
Validate before calling
from llama_index.core.vector_stores import SimpleVectorStore
def store_supports_get_nodes(store) -> bool:
return type(store).get_nodes is not SimpleVectorStore.get_nodes Try / catch
try:
nodes = store.get_nodes(node_ids=ids)
except NotImplementedError:
nodes = index.docstore.get_nodes(ids) or [] # fallback source of truth Prevention
- Prefer index.docstore for node retrieval; treat the vector store as embeddings-only.
- If you support multiple backends, gate get_nodes on a capability check.
- Keep node ids in your own metadata if you need rehydration without a docstore.
When it happens
Trigger: Calling `vector_store.get_nodes(node_ids=[...])` or `get_nodes(filters=...)` on a `SimpleVectorStore` instance (the default store used by `VectorStoreIndex` without an external DB), e.g. to rehydrate nodes for citation or re-ranking.
Common situations: Prototypes built on the default in-memory index that later call node-retrieval APIs; code ported from Chroma/Qdrant/Weaviate integrations (which implement get_nodes) down to the simple store; calling `aget_nodes()` which delegates to the sync version and raises the same error.
Related errors
- get_nodes not implemented
- delete_nodes not implemented
- clear not implemented
- Vector store integrations that store text in the vector stor
- Cannot filter stores that were persisted without metadata. P
AI-assisted analysis of run-llama/llama_index@afd0fef371 (2026-08-15).
Data as JSON: /api/errors/aa7ff82a678d40f0.
Report an issue: GitHub.