fix: make qdrant vector hit parsing total

This commit is contained in:
2026-08-11 08:40:53 +02:00
parent 2f3325c03f
commit f7b442be61
2 changed files with 83 additions and 3 deletions
+70
View File
@@ -892,3 +892,73 @@ def test_scroll_accepts_null_or_missing_terminal_offset(next_page_offset):
expected_dimension=1024, request=request,
)
assert store.existing_hashes("memory", ["memory"]) == {}
_QUERY_PAYLOAD = {
"record_key": "memory:1",
"record_kind": "memory",
"kind": "memory",
"ref": "ref:memory:1",
"title": "title:memory:1",
"content": "content:memory:1",
}
def _query_response_store(points):
fake = FakeQdrantHttp()
fake.collection = {"vectors": {"size": 1024, "distance": "Cosine"}}
fake.payload_indexes = set(_REQUIRED_INDEXES)
original = fake.request
def request(method, url, **kwargs):
if method == "POST" and url.endswith("/points/query"):
return FakeResponse(200, {"result": {"points": points}})
return original(method, url, **kwargs)
store = _store(fake)
store._request = request
return store
@pytest.mark.parametrize("leaf", [
"record_key", "record_kind", "kind", "ref", "title", "content",
])
def test_query_rejects_non_string_required_vector_hit_payload_leaves(leaf):
payload = {**_QUERY_PAYLOAD, leaf: 1}
store = _query_response_store([{"id": "p1", "score": 0.9, "payload": payload}])
with pytest.raises(VectorResponseError):
store.search(["memory"], [0.2] * 1024, limit=1, kinds=["memory"])
@pytest.mark.parametrize("leaf", [
"record_key", "record_kind", "kind", "ref", "title", "content",
])
def test_query_rejects_missing_required_vector_hit_payload_leaves(leaf):
payload = {key: value for key, value in _QUERY_PAYLOAD.items() if key != leaf}
store = _query_response_store([{"id": "p1", "score": 0.9, "payload": payload}])
with pytest.raises(VectorResponseError):
store.search(["memory"], [0.2] * 1024, limit=1, kinds=["memory"])
def test_query_rejects_heterogeneous_record_keys_before_sorting_hits():
store = _query_response_store([
{"id": "p1", "score": 0.9, "payload": _QUERY_PAYLOAD},
{
"id": "p2",
"score": 0.8,
"payload": {**_QUERY_PAYLOAD, "record_key": 2},
},
])
with pytest.raises(VectorResponseError):
store.search(["memory"], [0.2] * 1024, limit=2, kinds=["memory"])
@pytest.mark.parametrize("score", [True, False, 10**1000, float("nan"), float("inf"), float("-inf")])
def test_query_rejects_scores_that_cannot_be_finite_float(score):
store = _query_response_store([{"id": "p1", "score": score, "payload": _QUERY_PAYLOAD}])
with pytest.raises(VectorResponseError):
store.search(["memory"], [0.2] * 1024, limit=1, kinds=["memory"])