MemPalace/mempalace · error · ValueError
query input must be a non-empty list
Error message
query input must be a non-empty list
What it means
Raised by QdrantCollection.query() when query_embeddings is an empty list ([]). Distinguishing 'no embeddings given' (135) from 'empty list', this guard prevents a zero-query response whose shape (empty vs per-query lists) would be ambiguous downstream.
Source
Thrown at mempalace/backends/qdrant.py:960
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
- Skip the call when there is nothing to search: if not queries: return []
- Guard batch code: embeddings = [embed(q) for q in queries]; if embeddings: collection.query(query_embeddings=embeddings)
- Treat empty input as a legitimate no-op at the caller's boundary rather than an error
- Add a unit test for the empty-batch path so it stays a no-op
Example fix
# before results = collection.query(query_embeddings=[embedder.embed(q) for q in queries]) # queries=[] -> ValueError // after embeddings = [embedder.embed(q) for q in queries] results = collection.query(query_embeddings=embeddings) if embeddings else None
Defensive patterns
Strategy: validation
Validate before calling
if not query_embeddings:
return [] # empty batch of queries is a no-op Prevention
- Guard batch-search loops for empty query lists
- Unit-test the zero-query path as a no-op
When it happens
Trigger: Calling query(query_embeddings=[]) — typically batch-search code that maps a list of queries to embeddings and the input list was empty (e.g. searching for zero candidate re-ranking queries).
Common situations: A rerank/batch-search loop receiving an empty candidate set and still calling query; list comprehension over an empty query list producing []; upstream dedup/filtering that removed all queries.
Related errors
- query requires query_embeddings
- ChromaBackend has been closed
- documents length {len(documents)} does not match ids length
- metadatas length {len(metadatas)} does not match ids length
- embeddings length {len(embeddings)} does not match ids lengt
AI-assisted analysis of MemPalace/mempalace@06cb6987f0 (2026-08-15).
Data as JSON: /api/errors/e47d540c6bba4182.
Report an issue: GitHub.