mem0ai/mem0 · error · ValueError
Must provide vectors for search.
Error message
Must provide vectors for search.
What it means
ValueError raised in Databricks search when the store does NOT use a model endpoint and the caller supplied neither a usable query path nor vectors. In the elif branch, a falsy/empty vectors argument (None or []) means there is nothing to search with — the index requires a query_vector for nearest-neighbor lookup.
Source
Thrown at mem0/vector_stores/databricks.py:499
# - query_vector: for Direct Access Index and Delta Sync Index with self-managed vectors
query_kwargs = {
"index_name": self.fully_qualified_index_name,
"columns": self.column_names,
"num_results": top_k,
"query_type": self.query_type,
"filters_json": filters_json,
}
uses_model_endpoint = (
self.index_type == VectorIndexType.DELTA_SYNC and self.embedding_model_endpoint_name
)
if uses_model_endpoint:
if not query:
raise ValueError("Query text is required for Delta Sync Index with model endpoint.")
query_kwargs["query_text"] = query
elif vectors:
query_kwargs["query_vector"] = vectors
else:
raise ValueError("Must provide vectors for search.")
sdk_results = self.client.vector_search_indexes.query_index(**query_kwargs)
# Parse results
result_data = sdk_results.result if hasattr(sdk_results, "result") else sdk_results
data_array = result_data.data_array if getattr(result_data, "data_array", None) else []
memory_results = []
for row in data_array:
# Map columns to values
row_dict = dict(zip(self.column_names, row)) if isinstance(row, (list, tuple)) else row
score = row_dict.get("score") or (
row[-1] if isinstance(row, (list, tuple)) and len(row) > len(self.column_names) else None
)
payload = {k: row_dict.get(k) for k in self.column_names}
payload["data"] = payload.get("memory", "")
memory_id = row_dict.get("memory_id") or row_dict.get("id")
memory_results.append(MemoryResult(id=memory_id, score=score, payload=payload))View on GitHub (pinned to 001c235229)
Solutions
- Compute the query embedding first and pass it: store.search(query=text, vectors=embedder.embed(text), top_k=5).
- Check the embedding result for None/empty before searching; treat an empty embedding as an upstream error.
- If you have no local embedder, configure embedding_model_endpoint_name on the store so text-only search works.
Example fix
# before
store.search(query="hello", vectors=None, top_k=5) # ValueError
# after
vec = embedder.embed("hello")
if not vec:
raise RuntimeError("embedding failed")
store.search(query="hello", vectors=vec, top_k=5) Defensive patterns
Strategy: validation
Validate before calling
def require_query_vector(vectors) -> list:
if not vectors or not isinstance(vectors, (list, tuple)) or not isinstance(vectors[0], (int, float)):
raise ValueError("a non-empty numeric query vector is required")
return list(vectors)
vec = embedder.embed(query_text)
if not vec:
raise RuntimeError("embedding produced no vector; check embedding provider")
results = store.search(query=query_text, vectors=vec, top_k=5) Type guard
def is_valid_query_vector(v) -> bool:
return isinstance(v, (list, tuple)) and len(v) > 0 and all(isinstance(x, (int, float)) for x in v) Prevention
- Treat an empty/None embedding as an upstream error; never pass it to search.
- Wrap embed+search in one function so vectors and query cannot get out of sync.
- If you only ever search by text, configure a model endpoint so text-only search is valid.
When it happens
Trigger: Calling search(query=..., vectors=None) on a DIRECT_ACCESS index, or search(vectors=[]) after an embedding call returned an empty list (e.g. embedding failure swallowed upstream).
Common situations: Embedding client returning None/[] on error and the value passed straight through; search invoked before embeddings are ready; default parameter vectors=None hit when caller only had text but store expects vectors.
Related errors
- ${label} dimension mismatch. Expected ${this.dimension}, got
- ${label} values must be finite numbers for Databricks vector
- Query text is required for Delta Sync Index with model endpo
- Unknown embedder provider: ${providerId}
- AWS Bedrock requires both awsAccessKeyId and awsSecretAccess
AI-assisted analysis of mem0ai/mem0@001c235229 (2026-08-15).
Data as JSON: /api/errors/85cff79bda7a4646.
Report an issue: GitHub.