Legacy Qdrant Vector Store Returns Raw Distances Instead Of Normalized Relevance Scores
The legacy Qdrant class overrides similarity_search_with_relevance_scores and asimilarity_search_with_relevance_scores to return raw distance scores, bypassing the base VectorStore normalization pipeline. Removing these overrides restores correct [0,1] relevance scores.
In langchain_qdrant/vectorstores.py, the legacy Qdrant class overrides _similarity_search_with_relevance_scores and _asimilarity_search_with_relevance_scores to directly call similarity_search_with_score and asimilarity_search_with_score, thereby bypassing _select_relevance_score_fn which is responsible for converting raw distances (e.g., Euclidean, Cosine) into normalized relevance scores.
```python
from langchain_core.embeddings import FakeEmbeddings
from langchain_qdrant import Qdrant
texts = ["foo", "bar", "baz"]
docsearch = Qdrant.from_texts(
texts,
FakeEmbeddings(size=10),
location=":memory:",
distance_func="Euclid",
)
results = docsearch.similarity_search_with_relevance_scores("foo", k=3)
for doc, score in results:
print(doc.page_content, score)
# Expected: exact match relevance score 1.0, but receives raw distance 0.0
```
Removing these overridden methods from the legacy Qdrant class allows the inherited VectorStore._similarity_search_with_relevance_scores and _asimilarity_search_with_relevance_scores to run, which call similarity_search_with_score and then apply the distance-specific normalization function returned by _select_relevance_score_fn. This produces scores in the expected [0,1] range.
Edge Case Audit
This change alters the meaning of returned scores for users of the legacy Qdrant class. Any code that previously expected raw distances from similarity_search_with_relevance_scores will now receive normalized scores; to obtain raw distances, use similarity_search_with_score directly. Rollback: re-add the removed methods or pin langchain-qdrant to the previous version. The new QdrantVectorStore class is unaffected.