{"record":{"id":"b1ec65c2cef298a6","repo":"MemPalace/mempalace","slug":"query-input-must-be-a-non-empty-list-b1ec65","errorCode":null,"errorMessage":"query input must be a non-empty list","messagePattern":"query input must be a non-empty list","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"mempalace/backends/pgvector.py","lineNumber":1086,"sourceCode":"\n    def query(\n        self,\n        *,\n        query_texts=None,\n        query_embeddings=None,\n        n_results=10,\n        where=None,\n        where_document=None,\n        include=None,\n    ) -> QueryResult:\n        if query_texts is not None:\n            raise ValueError(\n                \"pgvector requires query_embeddings; use palace.get_collection wrapper\"\n            )\n        if query_embeddings is None:\n            raise ValueError(\"query requires query_embeddings\")\n        if not query_embeddings:\n            raise ValueError(\"query input must be a non-empty list\")\n        _validate_where(where)\n        _validate_where(where_document)\n        if _requires_local_filter(where, where_document):\n            return self._query_local_exact(\n                query_embeddings=query_embeddings,\n                n_results=n_results,\n                where=where,\n                where_document=where_document,\n                include=include,\n            )\n        self._ensure_open()\n        if not self._table_exists():\n            if self._marker_exists():\n                raise CollectionNotInitializedError(self._collection_name)\n            return QueryResult.empty(\n                num_queries=len(query_embeddings),\n                embeddings_requested=bool(include and \"embeddings\" in include),\n            )","sourceCodeStart":1068,"sourceCodeEnd":1104,"githubUrl":"https://github.com/MemPalace/mempalace/blob/06cb6987f02610784fefbad4b2bd5d026d164ba6/mempalace/backends/pgvector.py#L1068-L1104","documentation":"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.","triggerScenarios":"Calling query(query_embeddings=[]) — typically because the caller batch-embedded an empty list of texts and passed the result straight through.","commonSituations":"Looping over user requests where one request contains zero queries; embedding-pipeline steps that return [] on empty input and are forwarded unconditionally.","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."],"exampleFix":"# before\ncol.query(query_embeddings=embed(texts), n_results=5)  # texts == []\n\n# after\nresults = col.query(query_embeddings=embed(texts), n_results=5) if texts else []","handlingStrategy":"validation","validationCode":"results = col.query(query_embeddings=vecs, n_results=5) if vecs else []","typeGuard":"def is_non_empty_batch(v) -> bool:\n    return isinstance(v, (list, tuple)) and len(v) > 0","tryCatchPattern":"try:\n    col.query(query_embeddings=vecs, n_results=5)\nexcept ValueError as e:\n    if \"non-empty list\" in str(e):\n        return []\n    raise","preventionTips":["Short-circuit empty user requests before embedding and querying.","Assert len(texts) > 0 before batch-embedding."],"tags":["pgvector","validation","empty-input"],"backgroundTag":null,"analyzedSha":"06cb6987f02610784fefbad4b2bd5d026d164ba6","analyzedAt":"2026-08-15T03:03:36.213Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}