Files
qdrant/tests/openapi/test_sparse_vector_validations.py
Tim Visée 6f4069e711 Preprocess query vectors, sort sparse vectors (#6895)
* Add test to assert behavior of unsorted sparse query

* Preprocess sparse vectors

* Fix typo
2025-07-17 16:11:44 +02:00

137 lines
4.0 KiB
Python

import pytest
from .helpers.collection_setup import drop_collection
from .helpers.helpers import request_with_validation
@pytest.fixture(autouse=True)
def setup(collection_name):
sparse_collection_setup(collection_name=collection_name)
yield
drop_collection(collection_name=collection_name)
def sparse_collection_setup(collection_name='test_collection'):
response = request_with_validation(
api='/collections/{collection_name}',
method="DELETE",
path_params={'collection_name': collection_name},
)
assert response.ok
response = request_with_validation(
api='/collections/{collection_name}',
method="PUT",
path_params={'collection_name': collection_name},
body={
"sparse_vectors": {
"text": { }
},
}
)
assert response.ok
response = request_with_validation(
api='/collections/{collection_name}',
method="GET",
path_params={'collection_name': collection_name},
)
assert response.ok
response = request_with_validation(
api='/collections/{collection_name}/points',
method="PUT",
path_params={'collection_name': collection_name},
query_params={'wait': 'true'},
body={
"points": [
{
"id": 1,
"vector": {
"text": {
"indices": [0, 2], "values": [0.1, 0.2],
}
}
},
{
"id": 2,
"vector": {
"text": {
"indices": [1, 3], "values": [0.3, 0.4],
}
}
},
{
"id": 3,
"vector": {
"text": {
"indices": [0, 1], "values": [0.5, 0.6],
}
}
},
]
}
)
assert response.ok
def test_sparse_vector_validations(collection_name):
response = request_with_validation(
api='/collections/{collection_name}/points',
method="PUT",
path_params={'collection_name': collection_name},
query_params={'wait': 'true'},
body={
"points": [
{
"id": 1,
"vector": {
"text": {"indices": [100, 500], "values": [0.9, 0.8, 0.5]}
}
},
]
}
)
assert not response.ok
assert 'Validation error' in response.json()["status"]["error"]
assert 'points[0].vector.?.values: Validation error: must be the same length as indices [{}]' in response.json()["status"]["error"]
response = request_with_validation(
api='/collections/{collection_name}/points',
method="PUT",
path_params={'collection_name': collection_name},
query_params={'wait': 'true'},
body={
"points": [
{
"id": 1,
"vector": {
"text": {"indices": [100, 500, 500], "values": [0.9, 0.8, 0.5]}
}
},
]
}
)
assert not response.ok
assert 'Validation error' in response.json()["status"]["error"]
assert 'points[0].vector.?.indices: Validation error: must be unique [{}]' in response.json()["status"]["error"]
def test_sorted_sparse_vector(collection_name):
response = request_with_validation(
api='/collections/{collection_name}/points/query',
method="POST",
path_params={'collection_name': collection_name},
body={
"query": {
"nearest": {"indices": [2, 0, 1], "values": [0.1, 0.2, 0.3]},
"mmr": {
"diversity": 0.5,
"candidates_limit": 10,
},
},
"using": "text"
}
)
assert response.ok