fix: harden qdrant payload and paging

This commit is contained in:
2026-08-08 17:48:56 +02:00
parent 7109ee15c4
commit f61648fb69
4 changed files with 206 additions and 11 deletions
+26 -9
View File
@@ -318,15 +318,32 @@ class QdrantVectorStore:
return result
def _scroll(self, must: list[dict]) -> list[dict]:
response = self._call(
"POST",
f"/collections/{self._collection}/points/scroll",
{"with_payload": True, "limit": 10000, "filter": {"must": must}},
)
points = response.get("result", {}).get("points")
if not isinstance(points, list):
raise VectorStoreError("Qdrant returned malformed scroll response")
return points
points: list[dict] = []
offset = None
seen_offsets = set()
while True:
response = self._call(
"POST",
f"/collections/{self._collection}/points/scroll",
{
"with_payload": True,
"limit": 10000,
"filter": {"must": must},
"offset": offset,
},
)
result = response.get("result", {})
page = result.get("points")
if not isinstance(page, list):
raise VectorStoreError("Qdrant returned malformed scroll response")
points.extend(page)
next_page_offset = result.get("next_page_offset")
if next_page_offset is None:
return points
if next_page_offset in seen_offsets:
raise VectorStoreError("Qdrant returned malformed scroll response")
seen_offsets.add(next_page_offset)
offset = next_page_offset
def _hit_from_point(self, point: dict) -> VectorHit:
payload = point.get("payload")
+1 -1
View File
@@ -30,6 +30,7 @@ def qdrant_semantic_kind(kind: str) -> str:
def qdrant_payload(record: VectorRecord, *, content_hash: str, workspace_id: str) -> dict:
semantic_kind = qdrant_semantic_kind(record.kind)
return {
**record.metadata,
"workspace_id": workspace_id,
"kind": semantic_kind,
"record_kind": record.kind,
@@ -38,7 +39,6 @@ def qdrant_payload(record: VectorRecord, *, content_hash: str, workspace_id: str
"title": record.title,
"content": record.content,
"content_hash": content_hash,
**record.metadata,
}