weaviate-haystack 4.0.2__tar.gz → 6.0.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.
- weaviate_haystack-6.0.0/CHANGELOG.md +149 -0
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/PKG-INFO +5 -5
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/pyproject.toml +5 -3
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/src/haystack_integrations/document_stores/weaviate/_filters.py +4 -7
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/src/haystack_integrations/document_stores/weaviate/document_store.py +7 -8
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/tests/test_bm25_retriever.py +0 -3
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/tests/test_document_store.py +5 -67
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/tests/test_embedding_retriever.py +0 -3
- weaviate_haystack-4.0.2/CHANGELOG.md +0 -86
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/.gitignore +0 -0
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/LICENSE.txt +0 -0
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/README.md +0 -0
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/docker-compose.yml +0 -0
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/pydoc/config.yml +0 -0
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/src/haystack_integrations/components/retrievers/weaviate/__init__.py +0 -0
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/src/haystack_integrations/components/retrievers/weaviate/bm25_retriever.py +0 -0
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/src/haystack_integrations/components/retrievers/weaviate/embedding_retriever.py +0 -0
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/src/haystack_integrations/document_stores/weaviate/__init__.py +1 -1
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/src/haystack_integrations/document_stores/weaviate/auth.py +0 -0
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/tests/__init__.py +0 -0
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/tests/conftest.py +0 -0
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/tests/test_auth.py +0 -0
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/tests/test_files/robot1.jpg +0 -0
- {weaviate_haystack-4.0.2 → weaviate_haystack-6.0.0}/tests/test_filters.py +0 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [integrations/weaviate-v5.0.0] - 2025-02-17
|
|
4
|
+
|
|
5
|
+
### 🧹 Chores
|
|
6
|
+
|
|
7
|
+
- Fix linting/isort (#1215)
|
|
8
|
+
- Inherit from `FilterDocumentsTestWithDataframe` in Document Stores (#1290)
|
|
9
|
+
- [**breaking**] Weaviate - remove dataframe support (#1406)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## [integrations/weaviate-v4.0.2] - 2024-11-13
|
|
13
|
+
|
|
14
|
+
### 🐛 Bug Fixes
|
|
15
|
+
|
|
16
|
+
- Dependency for weaviate document store (#1186)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
## [integrations/weaviate-v4.0.1] - 2024-11-11
|
|
20
|
+
|
|
21
|
+
### 🌀 Miscellaneous
|
|
22
|
+
|
|
23
|
+
- Fix: Weaviate - skip `_split_overlap` meta field (#1173)
|
|
24
|
+
|
|
25
|
+
## [integrations/weaviate-v4.0.0] - 2024-10-18
|
|
26
|
+
|
|
27
|
+
### 🐛 Bug Fixes
|
|
28
|
+
|
|
29
|
+
- Compatibility with Weaviate 4.9.0 (#1143)
|
|
30
|
+
|
|
31
|
+
### ⚙️ CI
|
|
32
|
+
|
|
33
|
+
- Adopt uv as installer (#1142)
|
|
34
|
+
|
|
35
|
+
### 🧹 Chores
|
|
36
|
+
|
|
37
|
+
- Weaviate - remove legacy filter support (#1070)
|
|
38
|
+
- Update changelog after removing legacy filters (#1083)
|
|
39
|
+
- Update ruff linting scripts and settings (#1105)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
## [integrations/weaviate-v2.2.1] - 2024-09-07
|
|
43
|
+
|
|
44
|
+
### 🚀 Features
|
|
45
|
+
|
|
46
|
+
- Add filter_policy to weaviate integration (#824)
|
|
47
|
+
|
|
48
|
+
### 🐛 Bug Fixes
|
|
49
|
+
|
|
50
|
+
- Weaviate filter error (#811)
|
|
51
|
+
- Fix connection to Weaviate Cloud Service (#624)
|
|
52
|
+
- Pin weaviate-client (#1046)
|
|
53
|
+
- Weaviate - fix connection issues with some WCS URLs (#1058)
|
|
54
|
+
|
|
55
|
+
### 🧪 Testing
|
|
56
|
+
|
|
57
|
+
- Do not retry tests in `hatch run test` command (#954)
|
|
58
|
+
|
|
59
|
+
### ⚙️ CI
|
|
60
|
+
|
|
61
|
+
- Retry tests to reduce flakyness (#836)
|
|
62
|
+
|
|
63
|
+
### 🧹 Chores
|
|
64
|
+
|
|
65
|
+
- Update ruff invocation to include check parameter (#853)
|
|
66
|
+
|
|
67
|
+
### 🌀 Miscellaneous
|
|
68
|
+
|
|
69
|
+
- Ci: install `pytest-rerunfailures` where needed; add retry config to `test-cov` script (#845)
|
|
70
|
+
- Chore: Minor retriever pydoc fix (#884)
|
|
71
|
+
- Fix: `weaviate` - Fallback to default filter policy when deserializing retrievers without the init parameter (#903)
|
|
72
|
+
- Fix: Weaviate: Use collections.list_all instead of collections._get_all (#921)
|
|
73
|
+
- Chore: weaviate - ruff update, don't ruff tests (#986)
|
|
74
|
+
|
|
75
|
+
## [integrations/weaviate-v2.1.0] - 2024-06-10
|
|
76
|
+
|
|
77
|
+
### 🚀 Features
|
|
78
|
+
|
|
79
|
+
- Defer the database connection to when it's needed (#802)
|
|
80
|
+
|
|
81
|
+
### 🐛 Bug Fixes
|
|
82
|
+
|
|
83
|
+
- Weaviate schema class name conversion which preserves PascalCase (#707)
|
|
84
|
+
|
|
85
|
+
### 🌀 Miscellaneous
|
|
86
|
+
|
|
87
|
+
- Chore: add license classifiers (#680)
|
|
88
|
+
- Chore: change the pydoc renderer class (#718)
|
|
89
|
+
|
|
90
|
+
## [integrations/weaviate-v2.0.0] - 2024-03-25
|
|
91
|
+
|
|
92
|
+
### 📚 Documentation
|
|
93
|
+
|
|
94
|
+
- Disable-class-def (#556)
|
|
95
|
+
- Fix docstrings (#586)
|
|
96
|
+
|
|
97
|
+
### 🌀 Miscellaneous
|
|
98
|
+
|
|
99
|
+
- Make tests show coverage (#566)
|
|
100
|
+
- Migrate from weaviate python client v3 to v4 (#463)
|
|
101
|
+
- Refactor tests (#574)
|
|
102
|
+
- Remove references to Python 3.7 (#601)
|
|
103
|
+
- Make Document Stores initially skip `SparseEmbedding` (#606)
|
|
104
|
+
- Fix Weaviate retrievers returning no score (#621)
|
|
105
|
+
- Update Weaviate docstrings (#622)
|
|
106
|
+
|
|
107
|
+
## [integrations/weaviate-v1.0.2] - 2024-02-27
|
|
108
|
+
|
|
109
|
+
### 🐛 Bug Fixes
|
|
110
|
+
|
|
111
|
+
- Fix order of API docs (#447)
|
|
112
|
+
- Weaviate: fix auth tests (#488)
|
|
113
|
+
|
|
114
|
+
### 📚 Documentation
|
|
115
|
+
|
|
116
|
+
- Update category slug (#442)
|
|
117
|
+
|
|
118
|
+
### 🌀 Miscellaneous
|
|
119
|
+
|
|
120
|
+
- Make retrievers return dicts (#491)
|
|
121
|
+
|
|
122
|
+
## [integrations/weaviate-v1.0.0] - 2024-02-15
|
|
123
|
+
|
|
124
|
+
### 🚀 Features
|
|
125
|
+
|
|
126
|
+
- Generate weaviate API docs (#351)
|
|
127
|
+
|
|
128
|
+
### 🌀 Miscellaneous
|
|
129
|
+
|
|
130
|
+
- WeaviateDocumentStore initialization and serialization (#187)
|
|
131
|
+
- Move package under haystack_integrations (#214)
|
|
132
|
+
- Add `collection_name` parameter and creation (#215)
|
|
133
|
+
- Support more collection settings when creating a new `WeaviateDocumentStore` (#260)
|
|
134
|
+
- Implement `count_document` for WeaviateDocumentStore (#267)
|
|
135
|
+
- Add methods to convert from Document to Weaviate data object and viceversa (#269)
|
|
136
|
+
- Add filter, write and delete documents in Weaviate (#270)
|
|
137
|
+
- Implement filtering for `WeaviateDocumentStore` (#278)
|
|
138
|
+
- Add `WeaviateBM25Retriever` (#410)
|
|
139
|
+
- Add `WeaviateEmbeddingRetriever` (#412)
|
|
140
|
+
- Update Weaviate docs configs (#414)
|
|
141
|
+
- Update WeaviateDocumentStore authentication to use new Secret class (#425)
|
|
142
|
+
|
|
143
|
+
## [integrations/weaviate-v0.0.0] - 2024-01-10
|
|
144
|
+
|
|
145
|
+
### 🌀 Miscellaneous
|
|
146
|
+
|
|
147
|
+
- Setup everything to start working on the Weaviate integration (#186)
|
|
148
|
+
|
|
149
|
+
<!-- generated by git-cliff -->
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: weaviate-haystack
|
|
3
|
-
Version:
|
|
3
|
+
Version: 6.0.0
|
|
4
4
|
Summary: An integration of Weaviate vector database 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/weaviate/README.md
|
|
7
7
|
Project-URL: Issues, https://github.com/deepset-ai/haystack-core-integrations/issues
|
|
8
8
|
Author-email: deepset GmbH <info@deepset.ai>
|
|
9
|
-
License: Apache-2.0
|
|
9
|
+
License-Expression: Apache-2.0
|
|
10
|
+
License-File: LICENSE.txt
|
|
10
11
|
Classifier: Development Status :: 4 - Beta
|
|
11
12
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
12
13
|
Classifier: Programming Language :: Python
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.9
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.10
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -18,7 +18,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
18
18
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
19
19
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
20
20
|
Requires-Python: >=3.9
|
|
21
|
-
Requires-Dist: haystack-ai
|
|
21
|
+
Requires-Dist: haystack-ai>=2.11.0
|
|
22
22
|
Requires-Dist: python-dateutil
|
|
23
23
|
Requires-Dist: weaviate-client>=4.9
|
|
24
24
|
Description-Content-Type: text/markdown
|
|
@@ -15,7 +15,6 @@ classifiers = [
|
|
|
15
15
|
"License :: OSI Approved :: Apache Software License",
|
|
16
16
|
"Development Status :: 4 - Beta",
|
|
17
17
|
"Programming Language :: Python",
|
|
18
|
-
"Programming Language :: Python :: 3.8",
|
|
19
18
|
"Programming Language :: Python :: 3.9",
|
|
20
19
|
"Programming Language :: Python :: 3.10",
|
|
21
20
|
"Programming Language :: Python :: 3.11",
|
|
@@ -24,7 +23,7 @@ classifiers = [
|
|
|
24
23
|
"Programming Language :: Python :: Implementation :: PyPy",
|
|
25
24
|
]
|
|
26
25
|
dependencies = [
|
|
27
|
-
"haystack-ai",
|
|
26
|
+
"haystack-ai>=2.11.0",
|
|
28
27
|
"weaviate-client>=4.9",
|
|
29
28
|
"python-dateutil",
|
|
30
29
|
]
|
|
@@ -58,7 +57,7 @@ cov-retry = ["test-cov-retry", "cov-report"]
|
|
|
58
57
|
docs = ["pydoc-markdown pydoc/config.yml"]
|
|
59
58
|
|
|
60
59
|
[[tool.hatch.envs.all.matrix]]
|
|
61
|
-
python = [
|
|
60
|
+
python = [ "3.9", "3.10", "3.11", "3.12"]
|
|
62
61
|
|
|
63
62
|
[tool.hatch.envs.lint]
|
|
64
63
|
installer = "uv"
|
|
@@ -160,3 +159,6 @@ module = [
|
|
|
160
159
|
"grpc",
|
|
161
160
|
]
|
|
162
161
|
ignore_missing_imports = true
|
|
162
|
+
|
|
163
|
+
[tool.pytest.ini_options]
|
|
164
|
+
markers = ["integration: integration tests"]
|
|
@@ -6,7 +6,6 @@ from typing import Any, Dict
|
|
|
6
6
|
|
|
7
7
|
from dateutil import parser
|
|
8
8
|
from haystack.errors import FilterError
|
|
9
|
-
from pandas import DataFrame
|
|
10
9
|
|
|
11
10
|
import weaviate
|
|
12
11
|
from weaviate.collections.classes.filters import Filter, FilterReturn
|
|
@@ -129,7 +128,7 @@ def _greater_than(field: str, value: Any) -> FilterReturn:
|
|
|
129
128
|
"Strings are only comparable if they are ISO formatted dates."
|
|
130
129
|
)
|
|
131
130
|
raise FilterError(msg) from exc
|
|
132
|
-
if
|
|
131
|
+
if isinstance(value, list):
|
|
133
132
|
msg = f"Filter value can't be of type {type(value)} using operators '>', '>=', '<', '<='"
|
|
134
133
|
raise FilterError(msg)
|
|
135
134
|
return weaviate.classes.query.Filter.by_property(field).greater_than(_handle_date(value))
|
|
@@ -151,7 +150,7 @@ def _greater_than_equal(field: str, value: Any) -> FilterReturn:
|
|
|
151
150
|
"Strings are only comparable if they are ISO formatted dates."
|
|
152
151
|
)
|
|
153
152
|
raise FilterError(msg) from exc
|
|
154
|
-
if
|
|
153
|
+
if isinstance(value, list):
|
|
155
154
|
msg = f"Filter value can't be of type {type(value)} using operators '>', '>=', '<', '<='"
|
|
156
155
|
raise FilterError(msg)
|
|
157
156
|
return weaviate.classes.query.Filter.by_property(field).greater_or_equal(_handle_date(value))
|
|
@@ -173,7 +172,7 @@ def _less_than(field: str, value: Any) -> FilterReturn:
|
|
|
173
172
|
"Strings are only comparable if they are ISO formatted dates."
|
|
174
173
|
)
|
|
175
174
|
raise FilterError(msg) from exc
|
|
176
|
-
if
|
|
175
|
+
if isinstance(value, list):
|
|
177
176
|
msg = f"Filter value can't be of type {type(value)} using operators '>', '>=', '<', '<='"
|
|
178
177
|
raise FilterError(msg)
|
|
179
178
|
return weaviate.classes.query.Filter.by_property(field).less_than(_handle_date(value))
|
|
@@ -195,7 +194,7 @@ def _less_than_equal(field: str, value: Any) -> FilterReturn:
|
|
|
195
194
|
"Strings are only comparable if they are ISO formatted dates."
|
|
196
195
|
)
|
|
197
196
|
raise FilterError(msg) from exc
|
|
198
|
-
if
|
|
197
|
+
if isinstance(value, list):
|
|
199
198
|
msg = f"Filter value can't be of type {type(value)} using operators '>', '>=', '<', '<='"
|
|
200
199
|
raise FilterError(msg)
|
|
201
200
|
return weaviate.classes.query.Filter.by_property(field).less_or_equal(_handle_date(value))
|
|
@@ -248,8 +247,6 @@ def _parse_comparison_condition(condition: Dict[str, Any]) -> FilterReturn:
|
|
|
248
247
|
raise FilterError(msg)
|
|
249
248
|
operator: str = condition["operator"]
|
|
250
249
|
value: Any = condition["value"]
|
|
251
|
-
if isinstance(value, DataFrame):
|
|
252
|
-
value = value.to_json()
|
|
253
250
|
|
|
254
251
|
return COMPARISON_OPERATORS[operator](field, value)
|
|
255
252
|
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
import base64
|
|
5
5
|
import datetime
|
|
6
6
|
import json
|
|
7
|
-
import logging
|
|
8
7
|
from dataclasses import asdict
|
|
9
8
|
from typing import Any, Dict, List, Optional
|
|
10
9
|
|
|
10
|
+
from haystack import logging
|
|
11
11
|
from haystack.core.serialization import default_from_dict, default_to_dict
|
|
12
12
|
from haystack.dataclasses.document import Document
|
|
13
13
|
from haystack.document_stores.errors import DocumentStoreError, DuplicateDocumentError
|
|
@@ -39,7 +39,6 @@ logger = logging.getLogger(__name__)
|
|
|
39
39
|
DOCUMENT_COLLECTION_PROPERTIES = [
|
|
40
40
|
{"name": "_original_id", "dataType": ["text"]},
|
|
41
41
|
{"name": "content", "dataType": ["text"]},
|
|
42
|
-
{"name": "dataframe", "dataType": ["text"]},
|
|
43
42
|
{"name": "blob_data", "dataType": ["blob"]},
|
|
44
43
|
{"name": "blob_mime_type", "dataType": ["text"]},
|
|
45
44
|
{"name": "score", "dataType": ["number"]},
|
|
@@ -58,8 +57,8 @@ DEFAULT_QUERY_LIMIT = 9999
|
|
|
58
57
|
|
|
59
58
|
class WeaviateDocumentStore:
|
|
60
59
|
"""
|
|
61
|
-
WeaviateDocumentStore
|
|
62
|
-
|
|
60
|
+
A WeaviateDocumentStore instance you
|
|
61
|
+
can use with Weaviate Cloud Services or self-hosted instances.
|
|
63
62
|
|
|
64
63
|
Usage example with Weaviate Cloud Services:
|
|
65
64
|
```python
|
|
@@ -105,7 +104,6 @@ class WeaviateDocumentStore:
|
|
|
105
104
|
properties:
|
|
106
105
|
- _original_id: text
|
|
107
106
|
- content: text
|
|
108
|
-
- dataframe: text
|
|
109
107
|
- blob_data: blob
|
|
110
108
|
- blob_mime_type: text
|
|
111
109
|
- score: number
|
|
@@ -291,17 +289,18 @@ class WeaviateDocumentStore:
|
|
|
291
289
|
if "_split_overlap" in data:
|
|
292
290
|
data.pop("_split_overlap")
|
|
293
291
|
logger.warning(
|
|
294
|
-
"Document
|
|
292
|
+
"Document {id} has the unsupported `_split_overlap` meta field. It will be ignored.",
|
|
293
|
+
id=data["_original_id"],
|
|
295
294
|
)
|
|
296
295
|
|
|
297
296
|
if "sparse_embedding" in data:
|
|
298
297
|
sparse_embedding = data.pop("sparse_embedding", None)
|
|
299
298
|
if sparse_embedding:
|
|
300
299
|
logger.warning(
|
|
301
|
-
"Document
|
|
300
|
+
"Document {id} has the `sparse_embedding` field set,"
|
|
302
301
|
"but storing sparse embeddings in Weaviate is not currently supported."
|
|
303
302
|
"The `sparse_embedding` field will be ignored.",
|
|
304
|
-
data["_original_id"],
|
|
303
|
+
id=data["_original_id"],
|
|
305
304
|
)
|
|
306
305
|
|
|
307
306
|
return data
|
|
@@ -46,7 +46,6 @@ def test_to_dict(_mock_weaviate):
|
|
|
46
46
|
"properties": [
|
|
47
47
|
{"name": "_original_id", "dataType": ["text"]},
|
|
48
48
|
{"name": "content", "dataType": ["text"]},
|
|
49
|
-
{"name": "dataframe", "dataType": ["text"]},
|
|
50
49
|
{"name": "blob_data", "dataType": ["blob"]},
|
|
51
50
|
{"name": "blob_mime_type", "dataType": ["text"]},
|
|
52
51
|
{"name": "score", "dataType": ["number"]},
|
|
@@ -81,7 +80,6 @@ def test_from_dict(_mock_weaviate):
|
|
|
81
80
|
"properties": [
|
|
82
81
|
{"name": "_original_id", "dataType": ["text"]},
|
|
83
82
|
{"name": "content", "dataType": ["text"]},
|
|
84
|
-
{"name": "dataframe", "dataType": ["text"]},
|
|
85
83
|
{"name": "blob_data", "dataType": ["blob"]},
|
|
86
84
|
{"name": "blob_mime_type", "dataType": ["text"]},
|
|
87
85
|
{"name": "score", "dataType": ["number"]},
|
|
@@ -119,7 +117,6 @@ def test_from_dict_no_filter_policy(_mock_weaviate):
|
|
|
119
117
|
"properties": [
|
|
120
118
|
{"name": "_original_id", "dataType": ["text"]},
|
|
121
119
|
{"name": "content", "dataType": ["text"]},
|
|
122
|
-
{"name": "dataframe", "dataType": ["text"]},
|
|
123
120
|
{"name": "blob_data", "dataType": ["blob"]},
|
|
124
121
|
{"name": "blob_mime_type", "dataType": ["text"]},
|
|
125
122
|
{"name": "score", "dataType": ["number"]},
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
import base64
|
|
6
6
|
import os
|
|
7
|
-
import random
|
|
8
7
|
from typing import List
|
|
9
8
|
from unittest.mock import MagicMock, patch
|
|
10
9
|
|
|
@@ -14,18 +13,16 @@ from haystack.dataclasses.byte_stream import ByteStream
|
|
|
14
13
|
from haystack.dataclasses.document import Document
|
|
15
14
|
from haystack.document_stores.errors import DocumentStoreError
|
|
16
15
|
from haystack.testing.document_store import (
|
|
17
|
-
TEST_EMBEDDING_1,
|
|
18
|
-
TEST_EMBEDDING_2,
|
|
19
16
|
CountDocumentsTest,
|
|
20
17
|
DeleteDocumentsTest,
|
|
21
18
|
FilterDocumentsTest,
|
|
22
19
|
WriteDocumentsTest,
|
|
20
|
+
create_filterable_docs,
|
|
23
21
|
)
|
|
24
22
|
from haystack.utils.auth import Secret
|
|
25
23
|
from numpy import array as np_array
|
|
26
24
|
from numpy import array_equal as np_array_equal
|
|
27
25
|
from numpy import float32 as np_float32
|
|
28
|
-
from pandas import DataFrame
|
|
29
26
|
from weaviate.collections.classes.data import DataObject
|
|
30
27
|
from weaviate.config import AdditionalConfig, ConnectionConfig, Proxies, Timeout
|
|
31
28
|
from weaviate.embedded import (
|
|
@@ -78,60 +75,10 @@ class TestWeaviateDocumentStore(CountDocumentsTest, WriteDocumentsTest, DeleteDo
|
|
|
78
75
|
Weaviate forces RFC 3339 date strings.
|
|
79
76
|
The original fixture uses ISO 8601 date strings.
|
|
80
77
|
"""
|
|
81
|
-
documents =
|
|
82
|
-
for i in range(
|
|
83
|
-
documents.
|
|
84
|
-
|
|
85
|
-
content=f"A Foo Document {i}",
|
|
86
|
-
meta={
|
|
87
|
-
"name": f"name_{i}",
|
|
88
|
-
"page": "100",
|
|
89
|
-
"chapter": "intro",
|
|
90
|
-
"number": 2,
|
|
91
|
-
"date": "1969-07-21T20:17:40Z",
|
|
92
|
-
},
|
|
93
|
-
embedding=[random.random() for _ in range(768)], # noqa: S311
|
|
94
|
-
)
|
|
95
|
-
)
|
|
96
|
-
documents.append(
|
|
97
|
-
Document(
|
|
98
|
-
content=f"A Bar Document {i}",
|
|
99
|
-
meta={
|
|
100
|
-
"name": f"name_{i}",
|
|
101
|
-
"page": "123",
|
|
102
|
-
"chapter": "abstract",
|
|
103
|
-
"number": -2,
|
|
104
|
-
"date": "1972-12-11T19:54:58Z",
|
|
105
|
-
},
|
|
106
|
-
embedding=[random.random() for _ in range(768)], # noqa: S311
|
|
107
|
-
)
|
|
108
|
-
)
|
|
109
|
-
documents.append(
|
|
110
|
-
Document(
|
|
111
|
-
content=f"A Foobar Document {i}",
|
|
112
|
-
meta={
|
|
113
|
-
"name": f"name_{i}",
|
|
114
|
-
"page": "90",
|
|
115
|
-
"chapter": "conclusion",
|
|
116
|
-
"number": -10,
|
|
117
|
-
"date": "1989-11-09T17:53:00Z",
|
|
118
|
-
},
|
|
119
|
-
embedding=[random.random() for _ in range(768)], # noqa: S311
|
|
120
|
-
)
|
|
121
|
-
)
|
|
122
|
-
documents.append(
|
|
123
|
-
Document(
|
|
124
|
-
content=f"Document {i} without embedding",
|
|
125
|
-
meta={"name": f"name_{i}", "no_embedding": True, "chapter": "conclusion"},
|
|
126
|
-
)
|
|
127
|
-
)
|
|
128
|
-
documents.append(Document(dataframe=DataFrame([i]), meta={"name": f"table_doc_{i}"}))
|
|
129
|
-
documents.append(
|
|
130
|
-
Document(content=f"Doc {i} with zeros emb", meta={"name": "zeros_doc"}, embedding=TEST_EMBEDDING_1)
|
|
131
|
-
)
|
|
132
|
-
documents.append(
|
|
133
|
-
Document(content=f"Doc {i} with ones emb", meta={"name": "ones_doc"}, embedding=TEST_EMBEDDING_2)
|
|
134
|
-
)
|
|
78
|
+
documents = create_filterable_docs()
|
|
79
|
+
for i in range(len(documents)):
|
|
80
|
+
if date := documents[i].meta.get("date"):
|
|
81
|
+
documents[i].meta["date"] = f"{date}Z"
|
|
135
82
|
return documents
|
|
136
83
|
|
|
137
84
|
def assert_documents_are_equal(self, received: List[Document], expected: List[Document]):
|
|
@@ -238,7 +185,6 @@ class TestWeaviateDocumentStore(CountDocumentsTest, WriteDocumentsTest, DeleteDo
|
|
|
238
185
|
"properties": [
|
|
239
186
|
{"name": "_original_id", "dataType": ["text"]},
|
|
240
187
|
{"name": "content", "dataType": ["text"]},
|
|
241
|
-
{"name": "dataframe", "dataType": ["text"]},
|
|
242
188
|
{"name": "blob_data", "dataType": ["blob"]},
|
|
243
189
|
{"name": "blob_mime_type", "dataType": ["text"]},
|
|
244
190
|
{"name": "score", "dataType": ["number"]},
|
|
@@ -320,7 +266,6 @@ class TestWeaviateDocumentStore(CountDocumentsTest, WriteDocumentsTest, DeleteDo
|
|
|
320
266
|
"properties": [
|
|
321
267
|
{"name": "_original_id", "dataType": ["text"]},
|
|
322
268
|
{"name": "content", "dataType": ["text"]},
|
|
323
|
-
{"name": "dataframe", "dataType": ["text"]},
|
|
324
269
|
{"name": "blob_data", "dataType": ["blob"]},
|
|
325
270
|
{"name": "blob_mime_type", "dataType": ["text"]},
|
|
326
271
|
{"name": "score", "dataType": ["number"]},
|
|
@@ -348,7 +293,6 @@ class TestWeaviateDocumentStore(CountDocumentsTest, WriteDocumentsTest, DeleteDo
|
|
|
348
293
|
assert data == {
|
|
349
294
|
"_original_id": doc.id,
|
|
350
295
|
"content": doc.content,
|
|
351
|
-
"dataframe": None,
|
|
352
296
|
"score": None,
|
|
353
297
|
}
|
|
354
298
|
|
|
@@ -365,7 +309,6 @@ class TestWeaviateDocumentStore(CountDocumentsTest, WriteDocumentsTest, DeleteDo
|
|
|
365
309
|
"content": doc.content,
|
|
366
310
|
"blob_data": base64.b64encode(image.data).decode(),
|
|
367
311
|
"blob_mime_type": "image/jpeg",
|
|
368
|
-
"dataframe": None,
|
|
369
312
|
"score": None,
|
|
370
313
|
"key": "value",
|
|
371
314
|
}
|
|
@@ -378,7 +321,6 @@ class TestWeaviateDocumentStore(CountDocumentsTest, WriteDocumentsTest, DeleteDo
|
|
|
378
321
|
"content": "some content",
|
|
379
322
|
"blob_data": base64.b64encode(image.data).decode(),
|
|
380
323
|
"blob_mime_type": "image/jpeg",
|
|
381
|
-
"dataframe": None,
|
|
382
324
|
"score": None,
|
|
383
325
|
"key": "value",
|
|
384
326
|
},
|
|
@@ -504,10 +446,6 @@ class TestWeaviateDocumentStore(CountDocumentsTest, WriteDocumentsTest, DeleteDo
|
|
|
504
446
|
],
|
|
505
447
|
)
|
|
506
448
|
|
|
507
|
-
@pytest.mark.skip(reason="Weaviate for some reason is not returning what we expect")
|
|
508
|
-
def test_comparison_not_equal_with_dataframe(self, document_store, filterable_docs):
|
|
509
|
-
return super().test_comparison_not_equal_with_dataframe(document_store, filterable_docs)
|
|
510
|
-
|
|
511
449
|
def test_meta_split_overlap_is_skipped(self, document_store):
|
|
512
450
|
doc = Document(
|
|
513
451
|
content="The moonlight shimmered ",
|
|
@@ -56,7 +56,6 @@ def test_to_dict(_mock_weaviate):
|
|
|
56
56
|
"properties": [
|
|
57
57
|
{"name": "_original_id", "dataType": ["text"]},
|
|
58
58
|
{"name": "content", "dataType": ["text"]},
|
|
59
|
-
{"name": "dataframe", "dataType": ["text"]},
|
|
60
59
|
{"name": "blob_data", "dataType": ["blob"]},
|
|
61
60
|
{"name": "blob_mime_type", "dataType": ["text"]},
|
|
62
61
|
{"name": "score", "dataType": ["number"]},
|
|
@@ -93,7 +92,6 @@ def test_from_dict(_mock_weaviate):
|
|
|
93
92
|
"properties": [
|
|
94
93
|
{"name": "_original_id", "dataType": ["text"]},
|
|
95
94
|
{"name": "content", "dataType": ["text"]},
|
|
96
|
-
{"name": "dataframe", "dataType": ["text"]},
|
|
97
95
|
{"name": "blob_data", "dataType": ["blob"]},
|
|
98
96
|
{"name": "blob_mime_type", "dataType": ["text"]},
|
|
99
97
|
{"name": "score", "dataType": ["number"]},
|
|
@@ -135,7 +133,6 @@ def test_from_dict_no_filter_policy(_mock_weaviate):
|
|
|
135
133
|
"properties": [
|
|
136
134
|
{"name": "_original_id", "dataType": ["text"]},
|
|
137
135
|
{"name": "content", "dataType": ["text"]},
|
|
138
|
-
{"name": "dataframe", "dataType": ["text"]},
|
|
139
136
|
{"name": "blob_data", "dataType": ["blob"]},
|
|
140
137
|
{"name": "blob_mime_type", "dataType": ["text"]},
|
|
141
138
|
{"name": "score", "dataType": ["number"]},
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
## [integrations/weaviate-v4.0.1] - 2024-11-11
|
|
4
|
-
|
|
5
|
-
## [integrations/weaviate-v4.0.0] - 2024-10-18
|
|
6
|
-
|
|
7
|
-
### 🐛 Bug Fixes
|
|
8
|
-
|
|
9
|
-
- Compatibility with Weaviate 4.9.0 (#1143)
|
|
10
|
-
|
|
11
|
-
### ⚙️ Miscellaneous Tasks
|
|
12
|
-
|
|
13
|
-
- Weaviate - remove legacy filter support (#1070)
|
|
14
|
-
- Update changelog after removing legacy filters (#1083)
|
|
15
|
-
- Update ruff linting scripts and settings (#1105)
|
|
16
|
-
- Adopt uv as installer (#1142)
|
|
17
|
-
|
|
18
|
-
## [integrations/weaviate-v2.2.1] - 2024-09-07
|
|
19
|
-
|
|
20
|
-
### 🚀 Features
|
|
21
|
-
|
|
22
|
-
- Add filter_policy to weaviate integration (#824)
|
|
23
|
-
|
|
24
|
-
### 🐛 Bug Fixes
|
|
25
|
-
|
|
26
|
-
- Weaviate filter error (#811)
|
|
27
|
-
- Fix connection to Weaviate Cloud Service (#624)
|
|
28
|
-
- Pin weaviate-client (#1046)
|
|
29
|
-
- Weaviate - fix connection issues with some WCS URLs (#1058)
|
|
30
|
-
|
|
31
|
-
### 🧪 Testing
|
|
32
|
-
|
|
33
|
-
- Do not retry tests in `hatch run test` command (#954)
|
|
34
|
-
|
|
35
|
-
### ⚙️ Miscellaneous Tasks
|
|
36
|
-
|
|
37
|
-
- Retry tests to reduce flakyness (#836)
|
|
38
|
-
- Update ruff invocation to include check parameter (#853)
|
|
39
|
-
|
|
40
|
-
## [integrations/weaviate-v2.1.0] - 2024-06-10
|
|
41
|
-
|
|
42
|
-
### 🚀 Features
|
|
43
|
-
|
|
44
|
-
- Defer the database connection to when it's needed (#802)
|
|
45
|
-
|
|
46
|
-
### 🐛 Bug Fixes
|
|
47
|
-
|
|
48
|
-
- Weaviate schema class name conversion which preserves PascalCase (#707)
|
|
49
|
-
|
|
50
|
-
## [integrations/weaviate-v2.0.0] - 2024-03-25
|
|
51
|
-
|
|
52
|
-
### 📚 Documentation
|
|
53
|
-
|
|
54
|
-
- Disable-class-def (#556)
|
|
55
|
-
- Fix docstrings (#586)
|
|
56
|
-
|
|
57
|
-
### Weaviate
|
|
58
|
-
|
|
59
|
-
- Migrate from weaviate python client v3 to v4 (#463)
|
|
60
|
-
|
|
61
|
-
## [integrations/weaviate-v1.0.2] - 2024-02-27
|
|
62
|
-
|
|
63
|
-
### 🐛 Bug Fixes
|
|
64
|
-
|
|
65
|
-
- Fix order of API docs (#447)
|
|
66
|
-
|
|
67
|
-
This PR will also push the docs to Readme
|
|
68
|
-
- Fix weaviate auth tests (#488)
|
|
69
|
-
|
|
70
|
-
### 📚 Documentation
|
|
71
|
-
|
|
72
|
-
- Update category slug (#442)
|
|
73
|
-
|
|
74
|
-
### Weaviate
|
|
75
|
-
|
|
76
|
-
- Make retrievers return dicts (#491)
|
|
77
|
-
|
|
78
|
-
## [integrations/weaviate-v1.0.0] - 2024-02-15
|
|
79
|
-
|
|
80
|
-
### 🚀 Features
|
|
81
|
-
|
|
82
|
-
- Generate weaviate API docs (#351)
|
|
83
|
-
|
|
84
|
-
## [integrations/weaviate-v0.0.0] - 2024-01-10
|
|
85
|
-
|
|
86
|
-
<!-- generated by git-cliff -->
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -5,10 +5,10 @@ from .auth import AuthApiKey, AuthBearerToken, AuthClientCredentials, AuthClient
|
|
|
5
5
|
from .document_store import WeaviateDocumentStore
|
|
6
6
|
|
|
7
7
|
__all__ = [
|
|
8
|
-
"WeaviateDocumentStore",
|
|
9
8
|
"AuthApiKey",
|
|
10
9
|
"AuthBearerToken",
|
|
11
10
|
"AuthClientCredentials",
|
|
12
11
|
"AuthClientPassword",
|
|
13
12
|
"AuthCredentials",
|
|
13
|
+
"WeaviateDocumentStore",
|
|
14
14
|
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|