From 233de3508f06ce6e360b50ff985c1137573eee2b Mon Sep 17 00:00:00 2001 From: Chris Coutinho Date: Thu, 20 Nov 2025 15:15:10 +0100 Subject: [PATCH] fix: Use empty SparseVector instead of None for placeholders MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Qdrant validation rejects None for sparse vectors in named vector dicts. Use models.SparseVector(indices=[], values=[]) instead to create valid empty sparse vectors for placeholder points. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- nextcloud_mcp_server/vector/placeholder.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/nextcloud_mcp_server/vector/placeholder.py b/nextcloud_mcp_server/vector/placeholder.py index eac10c1..fbbfacb 100644 --- a/nextcloud_mcp_server/vector/placeholder.py +++ b/nextcloud_mcp_server/vector/placeholder.py @@ -80,6 +80,12 @@ async def write_placeholder_point( # Create zero vectors zero_dense = [0.0] * dimension + # Create empty sparse vector for placeholders + # Use models.SparseVector with empty indices/values + from qdrant_client import models + + empty_sparse = models.SparseVector(indices=[], values=[]) + # Generate deterministic point ID point_id = _generate_placeholder_id(doc_type, doc_id) @@ -104,7 +110,7 @@ async def write_placeholder_point( id=point_id, vector={ "dense": zero_dense, - "sparse": None, # No sparse vector for placeholders + "sparse": empty_sparse, # Empty sparse vector for placeholders }, payload=payload, )