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
query() rejects an empty query_embeddings list ([]) before issuing any database work. A batch query with zero vectors has no meaningful result, and returning an empty QueryResult would silently hide caller bugs, so the backend fails fast.
Source
Thrown at mempalace/backends/pgvector.py:1086
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(
"pgvector 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,
)
self._ensure_open()
if not self._table_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
- Check for an empty query list before calling query() and skip or short-circuit.
- Fix the upstream embedding step so it cannot hand an empty batch to query().
- If the empty batch is legitimate, return [] results at your own layer instead of calling the backend.
Example fix
# before col.query(query_embeddings=embed(texts), n_results=5) # texts == [] # after results = col.query(query_embeddings=embed(texts), n_results=5) if texts else []
Defensive patterns
Strategy: validation
Validate before calling
results = col.query(query_embeddings=vecs, n_results=5) if vecs else []
Type guard
def is_non_empty_batch(v) -> bool:
return isinstance(v, (list, tuple)) and len(v) > 0 Try / catch
try:
col.query(query_embeddings=vecs, n_results=5)
except ValueError as e:
if "non-empty list" in str(e):
return []
raise Prevention
- Short-circuit empty user requests before embedding and querying.
- Assert len(texts) > 0 before batch-embedding.
When it happens
Trigger: Calling query(query_embeddings=[]) — typically because the caller batch-embedded an empty list of texts and passed the result straight through.
Common situations: Looping over user requests where one request contains zero queries; embedding-pipeline steps that return [] on empty input and are forwarded unconditionally.
Related errors
- {label} length {len(value)} does not match ids length {n}
- query requires query_embeddings
- content must be a non-empty string
- {type(self).name} does not advertise supports_namespace_isol
- operator {key!r} not supported by chroma backend
AI-assisted analysis of MemPalace/mempalace@06cb6987f0 (2026-08-15).
Data as JSON: /api/errors/b1ec65c2cef298a6.
Report an issue: GitHub.