Skip to content

Commit c396cb5

Browse files
committed
chore!: qdrant - drop Python 3.9 and use X|Y typing
1 parent defdf6d commit c396cb5

5 files changed

Lines changed: 136 additions & 142 deletions

File tree

integrations/qdrant/pyproject.toml

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ name = "qdrant-haystack"
77
dynamic = ["version"]
88
description = 'An integration of Qdrant ANN vector database backend with Haystack'
99
readme = "README.md"
10-
requires-python = ">=3.9"
10+
requires-python = ">=3.10"
1111
license = "Apache-2.0"
1212
keywords = []
1313
authors = [
@@ -18,15 +18,14 @@ classifiers = [
1818
"License :: OSI Approved :: Apache Software License",
1919
"Development Status :: 4 - Beta",
2020
"Programming Language :: Python",
21-
"Programming Language :: Python :: 3.9",
2221
"Programming Language :: Python :: 3.10",
2322
"Programming Language :: Python :: 3.11",
2423
"Programming Language :: Python :: 3.12",
2524
"Programming Language :: Python :: 3.13",
2625
"Programming Language :: Python :: Implementation :: CPython",
2726
"Programming Language :: Python :: Implementation :: PyPy",
2827
]
29-
dependencies = ["haystack-ai>=2.11.0", "qdrant-client>=1.12.0"]
28+
dependencies = ["haystack-ai>=2.22.0", "qdrant-client>=1.12.0"]
3029

3130
[project.urls]
3231
Source = "https://github.com/deepset-ai/haystack-core-integrations"
@@ -80,7 +79,6 @@ disallow_incomplete_defs = true
8079

8180

8281
[tool.ruff]
83-
target-version = "py39"
8482
line-length = 120
8583

8684
[tool.ruff.lint]
@@ -132,10 +130,6 @@ ignore = [
132130
# Ignore assertions
133131
"S101",
134132
]
135-
unfixable = [
136-
# Don't touch unused imports
137-
"F401",
138-
]
139133

140134
[tool.ruff.lint.flake8-tidy-imports]
141135
ban-relative-imports = "parents"

integrations/qdrant/src/haystack_integrations/components/retrievers/qdrant/retriever.py

Lines changed: 56 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Any, Optional, Union
1+
from typing import Any
22

33
from haystack import Document, component, default_from_dict, default_to_dict
44
from haystack.dataclasses.sparse_embedding import SparseEmbedding
@@ -43,14 +43,14 @@ class QdrantEmbeddingRetriever:
4343
def __init__(
4444
self,
4545
document_store: QdrantDocumentStore,
46-
filters: Optional[Union[dict[str, Any], models.Filter]] = None,
46+
filters: dict[str, Any] | models.Filter | None = None,
4747
top_k: int = 10,
4848
scale_score: bool = False,
4949
return_embedding: bool = False,
50-
filter_policy: Union[str, FilterPolicy] = FilterPolicy.REPLACE,
51-
score_threshold: Optional[float] = None,
52-
group_by: Optional[str] = None,
53-
group_size: Optional[int] = None,
50+
filter_policy: str | FilterPolicy = FilterPolicy.REPLACE,
51+
score_threshold: float | None = None,
52+
group_by: str | None = None,
53+
group_size: int | None = None,
5454
) -> None:
5555
"""
5656
Create a QdrantEmbeddingRetriever component.
@@ -134,13 +134,13 @@ def from_dict(cls, data: dict[str, Any]) -> "QdrantEmbeddingRetriever":
134134
def run(
135135
self,
136136
query_embedding: list[float],
137-
filters: Optional[Union[dict[str, Any], models.Filter]] = None,
138-
top_k: Optional[int] = None,
139-
scale_score: Optional[bool] = None,
140-
return_embedding: Optional[bool] = None,
141-
score_threshold: Optional[float] = None,
142-
group_by: Optional[str] = None,
143-
group_size: Optional[int] = None,
137+
filters: dict[str, Any] | models.Filter | None = None,
138+
top_k: int | None = None,
139+
scale_score: bool | None = None,
140+
return_embedding: bool | None = None,
141+
score_threshold: float | None = None,
142+
group_by: str | None = None,
143+
group_size: int | None = None,
144144
) -> dict[str, list[Document]]:
145145
"""
146146
Run the Embedding Retriever on the given input data.
@@ -189,13 +189,13 @@ def run(
189189
async def run_async(
190190
self,
191191
query_embedding: list[float],
192-
filters: Optional[Union[dict[str, Any], models.Filter]] = None,
193-
top_k: Optional[int] = None,
194-
scale_score: Optional[bool] = None,
195-
return_embedding: Optional[bool] = None,
196-
score_threshold: Optional[float] = None,
197-
group_by: Optional[str] = None,
198-
group_size: Optional[int] = None,
192+
filters: dict[str, Any] | models.Filter | None = None,
193+
top_k: int | None = None,
194+
scale_score: bool | None = None,
195+
return_embedding: bool | None = None,
196+
score_threshold: float | None = None,
197+
group_by: str | None = None,
198+
group_size: int | None = None,
199199
) -> dict[str, list[Document]]:
200200
"""
201201
Asynchronously run the Embedding Retriever on the given input data.
@@ -271,14 +271,14 @@ class QdrantSparseEmbeddingRetriever:
271271
def __init__(
272272
self,
273273
document_store: QdrantDocumentStore,
274-
filters: Optional[Union[dict[str, Any], models.Filter]] = None,
274+
filters: dict[str, Any] | models.Filter | None = None,
275275
top_k: int = 10,
276276
scale_score: bool = False,
277277
return_embedding: bool = False,
278-
filter_policy: Union[str, FilterPolicy] = FilterPolicy.REPLACE,
279-
score_threshold: Optional[float] = None,
280-
group_by: Optional[str] = None,
281-
group_size: Optional[int] = None,
278+
filter_policy: str | FilterPolicy = FilterPolicy.REPLACE,
279+
score_threshold: float | None = None,
280+
group_by: str | None = None,
281+
group_size: int | None = None,
282282
) -> None:
283283
"""
284284
Create a QdrantSparseEmbeddingRetriever component.
@@ -362,13 +362,13 @@ def from_dict(cls, data: dict[str, Any]) -> "QdrantSparseEmbeddingRetriever":
362362
def run(
363363
self,
364364
query_sparse_embedding: SparseEmbedding,
365-
filters: Optional[Union[dict[str, Any], models.Filter]] = None,
366-
top_k: Optional[int] = None,
367-
scale_score: Optional[bool] = None,
368-
return_embedding: Optional[bool] = None,
369-
score_threshold: Optional[float] = None,
370-
group_by: Optional[str] = None,
371-
group_size: Optional[int] = None,
365+
filters: dict[str, Any] | models.Filter | None = None,
366+
top_k: int | None = None,
367+
scale_score: bool | None = None,
368+
return_embedding: bool | None = None,
369+
score_threshold: float | None = None,
370+
group_by: str | None = None,
371+
group_size: int | None = None,
372372
) -> dict[str, list[Document]]:
373373
"""
374374
Run the Sparse Embedding Retriever on the given input data.
@@ -422,13 +422,13 @@ def run(
422422
async def run_async(
423423
self,
424424
query_sparse_embedding: SparseEmbedding,
425-
filters: Optional[Union[dict[str, Any], models.Filter]] = None,
426-
top_k: Optional[int] = None,
427-
scale_score: Optional[bool] = None,
428-
return_embedding: Optional[bool] = None,
429-
score_threshold: Optional[float] = None,
430-
group_by: Optional[str] = None,
431-
group_size: Optional[int] = None,
425+
filters: dict[str, Any] | models.Filter | None = None,
426+
top_k: int | None = None,
427+
scale_score: bool | None = None,
428+
return_embedding: bool | None = None,
429+
score_threshold: float | None = None,
430+
group_by: str | None = None,
431+
group_size: int | None = None,
432432
) -> dict[str, list[Document]]:
433433
"""
434434
Asynchronously run the Sparse Embedding Retriever on the given input data.
@@ -515,13 +515,13 @@ class QdrantHybridRetriever:
515515
def __init__(
516516
self,
517517
document_store: QdrantDocumentStore,
518-
filters: Optional[Union[dict[str, Any], models.Filter]] = None,
518+
filters: dict[str, Any] | models.Filter | None = None,
519519
top_k: int = 10,
520520
return_embedding: bool = False,
521-
filter_policy: Union[str, FilterPolicy] = FilterPolicy.REPLACE,
522-
score_threshold: Optional[float] = None,
523-
group_by: Optional[str] = None,
524-
group_size: Optional[int] = None,
521+
filter_policy: str | FilterPolicy = FilterPolicy.REPLACE,
522+
score_threshold: float | None = None,
523+
group_by: str | None = None,
524+
group_size: int | None = None,
525525
) -> None:
526526
"""
527527
Create a QdrantHybridRetriever component.
@@ -600,12 +600,12 @@ def run(
600600
self,
601601
query_embedding: list[float],
602602
query_sparse_embedding: SparseEmbedding,
603-
filters: Optional[Union[dict[str, Any], models.Filter]] = None,
604-
top_k: Optional[int] = None,
605-
return_embedding: Optional[bool] = None,
606-
score_threshold: Optional[float] = None,
607-
group_by: Optional[str] = None,
608-
group_size: Optional[int] = None,
603+
filters: dict[str, Any] | models.Filter | None = None,
604+
top_k: int | None = None,
605+
return_embedding: bool | None = None,
606+
score_threshold: float | None = None,
607+
group_by: str | None = None,
608+
group_size: int | None = None,
609609
) -> dict[str, list[Document]]:
610610
"""
611611
Run the Sparse Embedding Retriever on the given input data.
@@ -660,12 +660,12 @@ async def run_async(
660660
self,
661661
query_embedding: list[float],
662662
query_sparse_embedding: SparseEmbedding,
663-
filters: Optional[Union[dict[str, Any], models.Filter]] = None,
664-
top_k: Optional[int] = None,
665-
return_embedding: Optional[bool] = None,
666-
score_threshold: Optional[float] = None,
667-
group_by: Optional[str] = None,
668-
group_size: Optional[int] = None,
663+
filters: dict[str, Any] | models.Filter | None = None,
664+
top_k: int | None = None,
665+
return_embedding: bool | None = None,
666+
score_threshold: float | None = None,
667+
group_by: str | None = None,
668+
group_size: int | None = None,
669669
) -> dict[str, list[Document]]:
670670
"""
671671
Asynchronously run the Sparse Embedding Retriever on the given input data.

integrations/qdrant/src/haystack_integrations/document_stores/qdrant/converters.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import uuid
2-
from typing import Union
32

43
from haystack import logging
54
from haystack.dataclasses import Document
@@ -58,7 +57,7 @@ def convert_id(_id: str) -> str:
5857
return uuid.uuid5(UUID_NAMESPACE, _id).hex
5958

6059

61-
QdrantPoint = Union[rest.ScoredPoint, rest.Record]
60+
QdrantPoint = rest.ScoredPoint | rest.Record
6261

6362

6463
def convert_qdrant_point_to_haystack_document(point: QdrantPoint, use_sparse_embeddings: bool) -> Document:

0 commit comments

Comments
 (0)