MemPalace/mempalace · error · ValueError
query requires query_embeddings
Error message
query requires query_embeddings
What it means
PgVectorCollection.query() needs precomputed vectors because the backend stores and searches embeddings only; it has no embedder. If neither query_texts nor query_embeddings is supplied, the call is a programming error and raises this ValueError before any SQL runs.
Source
Thrown at mempalace/backends/pgvector.py:1084
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(
"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),View on GitHub (pinned to 06cb6987f0)
Solutions
- Pass query_embeddings=[vector] (list of 1D float lists) computed by your embedder.
- If you only have text, use the palace.get_collection() wrapper and pass query_texts instead.
- Guard the call: skip or early-return when the embeddings variable is None.
Example fix
# before
col.query(n_results=5, where=filters)
# after
col.query(query_embeddings=[embedder.embed("hello")], n_results=5, where=filters) Defensive patterns
Strategy: validation
Validate before calling
if not query_embeddings:
raise ValueError("cannot query without embeddings")
col.query(query_embeddings=query_embeddings, n_results=5) Type guard
def has_query_vectors(qe) -> bool:
return qe is not None and len(qe) > 0 and all(v is not None and len(v) > 0 for v in qe) Try / catch
try:
col.query(query_embeddings=vecs, n_results=5)
except ValueError as e:
if "query_embeddings" in str(e) or "non-empty" in str(e):
logger.warning("skipping query: no embeddings")
return None
raise Prevention
- Early-return when the embeddings variable is None or empty.
- Keep embedder output and query calls adjacent so one is never supplied without the other.
When it happens
Trigger: Calling query() with no arguments, or passing only n_results/where/include and forgetting the vectors: col.query(n_results=5, where={"wing": "work"}).
Common situations: Refactoring a call site so the embeddings variable becomes None under some branch; optional-chaining bugs where query_embeddings=query_embs is skipped when query_embs is None.
Related errors
- {label} length {len(value)} does not match ids length {n}
- query input must be a non-empty list
- {type(self).name} does not advertise supports_namespace_isol
- operator {key!r} not supported by chroma backend
- ChromaBackend has been closed
AI-assisted analysis of MemPalace/mempalace@06cb6987f0 (2026-08-15).
Data as JSON: /api/errors/12713670d2b35a39.
Report an issue: GitHub.