MemPalace/mempalace · error · ValueError
query requires query_embeddings
Error message
query requires query_embeddings
What it means
Raised by QdrantCollection.query() when both query_texts is None and query_embeddings is None — i.e. the caller supplied no query at all. Since this backend cannot embed internally, embeddings are mandatory and cannot be inferred from text either.
Source
Thrown at mempalace/backends/qdrant.py:958
metadatas=outer_metas,
distances=outer_dists,
embeddings=outer_embeds if spec.embeddings else None,
)
def query(
self,
*,
query_texts=None,
query_embeddings=None,
n_results=10,
where=None,
where_document=None,
include=None,
) -> QueryResult:
if query_texts is not None:
raise ValueError("qdrant requires query_embeddings; use palace.get_collection wrapper")
if query_embeddings is None:
raise ValueError("query requires query_embeddings")
if not query_embeddings:
raise ValueError("query input must be a non-empty list")
_validate_where(where)
_validate_where(where_document)
if _requires_local_filter(where, where_document):
return self._query_local_exact(
query_embeddings=query_embeddings,
n_results=n_results,
where=where,
where_document=where_document,
include=include,
)
if not self._remote_exists():
if self._marker_exists():
raise CollectionNotInitializedError(self._collection_name)
return QueryResult.empty(
num_queries=len(query_embeddings),
embeddings_requested=bool(include and "embeddings" in include),View on GitHub (pinned to 06cb6987f0)
Solutions
- Short-circuit empty queries upstream: if not query: return [] before calling query()
- If embeddings were computed but lost, check for swallowed exceptions in the embed path (remove bare except)
- Pass query_embeddings=[embedder.embed(q)] for a single query (list of vectors, one per query)
- For text search use the palace wrapper, which validates text input before embedding
Example fix
# before
try:
qe = [embedder.embed(text)]
except Exception:
qe = None
collection.query(query_embeddings=qe) # None -> ValueError
// after
qe = [embedder.embed(text)] # let errors propagate
collection.query(query_embeddings=qe) Defensive patterns
Strategy: validation
Validate before calling
if query_embeddings is None:
query_embeddings = [embedder.embed(query_text)] Prevention
- Reject empty search input at the UI/service boundary
- Never swallow embedder exceptions into a None embeddings value
When it happens
Trigger: Calling query() with only n_results/where/include but no query input; a search function whose embedder call failed silently and passed None through; a UI layer where the empty-search-box case forwards None instead of short-circuiting.
Common situations: Empty user search input not guarded upstream; embedder exception swallowed by a broad except that sets embeddings=None; conditional code that skips embedding on an edge branch.
Related errors
- add ids must be unique
- update requires at least one of documents, metadatas, embedd
- {label} length {len(value)} does not match ids length {n}
- qdrant requires query_embeddings; use palace.get_collection
- query input must be a non-empty list
AI-assisted analysis of MemPalace/mempalace@06cb6987f0 (2026-08-15).
Data as JSON: /api/errors/7d7f599cfd7303ff.
Report an issue: GitHub.