qdrant-haystack 13.0.0__tar.gz → 13.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/CHANGELOG.md +11 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/PKG-INFO +1 -1
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/src/haystack_integrations/document_stores/qdrant/document_store.py +11 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/tests/test_dict_converters.py +3 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/tests/test_document_store.py +26 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/tests/test_document_store_async.py +17 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/tests/test_embedding_retriever.py +1 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/tests/test_hybrid_retriever.py +1 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/tests/test_sparse_embedding_retriever.py +1 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/.gitignore +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/LICENSE.txt +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/README.md +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/examples/embedding_retrieval.py +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/pydoc/config_docusaurus.yml +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/pyproject.toml +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/src/haystack_integrations/components/retrievers/py.typed +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/src/haystack_integrations/components/retrievers/qdrant/__init__.py +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/src/haystack_integrations/components/retrievers/qdrant/retriever.py +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/src/haystack_integrations/document_stores/py.typed +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/src/haystack_integrations/document_stores/qdrant/__init__.py +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/src/haystack_integrations/document_stores/qdrant/converters.py +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/src/haystack_integrations/document_stores/qdrant/filters.py +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/src/haystack_integrations/document_stores/qdrant/migrate_to_sparse.py +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/tests/__init__.py +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/tests/conftest.py +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/tests/test_converters.py +0 -0
- {qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/tests/test_filters.py +0 -0
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [integrations/qdrant-v13.0.0] - 2026-10-16
|
|
4
|
+
|
|
5
|
+
### 🧪 Testing
|
|
6
|
+
|
|
7
|
+
- Test compatible integrations with Python 3.15; update pyproject (#4104)
|
|
8
|
+
|
|
9
|
+
### 🧹 Chores
|
|
10
|
+
|
|
11
|
+
- [**breaking**] Drop Python 3.10 support (#4105)
|
|
12
|
+
|
|
13
|
+
|
|
3
14
|
## [integrations/qdrant-v12.0.0] - 2026-10-09
|
|
4
15
|
|
|
5
16
|
### 🐛 Bug Fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: qdrant-haystack
|
|
3
|
-
Version: 13.
|
|
3
|
+
Version: 13.1.0
|
|
4
4
|
Summary: An integration of Qdrant ANN vector database backend with Haystack
|
|
5
5
|
Project-URL: Source, https://github.com/deepset-ai/haystack-core-integrations
|
|
6
6
|
Project-URL: Documentation, https://github.com/deepset-ai/haystack-core-integrations/blob/main/integrations/qdrant/README.md
|
|
@@ -150,6 +150,7 @@ class QdrantDocumentStore:
|
|
|
150
150
|
write_batch_size: int = 100,
|
|
151
151
|
scroll_size: int = 10_000,
|
|
152
152
|
payload_fields_to_index: list[dict] | None = None,
|
|
153
|
+
client_kwargs: dict[str, Any] | None = None,
|
|
153
154
|
) -> None:
|
|
154
155
|
"""
|
|
155
156
|
Initializes a QdrantDocumentStore.
|
|
@@ -236,6 +237,14 @@ class QdrantDocumentStore:
|
|
|
236
237
|
The scroll size for reading documents.
|
|
237
238
|
:param payload_fields_to_index:
|
|
238
239
|
List of payload fields to index.
|
|
240
|
+
:param client_kwargs:
|
|
241
|
+
Additional keyword arguments passed to both `QdrantClient` and `AsyncQdrantClient`.
|
|
242
|
+
These arguments take precedence over named client parameters in case of overlap.
|
|
243
|
+
Serialized as-is by `to_dict()`: callbacks and `httpx.Limits` may not serialize, and
|
|
244
|
+
authentication headers will appear in plain text in pipeline YAML.
|
|
245
|
+
The same arguments are used for sync and async clients. For example, an async
|
|
246
|
+
`auth_token_provider` is also passed to `QdrantClient`, where it may not work with
|
|
247
|
+
synchronous requests.
|
|
239
248
|
"""
|
|
240
249
|
|
|
241
250
|
self._client: qdrant_client.QdrantClient | None = None
|
|
@@ -255,6 +264,7 @@ class QdrantDocumentStore:
|
|
|
255
264
|
self.path = path
|
|
256
265
|
self.force_disable_check_same_thread = force_disable_check_same_thread
|
|
257
266
|
self.metadata = metadata or {}
|
|
267
|
+
self.client_kwargs = dict(client_kwargs or {})
|
|
258
268
|
|
|
259
269
|
# Store the Qdrant collection specific attributes
|
|
260
270
|
self.shard_number = shard_number
|
|
@@ -2485,6 +2495,7 @@ class QdrantDocumentStore:
|
|
|
2485
2495
|
# when using a hosted Qdrant service, which means running to_dict() exposes the api key.
|
|
2486
2496
|
"metadata": {**self.metadata},
|
|
2487
2497
|
"force_disable_check_same_thread": self.force_disable_check_same_thread,
|
|
2498
|
+
**{key: {**value} if isinstance(value, dict) else value for key, value in self.client_kwargs.items()},
|
|
2488
2499
|
}
|
|
2489
2500
|
|
|
2490
2501
|
def _prepare_collection_config(
|
|
@@ -43,6 +43,7 @@ def test_to_dict():
|
|
|
43
43
|
"write_batch_size": 100,
|
|
44
44
|
"scroll_size": 10000,
|
|
45
45
|
"payload_fields_to_index": None,
|
|
46
|
+
"client_kwargs": {},
|
|
46
47
|
},
|
|
47
48
|
}
|
|
48
49
|
|
|
@@ -73,6 +74,7 @@ def test_from_dict():
|
|
|
73
74
|
"write_batch_size": 1000,
|
|
74
75
|
"scroll_size": 10000,
|
|
75
76
|
"payload_fields_to_index": None,
|
|
77
|
+
"client_kwargs": {"check_compatibility": False},
|
|
76
78
|
},
|
|
77
79
|
}
|
|
78
80
|
)
|
|
@@ -102,5 +104,6 @@ def test_from_dict():
|
|
|
102
104
|
document_store.scroll_size == 10000,
|
|
103
105
|
document_store.api_key == Secret.from_env_var("ENV_VAR", strict=False),
|
|
104
106
|
document_store.payload_fields_to_index is None,
|
|
107
|
+
document_store.client_kwargs == {"check_compatibility": False},
|
|
105
108
|
]
|
|
106
109
|
)
|
|
@@ -49,6 +49,7 @@ class TestQdrantDocumentStoreUnit:
|
|
|
49
49
|
wait_result_from_api=True,
|
|
50
50
|
use_sparse_embeddings=False,
|
|
51
51
|
api_key=Secret.from_env_var("QDRANT_API_KEY"),
|
|
52
|
+
client_kwargs={"check_compatibility": False},
|
|
52
53
|
)
|
|
53
54
|
expected_dict = {
|
|
54
55
|
"type": "haystack_integrations.document_stores.qdrant.document_store.QdrantDocumentStore",
|
|
@@ -91,6 +92,7 @@ class TestQdrantDocumentStoreUnit:
|
|
|
91
92
|
"write_batch_size": 100,
|
|
92
93
|
"scroll_size": 10000,
|
|
93
94
|
"payload_fields_to_index": None,
|
|
95
|
+
"client_kwargs": {"check_compatibility": False},
|
|
94
96
|
},
|
|
95
97
|
}
|
|
96
98
|
assert doc_store.to_dict() == expected_dict
|
|
@@ -347,6 +349,30 @@ class TestQdrantDocumentStoreUnit:
|
|
|
347
349
|
params["metadata"]["added"] = "x"
|
|
348
350
|
assert metadata == {"key": "value"}
|
|
349
351
|
|
|
352
|
+
def test_prepare_client_params_does_not_mutate_client_kwargs(self):
|
|
353
|
+
client_kwargs = {"grpc_options": {"custom_option": "value"}}
|
|
354
|
+
document_store = QdrantDocumentStore(location=":memory:", client_kwargs=client_kwargs)
|
|
355
|
+
params = document_store._prepare_client_params()
|
|
356
|
+
params["grpc_options"]["grpc.primary_user_agent"] = "qdrant-client"
|
|
357
|
+
|
|
358
|
+
assert client_kwargs == {"grpc_options": {"custom_option": "value"}}
|
|
359
|
+
assert document_store.to_dict()["init_parameters"]["client_kwargs"] == client_kwargs
|
|
360
|
+
|
|
361
|
+
@pytest.mark.parametrize("port", [6333, 7333])
|
|
362
|
+
def test_client_kwargs_are_forwarded_with_client_kwargs_taking_precedence(self, port):
|
|
363
|
+
document_store = QdrantDocumentStore(
|
|
364
|
+
location=":memory:", port=port, client_kwargs={"check_compatibility": False, "port": 8333}
|
|
365
|
+
)
|
|
366
|
+
|
|
367
|
+
with (
|
|
368
|
+
patch("haystack_integrations.document_stores.qdrant.document_store.qdrant_client.QdrantClient") as client,
|
|
369
|
+
patch.object(document_store, "_set_up_collection"),
|
|
370
|
+
):
|
|
371
|
+
document_store._initialize_client()
|
|
372
|
+
|
|
373
|
+
assert client.call_args.kwargs["check_compatibility"] is False
|
|
374
|
+
assert client.call_args.kwargs["port"] == 8333
|
|
375
|
+
|
|
350
376
|
def test_get_batches_from_generator(self):
|
|
351
377
|
batches = list(get_batches_from_generator([1, 2, 3, 4, 5], 2))
|
|
352
378
|
assert batches == [(1, 2), (3, 4), (5,)]
|
|
@@ -35,6 +35,23 @@ from haystack_integrations.document_stores.qdrant.document_store import (
|
|
|
35
35
|
|
|
36
36
|
@pytest.mark.asyncio
|
|
37
37
|
class TestQdrantDocumentStoreAsyncUnit:
|
|
38
|
+
@pytest.mark.parametrize("port", [6333, 7333])
|
|
39
|
+
async def test_client_kwargs_are_forwarded_async(self, port):
|
|
40
|
+
document_store = QdrantDocumentStore(
|
|
41
|
+
location=":memory:", port=port, client_kwargs={"check_compatibility": False, "port": 8333}
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
with (
|
|
45
|
+
patch(
|
|
46
|
+
"haystack_integrations.document_stores.qdrant.document_store.qdrant_client.AsyncQdrantClient"
|
|
47
|
+
) as client,
|
|
48
|
+
patch.object(document_store, "_set_up_collection_async", new_callable=AsyncMock),
|
|
49
|
+
):
|
|
50
|
+
await document_store._initialize_async_client()
|
|
51
|
+
|
|
52
|
+
assert client.call_args.kwargs["check_compatibility"] is False
|
|
53
|
+
assert client.call_args.kwargs["port"] == 8333
|
|
54
|
+
|
|
38
55
|
async def test_query_hybrid_search_batch_failure_async(self):
|
|
39
56
|
document_store = QdrantDocumentStore(location=":memory:", use_sparse_embeddings=True)
|
|
40
57
|
await document_store._initialize_async_client()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{qdrant_haystack-13.0.0 → qdrant_haystack-13.1.0}/src/haystack_integrations/document_stores/py.typed
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|