mirror of
https://github.com/qdrant/qdrant.git
synced 2026-07-23 11:11:00 -05:00
* [manual] make untagged enum for consistent API for FeedbackStrategy * add #[validate(nested)] --------- Co-authored-by: Luis Cossío <luis.cossio@outlook.com>
125 lines
4.2 KiB
Python
125 lines
4.2 KiB
Python
import pytest
|
|
|
|
from .helpers.collection_setup import basic_collection_setup, drop_collection
|
|
from .helpers.helpers import request_with_validation
|
|
|
|
|
|
@pytest.fixture(autouse=True, scope="module")
|
|
def setup(on_disk_vectors, collection_name):
|
|
basic_collection_setup(collection_name=collection_name, on_disk_vectors=on_disk_vectors)
|
|
yield
|
|
drop_collection(collection_name=collection_name)
|
|
|
|
|
|
def test_validations(collection_name):
|
|
response = request_with_validation(
|
|
api="/collections/{collection_name}/points/query",
|
|
method="POST",
|
|
path_params={"collection_name": collection_name},
|
|
body={
|
|
"query": {
|
|
"relevance_feedback": {
|
|
"target": [0.1, 0.2, 0.3, 0.4],
|
|
"feedback": [ {"example": 10000, "score": 0.85} ],
|
|
"strategy": {
|
|
"naive": {
|
|
"a": 0.12,
|
|
"b": 1.25,
|
|
"c": 0.99
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
)
|
|
assert not response.ok, response.text
|
|
assert response.json()["status"]["error"] == "Not found: No point with id 10000 found"
|
|
|
|
response = request_with_validation(
|
|
api="/collections/{collection_name}/points/query",
|
|
method="POST",
|
|
path_params={"collection_name": collection_name},
|
|
body={
|
|
"query": {
|
|
"relevance_feedback": {
|
|
"target": [0.1, 0.2, 0.3, 0.4],
|
|
"feedback": [ ],
|
|
"strategy": {
|
|
"naive": {
|
|
"a": 0.12,
|
|
"b": 1.25,
|
|
"c": 0.99
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
)
|
|
assert not response.ok, response.text
|
|
assert "feedback elements must be non-empty" in response.json()["status"]["error"]
|
|
|
|
response = request_with_validation(
|
|
api="/collections/{collection_name}/points/query",
|
|
method="POST",
|
|
path_params={"collection_name": collection_name},
|
|
body={
|
|
"query": {
|
|
"relevance_feedback": {
|
|
"target": [0.1, 0.2, 0.3, 0.4],
|
|
"feedback": [ {"example": 1, "score": 0.85} ],
|
|
"strategy": {
|
|
"naive": {
|
|
"a": 0.12,
|
|
"b": -1.0,
|
|
"c": 0.99
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
)
|
|
assert not response.ok, response.text
|
|
assert response.json()["status"]["error"] == "Validation error in JSON body: [internal.query.relevance_feedback.strategy.naive.b: value -1.0 invalid, must be 0.0 or larger]"
|
|
|
|
|
|
def test_feedback_pair_requirement(collection_name):
|
|
response = request_with_validation(
|
|
api="/collections/{collection_name}/points/query",
|
|
method="POST",
|
|
path_params={"collection_name": collection_name},
|
|
body={
|
|
"query": {
|
|
"relevance_feedback": {
|
|
"target": [0.1, 0.2, 0.3, 0.4],
|
|
"feedback": [ {"example": [0.42, 0.42, 0.42, 0.42], "score": 0.85} ],
|
|
"strategy": {
|
|
"naive": {
|
|
"a": 1.0, # identity value for score boosting
|
|
"b": 100.0, # unused without feedback pairs
|
|
"c": 100.0 # unused without feedback pairs
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"limit": 3
|
|
},
|
|
)
|
|
assert response.ok, response.text
|
|
feedback_results = response.json()["result"]
|
|
|
|
response = request_with_validation(
|
|
api="/collections/{collection_name}/points/query",
|
|
method="POST",
|
|
path_params={"collection_name": collection_name},
|
|
body={
|
|
"query": {
|
|
"nearest": [0.1, 0.2, 0.3, 0.4],
|
|
},
|
|
"limit": 3
|
|
},
|
|
)
|
|
assert response.ok, response.text
|
|
query_results = response.json()["result"]
|
|
|
|
assert feedback_results == query_results
|