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

  1. Compute the query embedding first and pass it: store.search(query=text, vectors=embedder.embed(text), top_k=5).
  2. Check the embedding result for None/empty before searching; treat an empty embedding as an upstream error.
  3. 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

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


AI-assisted analysis of mem0ai/mem0@001c235229 (2026-08-15). Data as JSON: /api/errors/85cff79bda7a4646. Report an issue: GitHub.