meilisearch-python-sdk 4.1.0__tar.gz → 4.2.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.
Potentially problematic release.
This version of meilisearch-python-sdk might be problematic. Click here for more details.
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/.github/renovate.json5 +2 -1
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/.github/workflows/docs_publish.yml +1 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/.pre-commit-config.yaml +2 -2
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/PKG-INFO +1 -1
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/docs/js/umami.js +1 -1
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/_client.py +20 -14
- meilisearch_python_sdk-4.2.0/meilisearch_python_sdk/_version.py +1 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/index.py +16 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/models/search.py +2 -1
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/models/settings.py +8 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/pyproject.toml +4 -4
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/conftest.py +0 -9
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/test_async_index.py +2 -2
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/test_async_search.py +24 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/test_index.py +2 -2
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/test_search.py +24 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/uv.lock +162 -159
- meilisearch_python_sdk-4.1.0/meilisearch_python_sdk/_version.py +0 -1
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/.github/FUNDING.yml +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/.github/release-draft-template.yaml +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/.github/workflows/nightly_testing.yml +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/.github/workflows/pypi_publish.yml +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/.github/workflows/release-drafter.yml +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/.github/workflows/testing.yml +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/.gitignore +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/CONTRIBUTING.md +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/LICENSE +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/README.md +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/assets/add_in_batches.png +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/assets/searches.png +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/benchmark/run_benchmark.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/codecov.yml +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/datasets/small_movies.json +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/docker-compose.https.yml +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/docker-compose.yml +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/docs/.nojekyll +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/docs/CNAME +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/docs/async_client_api.md +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/docs/async_index_api.md +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/docs/client_api.md +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/docs/css/custom.css +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/docs/decorators_api.md +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/docs/index.md +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/docs/index_api.md +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/docs/json_handler.md +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/docs/plugins.md +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/docs/pydantic.md +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/.gitignore +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/README.md +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/__init__.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/add_documents_decorator.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/add_documents_in_batches.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/async_add_documents_decorator.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/async_add_documents_in_batches.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/async_documents_and_search_results.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/async_search_tracker.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/async_update_settings.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/documents_and_search_results.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/fastapi_example.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/orjson_example.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/pyproject.toml +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/requirements.txt +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/search_tracker.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/tests/__init__.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/tests/conftest.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/tests/test_async_examples.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/tests/test_examples.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/ujson_example.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/examples/update_settings.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/justfile +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/__init__.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/_batch.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/_http_requests.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/_task.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/_utils.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/decorators.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/errors.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/json_handler.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/models/__init__.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/models/batch.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/models/client.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/models/documents.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/models/health.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/models/index.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/models/task.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/models/version.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/plugins.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/py.typed +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/types.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/mkdocs.yaml +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/__init__.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/test_async_client.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/test_async_documents.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/test_async_index_plugins.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/test_client.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/test_decorators.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/test_documents.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/test_errors.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/test_index_plugins.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/test_utils.py +0 -0
- {meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/tests/test_version.py +0 -0
|
@@ -9,12 +9,12 @@ repos:
|
|
|
9
9
|
- id: end-of-file-fixer
|
|
10
10
|
- id: trailing-whitespace
|
|
11
11
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
12
|
-
rev: v1.
|
|
12
|
+
rev: v1.15.0
|
|
13
13
|
hooks:
|
|
14
14
|
- id: mypy
|
|
15
15
|
additional_dependencies: [pydantic, orjson, types-aiofiles, types-ujson]
|
|
16
16
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
17
|
-
rev: v0.9.
|
|
17
|
+
rev: v0.9.6
|
|
18
18
|
hooks:
|
|
19
19
|
- id: ruff
|
|
20
20
|
args: [--fix, --exit-non-zero-on-fix]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: meilisearch-python-sdk
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.2.0
|
|
4
4
|
Summary: A Python client providing both async and sync support for the Meilisearch API
|
|
5
5
|
Project-URL: repository, https://github.com/sanders41/meilisearch-python-sdk
|
|
6
6
|
Project-URL: homepage, https://github.com/sanders41/meilisearch-python-sdk
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
document.addEventListener("DOMContentLoaded", function () {
|
|
2
2
|
var umamiScript = document.createElement("script");
|
|
3
3
|
umamiScript.defer = true;
|
|
4
|
-
umamiScript.src = "https://
|
|
4
|
+
umamiScript.src = "https://cloud.umami.is/script.js";
|
|
5
5
|
umamiScript.dataset.websiteId = "29a9d193-92a3-44d0-9b1d-16ddd23898fb";
|
|
6
6
|
document.head.appendChild(umamiScript);
|
|
7
7
|
});
|
{meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/_client.py
RENAMED
|
@@ -623,15 +623,18 @@ class AsyncClient(BaseClient):
|
|
|
623
623
|
>>> search_results = await client.search(queries)
|
|
624
624
|
"""
|
|
625
625
|
url = "multi-search"
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
626
|
+
processed_queries = []
|
|
627
|
+
for query in queries:
|
|
628
|
+
q = query.model_dump(by_alias=True)
|
|
629
|
+
|
|
630
|
+
if query.retrieve_vectors is None:
|
|
631
|
+
del q["retrieveVectors"]
|
|
632
|
+
|
|
633
|
+
if federation:
|
|
630
634
|
del q["limit"]
|
|
631
635
|
del q["offset"]
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
processed_queries = [x.model_dump(by_alias=True) for x in queries]
|
|
636
|
+
|
|
637
|
+
processed_queries.append(q)
|
|
635
638
|
|
|
636
639
|
if federation:
|
|
637
640
|
federation_payload = federation.model_dump(by_alias=True)
|
|
@@ -1479,15 +1482,18 @@ class Client(BaseClient):
|
|
|
1479
1482
|
>>> search_results = client.search(queries)
|
|
1480
1483
|
"""
|
|
1481
1484
|
url = "multi-search"
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1485
|
+
processed_queries = []
|
|
1486
|
+
for query in queries:
|
|
1487
|
+
q = query.model_dump(by_alias=True)
|
|
1488
|
+
|
|
1489
|
+
if query.retrieve_vectors is None:
|
|
1490
|
+
del q["retrieveVectors"]
|
|
1491
|
+
|
|
1492
|
+
if federation:
|
|
1486
1493
|
del q["limit"]
|
|
1487
1494
|
del q["offset"]
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
processed_queries = [x.model_dump(by_alias=True) for x in queries]
|
|
1495
|
+
|
|
1496
|
+
processed_queries.append(q)
|
|
1491
1497
|
|
|
1492
1498
|
if federation:
|
|
1493
1499
|
federation_payload = federation.model_dump(by_alias=True)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
VERSION = "4.2.0"
|
{meilisearch_python_sdk-4.1.0 → meilisearch_python_sdk-4.2.0}/meilisearch_python_sdk/index.py
RENAMED
|
@@ -721,6 +721,7 @@ class AsyncIndex(_BaseIndex):
|
|
|
721
721
|
vector: list[float] | None = None,
|
|
722
722
|
hybrid: Hybrid | None = None,
|
|
723
723
|
locales: list[str] | None = None,
|
|
724
|
+
retrieve_vectors: bool | None = None,
|
|
724
725
|
) -> SearchResults:
|
|
725
726
|
"""Search the index.
|
|
726
727
|
|
|
@@ -781,6 +782,7 @@ class AsyncIndex(_BaseIndex):
|
|
|
781
782
|
with caution.
|
|
782
783
|
locales: Specifies the languages for the search. This parameter can only be used with
|
|
783
784
|
Milisearch >= v1.10.0. Defaults to None letting the Meilisearch pick.
|
|
785
|
+
retrieve_vectors: Return document vector data with search result.
|
|
784
786
|
|
|
785
787
|
Returns:
|
|
786
788
|
Results of the search
|
|
@@ -824,6 +826,7 @@ class AsyncIndex(_BaseIndex):
|
|
|
824
826
|
hybrid=hybrid,
|
|
825
827
|
ranking_score_threshold=ranking_score_threshold,
|
|
826
828
|
locales=locales,
|
|
829
|
+
retrieve_vectors=retrieve_vectors,
|
|
827
830
|
)
|
|
828
831
|
search_url = f"{self._base_url_with_uid}/search"
|
|
829
832
|
|
|
@@ -986,6 +989,7 @@ class AsyncIndex(_BaseIndex):
|
|
|
986
989
|
ranking_score_threshold: float | None = None,
|
|
987
990
|
vector: list[float] | None = None,
|
|
988
991
|
locales: list[str] | None = None,
|
|
992
|
+
retrieve_vectors: bool | None = None,
|
|
989
993
|
) -> FacetSearchResults:
|
|
990
994
|
"""Search the index.
|
|
991
995
|
|
|
@@ -1038,6 +1042,7 @@ class AsyncIndex(_BaseIndex):
|
|
|
1038
1042
|
with caution.
|
|
1039
1043
|
locales: Specifies the languages for the search. This parameter can only be used with
|
|
1040
1044
|
Milisearch >= v1.10.0. Defaults to None letting the Meilisearch pick.
|
|
1045
|
+
retrieve_vectors: Return document vector data with search result.
|
|
1041
1046
|
|
|
1042
1047
|
Returns:
|
|
1043
1048
|
Results of the search
|
|
@@ -1085,6 +1090,7 @@ class AsyncIndex(_BaseIndex):
|
|
|
1085
1090
|
ranking_score_threshold=ranking_score_threshold,
|
|
1086
1091
|
vector=vector,
|
|
1087
1092
|
locales=locales,
|
|
1093
|
+
retrieve_vectors=retrieve_vectors,
|
|
1088
1094
|
)
|
|
1089
1095
|
search_url = f"{self._base_url_with_uid}/facet-search"
|
|
1090
1096
|
|
|
@@ -5085,6 +5091,7 @@ class Index(_BaseIndex):
|
|
|
5085
5091
|
vector: list[float] | None = None,
|
|
5086
5092
|
hybrid: Hybrid | None = None,
|
|
5087
5093
|
locales: list[str] | None = None,
|
|
5094
|
+
retrieve_vectors: bool | None = None,
|
|
5088
5095
|
) -> SearchResults:
|
|
5089
5096
|
"""Search the index.
|
|
5090
5097
|
|
|
@@ -5145,6 +5152,7 @@ class Index(_BaseIndex):
|
|
|
5145
5152
|
with caution.
|
|
5146
5153
|
locales: Specifies the languages for the search. This parameter can only be used with
|
|
5147
5154
|
Milisearch >= v1.10.0. Defaults to None letting the Meilisearch pick.
|
|
5155
|
+
retrieve_vectors: Return document vector data with search result.
|
|
5148
5156
|
|
|
5149
5157
|
Returns:
|
|
5150
5158
|
Results of the search
|
|
@@ -5188,6 +5196,7 @@ class Index(_BaseIndex):
|
|
|
5188
5196
|
hybrid=hybrid,
|
|
5189
5197
|
ranking_score_threshold=ranking_score_threshold,
|
|
5190
5198
|
locales=locales,
|
|
5199
|
+
retrieve_vectors=retrieve_vectors,
|
|
5191
5200
|
)
|
|
5192
5201
|
|
|
5193
5202
|
if self._pre_search_plugins:
|
|
@@ -5256,6 +5265,7 @@ class Index(_BaseIndex):
|
|
|
5256
5265
|
ranking_score_threshold: float | None = None,
|
|
5257
5266
|
vector: list[float] | None = None,
|
|
5258
5267
|
locales: list[str] | None = None,
|
|
5268
|
+
retrieve_vectors: bool | None = None,
|
|
5259
5269
|
) -> FacetSearchResults:
|
|
5260
5270
|
"""Search the index.
|
|
5261
5271
|
|
|
@@ -5308,6 +5318,7 @@ class Index(_BaseIndex):
|
|
|
5308
5318
|
with caution.
|
|
5309
5319
|
locales: Specifies the languages for the search. This parameter can only be used with
|
|
5310
5320
|
Milisearch >= v1.10.0. Defaults to None letting the Meilisearch pick.
|
|
5321
|
+
retrieve_vectors: Return document vector data with search result.
|
|
5311
5322
|
|
|
5312
5323
|
Returns:
|
|
5313
5324
|
Results of the search
|
|
@@ -5355,6 +5366,7 @@ class Index(_BaseIndex):
|
|
|
5355
5366
|
ranking_score_threshold=ranking_score_threshold,
|
|
5356
5367
|
vector=vector,
|
|
5357
5368
|
locales=locales,
|
|
5369
|
+
retrieve_vectors=retrieve_vectors,
|
|
5358
5370
|
)
|
|
5359
5371
|
|
|
5360
5372
|
if self._pre_facet_search_plugins:
|
|
@@ -8262,6 +8274,7 @@ def _process_search_parameters(
|
|
|
8262
8274
|
vector: list[float] | None = None,
|
|
8263
8275
|
hybrid: Hybrid | None = None,
|
|
8264
8276
|
locales: list[str] | None = None,
|
|
8277
|
+
retrieve_vectors: bool | None = None,
|
|
8265
8278
|
) -> JsonDict:
|
|
8266
8279
|
if attributes_to_retrieve is None:
|
|
8267
8280
|
attributes_to_retrieve = ["*"]
|
|
@@ -8310,6 +8323,9 @@ def _process_search_parameters(
|
|
|
8310
8323
|
if locales:
|
|
8311
8324
|
body["locales"] = locales
|
|
8312
8325
|
|
|
8326
|
+
if retrieve_vectors is not None:
|
|
8327
|
+
body["retrieveVectors"] = retrieve_vectors
|
|
8328
|
+
|
|
8313
8329
|
return body
|
|
8314
8330
|
|
|
8315
8331
|
|
|
@@ -18,7 +18,7 @@ class FacetHits(CamelBase):
|
|
|
18
18
|
|
|
19
19
|
class FacetSearchResults(CamelBase):
|
|
20
20
|
facet_hits: list[FacetHits]
|
|
21
|
-
facet_query: str
|
|
21
|
+
facet_query: str | None
|
|
22
22
|
processing_time_ms: int
|
|
23
23
|
|
|
24
24
|
|
|
@@ -70,6 +70,7 @@ class SearchParams(CamelBase):
|
|
|
70
70
|
vector: list[float] | None = None
|
|
71
71
|
hybrid: Hybrid | None = None
|
|
72
72
|
locales: list[str] | None = None
|
|
73
|
+
retrieve_vectors: bool | None = None
|
|
73
74
|
|
|
74
75
|
@field_validator("ranking_score_threshold", mode="before") # type: ignore[attr-defined]
|
|
75
76
|
@classmethod
|
|
@@ -56,6 +56,7 @@ class OpenAiEmbedder(CamelBase):
|
|
|
56
56
|
document_template: str | None = None
|
|
57
57
|
document_template_max_bytes: int | None = None
|
|
58
58
|
distribution: Distribution | None = None
|
|
59
|
+
binary_quantized: bool | None = None
|
|
59
60
|
|
|
60
61
|
|
|
61
62
|
class HuggingFaceEmbedder(CamelBase):
|
|
@@ -65,6 +66,8 @@ class HuggingFaceEmbedder(CamelBase):
|
|
|
65
66
|
document_template: str | None = None
|
|
66
67
|
document_template_max_bytes: int | None = None
|
|
67
68
|
distribution: Distribution | None = None
|
|
69
|
+
dimensions: int | None = None
|
|
70
|
+
binary_quantized: bool | None = None
|
|
68
71
|
|
|
69
72
|
|
|
70
73
|
class OllamaEmbedder(CamelBase):
|
|
@@ -76,6 +79,7 @@ class OllamaEmbedder(CamelBase):
|
|
|
76
79
|
document_template: str | None = None
|
|
77
80
|
document_template_max_bytes: int | None = None
|
|
78
81
|
distribution: Distribution | None = None
|
|
82
|
+
binary_quantized: bool | None = None
|
|
79
83
|
|
|
80
84
|
|
|
81
85
|
class RestEmbedder(CamelBase):
|
|
@@ -89,12 +93,16 @@ class RestEmbedder(CamelBase):
|
|
|
89
93
|
headers: JsonDict | None = None
|
|
90
94
|
request: JsonDict
|
|
91
95
|
response: JsonDict
|
|
96
|
+
binary_quantized: bool | None = None
|
|
92
97
|
|
|
93
98
|
|
|
94
99
|
class UserProvidedEmbedder(CamelBase):
|
|
95
100
|
source: str = "userProvided"
|
|
96
101
|
dimensions: int
|
|
97
102
|
distribution: Distribution | None = None
|
|
103
|
+
document_template: str | None = None
|
|
104
|
+
document_template_max_bytes: int | None = None
|
|
105
|
+
binary_quantized: bool | None = None
|
|
98
106
|
|
|
99
107
|
|
|
100
108
|
class Embedders(CamelBase):
|
|
@@ -41,15 +41,15 @@ all = ["orjson", "ujson"]
|
|
|
41
41
|
[dependency-groups]
|
|
42
42
|
dev = [
|
|
43
43
|
"mkdocs==1.6.1",
|
|
44
|
-
"mkdocs-material==9.6.
|
|
45
|
-
"mkdocstrings[python]==0.
|
|
46
|
-
"mypy[faster-cache]==1.
|
|
44
|
+
"mkdocs-material==9.6.4",
|
|
45
|
+
"mkdocstrings[python]==0.28.1",
|
|
46
|
+
"mypy[faster-cache]==1.15.0",
|
|
47
47
|
"pre-commit==4.1.0",
|
|
48
48
|
"pytest==8.3.4",
|
|
49
49
|
"pytest-cov==6.0.0",
|
|
50
50
|
"pytest-asyncio==0.25.3",
|
|
51
51
|
"pytest-xdist==3.6.1",
|
|
52
|
-
"ruff==0.9.
|
|
52
|
+
"ruff==0.9.6",
|
|
53
53
|
"types-aiofiles==24.1.0.20241221",
|
|
54
54
|
"typing-extensions==4.12.2",
|
|
55
55
|
"types-ujson==5.10.0.20240515",
|
|
@@ -295,15 +295,6 @@ async def default_search_key(async_client):
|
|
|
295
295
|
return key
|
|
296
296
|
|
|
297
297
|
|
|
298
|
-
@pytest.fixture(scope="session", autouse=True)
|
|
299
|
-
async def enable_vector_search(base_url, ssl_verify):
|
|
300
|
-
async with HttpxAsyncClient(
|
|
301
|
-
base_url=base_url, headers={"Authorization": f"Bearer {MASTER_KEY}"}, verify=ssl_verify
|
|
302
|
-
) as client:
|
|
303
|
-
await client.patch("/experimental-features", json={"vectorStore": True})
|
|
304
|
-
yield
|
|
305
|
-
|
|
306
|
-
|
|
307
298
|
@pytest.fixture(scope="session", autouse=True)
|
|
308
299
|
async def enable_edit_by_function(base_url, ssl_verify):
|
|
309
300
|
async with HttpxAsyncClient(
|
|
@@ -139,7 +139,7 @@ async def test_get_settings_default(
|
|
|
139
139
|
assert response.non_separator_tokens == []
|
|
140
140
|
assert response.search_cutoff_ms is None
|
|
141
141
|
assert response.dictionary == []
|
|
142
|
-
assert response.embedders
|
|
142
|
+
assert response.embedders == {}
|
|
143
143
|
assert response.facet_search is True
|
|
144
144
|
assert response.prefix_search == "indexingTime"
|
|
145
145
|
|
|
@@ -233,7 +233,7 @@ async def test_reset_settings(async_empty_index, new_settings, default_ranking_r
|
|
|
233
233
|
assert response.faceting.max_values_per_facet == 100
|
|
234
234
|
assert response.pagination.max_total_hits == 1000
|
|
235
235
|
assert response.proximity_precision is ProximityPrecision.BY_WORD
|
|
236
|
-
assert response.embedders
|
|
236
|
+
assert response.embedders == {}
|
|
237
237
|
|
|
238
238
|
|
|
239
239
|
async def test_get_ranking_rules_default(async_empty_index, default_ranking_rules):
|
|
@@ -506,6 +506,30 @@ async def test_vector_search(async_index_with_documents_and_vectors):
|
|
|
506
506
|
assert len(response.hits) >= 1
|
|
507
507
|
|
|
508
508
|
|
|
509
|
+
async def test_vector_search_retrieve_vectors(async_index_with_documents_and_vectors):
|
|
510
|
+
index = await async_index_with_documents_and_vectors()
|
|
511
|
+
response = await index.search(
|
|
512
|
+
"",
|
|
513
|
+
vector=[0.1, 0.2],
|
|
514
|
+
hybrid=Hybrid(semantic_ratio=1.0, embedder="default"),
|
|
515
|
+
retrieve_vectors=True,
|
|
516
|
+
)
|
|
517
|
+
assert len(response.hits) >= 1
|
|
518
|
+
assert response.hits[0].get("_vectors") is not None
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
async def test_vector_search_retrieve_vectors_false(async_index_with_documents_and_vectors):
|
|
522
|
+
index = await async_index_with_documents_and_vectors()
|
|
523
|
+
response = await index.search(
|
|
524
|
+
"",
|
|
525
|
+
vector=[0.1, 0.2],
|
|
526
|
+
hybrid=Hybrid(semantic_ratio=1.0, embedder="default"),
|
|
527
|
+
retrieve_vectors=False,
|
|
528
|
+
)
|
|
529
|
+
assert len(response.hits) >= 1
|
|
530
|
+
assert response.hits[0].get("_vectors") is None
|
|
531
|
+
|
|
532
|
+
|
|
509
533
|
async def test_basic_facet_search(async_index_with_documents):
|
|
510
534
|
index = await async_index_with_documents()
|
|
511
535
|
update = await index.update_filterable_attributes(["genre"])
|
|
@@ -131,7 +131,7 @@ def test_get_settings_default(
|
|
|
131
131
|
assert response.non_separator_tokens == []
|
|
132
132
|
assert response.search_cutoff_ms is None
|
|
133
133
|
assert response.dictionary == []
|
|
134
|
-
assert response.embedders
|
|
134
|
+
assert response.embedders == {}
|
|
135
135
|
assert response.facet_search is True
|
|
136
136
|
assert response.prefix_search == "indexingTime"
|
|
137
137
|
|
|
@@ -225,7 +225,7 @@ def test_reset_settings(empty_index, new_settings, default_ranking_rules):
|
|
|
225
225
|
assert response.faceting.max_values_per_facet == 100
|
|
226
226
|
assert response.pagination.max_total_hits == 1000
|
|
227
227
|
assert response.proximity_precision is ProximityPrecision.BY_WORD
|
|
228
|
-
assert response.embedders
|
|
228
|
+
assert response.embedders == {}
|
|
229
229
|
|
|
230
230
|
|
|
231
231
|
def test_get_ranking_rules_default(empty_index, default_ranking_rules):
|
|
@@ -483,6 +483,30 @@ def test_vector_search(index_with_documents_and_vectors):
|
|
|
483
483
|
assert len(response.hits) >= 1
|
|
484
484
|
|
|
485
485
|
|
|
486
|
+
def test_vector_search_retrieve_vectors(index_with_documents_and_vectors):
|
|
487
|
+
index = index_with_documents_and_vectors()
|
|
488
|
+
response = index.search(
|
|
489
|
+
"",
|
|
490
|
+
vector=[0.1, 0.2],
|
|
491
|
+
hybrid=Hybrid(semantic_ratio=1.0, embedder="default"),
|
|
492
|
+
retrieve_vectors=True,
|
|
493
|
+
)
|
|
494
|
+
assert len(response.hits) >= 1
|
|
495
|
+
assert response.hits[0].get("_vectors") is not None
|
|
496
|
+
|
|
497
|
+
|
|
498
|
+
def test_vector_search_retrieve_vectors_false(index_with_documents_and_vectors):
|
|
499
|
+
index = index_with_documents_and_vectors()
|
|
500
|
+
response = index.search(
|
|
501
|
+
"",
|
|
502
|
+
vector=[0.1, 0.2],
|
|
503
|
+
hybrid=Hybrid(semantic_ratio=1.0, embedder="default"),
|
|
504
|
+
retrieve_vectors=False,
|
|
505
|
+
)
|
|
506
|
+
assert len(response.hits) >= 1
|
|
507
|
+
assert response.hits[0].get("_vectors") is None
|
|
508
|
+
|
|
509
|
+
|
|
486
510
|
def test_basic_facet_search(index_with_documents):
|
|
487
511
|
index = index_with_documents()
|
|
488
512
|
update = index.update_filterable_attributes(["genre"])
|